1 /* From PR rtl-optimization/19683. On little-endian MIPS targets,
2 reload would incorrectly inherit the high part of the multiplication
4 /* { dg-do run { target mips*-*-* } } */
6 extern void abort (void);
7 extern void exit (int);
9 #define REPEAT10(X, Y) \
10 X(Y##0); X(Y##1); X(Y##2); X(Y##3); X(Y##4); \
11 X(Y##5); X(Y##6); X(Y##7); X(Y##8); X(Y##9)
13 #define REPEAT30(X) REPEAT10 (X, 0); REPEAT10 (X, 1); REPEAT10 (X, 2)
14 #define IN(X) unsigned int x##X = ptr[0]
15 #define OUT(X) ptr[0] = x##X
17 #if __mips_isa_rev <= 5
18 union u
{ unsigned long long ll
; unsigned int i
[2]; };
20 unsigned int __attribute__ ((nomips16
))
21 foo (volatile unsigned int *ptr
)
26 u
.ll
= (unsigned long long) ptr
[0] * ptr
[0];
29 asm ("#" : "=l" (result
) : "l" (u
.i
[1]));
34 int __attribute__ ((nomips16
))
37 #if __mips_isa_rev <= 5
38 unsigned int array
[] = { 1000 * 1000 * 1000 };
41 u
.ll
= (unsigned long long) array
[0] * array
[0];
42 if (foo (array
) != u
.i
[1])