1 /* { dg-do compile } */
2 /* { dg-options "-O -fno-pie -mcpu=v8" } */
3 /* { dg-require-effective-target ilp32 } */
8 bool my_uadd_overflow (uint64_t a
, uint64_t b
, uint64_t *res
)
10 return __builtin_add_overflow (a
, b
, res
);
13 bool my_usub_overflow (uint64_t a
, uint64_t b
, uint64_t *res
)
15 return __builtin_sub_overflow (a
, b
, res
);
18 bool my_uneg_overflow (uint64_t a
, uint64_t *res
)
20 return __builtin_sub_overflow (0, a
, res
);
23 bool my_add_overflow (int64_t a
, int64_t b
, int64_t *res
)
25 return __builtin_add_overflow (a
, b
, res
);
28 bool my_sub_overflow (int64_t a
, int64_t b
, int64_t *res
)
30 return __builtin_sub_overflow (a
, b
, res
);
33 bool my_neg_overflow (int64_t a
, int64_t *res
)
35 return __builtin_sub_overflow (0, a
, res
);
38 /* { dg-final { scan-assembler-times "addcc\t%" 2 } } */
39 /* { dg-final { scan-assembler-times "addxcc\t%" 2 } } */
40 /* { dg-final { scan-assembler-times "subcc\t%" 4 } } */
41 /* { dg-final { scan-assembler-times "subxcc\t%" 4 } } */
42 /* { dg-final { scan-assembler-times "addx\t%" 2 } } */
43 /* { dg-final { scan-assembler-times "blu" 1 } } */
44 /* { dg-final { scan-assembler-times "bvs" 3 } } */
45 /* { dg-final { scan-assembler-not "cmp\t%" } } */
46 /* { dg-final { scan-assembler-not "save\t%" } } */