PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / ia64 / pr52657.c
blob8db5881985e00241fdf5d4c3a1eecb4241f0e354
1 /* { dg-do compile } */
2 /* { dg-options "-O" } */
4 typedef unsigned long int mp_limb_t;
6 typedef struct
8 int _mp_alloc;
9 int _mp_size;
10 mp_limb_t *_mp_d;
11 } __mpz_struct;
13 typedef __mpz_struct mpz_t[1];
14 typedef mp_limb_t * mp_ptr;
15 typedef const mp_limb_t * mp_srcptr;
16 typedef long int mp_size_t;
18 extern mp_limb_t __gmpn_addmul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
20 void
21 __gmpn_redc_2 (mp_ptr rp, mp_ptr up, mp_srcptr mp, mp_size_t n, mp_srcptr mip)
23 mp_limb_t q[2];
24 mp_size_t j;
25 mp_limb_t upn;
27 for (j = n - 2; j >= 0; j -= 2)
29 mp_limb_t _ph, _pl;
30 __asm__ ("xma.hu %0 = %3, %5, f0\n\t"
31 "xma.l %1 = %3, %5, f0\n\t"
32 ";;\n\t"
33 "xma.l %0 = %3, %4, %0\n\t"
34 ";;\n\t"
35 "xma.l %0 = %2, %5, %0"
36 : "=&f" (q[1]), "=&f" (q[0])
37 : "f" (mip[1]), "f" (mip[0]), "f" (up[1]), "f" (up[0]));
38 upn = up[n];
39 up[1] = __gmpn_addmul_2 (up, mp, n, q);
40 up[0] = up[n];
41 up[n] = upn;
42 up += 2;