2016-12-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
[official-gcc.git] / gcc / testsuite / gcc.target / sparc / overflow-4.c
blob31b326486ee9108a9b5aa4cc0bdae3c3915f15e0
1 /* { dg-do compile } */
2 /* { dg-options "-O" } */
3 /* { dg-require-effective-target lp64 } */
5 #include <stdbool.h>
6 #include <stdint.h>
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 "subcc\t%" 4 } } */
40 /* { dg-final { scan-assembler-times "movlu\t%" 1 } } */
41 /* { dg-final { scan-assembler-times "blu" 2 } } */
42 /* { dg-final { scan-assembler-times "bvs" 3 } } */
43 /* { dg-final { scan-assembler-not "cmp\t%" } } */
44 /* { dg-final { scan-assembler-not "save\t%" } } */