Skip to content

Commit e62a28d

Browse files
committed
UNRATIFIED RISC-V: Add support for 'Zabha' subword AMO extension
[DO NOT MERGE] Until this extension is frozen/ratified and final version number is determined, this patch should not be merged upstream. This commit uses unratified version 0.9 as in the latest release tag: <https://github.com/riscv/riscv-zabha/releases/tag/v0.9> This commit adds support for the 'Zabha' extension, adding subword (byte and half) AMO instructions. This is based on the latest commit: <riscv/riscv-zabha@810f0ee> bfd/ChangeLog: * elfxx-riscv.c (riscv_implicit_subsets): Make 'Zabha' to imply 'A' extension. (riscv_supported_std_z_ext): Add 'Zabha' to the supported list. (riscv_multi_subset_supports, riscv_multi_subset_supports_ext): Add handling for new instruction classes. gas/ChangeLog: * testsuite/gas/riscv/zabha.s: New test. * testsuite/gas/riscv/zabha.d: Likewise. * testsuite/gas/riscv/zabha-zacas.s: New test. * testsuite/gas/riscv/zabha-zacas.d: Likewise. include/ChangeLog: * opcode/riscv-opc.h (MATCH_AMOADD_B, MASK_AMOADD_B, MATCH_AMOADD_H, MASK_AMOADD_H, MATCH_AMOAND_B, MASK_AMOAND_B, MATCH_AMOAND_H, MASK_AMOAND_H, MATCH_AMOMAX_B, MASK_AMOMAX_B, MATCH_AMOMAX_H, MASK_AMOMAX_H, MATCH_AMOMAXU_B, MASK_AMOMAXU_B, MATCH_AMOMAXU_H, MASK_AMOMAXU_H, MATCH_AMOMIN_B, MASK_AMOMIN_B, MATCH_AMOMIN_H, MASK_AMOMIN_H, MATCH_AMOMINU_B, MASK_AMOMINU_B, MATCH_AMOMINU_H, MASK_AMOMINU_H, MATCH_AMOOR_B, MASK_AMOOR_B, MATCH_AMOOR_H, MASK_AMOOR_H, MATCH_AMOSWAP_B, MASK_AMOSWAP_B, MATCH_AMOSWAP_H, MASK_AMOSWAP_H, MATCH_AMOXOR_B, MASK_AMOXOR_B, MATCH_AMOXOR_H, MASK_AMOXOR_H, MATCH_AMOCAS_B, MASK_AMOCAS_B, MATCH_AMOCAS_H, MASK_AMOCAS_H): New. * opcode/riscv.h (enum riscv_insn_class): Add new instruction classes INSN_CLASS_ZABHA and INSN_CLASS_ZABHA_AND_ZACAS. opcodes/ChangeLog: * riscv-opc.c (riscv_opcodes): Add subword AMO instructions.
1 parent 53af10b commit e62a28d

File tree

8 files changed

+343
-0
lines changed

8 files changed

+343
-0
lines changed

bfd/elfxx-riscv.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,6 +1148,7 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
11481148
{"zhinx", "zhinxmin", check_implicit_always},
11491149
{"zhinxmin", "zfinx", check_implicit_always},
11501150
{"zfinx", "zicsr", check_implicit_always},
1151+
{"zabha", "a", check_implicit_always},
11511152
{"zacas", "a", check_implicit_always},
11521153
{"zk", "zkn", check_implicit_always},
11531154
{"zk", "zkr", check_implicit_always},
@@ -1260,6 +1261,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
12601261
{"zihintntl", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12611262
{"zihintpause", ISA_SPEC_CLASS_DRAFT, 2, 0, 0 },
12621263
{"zmmul", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
1264+
{"zabha", ISA_SPEC_CLASS_DRAFT, 0, 9, 0 },
12631265
{"zacas", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12641266
{"zawrs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12651267
{"zfa", ISA_SPEC_CLASS_DRAFT, 0, 1, 0 },
@@ -2411,6 +2413,11 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
24112413
return riscv_subset_supports (rps, "zmmul");
24122414
case INSN_CLASS_A:
24132415
return riscv_subset_supports (rps, "a");
2416+
case INSN_CLASS_ZABHA:
2417+
return riscv_subset_supports (rps, "zabha");
2418+
case INSN_CLASS_ZABHA_AND_ZACAS:
2419+
return (riscv_subset_supports (rps, "zabha")
2420+
&& riscv_subset_supports (rps, "zacas"));
24142421
case INSN_CLASS_ZACAS:
24152422
return riscv_subset_supports (rps, "zacas");
24162423
case INSN_CLASS_ZAWRS:
@@ -2623,6 +2630,16 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
26232630
return _ ("m' or `zmmul");
26242631
case INSN_CLASS_A:
26252632
return "a";
2633+
case INSN_CLASS_ZABHA:
2634+
return "zabha";
2635+
case INSN_CLASS_ZABHA_AND_ZACAS:
2636+
if (!riscv_subset_supports (rps, "zabha")
2637+
&& !riscv_subset_supports (rps, "zacas"))
2638+
return _("zabha' and `zacas");
2639+
else if (!riscv_subset_supports (rps, "zabha"))
2640+
return "zabha";
2641+
else
2642+
return "zacas";
26262643
case INSN_CLASS_ZACAS:
26272644
return "zacas";
26282645
case INSN_CLASS_ZAWRS:

gas/testsuite/gas/riscv/zabha-zacas.d

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#as: -march=rv32i_zabha_zacas
2+
#objdump: -d
3+
4+
.*:[ ]+file format .*
5+
6+
7+
Disassembly of section .text:
8+
9+
0+000 <target>:
10+
[ ]+[0-9a-f]+:[ ]+28c5852f[ ]+amocas\.b[ ]+a0,a2,\(a1\)
11+
[ ]+[0-9a-f]+:[ ]+2cc5852f[ ]+amocas\.b\.aq[ ]+a0,a2,\(a1\)
12+
[ ]+[0-9a-f]+:[ ]+2ac5852f[ ]+amocas\.b\.rl[ ]+a0,a2,\(a1\)
13+
[ ]+[0-9a-f]+:[ ]+2ec5852f[ ]+amocas\.b\.aqrl[ ]+a0,a2,\(a1\)
14+
[ ]+[0-9a-f]+:[ ]+28c5952f[ ]+amocas\.h[ ]+a0,a2,\(a1\)
15+
[ ]+[0-9a-f]+:[ ]+2cc5952f[ ]+amocas\.h\.aq[ ]+a0,a2,\(a1\)
16+
[ ]+[0-9a-f]+:[ ]+2ac5952f[ ]+amocas\.h\.rl[ ]+a0,a2,\(a1\)
17+
[ ]+[0-9a-f]+:[ ]+2ec5952f[ ]+amocas\.h\.aqrl[ ]+a0,a2,\(a1\)

gas/testsuite/gas/riscv/zabha-zacas.s

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
target:
2+
amocas.b a0, a2, (a1)
3+
amocas.b.aq a0, a2, (a1)
4+
amocas.b.rl a0, a2, (a1)
5+
amocas.b.aqrl a0, a2, (a1)
6+
amocas.h a0, a2, (a1)
7+
amocas.h.aq a0, a2, (a1)
8+
amocas.h.rl a0, a2, (a1)
9+
amocas.h.aqrl a0, a2, (a1)

gas/testsuite/gas/riscv/zabha.d

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#as: -march=rv32i_zabha
2+
#objdump: -d
3+
4+
.*:[ ]+file format .*
5+
6+
7+
Disassembly of section .text:
8+
9+
0+000 <target>:
10+
[ ]+[0-9a-f]+:[ ]+08c5852f[ ]+amoswap\.b[ ]+a0,a2,\(a1\)
11+
[ ]+[0-9a-f]+:[ ]+0cc5852f[ ]+amoswap\.b\.aq[ ]+a0,a2,\(a1\)
12+
[ ]+[0-9a-f]+:[ ]+0ac5852f[ ]+amoswap\.b\.rl[ ]+a0,a2,\(a1\)
13+
[ ]+[0-9a-f]+:[ ]+0ec5852f[ ]+amoswap\.b\.aqrl[ ]+a0,a2,\(a1\)
14+
[ ]+[0-9a-f]+:[ ]+00c5852f[ ]+amoadd\.b[ ]+a0,a2,\(a1\)
15+
[ ]+[0-9a-f]+:[ ]+04c5852f[ ]+amoadd\.b\.aq[ ]+a0,a2,\(a1\)
16+
[ ]+[0-9a-f]+:[ ]+02c5852f[ ]+amoadd\.b\.rl[ ]+a0,a2,\(a1\)
17+
[ ]+[0-9a-f]+:[ ]+06c5852f[ ]+amoadd\.b\.aqrl[ ]+a0,a2,\(a1\)
18+
[ ]+[0-9a-f]+:[ ]+20c5852f[ ]+amoxor\.b[ ]+a0,a2,\(a1\)
19+
[ ]+[0-9a-f]+:[ ]+24c5852f[ ]+amoxor\.b\.aq[ ]+a0,a2,\(a1\)
20+
[ ]+[0-9a-f]+:[ ]+22c5852f[ ]+amoxor\.b\.rl[ ]+a0,a2,\(a1\)
21+
[ ]+[0-9a-f]+:[ ]+26c5852f[ ]+amoxor\.b\.aqrl[ ]+a0,a2,\(a1\)
22+
[ ]+[0-9a-f]+:[ ]+60c5852f[ ]+amoand\.b[ ]+a0,a2,\(a1\)
23+
[ ]+[0-9a-f]+:[ ]+64c5852f[ ]+amoand\.b\.aq[ ]+a0,a2,\(a1\)
24+
[ ]+[0-9a-f]+:[ ]+62c5852f[ ]+amoand\.b\.rl[ ]+a0,a2,\(a1\)
25+
[ ]+[0-9a-f]+:[ ]+66c5852f[ ]+amoand\.b\.aqrl[ ]+a0,a2,\(a1\)
26+
[ ]+[0-9a-f]+:[ ]+40c5852f[ ]+amoor\.b[ ]+a0,a2,\(a1\)
27+
[ ]+[0-9a-f]+:[ ]+44c5852f[ ]+amoor\.b\.aq[ ]+a0,a2,\(a1\)
28+
[ ]+[0-9a-f]+:[ ]+42c5852f[ ]+amoor\.b\.rl[ ]+a0,a2,\(a1\)
29+
[ ]+[0-9a-f]+:[ ]+46c5852f[ ]+amoor\.b\.aqrl[ ]+a0,a2,\(a1\)
30+
[ ]+[0-9a-f]+:[ ]+80c5852f[ ]+amomin\.b[ ]+a0,a2,\(a1\)
31+
[ ]+[0-9a-f]+:[ ]+84c5852f[ ]+amomin\.b\.aq[ ]+a0,a2,\(a1\)
32+
[ ]+[0-9a-f]+:[ ]+82c5852f[ ]+amomin\.b\.rl[ ]+a0,a2,\(a1\)
33+
[ ]+[0-9a-f]+:[ ]+86c5852f[ ]+amomin\.b\.aqrl[ ]+a0,a2,\(a1\)
34+
[ ]+[0-9a-f]+:[ ]+a0c5852f[ ]+amomax\.b[ ]+a0,a2,\(a1\)
35+
[ ]+[0-9a-f]+:[ ]+a4c5852f[ ]+amomax\.b\.aq[ ]+a0,a2,\(a1\)
36+
[ ]+[0-9a-f]+:[ ]+a2c5852f[ ]+amomax\.b\.rl[ ]+a0,a2,\(a1\)
37+
[ ]+[0-9a-f]+:[ ]+a6c5852f[ ]+amomax\.b\.aqrl[ ]+a0,a2,\(a1\)
38+
[ ]+[0-9a-f]+:[ ]+c0c5852f[ ]+amominu\.b[ ]+a0,a2,\(a1\)
39+
[ ]+[0-9a-f]+:[ ]+c4c5852f[ ]+amominu\.b\.aq[ ]+a0,a2,\(a1\)
40+
[ ]+[0-9a-f]+:[ ]+c2c5852f[ ]+amominu\.b\.rl[ ]+a0,a2,\(a1\)
41+
[ ]+[0-9a-f]+:[ ]+c6c5852f[ ]+amominu\.b\.aqrl[ ]+a0,a2,\(a1\)
42+
[ ]+[0-9a-f]+:[ ]+e0c5852f[ ]+amomaxu\.b[ ]+a0,a2,\(a1\)
43+
[ ]+[0-9a-f]+:[ ]+e4c5852f[ ]+amomaxu\.b\.aq[ ]+a0,a2,\(a1\)
44+
[ ]+[0-9a-f]+:[ ]+e2c5852f[ ]+amomaxu\.b\.rl[ ]+a0,a2,\(a1\)
45+
[ ]+[0-9a-f]+:[ ]+e6c5852f[ ]+amomaxu\.b\.aqrl[ ]+a0,a2,\(a1\)
46+
[ ]+[0-9a-f]+:[ ]+08c5952f[ ]+amoswap\.h[ ]+a0,a2,\(a1\)
47+
[ ]+[0-9a-f]+:[ ]+0cc5952f[ ]+amoswap\.h\.aq[ ]+a0,a2,\(a1\)
48+
[ ]+[0-9a-f]+:[ ]+0ac5952f[ ]+amoswap\.h\.rl[ ]+a0,a2,\(a1\)
49+
[ ]+[0-9a-f]+:[ ]+0ec5952f[ ]+amoswap\.h\.aqrl[ ]+a0,a2,\(a1\)
50+
[ ]+[0-9a-f]+:[ ]+00c5952f[ ]+amoadd\.h[ ]+a0,a2,\(a1\)
51+
[ ]+[0-9a-f]+:[ ]+04c5952f[ ]+amoadd\.h\.aq[ ]+a0,a2,\(a1\)
52+
[ ]+[0-9a-f]+:[ ]+02c5952f[ ]+amoadd\.h\.rl[ ]+a0,a2,\(a1\)
53+
[ ]+[0-9a-f]+:[ ]+06c5952f[ ]+amoadd\.h\.aqrl[ ]+a0,a2,\(a1\)
54+
[ ]+[0-9a-f]+:[ ]+20c5952f[ ]+amoxor\.h[ ]+a0,a2,\(a1\)
55+
[ ]+[0-9a-f]+:[ ]+24c5952f[ ]+amoxor\.h\.aq[ ]+a0,a2,\(a1\)
56+
[ ]+[0-9a-f]+:[ ]+22c5952f[ ]+amoxor\.h\.rl[ ]+a0,a2,\(a1\)
57+
[ ]+[0-9a-f]+:[ ]+26c5952f[ ]+amoxor\.h\.aqrl[ ]+a0,a2,\(a1\)
58+
[ ]+[0-9a-f]+:[ ]+60c5952f[ ]+amoand\.h[ ]+a0,a2,\(a1\)
59+
[ ]+[0-9a-f]+:[ ]+64c5952f[ ]+amoand\.h\.aq[ ]+a0,a2,\(a1\)
60+
[ ]+[0-9a-f]+:[ ]+62c5952f[ ]+amoand\.h\.rl[ ]+a0,a2,\(a1\)
61+
[ ]+[0-9a-f]+:[ ]+66c5952f[ ]+amoand\.h\.aqrl[ ]+a0,a2,\(a1\)
62+
[ ]+[0-9a-f]+:[ ]+40c5952f[ ]+amoor\.h[ ]+a0,a2,\(a1\)
63+
[ ]+[0-9a-f]+:[ ]+44c5952f[ ]+amoor\.h\.aq[ ]+a0,a2,\(a1\)
64+
[ ]+[0-9a-f]+:[ ]+42c5952f[ ]+amoor\.h\.rl[ ]+a0,a2,\(a1\)
65+
[ ]+[0-9a-f]+:[ ]+46c5952f[ ]+amoor\.h\.aqrl[ ]+a0,a2,\(a1\)
66+
[ ]+[0-9a-f]+:[ ]+80c5952f[ ]+amomin\.h[ ]+a0,a2,\(a1\)
67+
[ ]+[0-9a-f]+:[ ]+84c5952f[ ]+amomin\.h\.aq[ ]+a0,a2,\(a1\)
68+
[ ]+[0-9a-f]+:[ ]+82c5952f[ ]+amomin\.h\.rl[ ]+a0,a2,\(a1\)
69+
[ ]+[0-9a-f]+:[ ]+86c5952f[ ]+amomin\.h\.aqrl[ ]+a0,a2,\(a1\)
70+
[ ]+[0-9a-f]+:[ ]+a0c5952f[ ]+amomax\.h[ ]+a0,a2,\(a1\)
71+
[ ]+[0-9a-f]+:[ ]+a4c5952f[ ]+amomax\.h\.aq[ ]+a0,a2,\(a1\)
72+
[ ]+[0-9a-f]+:[ ]+a2c5952f[ ]+amomax\.h\.rl[ ]+a0,a2,\(a1\)
73+
[ ]+[0-9a-f]+:[ ]+a6c5952f[ ]+amomax\.h\.aqrl[ ]+a0,a2,\(a1\)
74+
[ ]+[0-9a-f]+:[ ]+c0c5952f[ ]+amominu\.h[ ]+a0,a2,\(a1\)
75+
[ ]+[0-9a-f]+:[ ]+c4c5952f[ ]+amominu\.h\.aq[ ]+a0,a2,\(a1\)
76+
[ ]+[0-9a-f]+:[ ]+c2c5952f[ ]+amominu\.h\.rl[ ]+a0,a2,\(a1\)
77+
[ ]+[0-9a-f]+:[ ]+c6c5952f[ ]+amominu\.h\.aqrl[ ]+a0,a2,\(a1\)
78+
[ ]+[0-9a-f]+:[ ]+e0c5952f[ ]+amomaxu\.h[ ]+a0,a2,\(a1\)
79+
[ ]+[0-9a-f]+:[ ]+e4c5952f[ ]+amomaxu\.h\.aq[ ]+a0,a2,\(a1\)
80+
[ ]+[0-9a-f]+:[ ]+e2c5952f[ ]+amomaxu\.h\.rl[ ]+a0,a2,\(a1\)
81+
[ ]+[0-9a-f]+:[ ]+e6c5952f[ ]+amomaxu\.h\.aqrl[ ]+a0,a2,\(a1\)

gas/testsuite/gas/riscv/zabha.s

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
target:
2+
amoswap.b a0, a2, (a1)
3+
amoswap.b.aq a0, a2, (a1)
4+
amoswap.b.rl a0, a2, (a1)
5+
amoswap.b.aqrl a0, a2, (a1)
6+
amoadd.b a0, a2, (a1)
7+
amoadd.b.aq a0, a2, (a1)
8+
amoadd.b.rl a0, a2, (a1)
9+
amoadd.b.aqrl a0, a2, (a1)
10+
amoxor.b a0, a2, (a1)
11+
amoxor.b.aq a0, a2, (a1)
12+
amoxor.b.rl a0, a2, (a1)
13+
amoxor.b.aqrl a0, a2, (a1)
14+
amoand.b a0, a2, (a1)
15+
amoand.b.aq a0, a2, (a1)
16+
amoand.b.rl a0, a2, (a1)
17+
amoand.b.aqrl a0, a2, (a1)
18+
amoor.b a0, a2, (a1)
19+
amoor.b.aq a0, a2, (a1)
20+
amoor.b.rl a0, a2, (a1)
21+
amoor.b.aqrl a0, a2, (a1)
22+
amomin.b a0, a2, (a1)
23+
amomin.b.aq a0, a2, (a1)
24+
amomin.b.rl a0, a2, (a1)
25+
amomin.b.aqrl a0, a2, (a1)
26+
amomax.b a0, a2, (a1)
27+
amomax.b.aq a0, a2, (a1)
28+
amomax.b.rl a0, a2, (a1)
29+
amomax.b.aqrl a0, a2, (a1)
30+
amominu.b a0, a2, (a1)
31+
amominu.b.aq a0, a2, (a1)
32+
amominu.b.rl a0, a2, (a1)
33+
amominu.b.aqrl a0, a2, (a1)
34+
amomaxu.b a0, a2, (a1)
35+
amomaxu.b.aq a0, a2, (a1)
36+
amomaxu.b.rl a0, a2, (a1)
37+
amomaxu.b.aqrl a0, a2, (a1)
38+
amoswap.h a0, a2, (a1)
39+
amoswap.h.aq a0, a2, (a1)
40+
amoswap.h.rl a0, a2, (a1)
41+
amoswap.h.aqrl a0, a2, (a1)
42+
amoadd.h a0, a2, (a1)
43+
amoadd.h.aq a0, a2, (a1)
44+
amoadd.h.rl a0, a2, (a1)
45+
amoadd.h.aqrl a0, a2, (a1)
46+
amoxor.h a0, a2, (a1)
47+
amoxor.h.aq a0, a2, (a1)
48+
amoxor.h.rl a0, a2, (a1)
49+
amoxor.h.aqrl a0, a2, (a1)
50+
amoand.h a0, a2, (a1)
51+
amoand.h.aq a0, a2, (a1)
52+
amoand.h.rl a0, a2, (a1)
53+
amoand.h.aqrl a0, a2, (a1)
54+
amoor.h a0, a2, (a1)
55+
amoor.h.aq a0, a2, (a1)
56+
amoor.h.rl a0, a2, (a1)
57+
amoor.h.aqrl a0, a2, (a1)
58+
amomin.h a0, a2, (a1)
59+
amomin.h.aq a0, a2, (a1)
60+
amomin.h.rl a0, a2, (a1)
61+
amomin.h.aqrl a0, a2, (a1)
62+
amomax.h a0, a2, (a1)
63+
amomax.h.aq a0, a2, (a1)
64+
amomax.h.rl a0, a2, (a1)
65+
amomax.h.aqrl a0, a2, (a1)
66+
amominu.h a0, a2, (a1)
67+
amominu.h.aq a0, a2, (a1)
68+
amominu.h.rl a0, a2, (a1)
69+
amominu.h.aqrl a0, a2, (a1)
70+
amomaxu.h a0, a2, (a1)
71+
amomaxu.h.aq a0, a2, (a1)
72+
amomaxu.h.rl a0, a2, (a1)
73+
amomaxu.h.aqrl a0, a2, (a1)

include/opcode/riscv-opc.h

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2315,6 +2315,47 @@
23152315
#define MASK_C_NTL_S1 0xffff
23162316
#define MATCH_C_NTL_ALL 0x9016
23172317
#define MASK_C_NTL_ALL 0xffff
2318+
/* Zabha instructions. */
2319+
#define MATCH_AMOADD_B 0x2f
2320+
#define MASK_AMOADD_B 0xf800707f
2321+
#define MATCH_AMOADD_H 0x102f
2322+
#define MASK_AMOADD_H 0xf800707f
2323+
#define MATCH_AMOAND_B 0x6000002f
2324+
#define MASK_AMOAND_B 0xf800707f
2325+
#define MATCH_AMOAND_H 0x6000102f
2326+
#define MASK_AMOAND_H 0xf800707f
2327+
#define MATCH_AMOMAX_B 0xa000002f
2328+
#define MASK_AMOMAX_B 0xf800707f
2329+
#define MATCH_AMOMAX_H 0xa000102f
2330+
#define MASK_AMOMAX_H 0xf800707f
2331+
#define MATCH_AMOMAXU_B 0xe000002f
2332+
#define MASK_AMOMAXU_B 0xf800707f
2333+
#define MATCH_AMOMAXU_H 0xe000102f
2334+
#define MASK_AMOMAXU_H 0xf800707f
2335+
#define MATCH_AMOMIN_B 0x8000002f
2336+
#define MASK_AMOMIN_B 0xf800707f
2337+
#define MATCH_AMOMIN_H 0x8000102f
2338+
#define MASK_AMOMIN_H 0xf800707f
2339+
#define MATCH_AMOMINU_B 0xc000002f
2340+
#define MASK_AMOMINU_B 0xf800707f
2341+
#define MATCH_AMOMINU_H 0xc000102f
2342+
#define MASK_AMOMINU_H 0xf800707f
2343+
#define MATCH_AMOOR_B 0x4000002f
2344+
#define MASK_AMOOR_B 0xf800707f
2345+
#define MATCH_AMOOR_H 0x4000102f
2346+
#define MASK_AMOOR_H 0xf800707f
2347+
#define MATCH_AMOSWAP_B 0x800002f
2348+
#define MASK_AMOSWAP_B 0xf800707f
2349+
#define MATCH_AMOSWAP_H 0x800102f
2350+
#define MASK_AMOSWAP_H 0xf800707f
2351+
#define MATCH_AMOXOR_B 0x2000002f
2352+
#define MASK_AMOXOR_B 0xf800707f
2353+
#define MATCH_AMOXOR_H 0x2000102f
2354+
#define MASK_AMOXOR_H 0xf800707f
2355+
#define MATCH_AMOCAS_B 0x2800002f
2356+
#define MASK_AMOCAS_B 0xf800707f
2357+
#define MATCH_AMOCAS_H 0x2800102f
2358+
#define MASK_AMOCAS_H 0xf800707f
23182359
/* Zacas instructions. */
23192360
#define MATCH_AMOCAS_D 0x2800302f
23202361
#define MASK_AMOCAS_D 0xf800707f
@@ -3377,6 +3418,27 @@ DECLARE_INSN(c_ntl_p1, MATCH_C_NTL_P1, MASK_C_NTL_P1)
33773418
DECLARE_INSN(c_ntl_pall, MATCH_C_NTL_PALL, MASK_C_NTL_PALL)
33783419
DECLARE_INSN(c_ntl_s1, MATCH_C_NTL_S1, MASK_C_NTL_S1)
33793420
DECLARE_INSN(c_ntl_all, MATCH_C_NTL_ALL, MASK_C_NTL_ALL)
3421+
/* Zabha instructions. */
3422+
DECLARE_INSN(amoadd_b, MATCH_AMOADD_B, MASK_AMOADD_B)
3423+
DECLARE_INSN(amoadd_h, MATCH_AMOADD_H, MASK_AMOADD_H)
3424+
DECLARE_INSN(amoand_b, MATCH_AMOAND_B, MASK_AMOAND_B)
3425+
DECLARE_INSN(amoand_h, MATCH_AMOAND_H, MASK_AMOAND_H)
3426+
DECLARE_INSN(amomax_b, MATCH_AMOMAX_B, MASK_AMOMAX_B)
3427+
DECLARE_INSN(amomax_h, MATCH_AMOMAX_H, MASK_AMOMAX_H)
3428+
DECLARE_INSN(amomaxu_b, MATCH_AMOMAXU_B, MASK_AMOMAXU_B)
3429+
DECLARE_INSN(amomaxu_h, MATCH_AMOMAXU_H, MASK_AMOMAXU_H)
3430+
DECLARE_INSN(amomin_b, MATCH_AMOMIN_B, MASK_AMOMIN_B)
3431+
DECLARE_INSN(amomin_h, MATCH_AMOMIN_H, MASK_AMOMIN_H)
3432+
DECLARE_INSN(amominu_b, MATCH_AMOMINU_B, MASK_AMOMINU_B)
3433+
DECLARE_INSN(amominu_h, MATCH_AMOMINU_H, MASK_AMOMINU_H)
3434+
DECLARE_INSN(amoor_b, MATCH_AMOOR_B, MASK_AMOOR_B)
3435+
DECLARE_INSN(amoor_h, MATCH_AMOOR_H, MASK_AMOOR_H)
3436+
DECLARE_INSN(amoswap_b, MATCH_AMOSWAP_B, MASK_AMOSWAP_B)
3437+
DECLARE_INSN(amoswap_h, MATCH_AMOSWAP_H, MASK_AMOSWAP_H)
3438+
DECLARE_INSN(amoxor_b, MATCH_AMOXOR_B, MASK_AMOXOR_B)
3439+
DECLARE_INSN(amoxor_h, MATCH_AMOXOR_H, MASK_AMOXOR_H)
3440+
DECLARE_INSN(amocas_b, MATCH_AMOCAS_B, MASK_AMOCAS_B)
3441+
DECLARE_INSN(amocas_h, MATCH_AMOCAS_H, MASK_AMOCAS_H)
33803442
/* Zacas instructions. */
33813443
DECLARE_INSN(amocas_d, MATCH_AMOCAS_D, MASK_AMOCAS_D)
33823444
DECLARE_INSN(amocas_q, MATCH_AMOCAS_Q, MASK_AMOCAS_Q)

include/opcode/riscv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,8 @@ enum riscv_insn_class
396396
INSN_CLASS_ZIHINTNTL_AND_C,
397397
INSN_CLASS_ZIHINTPAUSE,
398398
INSN_CLASS_ZMMUL,
399+
INSN_CLASS_ZABHA,
400+
INSN_CLASS_ZABHA_AND_ZACAS,
399401
INSN_CLASS_ZACAS,
400402
INSN_CLASS_ZAWRS,
401403
INSN_CLASS_F_INX,

0 commit comments

Comments
 (0)