1;;; Test 68HC11 linker relaxation (group relax) 2;;; 3 .sect .text 4 .globl _start 5_start: 6;;; 7;;; The following group of instructions are adjusted. 8;;; 9 .relax L1x 10 ldx #table 11 bset 0,x #4 12L1x: 13 .relax L1y 14 ldy #table 15 bset 0,y #4 16L1y: 17 .relax L2x 18 ldx #table+3 19 bset 0,x #4 20 bset 1,x #8 21L2x: 22 .relax L2y 23 ldy #table+3 24 bset 0,y #4 25 bset 1,y #8 26L2y: 27 .relax L3x 28 ldx #table+6 29 bset 0,x #4 30 bset 1,x #8 31 bset 2,x #12 32 bset 3,x #12 33 bset 4,x #12 34 bset 5,x #12 35L3x: 36 .relax L3y 37 ldy #table+6 38 bset 0,y #4 39 bset 1,y #8 40 bset 2,y #12 41 bset 3,y #12 42 bset 4,y #12 43 bset 5,y #12 44L3y: 45 ;; Next branch is always relative. It must be adjusted while 46 ;; above instructions are relaxed. 47 bra _start 48;;; 49;;; This group has the first two bset insn relaxable while the 50;;; others are not. The ldx/ldy must not be removed. 51;;; 52 .relax L4x 53 ldx #table+0xfe 54 bset 0,x #4 55 bset 1,x #8 56 bset 2,x #12 57 bset 3,x #12 58 bset 4,x #12 59 bset 5,x #12 60L4x: 61 .relax L4y 62 ldy #table+0xfe 63 bset 0,y #4 64 bset 1,y #8 65 bset 2,y #12 66 bset 3,y #12 67 bset 4,y #12 68 bset 5,y #12 69L4y: 70;;; 71;;; Relax group for bclr 72;;; 73 .relax L5x 74 ldx #table+10 75 bclr 0,x #4 76 bclr 1,x #8 77L5x: 78 .relax L5y 79 ldy #table+16 80 bclr 10,y #4 81 bclr 11,y #8 82L5y: 83;;; 84;;; Relax group for brset (with backward branch) 85;;; 86 .relax L6x 87 ldx #table+8 88 brset 0,x #4 L5y 89L6x: 90 .relax L7x 91 ldy #table+8 92 brset 0,y #4 L6x 93L7x: 94;;; 95;;; Relax group for brset (with forward branch) 96;;; 97 .relax L8x 98 ldx #table+8 99 brset 0,x #4 brend 100L8x: 101 .relax L8y 102 ldy #table+8 103 brset 0,y #4 brend 104L8y: 105;;; 106;;; Relax group for brclr (with backward branch) 107;;; 108 .relax L9x 109 ldx #table+8 110 brclr 0,x #4 L8y 111L9x: 112 .relax L9y 113 ldy #table+8 114 brclr 0,y #4 L9x 115L9y: 116;;; 117;;; Relax group for brclr (with forward branch) 118;;; 119 .relax L10x 120 ldx #table+8 121 brclr 0,x #4 brend 122L10x: 123 .relax L10y 124 ldy #table+8 125 brclr 0,y #4 brend 126L10y: 127 nop 128brend: 129;;; 130;;; The following are wrong use of .relax groups. 131;;; 132 .relax w1 133w1: 134 .relax w2 135 bset 0,x #4 136w2: 137 .relax w3 138 ldx #table 139w3: 140 .relax w4 141 ldy #table+8 142w4: 143 .relax w5 144 rts 145w5: 146;;; 147;;; Next insn is not in a .relax group 148 ldx #table 149 bset 0,x #5 150 bra _start 151 rts 152 153 .sect .page0 154 .globl table 155table: .long 0 156table4: .long 0 157table8: .long 0 158 .skip 10 159end_table: 160 .long 0 161 162