2 /* { dg-options "-O2 --save-temps" } */
4 extern void abort (void);
7 combine_zero_extended_int (unsigned int a
, unsigned int b
)
9 /* { dg-final { scan-assembler-not "uxtw\\t" } } */
10 return (a
& 0xffff0000ll
) | (b
& 0x0000ffffll
);
14 combine_balanced (unsigned long long a
, unsigned long long b
)
16 return (a
& 0xffffffff00000000ll
) | (b
& 0x00000000ffffffffll
);
20 combine_minimal (unsigned long long a
, unsigned long long b
)
22 return (a
& 0xfffffffffffffffell
) | (b
& 0x0000000000000001ll
);
26 combine_unbalanced (unsigned long long a
, unsigned long long b
)
28 return (a
& 0xffffffffff000000ll
) | (b
& 0x0000000000ffffffll
);
32 combine_balanced_int (unsigned int a
, unsigned int b
)
34 return (a
& 0xffff0000ll
) | (b
& 0x0000ffffll
);
38 combine_unbalanced_int (unsigned int a
, unsigned int b
)
40 return (a
& 0xffffff00ll
) | (b
& 0x000000ffll
);
43 unsigned long long c
, d
;
45 __attribute__ ((noinline
)) void
46 foo (unsigned long long a
, unsigned long long b
)
48 c
= combine_minimal (a
, b
);
49 d
= combine_minimal (b
, a
);
52 __attribute__ ((noinline
)) void
53 foo2 (unsigned long long a
, unsigned long long b
)
55 c
= combine_balanced (a
, b
);
56 d
= combine_balanced (b
, a
);
59 __attribute__ ((noinline
)) void
60 foo3 (unsigned long long a
, unsigned long long b
)
62 c
= combine_unbalanced (a
, b
);
63 d
= combine_unbalanced (b
, a
);
69 foo4 (unsigned int a
, unsigned int b
)
71 ic
= combine_balanced_int (a
, b
);
72 id
= combine_balanced_int (b
, a
);
76 foo5 (unsigned int a
, unsigned int b
)
78 ic
= combine_unbalanced_int (a
, b
);
79 id
= combine_unbalanced_int (b
, a
);
83 foo6 (unsigned int a
, unsigned int b
)
85 c
= combine_zero_extended_int(a
, b
);
86 d
= combine_zero_extended_int(b
, a
);
92 unsigned long long a
= 0x0123456789ABCDEF, b
= 0xFEDCBA9876543210;
94 if (c
!= 0x0123456789543210) abort ();
95 if (d
!= 0xfedcba9876abcdef) abort ();
97 if (c
!= 0x0123456776543210) abort ();
98 if (d
!= 0xfedcba9889abcdef) abort ();
100 if (c
!= 0x0123456789abcdee) abort ();
101 if (d
!= 0xfedcba9876543211) abort ();
103 unsigned int a2
= 0x01234567, b2
= 0xFEDCBA98;
105 if (ic
!= 0x0123ba98) abort ();
106 if (id
!= 0xfedc4567) abort ();
108 if (ic
!= 0x01234598) abort ();
109 if (id
!= 0xfedcba67) abort ();
112 if (c
!= 0x0123ba98) abort ();
113 if (d
!= 0xfedc4567) abort ();
117 /* { dg-final { scan-assembler-times "bfxil\\t" 3 } } */
118 /* { dg-final { scan-assembler-times "bfi\\t" 15 } } */