diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2016-12-23 12:37:40 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2016-12-23 19:25:44 +0000 |
commit | 645c455650ed35460afdacb078c7c58308607fbe (patch) | |
tree | d66a2dabbdab362351439a0c92503d0b01543d54 /gas/testsuite | |
parent | 9e76c212e6311abaee4d02473473f7d6dcad972f (diff) | |
download | gdb-645c455650ed35460afdacb078c7c58308607fbe.zip gdb-645c455650ed35460afdacb078c7c58308607fbe.tar.gz gdb-645c455650ed35460afdacb078c7c58308607fbe.tar.bz2 |
MIPS16/GAS: Disallow EXTEND delay-slot scheduling
Do not allow any explicitly coded EXTEND instruction to be automatically
scheduled into a jump delay slot, as an EXTEND prefix is coupled with
the next regular MIPS16 instruction and therefore swapping it with a
jump would change program's semantics; EXTEND is not architecturally
allowed to be present in a jump delay slot anyway.
opcodes/
* mips16-opc.c (mips16_opcodes): Set NODS in `pinfo' for
"extend".
gas/
* testsuite/gas/mips/mips16-extend-swap.d: New test.
* testsuite/gas/mips/mips16-extend-swap.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new test.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16-extend-swap.d | 22 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16-extend-swap.s | 21 |
3 files changed, 44 insertions, 0 deletions
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index cd62e44..c16891a 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -1341,6 +1341,7 @@ if { [istarget mips*-*-vxworks*] } { run_list_test "mips16e-save-err" "-march=mips32 -32" run_dump_test "mips16-intermix" run_dump_test "mips16-extend" + run_dump_test "mips16-extend-swap" run_dump_test "mips16-sprel-swap" run_dump_test "mips16-sdrasp" diff --git a/gas/testsuite/gas/mips/mips16-extend-swap.d b/gas/testsuite/gas/mips/mips16-extend-swap.d new file mode 100644 index 0000000..eb9dd73 --- /dev/null +++ b/gas/testsuite/gas/mips/mips16-extend-swap.d @@ -0,0 +1,22 @@ +#objdump: -d --prefix-addresses --show-raw-insn +#name: MIPS16 jump delay slot scheduling for EXTEND instructions +#as: -32 + +# Verify that EXTEND instructions are not scheduled into a jump delay slot. + +.*: +file format .*mips.* + +Disassembly of section \.text: +[0-9a-f]+ <[^>]*> f123 extend 0x123 +[0-9a-f]+ <[^>]*> 1800 0000 jal 00000000 <foo> +[0-9a-f]+ <[^>]*> 6500 nop +[0-9a-f]+ <[^>]*> f123 extend 0x123 +[0-9a-f]+ <[^>]*> 1c00 0000 jalx 00000000 <foo> +[0-9a-f]+ <[^>]*> 6500 nop +[0-9a-f]+ <[^>]*> f123 eb00 jr v1 +[0-9a-f]+ <[^>]*> 6500 nop +[0-9a-f]+ <[^>]*> f123 e820 jr ra +[0-9a-f]+ <[^>]*> 6500 nop +[0-9a-f]+ <[^>]*> f123 eb40 jalr v1 +[0-9a-f]+ <[^>]*> 6500 nop + \.\.\. diff --git a/gas/testsuite/gas/mips/mips16-extend-swap.s b/gas/testsuite/gas/mips/mips16-extend-swap.s new file mode 100644 index 0000000..c299cf1 --- /dev/null +++ b/gas/testsuite/gas/mips/mips16-extend-swap.s @@ -0,0 +1,21 @@ + .set mips1 + .set mips16 +foo: + extend 0x123 + jal bar + + extend 0x123 + jalx baz + + extend 0x123 + jr $3 + + extend 0x123 + jr $31 + + extend 0x123 + jalr $3 + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 |