binutils-gdb/ld/testsuite/ld-m68hc11/adj-jump.s

75 lines
1.2 KiB
ArmAsm

;;; Test 68HC11 linker relaxation and fixup of bcc/bra branches
;;;
.sect .text
.globl _start
_start:
;; Next 'bra' is assembled as a 'jmp'. It is relaxed to 'bra L3'
;; during a second pass of relax.
bra L3
.skip 20
;; Next 'jmp' must be relaxed to a 'bra' during the first pass.
;; The branch offset must then be adjusted by consecutive relax.
jmp L3
L1:
addd 0,x
bne L1 ; Branch not adjusted
addd _toto
beq L1 ; Backward branch, adjust -1
addd _toto+1
jbne L1 ; Backward branch, adjust -2
bgt L1 ; All possible backward branchs, adjust -2
bge L1
beq L1
ble L1
blt L1
bhi L1
bhs L1
beq L1
bls L1
blo L1
bcs L1
bmi L1
bvs L1
bcc L1
bpl L1
bvc L1
bne L1
brn L1
bra L1
;; Relax several insn to reduce block by 15
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
addd _toto
L2:
jmp _start ; -> relax to bra _start
bne L2 ; Backward branch, adjust -1
beq L3 ; Forward branch, adjust -2
addd _toto
beq L3 ; Forward branch, adjust -1
addd _toto
L3:
addd _toto
rts
.sect .page0
_bar:
.long 0
_toto:
.long 0
.skip 32
stack:
.skip 10
_table: