| /* { dg-do compile } */ |
| /* { dg-options "-march=rv32gc_zbb" { target { rv32 } } } */ |
| /* { dg-options "-march=rv64gc_zbb" { target { rv64 } } } */ |
| /* { dg-skip-if "" { *-*-* } { "-O0" "-Os" "-Og" "-Oz" } } */ |
| |
| #include <stddef.h> |
| #define aligned32 __attribute__ ((aligned (32))) |
| |
| const char myconst15[] aligned32 = { 1, 2, 3, 4, 5, 6, 7, |
| 0, 1, 2, 3, 4, 5, 6, 7 }; |
| const char myconst23[] aligned32 = { 1, 2, 3, 4, 5, 6, 7, |
| 0, 1, 2, 3, 4, 5, 6, 7, |
| 0, 1, 2, 3, 4, 5, 6, 7 }; |
| const char myconst31[] aligned32 = { 1, 2, 3, 4, 5, 6, 7, |
| 0, 1, 2, 3, 4, 5, 6, 7, |
| 0, 1, 2, 3, 4, 5, 6, 7, |
| 0, 1, 2, 3, 4, 5, 6, 7 }; |
| |
| /* No expansion (unknown alignment) */ |
| #define MY_MEM_CMP_N(N) \ |
| int my_mem_cmp_##N(const char *b1, const char *b2) \ |
| { \ |
| return __builtin_memcmp (b1, b2, N); \ |
| } |
| |
| /* No expansion (unknown alignment) */ |
| #define MY_MEM_CMP_CONST_N(N) \ |
| int my_mem_cmp_const_##N(const char *b1) \ |
| { \ |
| return __builtin_memcmp (b1, myconst##N, sizeof(myconst##N)); \ |
| } |
| |
| MY_MEM_CMP_N(15) |
| MY_MEM_CMP_CONST_N(15) |
| |
| MY_MEM_CMP_N(23) |
| MY_MEM_CMP_CONST_N(23) |
| |
| MY_MEM_CMP_N(31) |
| MY_MEM_CMP_CONST_N(31) |
| |
| /* { dg-final { scan-assembler-times "\t(call|tail)\tmemcmp" 6 } } */ |