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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [powerpc/] [darwin64-abi.c] - Blame information for rev 696

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 691 jeremybenn
/* Darwin 64-bit ABI testing */
2
/* { dg-do run { target { powerpc*-*-darwin* && lp64 } } } */
3
/* { dg-options "-std=c99 -maltivec" } */
4
 
5
/* Set this if 8-byte structs are being passed as integers.  */
6
/* #define STRUCT8INT */
7
 
8
#include <stdarg.h>
9
#include <stdio.h>
10
#include <complex.h>
11
#include <altivec.h>
12
 
13
extern void abort (void);
14
 
15
struct s3c { char ch[3]; };
16
struct ssc { short sh; char ch; };
17
struct sif { int i; float f; };
18
struct sfi { float f; int i; };
19
struct sfii { float f; int i; int j; };
20
struct sfil { float f; int i; long l; };
21
struct sfif { float f; int i; float g; };
22
struct sfill { float f; int i; long l, m; };
23
struct sfl { float f; long l; };
24
struct sfldl { float f; long l1; double d; long l2; };
25
struct sfpp { float f; char *p1; char *p2; };
26
 
27
 
28
struct sff { float f1, f2; };
29
struct sfff { float f1, f2, f3; };
30
struct sffff { float f1, f2, f3, f4; };
31
 
32
struct sfD { float f; long double D; };
33
 
34
struct sidi { int i1; double d; int i2; };
35
 
36
struct sdd { double d1, d2; };
37
struct sddd { double d1, d2, d3; };
38
struct sdddd { double d1, d2, d3, d4; };
39
struct s3d { double d[3]; };
40
 
41
struct vr { union { int ielts[4]; float felts[4]; } elts; };
42
 
43
typedef struct
44
{
45
  unsigned long gprs[32];
46
  double fprs[32];
47
  struct vr vrs[32];
48
  unsigned char stack[1000];
49
} reg_parms_t;
50
 
51
reg_parms_t gparms;
52
 
53
#define TESTFN(RET,NAME,PARAMS) \
54
RET NAME PARAMS;  \
55
RET dummy_ ## NAME PARAMS  \
56
{  \
57
  __asm__("b end_" #NAME "\n_" # NAME ":\n\t" SAVE_STATE "b _dummy_" # NAME "\n\tend_" #NAME ":\n\n" ); \
58
}
59
 
60
#define SAVE_STATE \
61
SAVE_GPR(0)  \
62
SAVE_GPR(1)  \
63
SAVE_GPR(3)  \
64
SAVE_GPR(4)  \
65
SAVE_GPR(5)  \
66
SAVE_GPR(6)  \
67
SAVE_GPR(7)  \
68
SAVE_GPR(8)  \
69
SAVE_GPR(9)  \
70
SAVE_GPR(10)  \
71
SAVE_FPR(0)  \
72
SAVE_FPR(1)  \
73
SAVE_FPR(2)  \
74
SAVE_FPR(3)  \
75
SAVE_FPR(4)  \
76
SAVE_FPR(5)  \
77
SAVE_FPR(6)  \
78
SAVE_FPR(7)  \
79
SAVE_FPR(8)  \
80
SAVE_FPR(9)  \
81
SAVE_FPR(10)  \
82
SAVE_FPR(12)  \
83
SAVE_FPR(13)  \
84
SAVE_VR(0)  \
85
SAVE_VR(1)  \
86
SAVE_VR(2)  \
87
SAVE_VR(3)  \
88
SAVE_VR(4)  \
89
SAVE_STACK(112)  \
90
SAVE_STACK(120)  \
91
SAVE_STACK(128)  \
92
SAVE_STACK(136)  \
93
SAVE_STACK(144)  \
94
 
95
 
96
#ifdef __LP64__
97
#define SAVE_GPR(N) "std r" #N "," #N "*8(r25)\n\t"
98
#define SAVE_FPR(N) "stfd f" #N "," #N "*8+256(r25)\n\t"
99
#define SAVE_VR(N) "li r26," #N "*16+512\n\tstvx v" #N ",r25,r26\n\t"
100
#define SAVE_STACK(N) "ld r26," #N "(r1)\n\tstd r26," #N "+1024(r25)\n\t"
101
#else
102
#define SAVE_GPR(N) "stw r" #N "," #N "*4(r25)\n\t"
103
#define SAVE_FPR(N) "stfd f" #N "," #N "*8+128(r25)\n\t"
104
#define SAVE_VR(N)
105
#define SAVE_STACK(N)
106
#endif
107
 
108
TESTFN(void, fffi, (float x, float y, int z))
109
 
110
#define clearall \
111
__asm__ volatile ( \
112
"\n\t" \
113
"li r3,0x333\n\t" \
114
"li r4,0x444 \n\t" \
115
"li r5,0x555\n\t" \
116
"li r6,0x666\n\t" \
117
"li r7,0x777\n\t" \
118
"li r8,0x888\n\t" \
119
"li r9,0x999\n\t" \
120
"li r10,0xaaa\n\t" \
121
"fsub f0,f0,f0\n\t" \
122
"fsub f1,f1,f1\n\t" \
123
"fsub f2,f2,f2\n\t" \
124
"fsub f3,f3,f3\n\t" \
125
"fsub f4,f4,f4\n\t" \
126
"fsub f5,f5,f5\n\t" \
127
"fsub f6,f6,f6\n\t" \
128
"fsub f7,f7,f7\n\t" \
129
"vsubuwm v0,v0,v0\n\t" \
130
"vsubuwm v1,v1,v1\n\t" \
131
"vsubuwm v2,v2,v2\n\t" \
132
"vsubuwm v3,v3,v3\n\t" \
133
"vsubuwm v4,v4,v4\n\t" \
134
: : : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \
135
      "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
136
      "v0", "v1", "v2", "v3", "v4" );
137
 
138
TESTFN(void, fii, (int a, int b))
139
TESTFN(void, fid, (int i, double d))
140
TESTFN(void, fc, (complex float z))
141
TESTFN(void, fffff, (float f1, float f2, float f3, float f4))
142
TESTFN(void, fdddd, (double d1, double d2, double d3, double d4))
143
TESTFN(void, f_s3c_ssc, (struct s3c s1, struct ssc s2))
144
TESTFN(void, f_sff, (struct sff s))
145
TESTFN(void, f_sfff, (struct sfff s))
146
TESTFN(void, f_sffff, (struct sffff s))
147
TESTFN(void, f_sdd, (struct sdd s))
148
TESTFN(void, f_sddd, (struct sddd s))
149
TESTFN(void, f_sdddd, (struct sdddd s))
150
TESTFN(void, f_s3d, (struct s3d s))
151
TESTFN(void, f_sif, (int i, struct sif s))
152
TESTFN(void, fi_sif, (int i, struct sif s))
153
TESTFN(void, fi_sif_i, (int i, struct sif s, int j))
154
TESTFN(void, f_sfi, (int i, struct sfi s))
155
TESTFN(void, fi_sfi, (int i, struct sfi s))
156
TESTFN(void, fi_sfi_if, (int i, struct sfi s, int j, float f))
157
TESTFN(void, fi_sfill, (int i, struct sfill s))
158
TESTFN(void, fi_sfill_i, (int i, struct sfill s, int j))
159
TESTFN(void, f_sfl, (struct sfl s))
160
TESTFN(void, f_sfl_sfl_sfl_sfl_sfl, (struct sfl s1, struct sfl s2, struct sfl s3, struct sfl s4, struct sfl s5))
161
TESTFN(void, fi_sff, (int i, struct sff s))
162
TESTFN(void, f_sfpp_p, (struct sfpp s, char *p))
163
TESTFN(void, f_sfldl, (struct sfldl s))
164
TESTFN(void, fi_sff_i, (int i, struct sff s, int j))
165
TESTFN(void, f_sfD_sfD_sfD_sfD_sfD, (struct sfD s1, struct sfD s2, struct sfD s3, struct sfD s4, struct sfD s5))
166
TESTFN(void, fi_sidi, (int i, struct sidi s))
167
TESTFN(void, fifvf_sfi_dots, (int i, float f, vector float vf, struct sfi s, ...))
168
TESTFN(void, fifvf_sfii_dots, (int i, float f, vector float vf, struct sfii s, ...))
169
 
170
int numerrs;
171
 
172
#ifndef SKIP
173
static __attribute__ ((noinline)) void
174
check_gpr (int line, int reg, long expected)
175
{
176
  if (gparms.gprs[reg] != expected)
177
    {
178
      printf("%d: r%d is 0x%lx, expected 0x%lx\n",
179
             line, reg, gparms.gprs[reg], expected);
180
      ++numerrs;
181
    }
182
}
183
 
184
static __attribute__ ((noinline)) void
185
check_gpr_double (int line, int reg, double expected)
186
{
187
  double tmp = *((double *) &(gparms.gprs[reg]));
188
  if (tmp != expected)
189
    {
190
      printf("%d: r%d is %f (0x%llx), expected %f (0x%llx)\n",
191
             line, reg,
192
             tmp, *((long long *) &tmp),
193
             expected, *((long long *) &expected));
194
      ++numerrs;
195
    }
196
}
197
 
198
static __attribute__ ((noinline)) void
199
check_gpr_float_pair (int line, int reg, float exp1, float exp2)
200
{
201
  float tmp1 = *((float *) &(gparms.gprs[reg]));
202
  float tmp2 = *(((float *) &(gparms.gprs[reg])) + 1);
203
 
204
  if (tmp1 != exp1 || tmp2 != exp2)
205
    {
206
      printf("%d: r%d is %f / %f (0x%llx), expected %f (0x%x) / %f (0x%x)\n",
207
             line, reg,
208
             tmp1, tmp2, *((long long *) &(gparms.gprs[reg])),
209
             exp1, *((int *) &exp1),
210
             exp2, *((int *) &exp2));
211
      ++numerrs;
212
    }
213
}
214
 
215
static __attribute__ ((noinline)) void
216
check_fpr (int line, int reg, double expected)
217
{
218
  if (gparms.fprs[reg] != expected)
219
    {
220
      printf("%d: f%d is %f (0x%llx), expected %f (0x%llx)\n",
221
             line, reg,
222
             gparms.fprs[reg], *((long long *) &(gparms.fprs[reg])),
223
             expected, *((long long *) &expected));
224
      ++numerrs;
225
    }
226
}
227
 
228
static __attribute__ ((noinline)) void
229
check_vr_int (int reg, int n1, int n2, int n3, int n4)
230
{
231
  if (gparms.vrs[reg].elts.ielts[0] != n1
232
      || gparms.vrs[reg].elts.ielts[1] != n2
233
      || gparms.vrs[reg].elts.ielts[2] != n3
234
      || gparms.vrs[reg].elts.ielts[3] != n4)
235
    {
236
      printf("v%d is   (%d,%d,%d,%d) (0x%x,0x%x,0x%x,0x%x),\n"
237
             " expected (%d,%d,%d,%d) (0x%x,0x%x,0x%x,0x%x)\n",
238
             reg,
239
             gparms.vrs[reg].elts.ielts[0],
240
             gparms.vrs[reg].elts.ielts[1],
241
             gparms.vrs[reg].elts.ielts[2],
242
             gparms.vrs[reg].elts.ielts[3],
243
             gparms.vrs[reg].elts.ielts[0],
244
             gparms.vrs[reg].elts.ielts[1],
245
             gparms.vrs[reg].elts.ielts[2],
246
             gparms.vrs[reg].elts.ielts[3],
247
             n1, n2, n3, n4,
248
             n1, n2, n3, n4
249
             );
250
      ++numerrs;
251
    }
252
}
253
 
254
static __attribute__ ((noinline)) void
255
check_vr_float (int reg, float f1, float f2, float f3, float f4)
256
{
257
  if (gparms.vrs[reg].elts.felts[0] != f1
258
      || gparms.vrs[reg].elts.felts[1] != f2
259
      || gparms.vrs[reg].elts.felts[2] != f3
260
      || gparms.vrs[reg].elts.felts[3] != f4)
261
    {
262
      printf("v%d is    (%f,%f,%f,%f) (0x%x,0x%x,0x%x,0x%x),\n"
263
             " expected (%f,%f,%f,%f) (0x%x,0x%x,0x%x,0x%x)\n",
264
             reg,
265
             gparms.vrs[reg].elts.felts[0],
266
             gparms.vrs[reg].elts.felts[1],
267
             gparms.vrs[reg].elts.felts[2],
268
             gparms.vrs[reg].elts.felts[3],
269
             gparms.vrs[reg].elts.ielts[0],
270
             gparms.vrs[reg].elts.ielts[1],
271
             gparms.vrs[reg].elts.ielts[2],
272
             gparms.vrs[reg].elts.ielts[3],
273
             f1, f2, f3, f4,
274
             *((int *) &f1), *((int *) &f2), *((int *) &f3), *((int *) &f4)
275
             );
276
      ++numerrs;
277
    }
278
}
279
#endif
280
 
281
int main (void)
282
{
283
  complex float cpx = 4.45f + I * 4.92f;
284
  struct s3c s3c_loc;
285
  struct ssc ssc_loc;
286
  struct sfi sfi_loc;
287
  struct sfi sfi_loc2 = { 6.3f, 0x1108 };
288
  struct sfii sfii_loc;
289
  struct sfii sfii_loc2 = { 6.9f, 0x1110, 0x6372 };
290
  vector float vf_loc = (vector float) { 7.1f, 7.2f, 7.3f, 7.4f };
291
  vector int vi_loc = (vector int) { 0xabc, 0xdef, 0xfed, 0xcba };
292
 
293
  __asm__ ("mr r25,%0" : : "b" (&gparms) );
294
 
295
  clearall;
296
  fii(1, 2);
297
  check_gpr (__LINE__, 3, 1);
298
  check_gpr (__LINE__, 4, 2);
299
 
300
  clearall;
301
  fid(45, 4.5);
302
  check_gpr (__LINE__, 3, 45);
303
  check_fpr (__LINE__, 1, 4.5);
304
 
305
  clearall;
306
  fffi(1.2f, 3.4f, 456);
307
  check_fpr(__LINE__, 1, 1.2f);
308
 
309
  clearall;
310
  fc(cpx);
311
  /* Two floats are packed into r3 */
312
  check_gpr_float_pair (__LINE__, 3, 4.45f, 4.92f);
313
 
314
  clearall;
315
  fffff (4.1f, 4.2f, 4.3f, 4.4f);
316
  check_fpr (__LINE__, 1, 4.1f);
317
  check_fpr (__LINE__, 4, 4.4f);
318
 
319
  clearall;
320
  fdddd (4.1, 4.2, 4.3, 4.4);
321
  check_fpr (__LINE__, 1, 4.1);
322
  check_fpr (__LINE__, 4, 4.4);
323
 
324
  {
325
    struct sff sff_loc = { 2.1f, 2.2f };
326
    clearall;
327
    f_sff(sff_loc);
328
#ifdef STRUCT8INT
329
    check_gpr_float_pair (__LINE__, 3, 2.1f, 2.2f);
330
#else
331
    check_fpr(__LINE__, 1, 2.1f);
332
    check_fpr(__LINE__, 2, 2.2f);
333
#endif
334
    clearall;
335
    fi_sff_i(65, sff_loc, 66);
336
    check_gpr(__LINE__, 3, 65);
337
#ifdef STRUCT8INT
338
    check_gpr_float_pair (__LINE__, 4, 2.1f, 2.2f);
339
#else
340
    check_fpr(__LINE__, 1, 2.1f);
341
    check_fpr(__LINE__, 2, 2.2f);
342
#endif
343
    check_gpr(__LINE__, 5, 66);
344
  }
345
 
346
  {
347
    struct sfff sfff_loc = { 3.1f, 3.2f, 3.3f };
348
    clearall;
349
    f_sfff(sfff_loc);
350
    check_fpr(__LINE__, 1, 3.1f);
351
    check_fpr(__LINE__, 2, 3.2f);
352
    check_fpr(__LINE__, 3, 3.3f);
353
    clearall;
354
    f_sfff(sfff_loc);
355
    check_fpr(__LINE__, 1, 3.1f);
356
    check_fpr(__LINE__, 2, 3.2f);
357
    check_fpr(__LINE__, 3, 3.3f);
358
  }
359
 
360
  {
361
    struct sffff sffff_loc = { 4.1f, 4.2f, 4.3f, 4.4f };
362
    clearall;
363
    f_sffff(sffff_loc);
364
    check_gpr_float_pair(__LINE__, 3, 4.1f, 4.2f);
365
    check_gpr_float_pair(__LINE__, 4, 4.3f, 4.4f);
366
  }
367
 
368
  {
369
    struct sdd sdd_loc = { 2.1, 2.2 };
370
    clearall;
371
    f_sdd(sdd_loc);
372
    /* 16-byte struct is passed in two GPRs.  */
373
    check_gpr_double(__LINE__, 3, 2.1);
374
    check_gpr_double(__LINE__, 4, 2.2);
375
  }
376
 
377
  {
378
    struct sddd sddd_loc = { 3.1, 3.2, 3.3 };
379
    clearall;
380
    f_sddd(sddd_loc);
381
    check_fpr(__LINE__, 1, 3.1);
382
    check_fpr(__LINE__, 2, 3.2);
383
    check_fpr(__LINE__, 3, 3.3);
384
  }
385
 
386
  {
387
    struct sdddd sdddd_loc = { 4.1, 4.2, 4.3, 4.4 };
388
    clearall;
389
    f_sdddd(sdddd_loc);
390
    check_fpr(__LINE__, 1, 4.1);
391
    check_fpr(__LINE__, 2, 4.2);
392
    check_fpr(__LINE__, 3, 4.3);
393
    check_fpr(__LINE__, 4, 4.4);
394
  }
395
 
396
  {
397
    struct s3d s3d_loc = { 89.92, 4.89, 90.9 };
398
    clearall;
399
    f_s3d(s3d_loc);
400
    check_gpr_double (__LINE__, 3, 89.92);
401
    check_gpr_double (__LINE__, 4, 4.89);
402
    check_gpr_double (__LINE__, 5, 90.9);
403
  }
404
 
405
  {
406
    s3c_loc.ch[0] = 'A';
407
    s3c_loc.ch[1] = 'B';
408
    s3c_loc.ch[2] = 'C';
409
    ssc_loc.sh = 0x1234;
410
    ssc_loc.ch = 'D';
411
    clearall;
412
    f_s3c_ssc(s3c_loc, ssc_loc);
413
  }
414
 
415
  {
416
    struct sif sif_loc_n = { 334, 4.3f };
417
    long floatcast;
418
    floatcast = *((int *) &(sif_loc_n.f));
419
    clearall;
420
    fi_sif(29, sif_loc_n);
421
    check_gpr (__LINE__, 3, 29);
422
    check_gpr (__LINE__, 4, 334LL << 32 | floatcast);
423
#ifdef STRUCT8INT
424
#else
425
    check_fpr (__LINE__, 1, 4.3f);
426
#endif
427
    clearall;
428
    fi_sif_i(31, sif_loc_n, 33);
429
    check_gpr (__LINE__, 3, 31);
430
    check_gpr (__LINE__, 4, 334LL << 32 | floatcast);
431
#ifdef STRUCT8INT
432
#else
433
    check_fpr (__LINE__, 1, 4.3f);
434
#endif
435
    check_gpr (__LINE__, 5, 33);
436
  }
437
 
438
  {
439
    struct sfi sfi_loc_n = { 4.145f, 335 };
440
    clearall;
441
    fi_sfi(29, sfi_loc_n);
442
    check_gpr (__LINE__, 3, 29);
443
#ifdef STRUCT8INT
444
    check_gpr (__LINE__, 4, 0x4084a3d70000014fLL);
445
#else
446
    check_fpr (__LINE__, 1, 4.145f);
447
    check_gpr (__LINE__, 4, 335);
448
#endif
449
  }
450
 
451
  {
452
    struct sfi sfi_loc_n = { 4.145f, 335 };
453
    clearall;
454
    fi_sfi_if (29, sfi_loc_n, 65, 9.8f);
455
    check_gpr (__LINE__, 3, 29);
456
#ifdef STRUCT8INT
457
    check_gpr (__LINE__, 4, 0x4084a3d70000014fLL);
458
#else
459
    check_fpr (__LINE__, 1, 4.145f);
460
    check_gpr (__LINE__, 4, 335);
461
#endif
462
    check_gpr (__LINE__, 5, 65);
463
    check_gpr (__LINE__, 6, 0x666);
464
#ifdef STRUCT8INT
465
    check_fpr (__LINE__, 1, 9.8f);
466
#else
467
    check_fpr (__LINE__, 2, 9.8f);
468
#endif
469
    check_gpr (__LINE__, 7, 0x777);
470
  }
471
 
472
  {
473
    struct sfill sfill_loc_n = { 4.145f, 335, 10000000000LL, 20000000000LL };
474
    clearall;
475
    fi_sfill(29, sfill_loc_n);
476
    check_gpr (__LINE__, 3, 29);
477
    check_fpr (__LINE__, 1, 4.145f);
478
    check_gpr (__LINE__, 4, 335);
479
    check_gpr (__LINE__, 5, 10000000000LL);
480
    check_gpr (__LINE__, 6, 20000000000LL);
481
  }
482
 
483
  {
484
    struct sfl sfl_loc_n = { 4.145f, 335 };
485
    clearall;
486
    f_sfl (sfl_loc_n);
487
    check_gpr_float_pair (__LINE__, 3, 4.145f, 0.0f);
488
    check_gpr (__LINE__, 4, 335);
489
    check_gpr (__LINE__, 5, 0x555);
490
    clearall;
491
    f_sfl_sfl_sfl_sfl_sfl (sfl_loc_n, sfl_loc_n, sfl_loc_n, sfl_loc_n, sfl_loc_n);
492
    check_gpr_float_pair (__LINE__, 3, 4.145f, 0.0f);
493
    check_gpr (__LINE__, 4, 335);
494
    check_gpr (__LINE__, 6, 335);
495
    check_gpr (__LINE__, 8, 335);
496
    check_gpr (__LINE__, 10, 335);
497
  }
498
 
499
  {
500
    struct sfldl sfldl_loc_n = { 4.145f, 335, 3.3, 336 };
501
    clearall;
502
    f_sfldl (sfldl_loc_n);
503
    check_fpr (__LINE__, 1, 4.145f);
504
    check_gpr (__LINE__, 4, 335);
505
    check_fpr (__LINE__, 2, 3.3);
506
    check_gpr (__LINE__, 6, 336);
507
  }
508
 
509
  {
510
    char *p1 = "abc";
511
    char *p2 = "def";
512
    char *p3 = "ghi";
513
    struct sfpp sfpp_loc_n = { 4.145f, p1, p2 };
514
    clearall;
515
    f_sfpp_p(sfpp_loc_n, p3);
516
    check_fpr (__LINE__, 1, 4.145f);
517
    check_gpr (__LINE__, 4, (long) p1);
518
    check_gpr (__LINE__, 5, (long) p2);
519
    check_gpr (__LINE__, 6, (long) p3);
520
  }
521
 
522
  {
523
    struct sff sff_loc_n = { 4.145f, 335.3f };
524
    clearall;
525
    fi_sff(29, sff_loc_n);
526
    check_gpr (__LINE__, 3, 29);
527
#ifdef STRUCT8INT
528
    check_gpr_float_pair (__LINE__, 4, 4.145f, 335.3f);
529
#else
530
    check_fpr (__LINE__, 1, 4.145f);
531
    check_fpr (__LINE__, 2, 335.3f);
532
#endif
533
  }
534
 
535
  {
536
    struct sfD sfD_loc_n = { 4.145f, 335.335 };
537
    clearall;
538
    f_sfD_sfD_sfD_sfD_sfD (sfD_loc_n, sfD_loc_n, sfD_loc_n, sfD_loc_n, sfD_loc_n);
539
    check_fpr (__LINE__, 1, 4.145f);
540
    check_fpr (__LINE__, 2, 335.335);
541
    check_fpr (__LINE__, 4, 4.145f);
542
    check_fpr (__LINE__, 5, 335.335);
543
    check_fpr (__LINE__, 7, 4.145f);
544
    check_fpr (__LINE__, 10, 4.145f);
545
    check_fpr (__LINE__, 13, 4.145f);
546
  }
547
 
548
  {
549
    struct sidi sidi_loc_n = { 257, 4.14515, 258 };
550
    clearall;
551
    fi_sidi(16, sidi_loc_n);
552
    check_gpr (__LINE__, 3, 16);
553
    check_fpr (__LINE__, 1, 4.14515);
554
    check_gpr (__LINE__, 4, 257LL << 32);
555
    check_gpr (__LINE__, 5, 0x555);
556
    check_gpr (__LINE__, 6, 258LL << 32);
557
  }
558
 
559
  sfi_loc.f = 5.2f;
560
  sfi_loc.i = 98;
561
  clearall;
562
  fifvf_sfi_dots(41, 4.3f, vf_loc, sfi_loc, 4.63f, vi_loc, sfi_loc2);
563
  __asm__ ("\n");
564
  check_gpr (__LINE__, 3, 41);
565
  check_fpr (__LINE__, 1, 4.3f); /* float skips r4 */
566
  check_vr_float(2, 7.1f, 7.2f, 7.3f, 7.4f); /* vector skips r5/r6 */
567
#ifdef STRUCT8INT
568
  check_gpr (__LINE__, 7, 0x40a6666600000062);
569
#else
570
  check_fpr (__LINE__, 2, sfi_loc.f);
571
  check_gpr (__LINE__, 7, sfi_loc.i);
572
#endif
573
  /* start of varying parameters */
574
#ifdef STRUCT8INT
575
  check_fpr (__LINE__, 2, 4.63f);
576
#else
577
  check_fpr (__LINE__, 3, 4.63f);
578
#endif
579
  check_gpr_double (__LINE__, 8, 4.63f);
580
  /* vector takes up r9/r10 */
581
  /* sfi_loc2 on stack */
582
 
583
  clearall;
584
  sfii_loc.f = 5.2f;
585
  sfii_loc.i = 98;
586
  sfii_loc.j = 777;
587
  clearall;
588
  fifvf_sfii_dots(41, 4.3f, vf_loc, sfii_loc, 4.63f, vi_loc, sfii_loc2);
589
  __asm__ ("\n");
590
  check_gpr (__LINE__, 3, 41);
591
  check_fpr (__LINE__, 1, 4.3f); /* float skips r4 */
592
  check_vr_float(2, 7.1f, 7.2f, 7.3f, 7.4f); /* vector skips r5/r6 */
593
  check_fpr (__LINE__, 2, sfii_loc.f);
594
  check_gpr (__LINE__, 7, sfii_loc.i);
595
  check_gpr (__LINE__, 8, ((long)sfii_loc.j) << 32);
596
  /* start of varying parameters */
597
  check_fpr (__LINE__, 3, 4.63f);
598
  check_gpr_double (__LINE__, 9, 4.63f);
599
  /* vector takes up r10/stack (?) */
600
  /* sfii_loc2 on stack */
601
 
602
  if (numerrs > 0)
603
    abort ();
604
  return 0;
605
}
606
 
607
int dumpall()
608
{
609
  int i;
610
 
611
  printf("\n");
612
  for (i = 3; i <= 10; ++i)
613
#ifdef __LP64__
614
    printf("r%d=0x%16.16lx ", i, gparms.gprs[i]);
615
#else
616
    printf("r%d=0x%8.8x ", i, gparms.gprs[i]);
617
#endif
618
  printf("\n");
619
  for (i = 1; i <= 13; ++i)
620
    printf("f%d=%8.8f ", i, gparms.fprs[i]);
621
  printf("\n");
622
  for (i = 0; i <= 4; ++i)
623
    printf("v%d=(%x,%x,%x,%x)  ", i,
624
           gparms.vrs[i].elts.ielts[0], gparms.vrs[i].elts.ielts[1],
625
           gparms.vrs[i].elts.ielts[2], gparms.vrs[i].elts.ielts[3]);
626
  printf("\n");
627
  for (i = 112; i < 152; ++i)
628
    {
629
      if (i > 112 && i % 8 == 0)
630
        printf(" | ");
631
      printf("%02x", gparms.stack[i]);
632
    }
633
  printf("\n");
634
}

powered by: WebSVN 2.1.0

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