;;; Test 68HC11 linker relaxation (group relax) ;;; .sect .text .globl _start _start: ;;; ;;; The following group of instructions are adjusted. ;;; .relax L1x ldx #table bset 0,x #4 L1x: .relax L1y ldy #table bset 0,y #4 L1y: .relax L2x ldx #table+3 bset 0,x #4 bset 1,x #8 L2x: .relax L2y ldy #table+3 bset 0,y #4 bset 1,y #8 L2y: .relax L3x ldx #table+6 bset 0,x #4 bset 1,x #8 bset 2,x #12 bset 3,x #12 bset 4,x #12 bset 5,x #12 L3x: .relax L3y ldy #table+6 bset 0,y #4 bset 1,y #8 bset 2,y #12 bset 3,y #12 bset 4,y #12 bset 5,y #12 L3y: ;; Next branch is always relative. It must be adjusted while ;; above instructions are relaxed. bra _start ;;; ;;; This group has the first two bset insn relaxable while the ;;; others are not. The ldx/ldy must not be removed. ;;; .relax L4x ldx #table+0xfe bset 0,x #4 bset 1,x #8 bset 2,x #12 bset 3,x #12 bset 4,x #12 bset 5,x #12 L4x: .relax L4y ldy #table+0xfe bset 0,y #4 bset 1,y #8 bset 2,y #12 bset 3,y #12 bset 4,y #12 bset 5,y #12 L4y: ;;; ;;; Relax group for bclr ;;; .relax L5x ldx #table+10 bclr 0,x #4 bclr 1,x #8 L5x: .relax L5y ldy #table+16 bclr 10,y #4 bclr 11,y #8 L5y: ;;; ;;; Relax group for brset (with backward branch) ;;; .relax L6x ldx #table+8 brset 0,x #4 L5y L6x: .relax L7x ldy #table+8 brset 0,y #4 L6x L7x: ;;; ;;; Relax group for brset (with forward branch) ;;; .relax L8x ldx #table+8 brset 0,x #4 brend L8x: .relax L8y ldy #table+8 brset 0,y #4 brend L8y: ;;; ;;; Relax group for brclr (with backward branch) ;;; .relax L9x ldx #table+8 brclr 0,x #4 L8y L9x: .relax L9y ldy #table+8 brclr 0,y #4 L9x L9y: ;;; ;;; Relax group for brclr (with forward branch) ;;; .relax L10x ldx #table+8 brclr 0,x #4 brend L10x: .relax L10y ldy #table+8 brclr 0,y #4 brend L10y: nop brend: ;;; ;;; The following are wrong use of .relax groups. ;;; .relax w1 w1: .relax w2 bset 0,x #4 w2: .relax w3 ldx #table w3: .relax w4 ldy #table+8 w4: .relax w5 rts w5: ;;; ;;; Next insn is not in a .relax group ldx #table bset 0,x #5 bra _start rts .sect .page0 .globl table table: .long 0 table4: .long 0 table8: .long 0 .skip 10 end_table: .long 0