| 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: |