2 /* { dg-options "-O3" } */
3 /* { dg-require-effective-target lp64 } */
4 /* { dg-require-effective-target ppc_cpu_supports_hw } */
6 #define NO_WARN_X86_INTRINSICS 1
8 #include "bmi2-check.h"
10 __attribute__((noinline
))
12 calc_mul_u64 (unsigned long long volatile a
, unsigned long long b
)
14 unsigned __int128 res
= 0;
16 for (i
= 0; i
< b
; ++i
)
17 res
+= (unsigned __int128
) a
;
22 __attribute__((noinline
))
24 calc_mulx_u64 (unsigned long long x
,
26 unsigned long long *res_h
)
28 return _mulx_u64 (x
, y
, res_h
);
36 unsigned long long a
= 0xce7ace0ce7ace0;
37 unsigned long long b
= 0xface;
38 unsigned long long res_l
, res_h
;
39 unsigned __int128 res
, res_ref
;
45 res_ref
= calc_mul_u64 (a
, b
);
47 res_l
= calc_mulx_u64 (a
, b
, &res_h
);
49 res
= ((unsigned __int128
) res_h
<< 64) | res_l
;