summaryrefslogtreecommitdiffstats
path: root/tests/tcg/xtensa/test_lsc.S
blob: 348822bdd3595573a34a9ce6227653d8c5f316c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#include "macros.inc"
#include "fpu.h"

test_suite lsc

#if XCHAL_HAVE_FP

test lsi
    movi    a2, 1
    wsr     a2, cpenable

    movi    a2, 1f
    lsi     f1, a2, 4
#if DFPU
    lsi     f2, a2, 8
    lsip    f0, a2, 8
#else
    lsi     f0, a2, 0
    lsiu    f2, a2, 8
#endif
    movi    a3, 1f + 8
    assert  eq, a2, a3
    rfr     a2, f0
    movi    a3, 0x3f800000
    assert  eq, a2, a3
    rfr     a2, f1
    movi    a3, 0x40000000
    assert  eq, a2, a3
    rfr     a2, f2
    movi    a3, 0x40400000
    assert  eq, a2, a3
.data
    .align  4
1:
.float 1, 2, 3
.text
test_end

test ssi
    movi    a2, 1f
    movi    a3, 0x40800000
    wfr     f3, a3
    movi    a3, 0x40a00000
    wfr     f4, a3
    movi    a3, 0x40c00000
    wfr     f5, a3
    ssi     f4, a2, 4
#if DFPU
    ssi     f5, a2, 8
    ssip    f3, a2, 8
#else
    ssi     f3, a2, 0
    ssiu    f5, a2, 8
#endif
    movi    a3, 1f + 8
    assert  eq, a2, a3
    l32i    a4, a2, -8
    movi    a3, 0x40800000
    assert  eq, a4, a3
    l32i    a4, a2, -4
    movi    a3, 0x40a00000
    assert  eq, a4, a3
    l32i    a4, a2, 0
    movi    a3, 0x40c00000
    assert  eq, a4, a3
.data
    .align  4
1:
.float 0, 0, 0
.text
test_end

test lsx
    movi    a2, 1f
    movi    a3, 0
    movi    a4, 4
    movi    a5, 8
    lsx     f7, a2, a4
#if DFPU
    lsx     f8, a2, a5
    lsxp    f6, a2, a5
#else
    lsx     f6, a2, a3
    lsxu    f8, a2, a5
#endif
    movi    a3, 1f + 8
    assert  eq, a2, a3
    rfr     a2, f6
    movi    a3, 0x40e00000
    assert  eq, a2, a3
    rfr     a2, f7
    movi    a3, 0x41000000
    assert  eq, a2, a3
    rfr     a2, f8
    movi    a3, 0x41100000
    assert  eq, a2, a3
.data
    .align  4
1:
.float 7, 8, 9
.text
test_end

test ssx
    movi    a2, 1f
    movi    a4, 0x41200000
    wfr     f9, a4
    movi    a4, 0x41300000
    wfr     f10, a4
    movi    a4, 0x41400000
    wfr     f11, a4
    movi    a3, 0
    movi    a4, 4
    movi    a5, 8
    ssx     f10, a2, a4
#if DFPU
    ssx     f11, a2, a5
    ssxp    f9, a2, a5
#else
    ssx     f9, a2, a3
    ssxu    f11, a2, a5
#endif
    movi    a3, 1f + 8
    assert  eq, a2, a3
    l32i    a4, a2, -8
    movi    a3, 0x41200000
    assert  eq, a4, a3
    l32i    a4, a2, -4
    movi    a3, 0x41300000
    assert  eq, a4, a3
    l32i    a4, a2, 0
    movi    a3, 0x41400000
    assert  eq, a4, a3
.data
    .align  4
1:
.float 0, 0, 0
.text
test_end

#endif

#if XCHAL_HAVE_DFP

#if XCHAL_HAVE_BE
#define F64_HIGH_OFF 0
#else
#define F64_HIGH_OFF 4
#endif

.macro movdf fr, hi, lo
    movi    a2, \hi
    movi    a3, \lo
    wfrd    \fr, a2, a3
.endm

test ldi
    movi    a2, 1
    wsr     a2, cpenable

    movi    a2, 1f
    ldi     f1, a2, 8
    ldi     f2, a2, 16
    ldip    f0, a2, 16
    movi    a3, 1f + 16
    assert  eq, a2, a3
    rfrd    a2, f0
    movi    a3, 0x3ff00000
    assert  eq, a2, a3
    rfrd    a2, f1
    movi    a3, 0x40000000
    assert  eq, a2, a3
    rfrd    a2, f2
    movi    a3, 0x40080000
    assert  eq, a2, a3
.data
    .align  8
1:
.double 1, 2, 3
.text
test_end

test sdi
    movdf   f3, 0x40800000, 0
    movdf   f4, 0x40a00000, 0
    movdf   f5, 0x40c00000, 0
    movi    a2, 1f
    sdi     f4, a2, 8
    sdi     f5, a2, 16
    sdip    f3, a2, 16
    movi    a3, 1f + 16
    assert  eq, a2, a3
    l32i    a4, a2, -16 + F64_HIGH_OFF
    movi    a3, 0x40800000
    assert  eq, a4, a3
    l32i    a4, a2, -8 + F64_HIGH_OFF
    movi    a3, 0x40a00000
    assert  eq, a4, a3
    l32i    a4, a2, F64_HIGH_OFF
    movi    a3, 0x40c00000
    assert  eq, a4, a3
.data
    .align  8
1:
.double 0, 0, 0
.text
test_end

test ldx
    movi    a2, 1f
    movi    a3, 0
    movi    a4, 8
    movi    a5, 16
    ldx     f7, a2, a4
    ldx     f8, a2, a5
    ldxp    f6, a2, a5
    movi    a3, 1f + 16
    assert  eq, a2, a3
    rfrd    a2, f6
    movi    a3, 0x401c0000
    assert  eq, a2, a3
    rfrd    a2, f7
    movi    a3, 0x40200000
    assert  eq, a2, a3
    rfrd    a2, f8
    movi    a3, 0x40220000
    assert  eq, a2, a3
.data
    .align  8
1:
.double 7, 8, 9
.text
test_end

test sdx
    movdf   f9, 0x41200000, 0
    movdf   f10, 0x41300000, 0
    movdf   f11, 0x41400000, 0
    movi    a2, 1f
    movi    a3, 0
    movi    a4, 8
    movi    a5, 16
    sdx     f10, a2, a4
    sdx     f11, a2, a5
    sdxp    f9, a2, a5
    movi    a3, 1f + 16
    assert  eq, a2, a3
    l32i    a4, a2, -16 + F64_HIGH_OFF
    movi    a3, 0x41200000
    assert  eq, a4, a3
    l32i    a4, a2, -8 + F64_HIGH_OFF
    movi    a3, 0x41300000
    assert  eq, a4, a3
    l32i    a4, a2, F64_HIGH_OFF
    movi    a3, 0x41400000
    assert  eq, a4, a3
.data
    .align  8
1:
.double 0, 0, 0
.text
test_end

#endif

test_suite_end