| /* { dg-do run } */ |
| /* { dg-options "-O2" } */ |
| |
| #include "arm_neon.h" |
| |
| int |
| main (int argc, char** argv) |
| { |
| int64x1_t val1; |
| int64x1_t val2; |
| int64x1_t val3; |
| uint64x1_t val13; |
| uint64x2_t val14; |
| uint64_t got; |
| uint64_t exp; |
| val1 = vcreate_s64(UINT64_C(0xffffffff80008000)); |
| val2 = vcreate_s64(UINT64_C(0x0000f38d00000000)); |
| val3 = vcreate_s64(UINT64_C(0xffff7fff0000809b)); |
| /* Expect: "val13" = 8000000000001553. */ |
| val13 = vcreate_u64 (UINT64_C(0x8000000000001553)); |
| /* Expect: "val14" = 0010 0000 0000 0002 0000 0000 0000 0000. */ |
| val14 = vcombine_u64(vcgt_s64(vqrshl_s64(val1, val2), |
| vshr_n_s64(val3, 18)), |
| vshr_n_u64(val13, 11)); |
| /* Should be 0000000000000000. */ |
| got = vgetq_lane_u64(val14, 0); |
| exp = 0; |
| if(exp != got) |
| __builtin_abort (); |
| } |