OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [mips/] [mips32-dsp-run.c] - Blame information for rev 691

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 691 jeremybenn
/* Test MIPS32 DSP instructions */
2
/* { dg-do run } */
3
/* { dg-options "-mdsp -O2" } */
4
 
5
#include <stdlib.h>
6
#include <stdio.h>
7
 
8
typedef signed char v4i8 __attribute__ ((vector_size(4)));
9
typedef short v2q15 __attribute__ ((vector_size(4)));
10
 
11
typedef int q31;
12
typedef int i32;
13
typedef unsigned int ui32;
14
typedef long long a64;
15
 
16
NOMIPS16 void test_MIPS_DSP (void);
17
 
18
char array[100];
19
int little_endian;
20
 
21
int main ()
22
{
23
  int i;
24
 
25
  union { long long ll; int i[2]; } endianness_test;
26
  endianness_test.ll = 1;
27
  little_endian = endianness_test.i[0];
28
 
29
  for (i = 0; i < 100; i++)
30
    array[i] = i;
31
 
32
  test_MIPS_DSP ();
33
 
34
  exit (0);
35
}
36
 
37
NOMIPS16 v2q15 add_v2q15 (v2q15 a, v2q15 b)
38
{
39
  return __builtin_mips_addq_ph (a, b);
40
}
41
 
42
NOMIPS16 v4i8 add_v4i8 (v4i8 a, v4i8 b)
43
{
44
  return __builtin_mips_addu_qb (a, b);
45
}
46
 
47
NOMIPS16 v2q15 sub_v2q15 (v2q15 a, v2q15 b)
48
{
49
  return __builtin_mips_subq_ph (a, b);
50
}
51
 
52
NOMIPS16 v4i8 sub_v4i8 (v4i8 a, v4i8 b)
53
{
54
  return __builtin_mips_subu_qb (a, b);
55
}
56
 
57
NOMIPS16 void test_MIPS_DSP ()
58
{
59
  v4i8 v4i8_a,v4i8_b,v4i8_c,v4i8_r,v4i8_s;
60
  v2q15 v2q15_a,v2q15_b,v2q15_c,v2q15_r,v2q15_s;
61
  q31 q31_a,q31_b,q31_c,q31_r,q31_s;
62
  i32 i32_a,i32_b,i32_c,i32_r,i32_s;
63
  ui32 ui32_a,ui32_b,ui32_c;
64
  a64 a64_a,a64_b,a64_c,a64_r,a64_s;
65
 
66
  void *ptr_a;
67
  int r,s;
68
  long long lr,ls;
69
 
70
  v2q15_a = (v2q15) {0x1234, 0x5678};
71
  v2q15_b = (v2q15) {0x6f89, 0x1111};
72
  v2q15_s = (v2q15) {0x81bd, 0x6789};
73
  v2q15_r = add_v2q15 (v2q15_a, v2q15_b);
74
  r = (int) v2q15_r;
75
  s = (int) v2q15_s;
76
  if (r != s)
77
    abort ();
78
 
79
  v2q15_a = (v2q15) {0x1234, 0x5678};
80
  v2q15_b = (v2q15) {0x6f89, 0x1111};
81
  v2q15_s = (v2q15) {0x7fff, 0x6789};
82
  v2q15_r = __builtin_mips_addq_s_ph (v2q15_a, v2q15_b);
83
  r = (int) v2q15_r;
84
  s = (int) v2q15_s;
85
  if (r != s)
86
    abort ();
87
 
88
  q31_a = 0x70000000;
89
  q31_b = 0x71234567;
90
  q31_s = 0x7fffffff;
91
  q31_r = __builtin_mips_addq_s_w (q31_a, q31_b);
92
  if (q31_r != q31_s)
93
    abort ();
94
 
95
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
96
  v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
97
  v4i8_s = (v4i8) {0xf1, 0xbd, 0x67, 0x89};
98
  v4i8_r = add_v4i8 (v4i8_a, v4i8_b);
99
  r = (int) v4i8_r;
100
  s = (int) v4i8_s;
101
  if (r != s)
102
    abort ();
103
 
104
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
105
  v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
106
  v4i8_s = (v4i8) {0xff, 0xbd, 0x67, 0x89};
107
  v4i8_r = __builtin_mips_addu_s_qb (v4i8_a, v4i8_b);
108
  r = (int) v4i8_r;
109
  s = (int) v4i8_s;
110
  if (r != s)
111
    abort ();
112
 
113
  v2q15_a = (v2q15) {0x1234, 0x5678};
114
  v2q15_b = (v2q15) {0x6f89, 0x1111};
115
  v2q15_s = (v2q15) {0xa2ab, 0x4567};
116
  v2q15_r = sub_v2q15 (v2q15_a, v2q15_b);
117
  r = (int) v2q15_r;
118
  s = (int) v2q15_s;
119
  if (r != s)
120
    abort ();
121
 
122
  v2q15_a = (v2q15) {0x8000, 0x5678};
123
  v2q15_b = (v2q15) {0x6f89, 0x1111};
124
  v2q15_s = (v2q15) {0x8000, 0x4567};
125
  v2q15_r = __builtin_mips_subq_s_ph (v2q15_a, v2q15_b);
126
  r = (int) v2q15_r;
127
  s = (int) v2q15_s;
128
  if (r != s)
129
    abort ();
130
 
131
  q31_a = 0x70000000;
132
  q31_b = 0x71234567;
133
  q31_s = 0xfedcba99;
134
  q31_r = __builtin_mips_subq_s_w (q31_a, q31_b);
135
  if (q31_r != q31_s)
136
    abort ();
137
 
138
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
139
  v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
140
  v4i8_s = (v4i8) {0xf3, 0xab, 0x45, 0x67};
141
  v4i8_r = sub_v4i8 (v4i8_a, v4i8_b);
142
  r = (int) v4i8_r;
143
  s = (int) v4i8_s;
144
  if (r != s)
145
    abort ();
146
 
147
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
148
  v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
149
  v4i8_s = (v4i8) {0x0, 0x0, 0x45, 0x67};
150
  v4i8_r = __builtin_mips_subu_s_qb (v4i8_a, v4i8_b);
151
  r = (int) v4i8_r;
152
  s = (int) v4i8_s;
153
  if (r != s)
154
    abort ();
155
 
156
  i32_a = 0xf5678900;
157
  i32_b = 0x7abcdef0;
158
  i32_s = 0x702467f0;
159
  i32_r = __builtin_mips_addsc (i32_a, i32_b);
160
  if (i32_r != i32_s)
161
    abort ();
162
 
163
  i32_a = 0x75678900;
164
  i32_b = 0x7abcdef0;
165
  i32_s = 0xf02467f1;
166
  i32_r = __builtin_mips_addwc (i32_a, i32_b);
167
  if (i32_r != i32_s)
168
    abort ();
169
 
170
  i32_a = 0;
171
  i32_b = 0x00000901;
172
  i32_s = 9;
173
  i32_r = __builtin_mips_modsub (i32_a, i32_b);
174
  if (i32_r != i32_s)
175
    abort ();
176
 
177
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
178
  i32_s = 0x1f4;
179
  i32_r = __builtin_mips_raddu_w_qb (v4i8_a);
180
  if (i32_r != i32_s)
181
    abort ();
182
 
183
  v2q15_a = (v2q15) {0x8000, 0x8134};
184
  v2q15_s = (v2q15) {0x7fff, 0x7ecc};
185
  v2q15_r = __builtin_mips_absq_s_ph (v2q15_a);
186
  r = (int) v2q15_r;
187
  s = (int) v2q15_s;
188
  if (r != s)
189
    abort ();
190
 
191
  q31_a = (q31) 0x80000000;
192
  q31_s = (q31) 0x7fffffff;
193
  q31_r = __builtin_mips_absq_s_w (q31_a);
194
  if (q31_r != q31_s)
195
    abort ();
196
 
197
  v2q15_a = (v2q15) {0x9999, 0x5612};
198
  v2q15_b = (v2q15) {0x5612, 0x3333};
199
  if (little_endian)
200
    v4i8_s = (v4i8) {0x56, 0x33, 0x99, 0x56};
201
  else
202
    v4i8_s = (v4i8) {0x99, 0x56, 0x56, 0x33};
203
  v4i8_r = __builtin_mips_precrq_qb_ph (v2q15_a, v2q15_b);
204
  r = (int) v4i8_r;
205
  s = (int) v4i8_s;
206
  if (r != s)
207
    abort ();
208
 
209
  q31_a = 0x12348678;
210
  q31_b = 0x44445555;
211
  if (little_endian)
212
    v2q15_s = (v2q15) {0x4444, 0x1234};
213
  else
214
    v2q15_s = (v2q15) {0x1234, 0x4444};
215
  v2q15_r = __builtin_mips_precrq_ph_w (q31_a, q31_b);
216
  r = (int) v2q15_r;
217
  s = (int) v2q15_s;
218
  if (r != s)
219
    abort ();
220
 
221
  q31_a = 0x12348678;
222
  q31_b = 0x44445555;
223
  if (little_endian)
224
    v2q15_s = (v2q15) {0x4444, 0x1235};
225
  else
226
    v2q15_s = (v2q15) {0x1235, 0x4444};
227
  v2q15_r = __builtin_mips_precrq_rs_ph_w (q31_a, q31_b);
228
  r = (int) v2q15_r;
229
  s = (int) v2q15_s;
230
  if (r != s)
231
    abort ();
232
 
233
  v2q15_a = (v2q15) {0x9999, 0x5612};
234
  v2q15_b = (v2q15) {0x5612, 0x3333};
235
  if (little_endian)
236
    v4i8_s = (v4i8) {0xac, 0x66, 0x00, 0xac};
237
  else
238
    v4i8_s = (v4i8) {0x00, 0xac, 0xac, 0x66};
239
  v4i8_r = __builtin_mips_precrqu_s_qb_ph (v2q15_a, v2q15_b);
240
  r = (int) v4i8_r;
241
  s = (int) v4i8_s;
242
  if (r != s)
243
    abort ();
244
 
245
  v2q15_a = (v2q15) {0x3589, 0x4444};
246
  if (little_endian)
247
    q31_s = 0x44440000;
248
  else
249
    q31_s = 0x35890000;
250
  q31_r = __builtin_mips_preceq_w_phl (v2q15_a);
251
  if (q31_r != q31_s)
252
    abort ();
253
 
254
  v2q15_a = (v2q15) {0x3589, 0x4444};
255
  if (little_endian)
256
    q31_s = 0x35890000;
257
  else
258
    q31_s = 0x44440000;
259
  q31_r = __builtin_mips_preceq_w_phr (v2q15_a);
260
  if (q31_r != q31_s)
261
    abort ();
262
 
263
  v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
264
  if (little_endian)
265
    v2q15_s = (v2q15) {0x2b00, 0x1980};
266
  else
267
    v2q15_s = (v2q15) {0x0900, 0x2b00};
268
  v2q15_r = __builtin_mips_precequ_ph_qbl (v4i8_a);
269
  r = (int) v2q15_r;
270
  s = (int) v2q15_s;
271
  if (r != s)
272
    abort ();
273
 
274
  v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
275
  if (little_endian)
276
    v2q15_s = (v2q15) {0x0900, 0x2b00};
277
  else
278
    v2q15_s = (v2q15) {0x2b00, 0x1980};
279
  v2q15_r = __builtin_mips_precequ_ph_qbr (v4i8_a);
280
  r = (int) v2q15_r;
281
  s = (int) v2q15_s;
282
  if (r != s)
283
    abort ();
284
 
285
  v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
286
  if (little_endian)
287
    v2q15_s = (v2q15) {0x2b00, 0x1980};
288
  else
289
    v2q15_s = (v2q15) {0x0900, 0x2b00};
290
  v2q15_r = __builtin_mips_precequ_ph_qbla (v4i8_a);
291
  r = (int) v2q15_r;
292
  s = (int) v2q15_s;
293
  if (r != s)
294
    abort ();
295
 
296
  v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
297
  if (little_endian)
298
    v2q15_s = (v2q15) {0x0900, 0x2b00};
299
  else
300
    v2q15_s = (v2q15) {0x2b00, 0x1980};
301
  v2q15_r = __builtin_mips_precequ_ph_qbra (v4i8_a);
302
  r = (int) v2q15_r;
303
  s = (int) v2q15_s;
304
  if (r != s)
305
    abort ();
306
 
307
  v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
308
  if (little_endian)
309
    v2q15_s = (v2q15) {0x56, 0x33};
310
  else
311
    v2q15_s = (v2q15) {0x12, 0x56};
312
  v2q15_r = __builtin_mips_preceu_ph_qbl (v4i8_a);
313
  r = (int) v2q15_r;
314
  s = (int) v2q15_s;
315
  if (r != s)
316
    abort ();
317
 
318
  v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
319
  if (little_endian)
320
    v2q15_s = (v2q15) {0x12, 0x56};
321
  else
322
    v2q15_s = (v2q15) {0x56, 0x33};
323
  v2q15_r = __builtin_mips_preceu_ph_qbr (v4i8_a);
324
  r = (int) v2q15_r;
325
  s = (int) v2q15_s;
326
  if (r != s)
327
    abort ();
328
 
329
  v4i8_a = (v4i8) {0x12, 0x99, 0x56, 0x33};
330
  if (little_endian)
331
    v2q15_s = (v2q15) {0x99, 0x33};
332
  else
333
    v2q15_s = (v2q15) {0x12, 0x56};
334
  v2q15_r = __builtin_mips_preceu_ph_qbla (v4i8_a);
335
  r = (int) v2q15_r;
336
  s = (int) v2q15_s;
337
  if (r != s)
338
    abort ();
339
 
340
  v4i8_a = (v4i8) {0x12, 0x99, 0x56, 0x33};
341
  if (little_endian)
342
    v2q15_s = (v2q15) {0x12, 0x56};
343
  else
344
    v2q15_s = (v2q15) {0x99, 0x33};
345
  v2q15_r = __builtin_mips_preceu_ph_qbra (v4i8_a);
346
  r = (int) v2q15_r;
347
  s = (int) v2q15_s;
348
  if (r != s)
349
    abort ();
350
 
351
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
352
  v4i8_s = (v4i8) {0xc8, 0xd0, 0x58, 0xe0};
353
  v4i8_r = __builtin_mips_shll_qb (v4i8_a, 2);
354
  r = (int) v4i8_r;
355
  s = (int) v4i8_s;
356
  if (r != s)
357
    abort ();
358
 
359
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
360
  i32_b = 1;
361
  v4i8_s = (v4i8) {0xe4, 0x68, 0xac, 0xf0};
362
  v4i8_r = __builtin_mips_shll_qb (v4i8_a, i32_b);
363
  r = (int) v4i8_r;
364
  s = (int) v4i8_s;
365
  if (r != s)
366
    abort ();
367
 
368
  v2q15_a = (v2q15) {0x1234, 0x5678};
369
  v2q15_s = (v2q15) {0x48d0, 0x59e0};
370
  v2q15_r = __builtin_mips_shll_ph (v2q15_a, 2);
371
  r = (int) v2q15_r;
372
  s = (int) v2q15_s;
373
  if (r != s)
374
    abort ();
375
 
376
  v2q15_a = (v2q15) {0x1234, 0x5678};
377
  i32_b = 1;
378
  v2q15_s = (v2q15) {0x2468, 0xacf0};
379
  v2q15_r = __builtin_mips_shll_ph (v2q15_a, i32_b);
380
  r = (int) v2q15_r;
381
  s = (int) v2q15_s;
382
  if (r != s)
383
    abort ();
384
 
385
  v2q15_a = (v2q15) {0x1234, 0x5678};
386
  v2q15_s = (v2q15) {0x48d0, 0x7fff};
387
  v2q15_r = __builtin_mips_shll_s_ph (v2q15_a, 2);
388
  r = (int) v2q15_r;
389
  s = (int) v2q15_s;
390
  if (r != s)
391
    abort ();
392
 
393
  v2q15_a = (v2q15) {0x1234, 0x5678};
394
  i32_b = 1;
395
  v2q15_s = (v2q15) {0x2468, 0x7fff};
396
  v2q15_r = __builtin_mips_shll_s_ph (v2q15_a, i32_b);
397
  r = (int) v2q15_r;
398
  s = (int) v2q15_s;
399
  if (r != s)
400
    abort ();
401
 
402
  q31_a = 0x70000000;
403
  q31_s = 0x7fffffff;
404
  q31_r = __builtin_mips_shll_s_w (q31_a, 2);
405
  if (q31_r != q31_s)
406
    abort ();
407
 
408
  q31_a = 0x70000000;
409
  i32_b = 1;
410
  q31_s = 0x7fffffff;
411
  q31_r = __builtin_mips_shll_s_w (q31_a, i32_b);
412
  if (q31_r != q31_s)
413
    abort ();
414
 
415
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
416
  v4i8_s = (v4i8) {0x3c, 0xd, 0x15, 0x1e};
417
  v4i8_r = __builtin_mips_shrl_qb (v4i8_a, 2);
418
  r = (int) v4i8_r;
419
  s = (int) v4i8_s;
420
  if (r != s)
421
    abort ();
422
 
423
  v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
424
  i32_b = 1;
425
  v4i8_s = (v4i8) {0x79, 0x1a, 0x2b, 0x3c};
426
  v4i8_r = __builtin_mips_shrl_qb (v4i8_a, i32_b);
427
  r = (int) v4i8_r;
428
  s = (int) v4i8_s;
429
  if (r != s)
430
    abort ();
431
 
432
  v2q15_a = (v2q15) {0x1234, 0x5678};
433
  v2q15_s = (v2q15) {0x48d, 0x159e};
434
  v2q15_r = __builtin_mips_shra_ph (v2q15_a, 2);
435
  r = (int) v2q15_r;
436
  s = (int) v2q15_s;
437
  if (r != s)
438
    abort ();
439
 
440
  v2q15_a = (v2q15) {0x1234, 0x5678};
441
  i32_b = 1;
442
  v2q15_s = (v2q15) {0x91a, 0x2b3c};
443
  v2q15_r = __builtin_mips_shra_ph (v2q15_a, i32_b);
444
  r = (int) v2q15_r;
445
  s = (int) v2q15_s;
446
  if (r != s)
447
    abort ();
448
 
449
  v2q15_a = (v2q15) {0x1234, 0x5678};
450
  v2q15_s = (v2q15) {0x48d, 0x159e};
451
  v2q15_r = __builtin_mips_shra_r_ph (v2q15_a, 2);
452
  r = (int) v2q15_r;
453
  s = (int) v2q15_s;
454
  if (r != s)
455
    abort ();
456
 
457
  v2q15_a = (v2q15) {0x1234, 0x5678};
458
  i32_b = 3;
459
  v2q15_s = (v2q15) {0x247, 0xacf};
460
  v2q15_r = __builtin_mips_shra_r_ph (v2q15_a, i32_b);
461
  r = (int) v2q15_r;
462
  s = (int) v2q15_s;
463
  if (r != s)
464
    abort ();
465
 
466
  q31_a = 0x70000000;
467
  q31_s = 0x1c000000;
468
  q31_r = __builtin_mips_shra_r_w (q31_a, 2);
469
  if (q31_r != q31_s)
470
    abort ();
471
 
472
  q31_a = 0x70000004;
473
  i32_b = 3;
474
  q31_s = 0x0e000001;
475
  q31_r = __builtin_mips_shra_r_w (q31_a, i32_b);
476
  if (q31_r != q31_s)
477
    abort ();
478
 
479
  v4i8_a = (v4i8) {0x1, 0x2, 0x3, 0x4};
480
  v2q15_b = (v2q15) {0x6f89, 0x1111};
481
  if (little_endian)
482
    v2q15_s = (v2q15) {0xffff, 0x4444};
483
  else
484
    v2q15_s = (v2q15) {0x6f89, 0x2222};
485
  v2q15_r = __builtin_mips_muleu_s_ph_qbl (v4i8_a, v2q15_b);
486
  r = (int) v2q15_r;
487
  s = (int) v2q15_s;
488
  if (r != s)
489
    abort ();
490
 
491
  v4i8_a = (v4i8) {0x1, 0x2, 0x3, 0x4};
492
  v2q15_b = (v2q15) {0x6f89, 0x1111};
493
  if (little_endian)
494
    v2q15_s = (v2q15) {0x6f89, 0x2222};
495
  else
496
    v2q15_s = (v2q15) {0xffff, 0x4444};
497
  v2q15_r = __builtin_mips_muleu_s_ph_qbr (v4i8_a, v2q15_b);
498
  r = (int) v2q15_r;
499
  s = (int) v2q15_s;
500
  if (r != s)
501
    abort ();
502
 
503
  v2q15_a = (v2q15) {0x1234, 0x5678};
504
  v2q15_b = (v2q15) {0x6f89, 0x1111};
505
  v2q15_s = (v2q15) {0x0fdd, 0x0b87};
506
  v2q15_r = __builtin_mips_mulq_rs_ph (v2q15_a, v2q15_b);
507
  r = (int) v2q15_r;
508
  s = (int) v2q15_s;
509
  if (r != s)
510
    abort ();
511
 
512
  v2q15_a = (v2q15) {0x8000, 0x8000};
513
  v2q15_b = (v2q15) {0x8000, 0x8000};
514
  q31_s = 0x7fffffff;
515
  q31_r = __builtin_mips_muleq_s_w_phl (v2q15_a, v2q15_b);
516
  if (q31_r != q31_s)
517
    abort ();
518
 
519
  v2q15_a = (v2q15) {0x8000, 0x8000};
520
  v2q15_b = (v2q15) {0x8000, 0x8000};
521
  q31_s = 0x7fffffff;
522
  q31_r = __builtin_mips_muleq_s_w_phr (v2q15_a, v2q15_b);
523
  if (q31_r != q31_s)
524
    abort ();
525
 
526
#ifndef __mips64
527
  a64_a = 0x22221111;
528
  v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
529
  v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
530
  if (little_endian)
531
    a64_s = 0x22222f27;
532
  else
533
    a64_s = 0x222238d9;
534
  a64_r = __builtin_mips_dpau_h_qbl (a64_a, v4i8_b, v4i8_c);
535
  if (a64_r != a64_s)
536
    abort ();
537
 
538
  a64_a = 0x22221111;
539
  v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
540
  v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
541
  if (little_endian)
542
    a64_s = 0x222238d9;
543
  else
544
    a64_s = 0x22222f27;
545
  a64_r = __builtin_mips_dpau_h_qbr (a64_a, v4i8_b, v4i8_c);
546
  if (a64_r != a64_s)
547
    abort ();
548
 
549
  a64_a = 0x22221111;
550
  v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
551
  v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
552
  if (little_endian)
553
    a64_s = 0x2221f2fb;
554
  else
555
    a64_s = 0x2221e949;
556
  a64_r = __builtin_mips_dpsu_h_qbl (a64_a, v4i8_b, v4i8_c);
557
  if (a64_r != a64_s)
558
    abort ();
559
 
560
  a64_a = 0x22221111;
561
  v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
562
  v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
563
  if (little_endian)
564
    a64_s = 0x2221e949;
565
  else
566
    a64_s = 0x2221f2fb;
567
  a64_r = __builtin_mips_dpsu_h_qbr (a64_a, v4i8_b, v4i8_c);
568
  if (a64_r != a64_s)
569
    abort ();
570
 
571
  a64_a = 0x00001111;
572
  v2q15_b = (v2q15) {0x8000, 0x5678};
573
  v2q15_c = (v2q15) {0x8000, 0x1111};
574
  a64_s = 0x8b877d00;
575
  a64_r = __builtin_mips_dpaq_s_w_ph (a64_a, v2q15_b, v2q15_c);
576
  if (a64_r != a64_s)
577
    abort ();
578
 
579
  a64_a = 0x00001111;
580
  v2q15_b = (v2q15) {0x8000, 0x5678};
581
  v2q15_c = (v2q15) {0x8000, 0x1111};
582
  a64_s = 0xffffffff7478a522LL;
583
  a64_r = __builtin_mips_dpsq_s_w_ph (a64_a, v2q15_b, v2q15_c);
584
  if (a64_r != a64_s)
585
    abort ();
586
 
587
  a64_a = 0x00001111;
588
  v2q15_b = (v2q15) {0x8000, 0x5678};
589
  v2q15_c = (v2q15) {0x8000, 0x1111};
590
  if (little_endian)
591
    a64_s = 0xffffffff8b877d02LL;
592
  else
593
    a64_s = 0x7478a520;
594
  a64_r = __builtin_mips_mulsaq_s_w_ph (a64_a, v2q15_b, v2q15_c);
595
  if (a64_r != a64_s)
596
    abort ();
597
 
598
  a64_a = 0x00001111;
599
  q31_b = 0x80000000;
600
  q31_c = 0x80000000;
601
  a64_s = 0x7fffffffffffffffLL;
602
  a64_r = __builtin_mips_dpaq_sa_l_w (a64_a, q31_b, q31_c);
603
  if (a64_r != a64_s)
604
    abort ();
605
 
606
  a64_a = 0x00001111;
607
  q31_b = 0x80000000;
608
  q31_c = 0x80000000;
609
  a64_s = 0x8000000000001112LL;
610
  a64_r = __builtin_mips_dpsq_sa_l_w (a64_a, q31_b, q31_c);
611
  if (a64_r != a64_s)
612
    abort ();
613
 
614
  a64_a = 0x00001111;
615
  v2q15_b = (v2q15) {0x8000, 0x1};
616
  v2q15_c = (v2q15) {0x8000, 0x2};
617
  if (little_endian)
618
    a64_s = 0x1115;
619
  else
620
    a64_s = 0x80001110;
621
  a64_r = __builtin_mips_maq_s_w_phl (a64_a, v2q15_b, v2q15_c);
622
  if (a64_r != a64_s)
623
    abort ();
624
 
625
  a64_a = 0x00001111;
626
  v2q15_b = (v2q15) {0x8000, 0x1};
627
  v2q15_c = (v2q15) {0x8000, 0x2};
628
  if (little_endian)
629
    a64_s = 0x80001110;
630
  else
631
    a64_s = 0x1115;
632
  a64_r = __builtin_mips_maq_s_w_phr (a64_a, v2q15_b, v2q15_c);
633
  if (a64_r != a64_s)
634
    abort ();
635
 
636
  a64_a = 0x00001111;
637
  v2q15_b = (v2q15) {0x8000, 0x1};
638
  v2q15_c = (v2q15) {0x8000, 0x2};
639
  if (little_endian)
640
    a64_s = 0x1115;
641
  else
642
    a64_s = 0x7fffffff;
643
  a64_r = __builtin_mips_maq_sa_w_phl (a64_a, v2q15_b, v2q15_c);
644
  if (a64_r != a64_s)
645
    abort ();
646
 
647
  a64_a = 0x00001111;
648
  v2q15_b = (v2q15) {0x8000, 0x1};
649
  v2q15_c = (v2q15) {0x8000, 0x2};
650
  if (little_endian)
651
    a64_s = 0x7fffffff;
652
  else
653
    a64_s = 0x1115;
654
  a64_r = __builtin_mips_maq_sa_w_phr (a64_a, v2q15_b, v2q15_c);
655
  if (a64_r != a64_s)
656
    abort ();
657
#endif
658
 
659
  i32_a = 0x12345678;
660
  i32_s = 0x00001e6a;
661
  i32_r = __builtin_mips_bitrev (i32_a);
662
  if (i32_r != i32_s)
663
    abort ();
664
 
665
  i32_a = 0x00000208; // pos is 8, size is 4
666
  __builtin_mips_wrdsp (i32_a, 31);
667
  i32_a = 0x12345678;
668
  i32_b = 0x87654321;
669
  i32_s = 0x12345178;
670
  i32_r = __builtin_mips_insv (i32_a, i32_b);
671
  if (i32_r != i32_s)
672
    abort ();
673
 
674
  v4i8_s = (v4i8) {1, 1, 1, 1};
675
  v4i8_r = __builtin_mips_repl_qb (1);
676
  r = (int) v4i8_r;
677
  s = (int) v4i8_s;
678
  if (r != s)
679
    abort ();
680
 
681
  i32_a = 99;
682
  v4i8_s = (v4i8) {99, 99, 99, 99};
683
  v4i8_r = __builtin_mips_repl_qb (i32_a);
684
  r = (int) v4i8_r;
685
  s = (int) v4i8_s;
686
  if (r != s)
687
    abort ();
688
 
689
  v2q15_s = (v2q15) {30, 30};
690
  v2q15_r = __builtin_mips_repl_ph (30);
691
  r = (int) v2q15_r;
692
  s = (int) v2q15_s;
693
  if (r != s)
694
    abort ();
695
 
696
  i32_a = 0x5612;
697
  v2q15_s = (v2q15) {0x5612, 0x5612};
698
  v2q15_r = __builtin_mips_repl_ph (i32_a);
699
  r = (int) v2q15_r;
700
  s = (int) v2q15_s;
701
  if (r != s)
702
    abort ();
703
 
704
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
705
  v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
706
  if (little_endian)
707
    i32_s = 0x03000000;
708
  else
709
    i32_s = 0x0c000000;
710
  __builtin_mips_cmpu_eq_qb (v4i8_a, v4i8_b);
711
  i32_r = __builtin_mips_rddsp (16);
712
  if (i32_r != i32_s)
713
    abort ();
714
 
715
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
716
  v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
717
  if (little_endian)
718
    i32_s = 0x04000000;
719
  else
720
    i32_s = 0x02000000;
721
  __builtin_mips_cmpu_lt_qb (v4i8_a, v4i8_b);
722
  i32_r = __builtin_mips_rddsp (16);
723
  if (i32_r != i32_s)
724
    abort ();
725
 
726
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
727
  v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
728
  if (little_endian)
729
    i32_s = 0x07000000;
730
  else
731
    i32_s = 0x0e000000;
732
  __builtin_mips_cmpu_le_qb (v4i8_a, v4i8_b);
733
  i32_r = __builtin_mips_rddsp (16);
734
  if (i32_r != i32_s)
735
    abort ();
736
 
737
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
738
  v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
739
  if (little_endian)
740
    i32_s = 0x3;
741
  else
742
    i32_s = 0xc;
743
  i32_r=__builtin_mips_cmpgu_eq_qb (v4i8_a, v4i8_b);
744
  if (i32_r != i32_s)
745
    abort ();
746
 
747
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
748
  v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
749
  if (little_endian)
750
    i32_s = 0x4;
751
  else
752
    i32_s = 0x2;
753
  i32_r = __builtin_mips_cmpgu_lt_qb (v4i8_a, v4i8_b);
754
  if (i32_r != i32_s)
755
    abort ();
756
 
757
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
758
  v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
759
  if (little_endian)
760
    i32_s = 0x7;
761
  else
762
    i32_s = 0xe;
763
  i32_r = __builtin_mips_cmpgu_le_qb (v4i8_a, v4i8_b);
764
  if (i32_r != i32_s)
765
    abort ();
766
 
767
  __builtin_mips_wrdsp (0,31); // Clear all condition code bits.
768
  v2q15_a = (v2q15) {0x1234, 0x5678};
769
  v2q15_b = (v2q15) {0x1234, 0x7856};
770
  if (little_endian)
771
    i32_s = 0x01000000;
772
  else
773
    i32_s = 0x02000000;
774
  __builtin_mips_cmp_eq_ph (v2q15_a, v2q15_b);
775
  i32_r = __builtin_mips_rddsp (16);
776
  if (i32_r != i32_s)
777
    abort ();
778
 
779
  v2q15_a = (v2q15) {0x1234, 0x5678};
780
  v2q15_b = (v2q15) {0x1234, 0x7856};
781
  if (little_endian)
782
    i32_s = 0x02000000;
783
  else
784
    i32_s = 0x01000000;
785
  __builtin_mips_cmp_lt_ph (v2q15_a, v2q15_b);
786
  i32_r = __builtin_mips_rddsp (16);
787
  if (i32_r != i32_s)
788
    abort ();
789
 
790
  v2q15_a = (v2q15) {0x1234, 0x5678};
791
  v2q15_b = (v2q15) {0x1234, 0x7856};
792
  i32_s = 0x03000000;
793
  __builtin_mips_cmp_le_ph (v2q15_a, v2q15_b);
794
  i32_r = __builtin_mips_rddsp (16);
795
  if (i32_r != i32_s)
796
    abort ();
797
 
798
  i32_a = 0x0a000000; // cc: 0000 1010
799
  __builtin_mips_wrdsp (i32_a, 31);
800
  v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
801
  v4i8_b = (v4i8) {0x21, 0x43, 0x65, 0x87};
802
  if (little_endian)
803
    v4i8_s = (v4i8) {0x21, 0x34, 0x65, 0x78};
804
  else
805
    v4i8_s = (v4i8) {0x12, 0x43, 0x56, 0x87};
806
  v4i8_r = __builtin_mips_pick_qb (v4i8_a, v4i8_b);
807
  r = (int) v4i8_r;
808
  s = (int) v4i8_s;
809
  if (r != s)
810
    abort ();
811
 
812
  i32_a = 0x02000000; // cc: 0000 0010
813
  __builtin_mips_wrdsp (i32_a, 31);
814
  v2q15_a = (v2q15) {0x1234, 0x5678};
815
  v2q15_b = (v2q15) {0x2143, 0x6587};
816
  if (little_endian)
817
    v2q15_s = (v2q15) {0x2143, 0x5678};
818
  else
819
    v2q15_s = (v2q15) {0x1234, 0x6587};
820
  v2q15_r = __builtin_mips_pick_ph (v2q15_a, v2q15_b);
821
  r = (int) v2q15_r;
822
  s = (int) v2q15_s;
823
  if (r != s)
824
    abort ();
825
 
826
  v2q15_a = (v2q15) {0x1234, 0x5678};
827
  v2q15_b = (v2q15) {0x1234, 0x7856};
828
  if (little_endian)
829
    v2q15_s = (v2q15) {0x7856, 0x1234};
830
  else
831
    v2q15_s = (v2q15) {0x5678, 0x1234};
832
  v2q15_r = __builtin_mips_packrl_ph (v2q15_a, v2q15_b);
833
  r = (int) v2q15_r;
834
  s = (int) v2q15_s;
835
  if (r != s)
836
    abort ();
837
 
838
#ifndef __mips64
839
  a64_a = 0x1234567887654321LL;
840
  i32_s = 0x88765432;
841
  i32_r = __builtin_mips_extr_w (a64_a, 4);
842
  if (i32_r != i32_s)
843
    abort ();
844
 
845
  a64_a = 0x1234567887658321LL;
846
  i32_s = 0x56788766;
847
  i32_r = __builtin_mips_extr_r_w (a64_a, 16);
848
  if (i32_r != i32_s)
849
    abort ();
850
 
851
  a64_a = 0x12345677fffffff8LL;
852
  i32_s = 0x7fffffff;
853
  i32_r = __builtin_mips_extr_rs_w (a64_a, 4);
854
  if (i32_r != i32_s)
855
    abort ();
856
 
857
  a64_a = 0x1234567887658321LL;
858
  i32_s = 0x7fff;
859
  i32_r = __builtin_mips_extr_s_h (a64_a, 16);
860
  if (i32_r != i32_s)
861
    abort ();
862
 
863
  a64_a = 0x0000007887658321LL;
864
  i32_b = 24;
865
  i32_s = 0x7887;
866
  i32_r = __builtin_mips_extr_s_h (a64_a, i32_b);
867
  if (i32_r != i32_s)
868
    abort ();
869
 
870
  a64_a = 0x1234567887654321LL;
871
  i32_b = 4;
872
  i32_s = 0x88765432;
873
  i32_r = __builtin_mips_extr_w (a64_a, i32_b);
874
  if (i32_r != i32_s)
875
    abort ();
876
 
877
  a64_a = 0x1234567887658321LL;
878
  i32_b = 16;
879
  i32_s = 0x56788766;
880
  i32_r = __builtin_mips_extr_r_w (a64_a, i32_b);
881
  if (i32_r != i32_s)
882
    abort ();
883
 
884
  a64_a = 0x12345677fffffff8LL;
885
  i32_b = 4;
886
  i32_s = 0x7fffffff;
887
  i32_r = __builtin_mips_extr_rs_w (a64_a, i32_b);
888
  if (i32_r != i32_s)
889
    abort ();
890
 
891
  i32_a = 0x0000021f; // pos is 31
892
  __builtin_mips_wrdsp (i32_a, 31);
893
  a64_a = 0x1234567887654321LL;
894
  i32_s = 8;
895
  i32_r = __builtin_mips_extp (a64_a, 3); // extract 4 bits
896
  if (i32_r != i32_s)
897
    abort ();
898
 
899
  i32_a = 0x0000021f; // pos is 31
900
  __builtin_mips_wrdsp (i32_a, 31);
901
  a64_a = 0x1234567887654321LL;
902
  i32_b = 7; // size is 8. NOTE!! we should use 7
903
  i32_s = 0x87;
904
  i32_r = __builtin_mips_extp (a64_a, i32_b);
905
  if (i32_r != i32_s)
906
    abort ();
907
 
908
  i32_a = 0x0000021f; // pos is 31
909
  __builtin_mips_wrdsp (i32_a, 31);
910
  a64_a = 0x1234567887654321LL;
911
  i32_s = 8;
912
  i32_r = __builtin_mips_extpdp (a64_a, 3); // extract 4 bits
913
  if (i32_r != i32_s)
914
    abort ();
915
 
916
  i32_s = 0x0000021b; // pos is 27
917
  i32_r = __builtin_mips_rddsp (31);
918
  if (i32_r != i32_s)
919
    abort ();
920
 
921
  i32_a = 0x0000021f; // pos is 31
922
  __builtin_mips_wrdsp (i32_a, 31);
923
  a64_a = 0x1234567887654321LL;
924
  i32_b = 11; // size is 12. NOTE!!! We should use 11
925
  i32_s = 0x876;
926
  i32_r = __builtin_mips_extpdp (a64_a, i32_b);
927
  if (i32_r != i32_s)
928
    abort ();
929
 
930
  i32_s = 0x00000213; // pos is 19
931
  i32_r = __builtin_mips_rddsp (31);
932
  if (i32_r != i32_s)
933
    abort ();
934
 
935
  a64_a = 0x1234567887654321LL;
936
  a64_s = 0x0012345678876543LL;
937
  a64_r = __builtin_mips_shilo (a64_a, 8);
938
  if (a64_r != a64_s)
939
    abort ();
940
 
941
  a64_a = 0x1234567887654321LL;
942
  i32_b = -16;
943
  a64_s = 0x5678876543210000LL;
944
  a64_r = __builtin_mips_shilo (a64_a, i32_b);
945
  if (a64_r != a64_s)
946
    abort ();
947
 
948
  i32_a = 0x0;
949
  __builtin_mips_wrdsp (i32_a, 31);
950
  a64_a = 0x1234567887654321LL;
951
  i32_b = 0x11112222;
952
  a64_s = 0x8765432111112222LL;
953
  a64_r = __builtin_mips_mthlip (a64_a, i32_b);
954
  if (a64_r != a64_s)
955
    abort ();
956
  i32_s = 32;
957
  i32_r = __builtin_mips_rddsp (31);
958
  if (i32_r != i32_s)
959
    abort ();
960
#endif
961
 
962
  i32_a = 0x1357a468;
963
  __builtin_mips_wrdsp (i32_a, 63);
964
  i32_s = 0x03572428;
965
  i32_r = __builtin_mips_rddsp (63);
966
  if (i32_r != i32_s)
967
    abort ();
968
 
969
  ptr_a = &array;
970
  i32_b = 37;
971
  i32_s = 37;
972
  i32_r = __builtin_mips_lbux (ptr_a, i32_b);
973
  if (i32_r != i32_s)
974
    abort ();
975
 
976
  ptr_a = &array;
977
  i32_b = 38;
978
  if (little_endian)
979
    i32_s = 0x2726;
980
  else
981
    i32_s = 0x2627;
982
  i32_r = __builtin_mips_lhx (ptr_a, i32_b);
983
  if (i32_r != i32_s)
984
    abort ();
985
 
986
  ptr_a = &array;
987
  i32_b = 40;
988
  if (little_endian)
989
    i32_s = 0x2b2a2928;
990
  else
991
    i32_s = 0x28292a2b;
992
  i32_r = __builtin_mips_lwx (ptr_a, i32_b);
993
  if (i32_r != i32_s)
994
    abort ();
995
 
996
  i32_a = 0x00000220; // pos is 32, size is 4
997
  __builtin_mips_wrdsp (i32_a, 63);
998
  i32_s = 1;
999
  i32_r = __builtin_mips_bposge32 ();
1000
  if (i32_r != i32_s)
1001
    abort ();
1002
 
1003
#ifndef __mips64
1004
  a64_a = 0x12345678;
1005
  i32_b = 0x80000000;
1006
  i32_c = 0x11112222;
1007
  a64_s = 0xF7776EEF12345678LL;
1008
  a64_r = __builtin_mips_madd (a64_a, i32_b, i32_c);
1009
  if (a64_r != a64_s)
1010
    abort ();
1011
#endif
1012
 
1013
#ifndef __mips64
1014
  a64_a = 0x12345678;
1015
  ui32_b = 0x80000000;
1016
  ui32_c = 0x11112222;
1017
  a64_s = 0x0888911112345678LL;
1018
  a64_r = __builtin_mips_maddu (a64_a, ui32_b, ui32_c);
1019
  if (a64_r != a64_s)
1020
    abort ();
1021
#endif
1022
 
1023
#ifndef __mips64
1024
  a64_a = 0x12345678;
1025
  i32_b = 0x80000000;
1026
  i32_c = 0x11112222;
1027
  a64_s = 0x0888911112345678LL;
1028
  a64_r = __builtin_mips_msub (a64_a, i32_b, i32_c);
1029
  if (a64_r != a64_s)
1030
    abort ();
1031
#endif
1032
 
1033
#ifndef __mips64
1034
  a64_a = 0x12345678;
1035
  ui32_b = 0x80000000;
1036
  ui32_c = 0x11112222;
1037
  a64_s = 0xF7776EEF12345678LL;
1038
  a64_r = __builtin_mips_msubu (a64_a, ui32_b, ui32_c);
1039
  if (a64_r != a64_s)
1040
    abort ();
1041
#endif
1042
 
1043
#ifndef __mips64
1044
  i32_a = 0x80000000;
1045
  i32_b = 0x11112222;
1046
  a64_s = 0xF7776EEF00000000LL;
1047
  a64_r = __builtin_mips_mult (i32_a, i32_b);
1048
  if (a64_r != a64_s)
1049
    abort ();
1050
#endif
1051
 
1052
#ifndef __mips64
1053
  ui32_a = 0x80000000;
1054
  ui32_b = 0x11112222;
1055
  a64_s = 0x888911100000000LL;
1056
  a64_r = __builtin_mips_multu (ui32_a, ui32_b);
1057
  if (a64_r != a64_s)
1058
    abort ();
1059
#endif
1060
}
1061
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.