1 ;;; Test 68HC11 linker relaxation and fixup of bcc/bra branches 2 ;;; 3 .sect .text 4 .globl _start 5 _start: 6 ;; Next 'bra' is assembled as a 'jmp'. It is relaxed to 'bra L3' 7 ;; during a second pass of relax. 8 bra L3 9 .skip 20 10 ;; Next 'jmp' must be relaxed to a 'bra' during the first pass. 11 ;; The branch offset must then be adjusted by consecutive relax. 12 jmp L3 13 L1: 14 addd 0,x 15 bne L1 ; Branch not adjusted 16 addd _toto 17 beq L1 ; Backward branch, adjust -1 18 addd _toto+1 19 jbne L1 ; Backward branch, adjust -2 20 bgt L1 ; All possible backward branchs, adjust -2 21 bge L1 22 beq L1 23 ble L1 24 blt L1 25 bhi L1 26 bhs L1 27 beq L1 28 bls L1 29 blo L1 30 bcs L1 31 bmi L1 32 bvs L1 33 bcc L1 34 bpl L1 35 bvc L1 36 bne L1 37 brn L1 38 bra L1 39 ;; Relax several insn to reduce block by 15 40 addd _toto 41 addd _toto 42 addd _toto 43 addd _toto 44 addd _toto 45 addd _toto 46 addd _toto 47 addd _toto 48 addd _toto 49 addd _toto 50 addd _toto 51 addd _toto 52 addd _toto 53 addd _toto 54 addd _toto 55 L2: 56 jmp _start ; -> relax to bra _start 57 bne L2 ; Backward branch, adjust -1 58 beq L3 ; Forward branch, adjust -2 59 addd _toto 60 beq L3 ; Forward branch, adjust -1 61 addd _toto 62 L3: 63 addd _toto 64 rts 65 66 .sect .page0 67 _bar: 68 .long 0 69 _toto: 70 .long 0 71 .skip 32 72 stack: 73 .skip 10 74 _table: 75