Remove old testsuite
[dyninst.git] / testsuite / src / dyninst / test6LS-power.s
1 # $Id: test6LS-power.s,v 1.1 2008/10/30 19:21:19 legendre Exp $
2
3 .file "test6LS-power.s"
4 .machine "any"
5
6 .toc
7 T.divarw:       .tc     divarwT[TC], divarw[RW]
8 T.dfvars:       .tc     dfvarsT[TC], dfvars[RW]
9 T.dfvard:       .tc     dfvardT[TC], dfvard[RW]
10
11 .globl divarw[RW]
12 .globl dfvars[RW]
13 .globl dfvard[RW]
14
15 .csect divarw[RW], 3 # .align 3
16         .long 1234, 5678, 99, 11, 0xFC000000
17
18 .csect dfvars[RW], 2 # .align 2
19         .float 1.25
20         .float 1.75
21
22 .csect dfvard[RW], 3 # .align 3
23         .double 1.125
24         .double 1.725
25
26 .globl .loadsnstores[PR]
27 .csect .loadsnstores[PR]
28
29 #should use only volatile registers (GPR3-10, FPR0-13)
30
31         add     12,3,4
32         add     12,12,5
33
34         # We actually need to do a
35         #l      7,T.divarw(2)
36         # but avoid that because the offset is unknow(?)
37         # afaict, the linker may reorder/combine .tc entries...
38
39         la      7,T.divarw(2)
40         l       7,0(7)          #l1
41
42         mr      3,7
43         lbz     6,17(7)         #l2
44         lbzu    6,3(7)          #l3
45         mr      7,3
46
47         li      8,1
48         lbzx    5,3,8           #l4
49         li      9,2
50         lbzux   5,3,9           #l5
51         mr      3,7
52
53         lhz     6,0(3)          #l6
54         lha     5,4(3)          #l7
55         lhzu    6,2(3)          #l8
56         mr      3,7
57         lhau    5,0(3)          #l9
58         mr      3,7
59
60         addi    8,8,1
61         lhzx    5,7,9           #l10
62         lhax    5,7,8           #l11
63         lhzux   5,7,9           #l12
64         mr      7,3
65         lhaux   5,7,8           #l13
66         mr      7,3
67
68         l       5,0(7)          #l14
69         lu      6,4(7)          #l15
70         mr      7,3
71         li      9,4
72         lx      5,3,9           #l16
73         lux     6,3,9           #l17
74         mr      3,7
75
76         # Not sure if lwa, lwax, lwaux, ld, ldu, ldx, ldux work on PowerX, X<3.
77
78         li      0,12
79         lwa     5,4(3)          #l18
80         lwax    6,7,0           #l19
81         lwaux   5,7,8           #l20
82         mr      7,3
83
84         # Note:  lwux does not exist...
85
86         ld      6,0(7)          #l21
87         ldu     6,0(3)          #l22
88         mr      3,7
89         li      9,0
90         ldx     6,7,9           #l23
91         ldux    5,3,9           #l24
92         mr      3,7
93
94         stb     5,3(7)          #s1 a25
95         stbu    5,1(7)
96         mr      7,3
97         li      8,1
98         stbx    6,3,8
99         stbux   6,8,3
100
101         sth     5,2(7)          #s5
102         sthu    6,6(7)
103         mr      7,3
104         li      9,2
105         sthx    5,3,9
106         sthux   6,9,3
107
108         st      5,0(7)          #s9
109         stu     6,4(7)
110         mr      7,3
111         li      9,4
112         stx     6,3,9
113         stux    5,9,3
114
115         std     5,0(7)          #s13 a37
116         stdu    6,0(7)
117         mr      7,3
118         li      8,0
119         stdx    6,7,8
120         stdux   6,8,7           #s16 a40
121
122         li      9,0
123         li      8,0
124         
125         # VG(10/25/01): Using the offsets below instead of the above ones
126         # causes the mutatee to crash if run standalone; running it from the 
127         # mutator works however... It seems that in certain instances the
128         # address for reverse-order instructions need be doubleword aligned
129         # on Power3. (8,8) offests are ok as well. AFAICT this behavior is not
130         # documented in the PowerPC book. I don't have Power3 documentation...
131
132 #       li      9,4
133 #       li      8,2
134
135         lhbrx   6,8,3           # l25 a41
136         lbrx    6,9,3           #
137         sthbrx  5,8,7           # s17 a43
138         stbrx   5,9,7           #
139
140         .set    ngprs,32-13
141         stm     13,-4*ngprs(1)  # Save lower words of GPR13-31 on stack
142         lm      13,-4*ngprs(1)  # Restore them - stack pointer not touched
143
144         addi    4,1,-24
145         lsi     5,4,24          # Fill lw GPR5-10 with crap after stack
146         stsi    5,4,20          # Write some crap back
147
148         mfxer   10
149         li      9,20
150         .set    where,32+25
151         insrdi  10,9,7,where
152         mtxer   10              # set bits 25:31 of XER to 20
153
154         li      9,-20
155         lsx     5,1,9           # save lw GPR5-10 to stack
156         li      9,-20
157         stsx    5,1,9           # restore them
158
159         mr      7,3
160
161 loop:   lwarx   5,0,3           # l30 a51
162         stwcx.  4,0,3           # s22
163         bne-    loop
164
165         mr      4,1             # save stack pointer value in divarw
166         
167 loop2:  ldarx   5,0,7
168         stdcx.  4,0,7           # s23
169         # VG(10/23/01) For some reason, reservation is always lost here
170         # on Power3 in 32-executable [we still cannot do 64-bit ones...]
171         # VG(11/22/01) Now it only happens with xlc mutatees but not with
172         # gcc mutatees... Very odd...
173 #       bne-    loop2
174
175         la      4,T.dfvars(2)
176         l       4,0(4)          # a55
177         
178         lfs     5,0(4)
179         li      6,4
180         lfsx    6,4,6
181         mr      5,4
182         lfsu    7,0(4)
183         mr      4,5
184         lfsux   8,6,4
185
186         la      6,T.dfvard(2)
187         l       6,0(6)          # a60
188         
189         lfd     1,0(6)
190         li      9,8
191         lfdx    2,6,9
192         mr      7,6
193         lfdu    1,8(6)
194         mr      6,7
195         lfdux   2,9,7
196
197         stfs    1,4(4)          # s24 a65
198         li      0,4             # this could break prologue, bet we lack it...
199         stfsx   2,4,0           # s25
200         stfsu   3,0(4)          # s26
201         mr      4,5
202         stfsux  3,0,4           # s27
203
204         stfd    1,0(6)          # s28 a69
205         li      9,8
206         stfdx   2,6,9
207         stfdu   3,8(6)
208         mr      6,7
209         stfdux  4,9,7
210
211         # The optional FP store
212         stfiwx  5,0,4           # s32
213
214         mr      3,12
215
216         blr       # VG(10/19/01): dyninst doesn't find function return without
217         .long 0x0 # this trailing 0... The function works ok without it...
218
219         # VG(11/27/01):  the trailing 0 is actually the start of a traceback
220         # tag. I don't bother to generate one...
221
222 .globl .gettoc[PR]
223 .csect .gettoc[PR]
224
225         # addi  3,2,T.divarw - This doesn't compile even tough it the same as:
226         la      3,T.divarw(2)  # T.divarw is not 0 at execution time!
227         blr
228         .long 0x0
229
230
231 .globl .getsp[PR]
232 .csect .getsp[PR]
233
234         l       7,T.divarw(2)   
235         ld      3,0(7)  # get the SP of loadnstores (it was saved here)
236         blr
237         .long 0x0