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_m2p1.s |
|||
#source: attr-merge-user-ext-rv32i2p1_a2p0.s |
|||
#source: attr-merge-user-ext-rv32i2p1_a2p1.s |
|||
#as: |
|||
#ld: -r -m[riscv_choose_ilp32_emul] |
|||
#readelf: -A |
|||
|
|||
Attribute Section: riscv |
|||
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