Browse Source
Three-part patch set from Tsukasa OI to support zmmul in assembler. The 'Zmmul' is a RISC-V extension consisting of only multiply instructions (a subset of 'M' which has multiply and divide instructions). bfd/ * elfxx-riscv.c (riscv_implicit_subsets): Add 'Zmmul' implied by 'M'. (riscv_supported_std_z_ext): Add 'Zmmul' extension. (riscv_multi_subset_supports): Add handling for new instruction class. gas/ * testsuite/gas/riscv/attribute-09.d: Updated implicit 'Zmmul' by 'M'. * testsuite/gas/riscv/option-arch-02.d: Likewise. * testsuite/gas/riscv/m-ext.s: New test. * testsuite/gas/riscv/m-ext-32.d: New test (RV32). * testsuite/gas/riscv/m-ext-64.d: New test (RV64). * testsuite/gas/riscv/zmmul-32.d: New expected output. * testsuite/gas/riscv/zmmul-64.d: Likewise. * testsuite/gas/riscv/m-ext-fail-xlen-32.d: New test (failure by using RV64-only instructions in RV32). * testsuite/gas/riscv/m-ext-fail-xlen-32.l: Likewise. * testsuite/gas/riscv/m-ext-fail-zmmul-32.d: New failure test (RV32 + Zmmul but with no M). * testsuite/gas/riscv/m-ext-fail-zmmul-32.l: Likewise. * testsuite/gas/riscv/m-ext-fail-zmmul-64.d: New failure test (RV64 + Zmmul but with no M). * testsuite/gas/riscv/m-ext-fail-zmmul-64.l: Likewise. * testsuite/gas/riscv/m-ext-fail-noarch-64.d: New failure test (no Zmmul or M). * testsuite/gas/riscv/m-ext-fail-noarch-64.l: Likewise. include/ * opcode/riscv.h (enum riscv_insn_class): Added INSN_CLASS_ZMMUL. ld/ * testsuite/ld-riscv-elf/attr-merge-arch-01.d: We don't care zmmul in these testcases, so just replaced m by a. * testsuite/ld-riscv-elf/attr-merge-arch-01a.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-01b.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-02.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-02a.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-03.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-arch-03a.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-user-ext-01.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_a2p0.s: Renamed. * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_a2p1.s: Renamed. opcodes/ * riscv-opc.c (riscv_opcodes): Updated multiply instructions to zmmul.users/aburgess/try-mips-disasm-styling
committed by
Nelson Chu
30 changed files with 175 additions and 27 deletions
@ -0,0 +1,18 @@ |
|||||
|
#as: -march=rv32im |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
|
||||
|
.*:[ ]+file format .* |
||||
|
|
||||
|
|
||||
|
Disassembly of section .text: |
||||
|
|
||||
|
0+000 <target>: |
||||
|
[ ]+[0-9a-f]+:[ ]+02c58533[ ]+mul[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c59533[ ]+mulh[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5a533[ ]+mulhsu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5b533[ ]+mulhu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5c533[ ]+div[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5d533[ ]+divu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5e533[ ]+rem[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5f533[ ]+remu[ ]+a0,a1,a2 |
||||
@ -0,0 +1,23 @@ |
|||||
|
#as: -march=rv64im -defsym rv64=1 |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
|
||||
|
.*:[ ]+file format .* |
||||
|
|
||||
|
|
||||
|
Disassembly of section .text: |
||||
|
|
||||
|
0+000 <target>: |
||||
|
[ ]+[0-9a-f]+:[ ]+02c58533[ ]+mul[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c59533[ ]+mulh[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5a533[ ]+mulhsu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5b533[ ]+mulhu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5c533[ ]+div[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5d533[ ]+divu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5e533[ ]+rem[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5f533[ ]+remu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5853b[ ]+mulw[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5c53b[ ]+divw[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5d53b[ ]+divuw[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5e53b[ ]+remw[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5f53b[ ]+remuw[ ]+a0,a1,a2 |
||||
@ -0,0 +1,4 @@ |
|||||
|
#as: -march=rv64i -defsym rv64=1 |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
#error_output: m-ext-fail-noarch-64.l |
||||
@ -0,0 +1,14 @@ |
|||||
|
.*Assembler messages: |
||||
|
.*: Error: unrecognized opcode `mul a0,a1,a2', extension `m' or `zmmul' required |
||||
|
.*: Error: unrecognized opcode `mulh a0,a1,a2', extension `m' or `zmmul' required |
||||
|
.*: Error: unrecognized opcode `mulhsu a0,a1,a2', extension `m' or `zmmul' required |
||||
|
.*: Error: unrecognized opcode `mulhu a0,a1,a2', extension `m' or `zmmul' required |
||||
|
.*: Error: unrecognized opcode `div a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `divu a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `rem a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remu a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `mulw a0,a1,a2', extension `m' or `zmmul' required |
||||
|
.*: Error: unrecognized opcode `divw a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `divuw a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remw a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remuw a0,a1,a2', extension `m' required |
||||
@ -0,0 +1,4 @@ |
|||||
|
#as: -march=rv32im -defsym rv64=1 |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
#error_output: m-ext-fail-xlen-32.l |
||||
@ -0,0 +1,6 @@ |
|||||
|
.*Assembler messages: |
||||
|
.*: Error: unrecognized opcode `mulw a0,a1,a2' |
||||
|
.*: Error: unrecognized opcode `divw a0,a1,a2' |
||||
|
.*: Error: unrecognized opcode `divuw a0,a1,a2' |
||||
|
.*: Error: unrecognized opcode `remw a0,a1,a2' |
||||
|
.*: Error: unrecognized opcode `remuw a0,a1,a2' |
||||
@ -0,0 +1,4 @@ |
|||||
|
#as: -march=rv32i_zmmul |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
#error_output: m-ext-fail-zmmul-32.l |
||||
@ -0,0 +1,5 @@ |
|||||
|
.*Assembler messages: |
||||
|
.*: Error: unrecognized opcode `div a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `divu a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `rem a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remu a0,a1,a2', extension `m' required |
||||
@ -0,0 +1,4 @@ |
|||||
|
#as: -march=rv64i_zmmul -defsym rv64=1 |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
#error_output: m-ext-fail-zmmul-64.l |
||||
@ -0,0 +1,9 @@ |
|||||
|
.*Assembler messages: |
||||
|
.*: Error: unrecognized opcode `div a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `divu a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `rem a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remu a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `divw a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `divuw a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remw a0,a1,a2', extension `m' required |
||||
|
.*: Error: unrecognized opcode `remuw a0,a1,a2', extension `m' required |
||||
@ -0,0 +1,21 @@ |
|||||
|
target: |
||||
|
mul a0, a1, a2 |
||||
|
mulh a0, a1, a2 |
||||
|
mulhsu a0, a1, a2 |
||||
|
mulhu a0, a1, a2 |
||||
|
.ifndef zmmul |
||||
|
div a0, a1, a2 |
||||
|
divu a0, a1, a2 |
||||
|
rem a0, a1, a2 |
||||
|
remu a0, a1, a2 |
||||
|
.endif |
||||
|
|
||||
|
.ifdef rv64 |
||||
|
mulw a0, a1, a2 |
||||
|
.ifndef zmmul |
||||
|
divw a0, a1, a2 |
||||
|
divuw a0, a1, a2 |
||||
|
remw a0, a1, a2 |
||||
|
remuw a0, a1, a2 |
||||
|
.endif |
||||
|
.endif |
||||
@ -0,0 +1,14 @@ |
|||||
|
#as: -march=rv32im -defsym zmmul=1 |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
|
||||
|
.*:[ ]+file format .* |
||||
|
|
||||
|
|
||||
|
Disassembly of section .text: |
||||
|
|
||||
|
0+000 <target>: |
||||
|
[ ]+[0-9a-f]+:[ ]+02c58533[ ]+mul[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c59533[ ]+mulh[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5a533[ ]+mulhsu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5b533[ ]+mulhu[ ]+a0,a1,a2 |
||||
@ -0,0 +1,15 @@ |
|||||
|
#as: -march=rv64im -defsym zmmul=1 -defsym rv64=1 |
||||
|
#source: m-ext.s |
||||
|
#objdump: -d |
||||
|
|
||||
|
.*:[ ]+file format .* |
||||
|
|
||||
|
|
||||
|
Disassembly of section .text: |
||||
|
|
||||
|
0+000 <target>: |
||||
|
[ ]+[0-9a-f]+:[ ]+02c58533[ ]+mul[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c59533[ ]+mulh[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5a533[ ]+mulhsu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5b533[ ]+mulhu[ ]+a0,a1,a2 |
||||
|
[ ]+[0-9a-f]+:[ ]+02c5853b[ ]+mulw[ ]+a0,a1,a2 |
||||
@ -1 +1 @@ |
|||||
.attribute arch, "rv32i2p1_m2p0" |
.attribute arch, "rv32i2p1_a2p0" |
||||
|
|||||
@ -1 +1 @@ |
|||||
.attribute arch, "rv32i2p1_m2p0" |
.attribute arch, "rv32i2p1_a2p0" |
||||
|
|||||
@ -1 +1 @@ |
|||||
.attribute arch, "rv32i2p1_m2p0" |
.attribute arch, "rv32i2p1_a2p0" |
||||
|
|||||
@ -1 +1 @@ |
|||||
.attribute arch, "rv32i2p1_m2p0_xfoo2p0" |
.attribute arch, "rv32i2p1_a2p0_xfoo2p0" |
||||
|
|||||
@ -1,9 +1,9 @@ |
|||||
#source: attr-merge-user-ext-rv32i2p1_m2p0.s |
#source: attr-merge-user-ext-rv32i2p1_a2p0.s |
||||
#source: attr-merge-user-ext-rv32i2p1_m2p1.s |
#source: attr-merge-user-ext-rv32i2p1_a2p1.s |
||||
#as: |
#as: |
||||
#ld: -r -m[riscv_choose_ilp32_emul] |
#ld: -r -m[riscv_choose_ilp32_emul] |
||||
#readelf: -A |
#readelf: -A |
||||
|
|
||||
Attribute Section: riscv |
Attribute Section: riscv |
||||
File Attributes |
File Attributes |
||||
Tag_RISCV_arch: "rv32i2p1_m2p1" |
Tag_RISCV_arch: "rv32i2p1_a2p1" |
||||
|
|||||
@ -0,0 +1 @@ |
|||||
|
.attribute arch, "rv32i2p1_a2p0" |
||||
@ -0,0 +1 @@ |
|||||
|
.attribute arch, "rv32i2p1_a2p1" |
||||
@ -1 +0,0 @@ |
|||||
.attribute arch, "rv32i2p1_m2p0" |
|
||||
@ -1 +0,0 @@ |
|||||
.attribute arch, "rv32i2p1_m2p1" |
|
||||
Loading…
Reference in new issue