Browse Source
T-Head has a range of vendor-specific instructions.
Therefore it makes sense to group them into smaller chunks
in form of vendor extensions.
This patch adds the XThead{Ba,Bb,Bs} extensions, a collection of
T-Head-specific bitmanipulation instructions.
The 'th' prefix and the "XThead{Ba,Bb,Bs}" extension are documented
in a PR for the RISC-V toolchain conventions ([1]).
[1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19
Co-developed-by: Lifang Xia <lifang_xia@linux.alibaba.com>
Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
users/aburgess/try-mips-disasm-styling
committed by
Philipp Tomsich
20 changed files with 215 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||
#as: -march=rv64i_xtheadba |
|||
#source: x-thead-ba-fail.s |
|||
#error_output: x-thead-ba-fail.l |
|||
@ -0,0 +1,3 @@ |
|||
.*: Assembler messages: |
|||
.*: Error: improper immediate value \(18446744073709551615\) |
|||
.*: Error: improper immediate value \(4\) |
|||
@ -0,0 +1,3 @@ |
|||
target: |
|||
th.addsl a0, a1, a2, -1 |
|||
th.addsl a0, a1, a2, 4 |
|||
@ -0,0 +1,13 @@ |
|||
#as: -march=rv64i_xtheadba |
|||
#source: x-thead-ba.s |
|||
#objdump: -dr |
|||
|
|||
.*:[ ]+file format .* |
|||
|
|||
Disassembly of section .text: |
|||
|
|||
0+000 <target>: |
|||
[ ]+[0-9a-f]+:[ ]+00c5950b[ ]+th.addsl[ ]+a0,a1,a2,0 |
|||
[ ]+[0-9a-f]+:[ ]+02c5950b[ ]+th.addsl[ ]+a0,a1,a2,1 |
|||
[ ]+[0-9a-f]+:[ ]+04c5950b[ ]+th.addsl[ ]+a0,a1,a2,2 |
|||
[ ]+[0-9a-f]+:[ ]+06c5950b[ ]+th.addsl[ ]+a0,a1,a2,3 |
|||
@ -0,0 +1,6 @@ |
|||
target: |
|||
th.addsl a0, a1, a2, 0 |
|||
th.addsl a0, a1, a2, 1 |
|||
th.addsl a0, a1, a2, 2 |
|||
th.addsl a0, a1, a2, 3 |
|||
|
|||
@ -0,0 +1,3 @@ |
|||
#as: -march=rv64i_xtheadbb |
|||
#source: x-thead-bb-fail.s |
|||
#error_output: x-thead-bb-fail.l |
|||
@ -0,0 +1,7 @@ |
|||
.*: Assembler messages: |
|||
.*: Error: improper immediate value \(18446744073709551615\) |
|||
.*: Error: improper immediate value \(64\) |
|||
.*: Error: improper immediate value \(18446744073709551615\) |
|||
.*: Error: improper immediate value \(32\) |
|||
.*: Error: illegal operands `th.ext a0,64,62' |
|||
.*: Error: illegal operands `th.extu a0,-1,0' |
|||
@ -0,0 +1,7 @@ |
|||
target: |
|||
th.srri a0, a1, -1 |
|||
th.srri a0, a1, 64 |
|||
th.srriw a0, a1, -1 |
|||
th.srriw a0, a1, 32 |
|||
th.ext a0, 64, 62 |
|||
th.extu a0, -1, 0 |
|||
@ -0,0 +1,30 @@ |
|||
#as: -march=rv64i_xtheadbb |
|||
#source: x-thead-bb.s |
|||
#objdump: -dr |
|||
|
|||
.*:[ ]+file format .* |
|||
|
|||
Disassembly of section .text: |
|||
|
|||
0+000 <target>: |
|||
[ ]+[0-9a-f]+:[ ]+1005950b[ ]+th.srri[ ]+a0,a1,0 |
|||
[ ]+[0-9a-f]+:[ ]+1015950b[ ]+th.srri[ ]+a0,a1,1 |
|||
[ ]+[0-9a-f]+:[ ]+13e5950b[ ]+th.srri[ ]+a0,a1,62 |
|||
[ ]+[0-9a-f]+:[ ]+13f5950b[ ]+th.srri[ ]+a0,a1,63 |
|||
[ ]+[0-9a-f]+:[ ]+1405950b[ ]+th.srriw[ ]+a0,a1,0 |
|||
[ ]+[0-9a-f]+:[ ]+1415950b[ ]+th.srriw[ ]+a0,a1,1 |
|||
[ ]+[0-9a-f]+:[ ]+15e5950b[ ]+th.srriw[ ]+a0,a1,30 |
|||
[ ]+[0-9a-f]+:[ ]+15f5950b[ ]+th.srriw[ ]+a0,a1,31 |
|||
[ ]+[0-9a-f]+:[ ]+0405a50b[ ]+th.ext[ ]+a0,a1,1,0 |
|||
[ ]+[0-9a-f]+:[ ]+7c05a50b[ ]+th.ext[ ]+a0,a1,31,0 |
|||
[ ]+[0-9a-f]+:[ ]+fdf5a50b[ ]+th.ext[ ]+a0,a1,63,31 |
|||
[ ]+[0-9a-f]+:[ ]+ffe5a50b[ ]+th.ext[ ]+a0,a1,63,62 |
|||
[ ]+[0-9a-f]+:[ ]+0405b50b[ ]+th.extu[ ]+a0,a1,1,0 |
|||
[ ]+[0-9a-f]+:[ ]+7c05b50b[ ]+th.extu[ ]+a0,a1,31,0 |
|||
[ ]+[0-9a-f]+:[ ]+fdf5b50b[ ]+th.extu[ ]+a0,a1,63,31 |
|||
[ ]+[0-9a-f]+:[ ]+ffe5b50b[ ]+th.extu[ ]+a0,a1,63,62 |
|||
[ ]+[0-9a-f]+:[ ]+8405950b[ ]+th.ff0[ ]+a0,a1 |
|||
[ ]+[0-9a-f]+:[ ]+8605950b[ ]+th.ff1[ ]+a0,a1 |
|||
[ ]+[0-9a-f]+:[ ]+8205950b[ ]+th.rev[ ]+a0,a1 |
|||
[ ]+[0-9a-f]+:[ ]+9005950b[ ]+th.revw[ ]+a0,a1 |
|||
[ ]+[0-9a-f]+:[ ]+8005950b[ ]+th.tstnbz[ ]+a0,a1 |
|||
@ -0,0 +1,22 @@ |
|||
target: |
|||
th.srri a0, a1, 0 |
|||
th.srri a0, a1, 1 |
|||
th.srri a0, a1, 62 |
|||
th.srri a0, a1, 63 |
|||
th.srriw a0, a1, 0 |
|||
th.srriw a0, a1, 1 |
|||
th.srriw a0, a1, 30 |
|||
th.srriw a0, a1, 31 |
|||
th.ext a0, a1, 1, 0 |
|||
th.ext a0, a1, 31, 0 |
|||
th.ext a0, a1, 63, 31 |
|||
th.ext a0, a1, 63, 62 |
|||
th.extu a0, a1, 1, 0 |
|||
th.extu a0, a1, 31, 0 |
|||
th.extu a0, a1, 63, 31 |
|||
th.extu a0, a1, 63, 62 |
|||
th.ff0 a0, a1 |
|||
th.ff1 a0, a1 |
|||
th.rev a0, a1 |
|||
th.revw a0, a1 |
|||
th.tstnbz a0, a1 |
|||
@ -0,0 +1,3 @@ |
|||
#as: -march=rv64i_xtheadbs |
|||
#source: x-thead-bs-fail.s |
|||
#error_output: x-thead-bs-fail.l |
|||
@ -0,0 +1,3 @@ |
|||
.*: Assembler messages: |
|||
.*: Error: improper immediate value \(18446744073709551615\) |
|||
.*: Error: improper immediate value \(64\) |
|||
@ -0,0 +1,3 @@ |
|||
target: |
|||
th.tst a0, a1, -1 |
|||
th.tst a0, a1, 64 |
|||
@ -0,0 +1,14 @@ |
|||
#as: -march=rv64i_xtheadbs |
|||
#source: x-thead-bs.s |
|||
#objdump: -dr |
|||
|
|||
.*:[ ]+file format .* |
|||
|
|||
Disassembly of section .text: |
|||
|
|||
0+000 <target>: |
|||
[ ]+[0-9a-f]+:[ ]+8805950b[ ]+th.tst[ ]+a0,a1,0 |
|||
[ ]+[0-9a-f]+:[ ]+8815950b[ ]+th.tst[ ]+a0,a1,1 |
|||
[ ]+[0-9a-f]+:[ ]+89f5950b[ ]+th.tst[ ]+a0,a1,31 |
|||
[ ]+[0-9a-f]+:[ ]+8a05950b[ ]+th.tst[ ]+a0,a1,32 |
|||
[ ]+[0-9a-f]+:[ ]+8bf5950b[ ]+th.tst[ ]+a0,a1,63 |
|||
@ -0,0 +1,6 @@ |
|||
target: |
|||
th.tst a0, a1, 0 |
|||
th.tst a0, a1, 1 |
|||
th.tst a0, a1, 31 |
|||
th.tst a0, a1, 32 |
|||
th.tst a0, a1, 63 |
|||
Loading…
Reference in new issue