1 /* Due to a reload inheritance bug, the asm statement in f() would be passed 2 the low part of u.ll on little-endian 32-bit targets. */ 3 /* { dg-do run { target mips*-*-* } } */ 4 5 extern void abort (void); 6 extern void exit (int); 7 8 #if __mips_isa_rev <= 5 9 unsigned int g; 10 f(unsigned int x)11unsigned __attribute__ ((nomips16)) long long f (unsigned int x) 12 { 13 union { unsigned long long ll; unsigned int parts[2]; } u; 14 15 u.ll = ((unsigned long long) x * x); 16 asm ("mflo\t%0" : "=r" (g) : "l" (u.parts[1])); 17 return u.ll; 18 } 19 #endif 20 main()21int __attribute__ ((nomips16)) main () 22 { 23 #if __mips_isa_rev <= 5 24 union { unsigned long long ll; unsigned int parts[2]; } u; 25 26 u.ll = f (0x12345678); 27 if (g != u.parts[1]) 28 abort (); 29 #endif 30 exit (0); 31 } 32