Upload Tizen:Base source
[external/binutils.git] / ld / testsuite / ld-m68hc11 / relax-group.s
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