| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| |
| /* { dg-final { scan-assembler-not "\tf?mov\t" } } */ |
| |
| typedef long long int64_t; |
| typedef int64_t int64x1_t __attribute__ ((__vector_size__ (8))); |
| |
| /* { dg-final { scan-assembler-times "\\teon\\tx\[0-9\]+, x\[0-9\]+, x\[0-9\]+" 1 } } */ |
| |
| int64_t |
| test_eon (int64_t a, int64_t b) |
| { |
| return a ^ ~b; |
| } |
| |
| /* { dg-final { scan-assembler-times "\\tmvn\\tx\[0-9\]+, x\[0-9\]+" 1 } } */ |
| int64_t |
| test_not (int64_t a) |
| { |
| return ~a; |
| } |
| |
| /* There is no eon for SIMD regs; we prefer eor+mvn to mov+mov+eon+mov. */ |
| |
| /* { dg-final { scan-assembler-times "\\teor\\tv\[0-9\]+\.8b, v\[0-9\]+\.8b, v\[0-9\]+\.8b" 1 } } */ |
| /* { dg-final { scan-assembler-times "\\tmvn\\tv\[0-9\]+\.8b, v\[0-9\]+\.8b" 2 } } */ |
| int64x1_t |
| test_vec_eon (int64x1_t a, int64x1_t b) |
| { |
| return a ^ ~b; |
| } |
| |
| int64x1_t |
| test_vec_not (int64x1_t a) |
| { |
| return ~a; |
| } |
| |