19dd1b4833
* ld-m68hc11/adj-jump.d: New test for linker relaxation. * ld-m68hc11/adj-jump.s: Likewise. * ld-m68hc11/adj-brset.s: Likewise. * ld-m68hc11/adj-brset.d: Likewise. * ld-m68hc11/relax-direct.s: Likewise. * ld-m68hc11/relax-direct.d: Likewise. * ld-m68hc11/relax-group.s: Likewise. * ld-m68hc11/relax-group.d: Likewise. * ld-m68hc11/bug-1403.d: Likewise. * ld-m68hc11/bug-1403.s: Likewise.
75 lines
1.2 KiB
ArmAsm
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:
|