Home | History | Annotate | Download | only in ld-m68hc11
      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
     12 L1x:
     13 	.relax	L1y
     14 	ldy	#table
     15 	bset	0,y #4
     16 L1y:
     17 	.relax	L2x
     18 	ldx	#table+3
     19 	bset	0,x #4
     20 	bset	1,x #8
     21 L2x:
     22 	.relax	L2y
     23 	ldy	#table+3
     24 	bset	0,y #4
     25 	bset	1,y #8
     26 L2y:
     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
     35 L3x:
     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
     44 L3y:
     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
     60 L4x:
     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
     69 L4y:
     70 ;;;
     71 ;;; Relax group for bclr
     72 ;;;
     73 	.relax	L5x
     74 	ldx	#table+10
     75 	bclr	0,x #4
     76 	bclr	1,x #8
     77 L5x:
     78 	.relax	L5y
     79 	ldy	#table+16
     80 	bclr	10,y #4
     81 	bclr	11,y #8
     82 L5y:
     83 ;;;
     84 ;;; Relax group for brset (with backward branch)
     85 ;;;
     86 	.relax	L6x
     87 	ldx	#table+8
     88 	brset	0,x #4 L5y
     89 L6x:
     90 	.relax	L7x
     91 	ldy	#table+8
     92 	brset	0,y #4 L6x
     93 L7x:
     94 ;;;
     95 ;;; Relax group for brset (with forward branch)
     96 ;;;
     97 	.relax	L8x
     98 	ldx	#table+8
     99 	brset	0,x #4 brend
    100 L8x:
    101 	.relax	L8y
    102 	ldy	#table+8
    103 	brset	0,y #4 brend
    104 L8y:
    105 ;;;
    106 ;;; Relax group for brclr (with backward branch)
    107 ;;;
    108 	.relax	L9x
    109 	ldx	#table+8
    110 	brclr	0,x #4 L8y
    111 L9x:
    112 	.relax	L9y
    113 	ldy	#table+8
    114 	brclr	0,y #4 L9x
    115 L9y:
    116 ;;;
    117 ;;; Relax group for brclr (with forward branch)
    118 ;;;
    119 	.relax	L10x
    120 	ldx	#table+8
    121 	brclr	0,x #4 brend
    122 L10x:
    123 	.relax	L10y
    124 	ldy	#table+8
    125 	brclr	0,y #4 brend
    126 L10y:
    127 	nop
    128 brend:
    129 ;;;
    130 ;;; The following are wrong use of .relax groups.
    131 ;;;
    132 	.relax	w1
    133 w1:
    134 	.relax	w2
    135 	bset	0,x #4
    136 w2:
    137 	.relax w3
    138 	ldx	#table
    139 w3:
    140 	.relax w4
    141 	ldy	#table+8
    142 w4:
    143 	.relax w5
    144 	rts
    145 w5:
    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
    155 table:	.long 0
    156 table4:	.long 0
    157 table8:	.long 0
    158 	.skip	10
    159 end_table:
    160 	.long 0
    161 
    162