gas/
authorBob Wilson <bob.wilson@acm.org>
Thu, 11 Nov 2004 19:05:43 +0000 (19:05 +0000)
committerBob Wilson <bob.wilson@acm.org>
Thu, 11 Nov 2004 19:05:43 +0000 (19:05 +0000)
        * config/tc-xtensa.c (MAX_IMMED6): Change value to 65.
gas/testsuite/
        * gas/xtensa/short_branch_offset.s: New.
        * gas/xtensa/short_branch_offset.d: New.
        * gas/xtensa/all.exp: Run new test.

gas/ChangeLog
gas/config/tc-xtensa.c
gas/testsuite/ChangeLog
gas/testsuite/gas/xtensa/all.exp
gas/testsuite/gas/xtensa/short_branch_offset.d [new file with mode: 0644]
gas/testsuite/gas/xtensa/short_branch_offset.s [new file with mode: 0644]

index 1c74fa6da960d86b6e52a419aee98acecfcbb870..c2ade55e28749fa856a2c3f8610e3f073ff67486 100644 (file)
@@ -1,3 +1,7 @@
+2004-11-11  Bob Wilson  <bob.wilson@acm.org>
+
+       * config/tc-xtensa.c (MAX_IMMED6): Change value to 65.
+
 2004-11-10  Bob Wilson  <bob.wilson@acm.org>
 
        * config/tc-xtensa.c (update_next_frag_state): Always add a NOP if
index 11bd8723850a5dbad3f587c478c42f58bf096b14..8f362302a2ad1ad8b7ef7c6efd6435e83639175e 100644 (file)
@@ -7242,8 +7242,11 @@ xtensa_mark_narrow_branches (void)
    use for alignment narrow branches that definitely will not expand to a
    jump and a branch.  These functions find and mark these cases.  */
 
-/* the range in bytes of a bnez.n and beqz.n */
-#define MAX_IMMED6 68
+/* The range in bytes of BNEZ.N and BEQZ.N.  The target operand is encoded
+   as PC + 4 + imm6, where imm6 is a 6-bit immediate ranging from 0 to 63.
+   We start counting beginning with the frag after the 2-byte branch, so the
+   maximum offset is (4 - 2) + 63 = 65.  */
+#define MAX_IMMED6 65
 
 static size_t unrelaxed_frag_max_size (fragS *);
 
index fe960ea49334ef076dfef0e9d5c468424986752a..b5c94fc4b3ca3889583681caeb559b84a146d662 100644 (file)
@@ -1,3 +1,9 @@
+2004-11-11  Bob Wilson  <bob.wilson@acm.org>
+
+       * gas/xtensa/short_branch_offset.s: New.
+       * gas/xtensa/short_branch_offset.d: New.
+       * gas/xtensa/all.exp: Run new test.
+
 2004-11-10  Alan Modra  <amodra@bigpond.net.au>
 
        * gas/i386/opcode.s: Pad section.
index 207730102a6c5b8f2a57dbd20e6634c2fdf0cd3f..89b3cdf1e518b91d351490e96ff3f01e733c615f 100644 (file)
@@ -78,9 +78,9 @@ if [istarget xtensa*-*-*] then {
     objdump_finish
     if [all_ones $x1] then { pass $testname } else { fail $testname }
 
-
+    run_dump_test "short_branch_offset"
 }
 
 if [info exists errorInfo] then {
     unset errorInfo
-    }
+}
diff --git a/gas/testsuite/gas/xtensa/short_branch_offset.d b/gas/testsuite/gas/xtensa/short_branch_offset.d
new file mode 100644 (file)
index 0000000..0d95a7c
--- /dev/null
@@ -0,0 +1,34 @@
+# as: --no-target-align
+# objdump: -d
+
+# Test that a short branch with a target just barely out of range does
+# not crash the assembler.
+
+.*: +file format elf32-xtensa-.*
+
+Disassembly of section .text:
+
+00000000 <.text>:
+   0:  .*              bnez    a2, 0x45
+   3:  .*              nop
+   6:  .*              nop
+   9:  .*              nop
+   c:  .*              nop
+   f:  .*              nop
+  12:  .*              nop
+  15:  .*              nop
+  18:  .*              nop
+  1b:  .*              nop
+  1e:  .*              nop
+  21:  .*              nop
+  24:  .*              nop
+  27:  .*              nop
+  2a:  .*              nop
+  2d:  .*              nop
+  30:  .*              nop
+  33:  .*              nop
+  36:  .*              nop
+  39:  .*              nop
+  3c:  .*              nop
+  3f:  .*              nop
+  42:  .*              nop
diff --git a/gas/testsuite/gas/xtensa/short_branch_offset.s b/gas/testsuite/gas/xtensa/short_branch_offset.s
new file mode 100644 (file)
index 0000000..df2489f
--- /dev/null
@@ -0,0 +1,24 @@
+       bnez.n  a2, .Lplus68
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+       _nop
+.Lplus68: