diff options
Diffstat (limited to 'ld/testsuite/ld-m68hc11/adj-jump.s')
-rw-r--r-- | ld/testsuite/ld-m68hc11/adj-jump.s | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/ld/testsuite/ld-m68hc11/adj-jump.s b/ld/testsuite/ld-m68hc11/adj-jump.s new file mode 100644 index 0000000..99b7258 --- /dev/null +++ b/ld/testsuite/ld-m68hc11/adj-jump.s @@ -0,0 +1,74 @@ +;;; 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: |