Commit | Line | Data |
---|---|---|
19dd1b48 SC |
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 |