Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 1 | // REQUIRES: aarch64-registered-target |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 2 | // REQUIRES: arm64-registered-target |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 3 | // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +neon \ |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 4 | // RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s --check-prefix=CHECK \ |
| 5 | // RUN: --check-prefix=CHECK-AARCH64 |
| 6 | // RUN: %clang_cc1 -triple arm64-none-linux-gnu \ |
| 7 | // RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s --check-prefix=CHECK \ |
| 8 | // RUN: --check-prefix=CHECK-ARM64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 9 | |
| 10 | // Test new aarch64 intrinsics with poly64 |
| 11 | |
| 12 | #include <arm_neon.h> |
| 13 | |
| 14 | uint64x1_t test_vceq_p64(poly64x1_t a, poly64x1_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 15 | // CHECK-LABEL: test_vceq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 16 | return vceq_p64(a, b); |
| 17 | // CHECK: cmeq {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}} |
| 18 | } |
| 19 | |
| 20 | uint64x2_t test_vceqq_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 21 | // CHECK-LABEL: test_vceqq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 22 | return vceqq_p64(a, b); |
| 23 | // CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
| 24 | } |
| 25 | |
| 26 | uint64x1_t test_vtst_p64(poly64x1_t a, poly64x1_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 27 | // CHECK-LABEL: test_vtst_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 28 | return vtst_p64(a, b); |
| 29 | // CHECK: cmtst {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}} |
| 30 | } |
| 31 | |
| 32 | uint64x2_t test_vtstq_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 33 | // CHECK-LABEL: test_vtstq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 34 | return vtstq_p64(a, b); |
| 35 | // CHECK: cmtst {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
| 36 | } |
| 37 | |
| 38 | poly64x1_t test_vbsl_p64(poly64x1_t a, poly64x1_t b, poly64x1_t c) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 39 | // CHECK-LABEL: test_vbsl_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 40 | return vbsl_p64(a, b, c); |
| 41 | // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b |
| 42 | } |
| 43 | |
| 44 | poly64x2_t test_vbslq_p64(poly64x2_t a, poly64x2_t b, poly64x2_t c) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 45 | // CHECK-LABEL: test_vbslq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 46 | return vbslq_p64(a, b, c); |
| 47 | // CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b |
| 48 | } |
| 49 | |
| 50 | poly64_t test_vget_lane_p64(poly64x1_t v) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 51 | // CHECK-LABEL: test_vget_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 52 | return vget_lane_p64(v, 0); |
| 53 | // CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} |
| 54 | } |
| 55 | |
| 56 | poly64_t test_vgetq_lane_p64(poly64x2_t v) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 57 | // CHECK-LABEL: test_vgetq_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 58 | return vgetq_lane_p64(v, 1); |
| 59 | // CHECK: umov {{x[0-9]+}}, {{v[0-9]+}}.d[1] |
| 60 | } |
| 61 | |
| 62 | poly64x1_t test_vset_lane_p64(poly64_t a, poly64x1_t v) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 63 | // CHECK-LABEL: test_vset_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 64 | return vset_lane_p64(a, v, 0); |
| 65 | // CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} |
| 66 | } |
| 67 | |
| 68 | poly64x2_t test_vsetq_lane_p64(poly64_t a, poly64x2_t v) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 69 | // CHECK-LABEL: test_vsetq_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 70 | return vsetq_lane_p64(a, v, 1); |
| 71 | // CHECK: ins {{v[0-9]+}}.d[1], {{x[0-9]+}} |
| 72 | } |
| 73 | |
| 74 | poly64x1_t test_vcopy_lane_p64(poly64x1_t a, poly64x1_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 75 | // CHECK-LABEL: test_vcopy_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 76 | return vcopy_lane_p64(a, 0, b, 0); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 77 | // CHECK-AARCH64: fmov {{d[0-9]+}}, {{d[0-9]+}} |
| 78 | |
| 79 | // CHECK-ARM64: orr v0.16b, v1.16b, v1.16b |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 80 | } |
| 81 | |
| 82 | poly64x2_t test_vcopyq_lane_p64(poly64x2_t a, poly64x1_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 83 | // CHECK-LABEL: test_vcopyq_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 84 | return vcopyq_lane_p64(a, 1, b, 0); |
| 85 | // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] |
| 86 | } |
| 87 | |
| 88 | poly64x2_t test_vcopyq_laneq_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 89 | // CHECK-LABEL: test_vcopyq_laneq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 90 | return vcopyq_laneq_p64(a, 1, b, 1); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 91 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[1] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 92 | } |
| 93 | |
| 94 | poly64x1_t test_vcreate_p64(uint64_t a) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 95 | // CHECK-LABEL: test_vcreate_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 96 | return vcreate_p64(a); |
| 97 | // CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} |
| 98 | } |
| 99 | |
| 100 | poly64x1_t test_vdup_n_p64(poly64_t a) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 101 | // CHECK-LABEL: test_vdup_n_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 102 | return vdup_n_p64(a); |
| 103 | // CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} |
| 104 | } |
| 105 | poly64x2_t test_vdupq_n_p64(poly64_t a) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 106 | // CHECK-LABEL: test_vdupq_n_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 107 | return vdupq_n_p64(a); |
| 108 | // CHECK: dup {{v[0-9]+}}.2d, {{x[0-9]+}} |
| 109 | } |
| 110 | |
| 111 | poly64x1_t test_vdup_lane_p64(poly64x1_t vec) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 112 | // CHECK-LABEL: test_vdup_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 113 | return vdup_lane_p64(vec, 0); |
| 114 | // CHECK: ret |
| 115 | } |
| 116 | |
| 117 | poly64x2_t test_vdupq_lane_p64(poly64x1_t vec) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 118 | // CHECK-LABEL: test_vdupq_lane_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 119 | return vdupq_lane_p64(vec, 0); |
| 120 | // CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] |
| 121 | } |
| 122 | |
| 123 | poly64x2_t test_vdupq_laneq_p64(poly64x2_t vec) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 124 | // CHECK-LABEL: test_vdupq_laneq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 125 | return vdupq_laneq_p64(vec, 1); |
| 126 | // CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[1] |
| 127 | } |
| 128 | |
| 129 | poly64x2_t test_vcombine_p64(poly64x1_t low, poly64x1_t high) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 130 | // CHECK-LABEL: test_vcombine_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 131 | return vcombine_p64(low, high); |
| 132 | // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] |
| 133 | } |
| 134 | |
| 135 | poly64x1_t test_vld1_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 136 | // CHECK-LABEL: test_vld1_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 137 | return vld1_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 138 | // CHECK-AARCH64: ld1 {{{v[0-9]+}}.1d}, [{{x[0-9]+|sp}}] |
| 139 | // CHECK-ARM64: ldr {{d[0-9]+}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 140 | } |
| 141 | |
| 142 | poly64x2_t test_vld1q_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 143 | // CHECK-LABEL: test_vld1q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 144 | return vld1q_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 145 | // CHECK-AARCH64: ld1 {{{v[0-9]+}}.2d}, [{{x[0-9]+|sp}}] |
| 146 | // CHECK-ARM64: ldr {{q[0-9]+}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 147 | } |
| 148 | |
| 149 | void test_vst1_p64(poly64_t * ptr, poly64x1_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 150 | // CHECK-LABEL: test_vst1_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 151 | return vst1_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 152 | // CHECK-AARCH64: st1 {{{v[0-9]+}}.1d}, [{{x[0-9]+|sp}}] |
| 153 | // CHECK-ARM64: str {{d[0-9]+}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 154 | } |
| 155 | |
| 156 | void test_vst1q_p64(poly64_t * ptr, poly64x2_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 157 | // CHECK-LABEL: test_vst1q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 158 | return vst1q_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 159 | // CHECK-AARCH64: st1 {{{v[0-9]+}}.2d}, [{{x[0-9]+|sp}}] |
| 160 | // CHECK-ARM64: str {{q[0-9]+}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 161 | } |
| 162 | |
| 163 | poly64x1x2_t test_vld2_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 164 | // CHECK-LABEL: test_vld2_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 165 | return vld2_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 166 | // CHECK: ld1 {{{ *v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 167 | } |
| 168 | |
| 169 | poly64x2x2_t test_vld2q_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 170 | // CHECK-LABEL: test_vld2q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 171 | return vld2q_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 172 | // CHECK: ld2 {{{ *v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 173 | } |
| 174 | |
| 175 | poly64x1x3_t test_vld3_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 176 | // CHECK-LABEL: test_vld3_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 177 | return vld3_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 178 | // CHECK: ld1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 179 | } |
| 180 | |
| 181 | poly64x2x3_t test_vld3q_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 182 | // CHECK-LABEL: test_vld3q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 183 | return vld3q_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 184 | // CHECK: ld3 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 185 | } |
| 186 | |
| 187 | poly64x1x4_t test_vld4_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 188 | // CHECK-LABEL: test_vld4_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 189 | return vld4_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 190 | // CHECK: ld1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 191 | } |
| 192 | |
| 193 | poly64x2x4_t test_vld4q_p64(poly64_t const * ptr) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 194 | // CHECK-LABEL: test_vld4q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 195 | return vld4q_p64(ptr); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 196 | // CHECK: ld4 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 197 | } |
| 198 | |
| 199 | void test_vst2_p64(poly64_t * ptr, poly64x1x2_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 200 | // CHECK-LABEL: test_vst2_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 201 | return vst2_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 202 | // CHECK: st1 {{{ *v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 203 | } |
| 204 | |
| 205 | void test_vst2q_p64(poly64_t * ptr, poly64x2x2_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 206 | // CHECK-LABEL: test_vst2q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 207 | return vst2q_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 208 | // CHECK: st2 {{{ *v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 209 | } |
| 210 | |
| 211 | void test_vst3_p64(poly64_t * ptr, poly64x1x3_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 212 | // CHECK-LABEL: test_vst3_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 213 | return vst3_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 214 | // CHECK: st1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 215 | } |
| 216 | |
| 217 | void test_vst3q_p64(poly64_t * ptr, poly64x2x3_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 218 | // CHECK-LABEL: test_vst3q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 219 | return vst3q_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 220 | // CHECK: st3 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 221 | } |
| 222 | |
| 223 | void test_vst4_p64(poly64_t * ptr, poly64x1x4_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 224 | // CHECK-LABEL: test_vst4_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 225 | return vst4_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 226 | // CHECK: st1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 227 | } |
| 228 | |
| 229 | void test_vst4q_p64(poly64_t * ptr, poly64x2x4_t val) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 230 | // CHECK-LABEL: test_vst4q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 231 | return vst4q_p64(ptr, val); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 232 | // CHECK: st4 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}] |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 233 | } |
| 234 | |
| 235 | poly64x1_t test_vext_p64(poly64x1_t a, poly64x1_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 236 | // CHECK-LABEL: test_vext_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 237 | return vext_u64(a, b, 0); |
| 238 | |
| 239 | } |
| 240 | |
| 241 | poly64x2_t test_vextq_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 242 | // CHECK-LABEL: test_vextq_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 243 | return vextq_p64(a, b, 1); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 244 | // CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{#0x8|#8}} |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 245 | } |
| 246 | |
| 247 | poly64x2_t test_vzip1q_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 248 | // CHECK-LABEL: test_vzip1q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 249 | return vzip1q_p64(a, b); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 250 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] |
| 251 | // CHECK-ARM64: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 252 | } |
| 253 | |
| 254 | poly64x2_t test_vzip2q_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 255 | // CHECK-LABEL: test_vzip2q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 256 | return vzip2q_u64(a, b); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 257 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[1] |
| 258 | // CHECK-ARM64: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 259 | } |
| 260 | |
| 261 | poly64x2_t test_vuzp1q_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 262 | // CHECK-LABEL: test_vuzp1q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 263 | return vuzp1q_p64(a, b); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 264 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] |
| 265 | // CHECK-ARM64: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 266 | } |
| 267 | |
| 268 | poly64x2_t test_vuzp2q_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 269 | // CHECK-LABEL: test_vuzp2q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 270 | return vuzp2q_u64(a, b); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 271 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[1] |
| 272 | // CHECK-ARM64: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 273 | } |
| 274 | |
| 275 | poly64x2_t test_vtrn1q_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 276 | // CHECK-LABEL: test_vtrn1q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 277 | return vtrn1q_p64(a, b); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 278 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] |
| 279 | // CHECK-ARM64: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 280 | } |
| 281 | |
| 282 | poly64x2_t test_vtrn2q_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 283 | // CHECK-LABEL: test_vtrn2q_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 284 | return vtrn2q_u64(a, b); |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 285 | // CHECK-AARCH64: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[1] |
| 286 | // CHECK-ARM64: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 287 | } |
| 288 | |
| 289 | poly64x1_t test_vsri_n_p64(poly64x1_t a, poly64x1_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 290 | // CHECK-LABEL: test_vsri_n_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 291 | return vsri_n_p64(a, b, 33); |
| 292 | // CHECK: sri {{d[0-9]+}}, {{d[0-9]+}}, #33 |
| 293 | } |
| 294 | |
| 295 | poly64x2_t test_vsriq_n_p64(poly64x2_t a, poly64x2_t b) { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame^] | 296 | // CHECK-LABEL: test_vsriq_n_p64 |
Kevin Qin | 84881a7 | 2013-11-14 06:49:00 +0000 | [diff] [blame] | 297 | return vsriq_n_p64(a, b, 64); |
| 298 | // CHECK: sri {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #64 |
| 299 | } |
| 300 | |