* 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.
+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
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 *);
+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.
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
- }
+}
--- /dev/null
+# 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
--- /dev/null
+ 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: