1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=aarch64-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64-none-eabi -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define i8 @and_i8(i8 %a, i8 %b) {
7 ; CHECK: // %bb.0: // %entry
8 ; CHECK-NEXT: and w0, w0, w1
15 define i8 @or_i8(i8 %a, i8 %b) {
17 ; CHECK: // %bb.0: // %entry
18 ; CHECK-NEXT: orr w0, w0, w1
25 define i8 @xor_i8(i8 %a, i8 %b) {
26 ; CHECK-LABEL: xor_i8:
27 ; CHECK: // %bb.0: // %entry
28 ; CHECK-NEXT: eor w0, w0, w1
35 define i16 @and_i16(i16 %a, i16 %b) {
36 ; CHECK-LABEL: and_i16:
37 ; CHECK: // %bb.0: // %entry
38 ; CHECK-NEXT: and w0, w0, w1
45 define i16 @or_i16(i16 %a, i16 %b) {
46 ; CHECK-LABEL: or_i16:
47 ; CHECK: // %bb.0: // %entry
48 ; CHECK-NEXT: orr w0, w0, w1
55 define i16 @xor_i16(i16 %a, i16 %b) {
56 ; CHECK-LABEL: xor_i16:
57 ; CHECK: // %bb.0: // %entry
58 ; CHECK-NEXT: eor w0, w0, w1
65 define i32 @and_i32(i32 %a, i32 %b) {
66 ; CHECK-LABEL: and_i32:
67 ; CHECK: // %bb.0: // %entry
68 ; CHECK-NEXT: and w0, w0, w1
75 define i32 @or_i32(i32 %a, i32 %b) {
76 ; CHECK-LABEL: or_i32:
77 ; CHECK: // %bb.0: // %entry
78 ; CHECK-NEXT: orr w0, w0, w1
85 define i32 @xor_i32(i32 %a, i32 %b) {
86 ; CHECK-LABEL: xor_i32:
87 ; CHECK: // %bb.0: // %entry
88 ; CHECK-NEXT: eor w0, w0, w1
95 define i64 @and_i64(i64 %a, i64 %b) {
96 ; CHECK-LABEL: and_i64:
97 ; CHECK: // %bb.0: // %entry
98 ; CHECK-NEXT: and x0, x0, x1
105 define i64 @or_i64(i64 %a, i64 %b) {
106 ; CHECK-LABEL: or_i64:
107 ; CHECK: // %bb.0: // %entry
108 ; CHECK-NEXT: orr x0, x0, x1
115 define i64 @xor_i64(i64 %a, i64 %b) {
116 ; CHECK-LABEL: xor_i64:
117 ; CHECK: // %bb.0: // %entry
118 ; CHECK-NEXT: eor x0, x0, x1
125 define i128 @and_i128(i128 %a, i128 %b) {
126 ; CHECK-SD-LABEL: and_i128:
127 ; CHECK-SD: // %bb.0: // %entry
128 ; CHECK-SD-NEXT: and x1, x1, x3
129 ; CHECK-SD-NEXT: and x0, x0, x2
132 ; CHECK-GI-LABEL: and_i128:
133 ; CHECK-GI: // %bb.0: // %entry
134 ; CHECK-GI-NEXT: and x0, x0, x2
135 ; CHECK-GI-NEXT: and x1, x1, x3
142 define i128 @or_i128(i128 %a, i128 %b) {
143 ; CHECK-SD-LABEL: or_i128:
144 ; CHECK-SD: // %bb.0: // %entry
145 ; CHECK-SD-NEXT: orr x1, x1, x3
146 ; CHECK-SD-NEXT: orr x0, x0, x2
149 ; CHECK-GI-LABEL: or_i128:
150 ; CHECK-GI: // %bb.0: // %entry
151 ; CHECK-GI-NEXT: orr x0, x0, x2
152 ; CHECK-GI-NEXT: orr x1, x1, x3
159 define i128 @xor_i128(i128 %a, i128 %b) {
160 ; CHECK-SD-LABEL: xor_i128:
161 ; CHECK-SD: // %bb.0: // %entry
162 ; CHECK-SD-NEXT: eor x1, x1, x3
163 ; CHECK-SD-NEXT: eor x0, x0, x2
166 ; CHECK-GI-LABEL: xor_i128:
167 ; CHECK-GI: // %bb.0: // %entry
168 ; CHECK-GI-NEXT: eor x0, x0, x2
169 ; CHECK-GI-NEXT: eor x1, x1, x3
176 define void @and_v2i8(ptr %p1, ptr %p2) {
177 ; CHECK-SD-LABEL: and_v2i8:
178 ; CHECK-SD: // %bb.0: // %entry
179 ; CHECK-SD-NEXT: ld1 { v0.b }[0], [x0]
180 ; CHECK-SD-NEXT: ld1 { v1.b }[0], [x1]
181 ; CHECK-SD-NEXT: add x8, x0, #1
182 ; CHECK-SD-NEXT: add x9, x1, #1
183 ; CHECK-SD-NEXT: ld1 { v0.b }[4], [x8]
184 ; CHECK-SD-NEXT: ld1 { v1.b }[4], [x9]
185 ; CHECK-SD-NEXT: and v0.8b, v0.8b, v1.8b
186 ; CHECK-SD-NEXT: mov w8, v0.s[1]
187 ; CHECK-SD-NEXT: fmov w9, s0
188 ; CHECK-SD-NEXT: strb w9, [x0]
189 ; CHECK-SD-NEXT: strb w8, [x0, #1]
192 ; CHECK-GI-LABEL: and_v2i8:
193 ; CHECK-GI: // %bb.0: // %entry
194 ; CHECK-GI-NEXT: ld1 { v0.b }[0], [x0]
195 ; CHECK-GI-NEXT: ld1 { v1.b }[0], [x1]
196 ; CHECK-GI-NEXT: ldr b2, [x0, #1]
197 ; CHECK-GI-NEXT: ldr b3, [x1, #1]
198 ; CHECK-GI-NEXT: mov v0.s[1], v2.s[0]
199 ; CHECK-GI-NEXT: mov v1.s[1], v3.s[0]
200 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
201 ; CHECK-GI-NEXT: mov s1, v0.s[1]
202 ; CHECK-GI-NEXT: str b0, [x0]
203 ; CHECK-GI-NEXT: str b1, [x0, #1]
206 %d = load <2 x i8>, ptr %p1
207 %e = load <2 x i8>, ptr %p2
208 %s = and <2 x i8> %d, %e
209 store <2 x i8> %s, ptr %p1
213 define void @or_v2i8(ptr %p1, ptr %p2) {
214 ; CHECK-SD-LABEL: or_v2i8:
215 ; CHECK-SD: // %bb.0: // %entry
216 ; CHECK-SD-NEXT: ld1 { v0.b }[0], [x0]
217 ; CHECK-SD-NEXT: ld1 { v1.b }[0], [x1]
218 ; CHECK-SD-NEXT: add x8, x0, #1
219 ; CHECK-SD-NEXT: add x9, x1, #1
220 ; CHECK-SD-NEXT: ld1 { v0.b }[4], [x8]
221 ; CHECK-SD-NEXT: ld1 { v1.b }[4], [x9]
222 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v1.8b
223 ; CHECK-SD-NEXT: mov w8, v0.s[1]
224 ; CHECK-SD-NEXT: fmov w9, s0
225 ; CHECK-SD-NEXT: strb w9, [x0]
226 ; CHECK-SD-NEXT: strb w8, [x0, #1]
229 ; CHECK-GI-LABEL: or_v2i8:
230 ; CHECK-GI: // %bb.0: // %entry
231 ; CHECK-GI-NEXT: ld1 { v0.b }[0], [x0]
232 ; CHECK-GI-NEXT: ld1 { v1.b }[0], [x1]
233 ; CHECK-GI-NEXT: ldr b2, [x0, #1]
234 ; CHECK-GI-NEXT: ldr b3, [x1, #1]
235 ; CHECK-GI-NEXT: mov v0.s[1], v2.s[0]
236 ; CHECK-GI-NEXT: mov v1.s[1], v3.s[0]
237 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
238 ; CHECK-GI-NEXT: mov s1, v0.s[1]
239 ; CHECK-GI-NEXT: str b0, [x0]
240 ; CHECK-GI-NEXT: str b1, [x0, #1]
243 %d = load <2 x i8>, ptr %p1
244 %e = load <2 x i8>, ptr %p2
245 %s = or <2 x i8> %d, %e
246 store <2 x i8> %s, ptr %p1
250 define void @xor_v2i8(ptr %p1, ptr %p2) {
251 ; CHECK-SD-LABEL: xor_v2i8:
252 ; CHECK-SD: // %bb.0: // %entry
253 ; CHECK-SD-NEXT: ld1 { v0.b }[0], [x0]
254 ; CHECK-SD-NEXT: ld1 { v1.b }[0], [x1]
255 ; CHECK-SD-NEXT: add x8, x0, #1
256 ; CHECK-SD-NEXT: add x9, x1, #1
257 ; CHECK-SD-NEXT: ld1 { v0.b }[4], [x8]
258 ; CHECK-SD-NEXT: ld1 { v1.b }[4], [x9]
259 ; CHECK-SD-NEXT: eor v0.8b, v0.8b, v1.8b
260 ; CHECK-SD-NEXT: mov w8, v0.s[1]
261 ; CHECK-SD-NEXT: fmov w9, s0
262 ; CHECK-SD-NEXT: strb w9, [x0]
263 ; CHECK-SD-NEXT: strb w8, [x0, #1]
266 ; CHECK-GI-LABEL: xor_v2i8:
267 ; CHECK-GI: // %bb.0: // %entry
268 ; CHECK-GI-NEXT: ld1 { v0.b }[0], [x0]
269 ; CHECK-GI-NEXT: ld1 { v1.b }[0], [x1]
270 ; CHECK-GI-NEXT: ldr b2, [x0, #1]
271 ; CHECK-GI-NEXT: ldr b3, [x1, #1]
272 ; CHECK-GI-NEXT: mov v0.s[1], v2.s[0]
273 ; CHECK-GI-NEXT: mov v1.s[1], v3.s[0]
274 ; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
275 ; CHECK-GI-NEXT: mov s1, v0.s[1]
276 ; CHECK-GI-NEXT: str b0, [x0]
277 ; CHECK-GI-NEXT: str b1, [x0, #1]
280 %d = load <2 x i8>, ptr %p1
281 %e = load <2 x i8>, ptr %p2
282 %s = xor <2 x i8> %d, %e
283 store <2 x i8> %s, ptr %p1
287 define void @and_v3i8(ptr %p1, ptr %p2) {
288 ; CHECK-SD-LABEL: and_v3i8:
289 ; CHECK-SD: // %bb.0: // %entry
290 ; CHECK-SD-NEXT: sub sp, sp, #16
291 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 16
292 ; CHECK-SD-NEXT: ldr s0, [x0]
293 ; CHECK-SD-NEXT: ldr s1, [x1]
294 ; CHECK-SD-NEXT: zip1 v0.8b, v0.8b, v0.8b
295 ; CHECK-SD-NEXT: zip1 v1.8b, v1.8b, v0.8b
296 ; CHECK-SD-NEXT: and v0.8b, v0.8b, v1.8b
297 ; CHECK-SD-NEXT: uzp1 v1.8b, v0.8b, v0.8b
298 ; CHECK-SD-NEXT: umov w8, v0.h[2]
299 ; CHECK-SD-NEXT: str s1, [sp, #12]
300 ; CHECK-SD-NEXT: ldrh w9, [sp, #12]
301 ; CHECK-SD-NEXT: strb w8, [x0, #2]
302 ; CHECK-SD-NEXT: strh w9, [x0]
303 ; CHECK-SD-NEXT: add sp, sp, #16
306 ; CHECK-GI-LABEL: and_v3i8:
307 ; CHECK-GI: // %bb.0: // %entry
308 ; CHECK-GI-NEXT: ldrb w8, [x0]
309 ; CHECK-GI-NEXT: ldrb w9, [x1]
310 ; CHECK-GI-NEXT: ldrb w10, [x0, #1]
311 ; CHECK-GI-NEXT: ldrb w11, [x1, #1]
312 ; CHECK-GI-NEXT: fmov s0, w8
313 ; CHECK-GI-NEXT: fmov s1, w9
314 ; CHECK-GI-NEXT: ldrb w8, [x0, #2]
315 ; CHECK-GI-NEXT: ldrb w9, [x1, #2]
316 ; CHECK-GI-NEXT: mov v0.h[1], w10
317 ; CHECK-GI-NEXT: mov v1.h[1], w11
318 ; CHECK-GI-NEXT: mov v0.h[2], w8
319 ; CHECK-GI-NEXT: mov v1.h[2], w9
320 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
321 ; CHECK-GI-NEXT: mov h1, v0.h[1]
322 ; CHECK-GI-NEXT: mov h2, v0.h[2]
323 ; CHECK-GI-NEXT: str b0, [x0]
324 ; CHECK-GI-NEXT: str b1, [x0, #1]
325 ; CHECK-GI-NEXT: str b2, [x0, #2]
328 %d = load <3 x i8>, ptr %p1
329 %e = load <3 x i8>, ptr %p2
330 %s = and <3 x i8> %d, %e
331 store <3 x i8> %s, ptr %p1
335 define void @or_v3i8(ptr %p1, ptr %p2) {
336 ; CHECK-SD-LABEL: or_v3i8:
337 ; CHECK-SD: // %bb.0: // %entry
338 ; CHECK-SD-NEXT: sub sp, sp, #16
339 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 16
340 ; CHECK-SD-NEXT: ldr s0, [x0]
341 ; CHECK-SD-NEXT: ldr s1, [x1]
342 ; CHECK-SD-NEXT: zip1 v0.8b, v0.8b, v0.8b
343 ; CHECK-SD-NEXT: zip1 v1.8b, v1.8b, v0.8b
344 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v1.8b
345 ; CHECK-SD-NEXT: uzp1 v1.8b, v0.8b, v0.8b
346 ; CHECK-SD-NEXT: umov w8, v0.h[2]
347 ; CHECK-SD-NEXT: str s1, [sp, #12]
348 ; CHECK-SD-NEXT: ldrh w9, [sp, #12]
349 ; CHECK-SD-NEXT: strb w8, [x0, #2]
350 ; CHECK-SD-NEXT: strh w9, [x0]
351 ; CHECK-SD-NEXT: add sp, sp, #16
354 ; CHECK-GI-LABEL: or_v3i8:
355 ; CHECK-GI: // %bb.0: // %entry
356 ; CHECK-GI-NEXT: ldrb w8, [x0]
357 ; CHECK-GI-NEXT: ldrb w9, [x1]
358 ; CHECK-GI-NEXT: ldrb w10, [x0, #1]
359 ; CHECK-GI-NEXT: ldrb w11, [x1, #1]
360 ; CHECK-GI-NEXT: fmov s0, w8
361 ; CHECK-GI-NEXT: fmov s1, w9
362 ; CHECK-GI-NEXT: ldrb w8, [x0, #2]
363 ; CHECK-GI-NEXT: ldrb w9, [x1, #2]
364 ; CHECK-GI-NEXT: mov v0.h[1], w10
365 ; CHECK-GI-NEXT: mov v1.h[1], w11
366 ; CHECK-GI-NEXT: mov v0.h[2], w8
367 ; CHECK-GI-NEXT: mov v1.h[2], w9
368 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
369 ; CHECK-GI-NEXT: mov h1, v0.h[1]
370 ; CHECK-GI-NEXT: mov h2, v0.h[2]
371 ; CHECK-GI-NEXT: str b0, [x0]
372 ; CHECK-GI-NEXT: str b1, [x0, #1]
373 ; CHECK-GI-NEXT: str b2, [x0, #2]
376 %d = load <3 x i8>, ptr %p1
377 %e = load <3 x i8>, ptr %p2
378 %s = or <3 x i8> %d, %e
379 store <3 x i8> %s, ptr %p1
383 define void @xor_v3i8(ptr %p1, ptr %p2) {
384 ; CHECK-SD-LABEL: xor_v3i8:
385 ; CHECK-SD: // %bb.0: // %entry
386 ; CHECK-SD-NEXT: sub sp, sp, #16
387 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 16
388 ; CHECK-SD-NEXT: ldr s0, [x0]
389 ; CHECK-SD-NEXT: ldr s1, [x1]
390 ; CHECK-SD-NEXT: zip1 v0.8b, v0.8b, v0.8b
391 ; CHECK-SD-NEXT: zip1 v1.8b, v1.8b, v0.8b
392 ; CHECK-SD-NEXT: eor v0.8b, v0.8b, v1.8b
393 ; CHECK-SD-NEXT: uzp1 v1.8b, v0.8b, v0.8b
394 ; CHECK-SD-NEXT: umov w8, v0.h[2]
395 ; CHECK-SD-NEXT: str s1, [sp, #12]
396 ; CHECK-SD-NEXT: ldrh w9, [sp, #12]
397 ; CHECK-SD-NEXT: strb w8, [x0, #2]
398 ; CHECK-SD-NEXT: strh w9, [x0]
399 ; CHECK-SD-NEXT: add sp, sp, #16
402 ; CHECK-GI-LABEL: xor_v3i8:
403 ; CHECK-GI: // %bb.0: // %entry
404 ; CHECK-GI-NEXT: ldrb w8, [x0]
405 ; CHECK-GI-NEXT: ldrb w9, [x1]
406 ; CHECK-GI-NEXT: ldrb w10, [x0, #1]
407 ; CHECK-GI-NEXT: ldrb w11, [x1, #1]
408 ; CHECK-GI-NEXT: fmov s0, w8
409 ; CHECK-GI-NEXT: fmov s1, w9
410 ; CHECK-GI-NEXT: ldrb w8, [x0, #2]
411 ; CHECK-GI-NEXT: ldrb w9, [x1, #2]
412 ; CHECK-GI-NEXT: mov v0.h[1], w10
413 ; CHECK-GI-NEXT: mov v1.h[1], w11
414 ; CHECK-GI-NEXT: mov v0.h[2], w8
415 ; CHECK-GI-NEXT: mov v1.h[2], w9
416 ; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
417 ; CHECK-GI-NEXT: mov h1, v0.h[1]
418 ; CHECK-GI-NEXT: mov h2, v0.h[2]
419 ; CHECK-GI-NEXT: str b0, [x0]
420 ; CHECK-GI-NEXT: str b1, [x0, #1]
421 ; CHECK-GI-NEXT: str b2, [x0, #2]
424 %d = load <3 x i8>, ptr %p1
425 %e = load <3 x i8>, ptr %p2
426 %s = xor <3 x i8> %d, %e
427 store <3 x i8> %s, ptr %p1
431 define void @and_v4i8(ptr %p1, ptr %p2) {
432 ; CHECK-SD-LABEL: and_v4i8:
433 ; CHECK-SD: // %bb.0: // %entry
434 ; CHECK-SD-NEXT: ldr s0, [x0]
435 ; CHECK-SD-NEXT: ldr s1, [x1]
436 ; CHECK-SD-NEXT: ushll v0.8h, v0.8b, #0
437 ; CHECK-SD-NEXT: ushll v1.8h, v1.8b, #0
438 ; CHECK-SD-NEXT: and v0.8b, v0.8b, v1.8b
439 ; CHECK-SD-NEXT: uzp1 v0.8b, v0.8b, v0.8b
440 ; CHECK-SD-NEXT: str s0, [x0]
443 ; CHECK-GI-LABEL: and_v4i8:
444 ; CHECK-GI: // %bb.0: // %entry
445 ; CHECK-GI-NEXT: ldr w8, [x0]
446 ; CHECK-GI-NEXT: ldr w9, [x1]
447 ; CHECK-GI-NEXT: fmov s0, w8
448 ; CHECK-GI-NEXT: fmov s1, w9
449 ; CHECK-GI-NEXT: mov b2, v0.b[1]
450 ; CHECK-GI-NEXT: mov b3, v1.b[1]
451 ; CHECK-GI-NEXT: mov b4, v0.b[2]
452 ; CHECK-GI-NEXT: mov b5, v0.b[3]
453 ; CHECK-GI-NEXT: fmov w8, s2
454 ; CHECK-GI-NEXT: mov b2, v1.b[2]
455 ; CHECK-GI-NEXT: fmov w9, s3
456 ; CHECK-GI-NEXT: mov b3, v1.b[3]
457 ; CHECK-GI-NEXT: mov v0.h[1], w8
458 ; CHECK-GI-NEXT: mov v1.h[1], w9
459 ; CHECK-GI-NEXT: fmov w8, s4
460 ; CHECK-GI-NEXT: fmov w9, s2
461 ; CHECK-GI-NEXT: mov v0.h[2], w8
462 ; CHECK-GI-NEXT: mov v1.h[2], w9
463 ; CHECK-GI-NEXT: fmov w8, s5
464 ; CHECK-GI-NEXT: fmov w9, s3
465 ; CHECK-GI-NEXT: mov v0.h[3], w8
466 ; CHECK-GI-NEXT: mov v1.h[3], w9
467 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
468 ; CHECK-GI-NEXT: uzp1 v0.8b, v0.8b, v0.8b
469 ; CHECK-GI-NEXT: fmov w8, s0
470 ; CHECK-GI-NEXT: str w8, [x0]
473 %d = load <4 x i8>, ptr %p1
474 %e = load <4 x i8>, ptr %p2
475 %s = and <4 x i8> %d, %e
476 store <4 x i8> %s, ptr %p1
480 define void @or_v4i8(ptr %p1, ptr %p2) {
481 ; CHECK-SD-LABEL: or_v4i8:
482 ; CHECK-SD: // %bb.0: // %entry
483 ; CHECK-SD-NEXT: ldr s0, [x0]
484 ; CHECK-SD-NEXT: ldr s1, [x1]
485 ; CHECK-SD-NEXT: ushll v0.8h, v0.8b, #0
486 ; CHECK-SD-NEXT: ushll v1.8h, v1.8b, #0
487 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v1.8b
488 ; CHECK-SD-NEXT: uzp1 v0.8b, v0.8b, v0.8b
489 ; CHECK-SD-NEXT: str s0, [x0]
492 ; CHECK-GI-LABEL: or_v4i8:
493 ; CHECK-GI: // %bb.0: // %entry
494 ; CHECK-GI-NEXT: ldr w8, [x0]
495 ; CHECK-GI-NEXT: ldr w9, [x1]
496 ; CHECK-GI-NEXT: fmov s0, w8
497 ; CHECK-GI-NEXT: fmov s1, w9
498 ; CHECK-GI-NEXT: mov b2, v0.b[1]
499 ; CHECK-GI-NEXT: mov b3, v1.b[1]
500 ; CHECK-GI-NEXT: mov b4, v0.b[2]
501 ; CHECK-GI-NEXT: mov b5, v0.b[3]
502 ; CHECK-GI-NEXT: fmov w8, s2
503 ; CHECK-GI-NEXT: mov b2, v1.b[2]
504 ; CHECK-GI-NEXT: fmov w9, s3
505 ; CHECK-GI-NEXT: mov b3, v1.b[3]
506 ; CHECK-GI-NEXT: mov v0.h[1], w8
507 ; CHECK-GI-NEXT: mov v1.h[1], w9
508 ; CHECK-GI-NEXT: fmov w8, s4
509 ; CHECK-GI-NEXT: fmov w9, s2
510 ; CHECK-GI-NEXT: mov v0.h[2], w8
511 ; CHECK-GI-NEXT: mov v1.h[2], w9
512 ; CHECK-GI-NEXT: fmov w8, s5
513 ; CHECK-GI-NEXT: fmov w9, s3
514 ; CHECK-GI-NEXT: mov v0.h[3], w8
515 ; CHECK-GI-NEXT: mov v1.h[3], w9
516 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
517 ; CHECK-GI-NEXT: uzp1 v0.8b, v0.8b, v0.8b
518 ; CHECK-GI-NEXT: fmov w8, s0
519 ; CHECK-GI-NEXT: str w8, [x0]
522 %d = load <4 x i8>, ptr %p1
523 %e = load <4 x i8>, ptr %p2
524 %s = or <4 x i8> %d, %e
525 store <4 x i8> %s, ptr %p1
529 define void @xor_v4i8(ptr %p1, ptr %p2) {
530 ; CHECK-SD-LABEL: xor_v4i8:
531 ; CHECK-SD: // %bb.0: // %entry
532 ; CHECK-SD-NEXT: ldr s0, [x0]
533 ; CHECK-SD-NEXT: ldr s1, [x1]
534 ; CHECK-SD-NEXT: ushll v0.8h, v0.8b, #0
535 ; CHECK-SD-NEXT: ushll v1.8h, v1.8b, #0
536 ; CHECK-SD-NEXT: eor v0.8b, v0.8b, v1.8b
537 ; CHECK-SD-NEXT: uzp1 v0.8b, v0.8b, v0.8b
538 ; CHECK-SD-NEXT: str s0, [x0]
541 ; CHECK-GI-LABEL: xor_v4i8:
542 ; CHECK-GI: // %bb.0: // %entry
543 ; CHECK-GI-NEXT: ldr w8, [x0]
544 ; CHECK-GI-NEXT: ldr w9, [x1]
545 ; CHECK-GI-NEXT: fmov s0, w8
546 ; CHECK-GI-NEXT: fmov s1, w9
547 ; CHECK-GI-NEXT: mov b2, v0.b[1]
548 ; CHECK-GI-NEXT: mov b3, v1.b[1]
549 ; CHECK-GI-NEXT: mov b4, v0.b[2]
550 ; CHECK-GI-NEXT: mov b5, v0.b[3]
551 ; CHECK-GI-NEXT: fmov w8, s2
552 ; CHECK-GI-NEXT: mov b2, v1.b[2]
553 ; CHECK-GI-NEXT: fmov w9, s3
554 ; CHECK-GI-NEXT: mov b3, v1.b[3]
555 ; CHECK-GI-NEXT: mov v0.h[1], w8
556 ; CHECK-GI-NEXT: mov v1.h[1], w9
557 ; CHECK-GI-NEXT: fmov w8, s4
558 ; CHECK-GI-NEXT: fmov w9, s2
559 ; CHECK-GI-NEXT: mov v0.h[2], w8
560 ; CHECK-GI-NEXT: mov v1.h[2], w9
561 ; CHECK-GI-NEXT: fmov w8, s5
562 ; CHECK-GI-NEXT: fmov w9, s3
563 ; CHECK-GI-NEXT: mov v0.h[3], w8
564 ; CHECK-GI-NEXT: mov v1.h[3], w9
565 ; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
566 ; CHECK-GI-NEXT: uzp1 v0.8b, v0.8b, v0.8b
567 ; CHECK-GI-NEXT: fmov w8, s0
568 ; CHECK-GI-NEXT: str w8, [x0]
571 %d = load <4 x i8>, ptr %p1
572 %e = load <4 x i8>, ptr %p2
573 %s = xor <4 x i8> %d, %e
574 store <4 x i8> %s, ptr %p1
578 define <8 x i8> @and_v8i8(<8 x i8> %d, <8 x i8> %e) {
579 ; CHECK-LABEL: and_v8i8:
580 ; CHECK: // %bb.0: // %entry
581 ; CHECK-NEXT: and v0.8b, v0.8b, v1.8b
584 %s = and <8 x i8> %d, %e
588 define <8 x i8> @or_v8i8(<8 x i8> %d, <8 x i8> %e) {
589 ; CHECK-LABEL: or_v8i8:
590 ; CHECK: // %bb.0: // %entry
591 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
594 %s = or <8 x i8> %d, %e
598 define <8 x i8> @xor_v8i8(<8 x i8> %d, <8 x i8> %e) {
599 ; CHECK-LABEL: xor_v8i8:
600 ; CHECK: // %bb.0: // %entry
601 ; CHECK-NEXT: eor v0.8b, v0.8b, v1.8b
604 %s = xor <8 x i8> %d, %e
608 define <16 x i8> @and_v16i8(<16 x i8> %d, <16 x i8> %e) {
609 ; CHECK-LABEL: and_v16i8:
610 ; CHECK: // %bb.0: // %entry
611 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
614 %s = and <16 x i8> %d, %e
618 define <16 x i8> @or_v16i8(<16 x i8> %d, <16 x i8> %e) {
619 ; CHECK-LABEL: or_v16i8:
620 ; CHECK: // %bb.0: // %entry
621 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
624 %s = or <16 x i8> %d, %e
628 define <16 x i8> @xor_v16i8(<16 x i8> %d, <16 x i8> %e) {
629 ; CHECK-LABEL: xor_v16i8:
630 ; CHECK: // %bb.0: // %entry
631 ; CHECK-NEXT: eor v0.16b, v0.16b, v1.16b
634 %s = xor <16 x i8> %d, %e
638 define <32 x i8> @and_v32i8(<32 x i8> %d, <32 x i8> %e) {
639 ; CHECK-SD-LABEL: and_v32i8:
640 ; CHECK-SD: // %bb.0: // %entry
641 ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
642 ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
645 ; CHECK-GI-LABEL: and_v32i8:
646 ; CHECK-GI: // %bb.0: // %entry
647 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v2.16b
648 ; CHECK-GI-NEXT: and v1.16b, v1.16b, v3.16b
651 %s = and <32 x i8> %d, %e
655 define <32 x i8> @or_v32i8(<32 x i8> %d, <32 x i8> %e) {
656 ; CHECK-SD-LABEL: or_v32i8:
657 ; CHECK-SD: // %bb.0: // %entry
658 ; CHECK-SD-NEXT: orr v1.16b, v1.16b, v3.16b
659 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v2.16b
662 ; CHECK-GI-LABEL: or_v32i8:
663 ; CHECK-GI: // %bb.0: // %entry
664 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
665 ; CHECK-GI-NEXT: orr v1.16b, v1.16b, v3.16b
668 %s = or <32 x i8> %d, %e
672 define <32 x i8> @xor_v32i8(<32 x i8> %d, <32 x i8> %e) {
673 ; CHECK-SD-LABEL: xor_v32i8:
674 ; CHECK-SD: // %bb.0: // %entry
675 ; CHECK-SD-NEXT: eor v1.16b, v1.16b, v3.16b
676 ; CHECK-SD-NEXT: eor v0.16b, v0.16b, v2.16b
679 ; CHECK-GI-LABEL: xor_v32i8:
680 ; CHECK-GI: // %bb.0: // %entry
681 ; CHECK-GI-NEXT: eor v0.16b, v0.16b, v2.16b
682 ; CHECK-GI-NEXT: eor v1.16b, v1.16b, v3.16b
685 %s = xor <32 x i8> %d, %e
689 define void @and_v2i16(ptr %p1, ptr %p2) {
690 ; CHECK-SD-LABEL: and_v2i16:
691 ; CHECK-SD: // %bb.0: // %entry
692 ; CHECK-SD-NEXT: ld1 { v0.h }[0], [x0]
693 ; CHECK-SD-NEXT: ld1 { v1.h }[0], [x1]
694 ; CHECK-SD-NEXT: add x8, x0, #2
695 ; CHECK-SD-NEXT: add x9, x1, #2
696 ; CHECK-SD-NEXT: ld1 { v0.h }[2], [x8]
697 ; CHECK-SD-NEXT: ld1 { v1.h }[2], [x9]
698 ; CHECK-SD-NEXT: and v0.8b, v0.8b, v1.8b
699 ; CHECK-SD-NEXT: mov w8, v0.s[1]
700 ; CHECK-SD-NEXT: fmov w9, s0
701 ; CHECK-SD-NEXT: strh w9, [x0]
702 ; CHECK-SD-NEXT: strh w8, [x0, #2]
705 ; CHECK-GI-LABEL: and_v2i16:
706 ; CHECK-GI: // %bb.0: // %entry
707 ; CHECK-GI-NEXT: ld1 { v0.h }[0], [x0]
708 ; CHECK-GI-NEXT: ld1 { v1.h }[0], [x1]
709 ; CHECK-GI-NEXT: ldr h2, [x0, #2]
710 ; CHECK-GI-NEXT: ldr h3, [x1, #2]
711 ; CHECK-GI-NEXT: mov v0.s[1], v2.s[0]
712 ; CHECK-GI-NEXT: mov v1.s[1], v3.s[0]
713 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
714 ; CHECK-GI-NEXT: mov s1, v0.s[1]
715 ; CHECK-GI-NEXT: str h0, [x0]
716 ; CHECK-GI-NEXT: str h1, [x0, #2]
719 %d = load <2 x i16>, ptr %p1
720 %e = load <2 x i16>, ptr %p2
721 %s = and <2 x i16> %d, %e
722 store <2 x i16> %s, ptr %p1
726 define void @or_v2i16(ptr %p1, ptr %p2) {
727 ; CHECK-SD-LABEL: or_v2i16:
728 ; CHECK-SD: // %bb.0: // %entry
729 ; CHECK-SD-NEXT: ld1 { v0.h }[0], [x0]
730 ; CHECK-SD-NEXT: ld1 { v1.h }[0], [x1]
731 ; CHECK-SD-NEXT: add x8, x0, #2
732 ; CHECK-SD-NEXT: add x9, x1, #2
733 ; CHECK-SD-NEXT: ld1 { v0.h }[2], [x8]
734 ; CHECK-SD-NEXT: ld1 { v1.h }[2], [x9]
735 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v1.8b
736 ; CHECK-SD-NEXT: mov w8, v0.s[1]
737 ; CHECK-SD-NEXT: fmov w9, s0
738 ; CHECK-SD-NEXT: strh w9, [x0]
739 ; CHECK-SD-NEXT: strh w8, [x0, #2]
742 ; CHECK-GI-LABEL: or_v2i16:
743 ; CHECK-GI: // %bb.0: // %entry
744 ; CHECK-GI-NEXT: ld1 { v0.h }[0], [x0]
745 ; CHECK-GI-NEXT: ld1 { v1.h }[0], [x1]
746 ; CHECK-GI-NEXT: ldr h2, [x0, #2]
747 ; CHECK-GI-NEXT: ldr h3, [x1, #2]
748 ; CHECK-GI-NEXT: mov v0.s[1], v2.s[0]
749 ; CHECK-GI-NEXT: mov v1.s[1], v3.s[0]
750 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
751 ; CHECK-GI-NEXT: mov s1, v0.s[1]
752 ; CHECK-GI-NEXT: str h0, [x0]
753 ; CHECK-GI-NEXT: str h1, [x0, #2]
756 %d = load <2 x i16>, ptr %p1
757 %e = load <2 x i16>, ptr %p2
758 %s = or <2 x i16> %d, %e
759 store <2 x i16> %s, ptr %p1
763 define void @xor_v2i16(ptr %p1, ptr %p2) {
764 ; CHECK-SD-LABEL: xor_v2i16:
765 ; CHECK-SD: // %bb.0: // %entry
766 ; CHECK-SD-NEXT: ld1 { v0.h }[0], [x0]
767 ; CHECK-SD-NEXT: ld1 { v1.h }[0], [x1]
768 ; CHECK-SD-NEXT: add x8, x0, #2
769 ; CHECK-SD-NEXT: add x9, x1, #2
770 ; CHECK-SD-NEXT: ld1 { v0.h }[2], [x8]
771 ; CHECK-SD-NEXT: ld1 { v1.h }[2], [x9]
772 ; CHECK-SD-NEXT: eor v0.8b, v0.8b, v1.8b
773 ; CHECK-SD-NEXT: mov w8, v0.s[1]
774 ; CHECK-SD-NEXT: fmov w9, s0
775 ; CHECK-SD-NEXT: strh w9, [x0]
776 ; CHECK-SD-NEXT: strh w8, [x0, #2]
779 ; CHECK-GI-LABEL: xor_v2i16:
780 ; CHECK-GI: // %bb.0: // %entry
781 ; CHECK-GI-NEXT: ld1 { v0.h }[0], [x0]
782 ; CHECK-GI-NEXT: ld1 { v1.h }[0], [x1]
783 ; CHECK-GI-NEXT: ldr h2, [x0, #2]
784 ; CHECK-GI-NEXT: ldr h3, [x1, #2]
785 ; CHECK-GI-NEXT: mov v0.s[1], v2.s[0]
786 ; CHECK-GI-NEXT: mov v1.s[1], v3.s[0]
787 ; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
788 ; CHECK-GI-NEXT: mov s1, v0.s[1]
789 ; CHECK-GI-NEXT: str h0, [x0]
790 ; CHECK-GI-NEXT: str h1, [x0, #2]
793 %d = load <2 x i16>, ptr %p1
794 %e = load <2 x i16>, ptr %p2
795 %s = xor <2 x i16> %d, %e
796 store <2 x i16> %s, ptr %p1
800 define void @and_v3i16(ptr %p1, ptr %p2) {
801 ; CHECK-SD-LABEL: and_v3i16:
802 ; CHECK-SD: // %bb.0: // %entry
803 ; CHECK-SD-NEXT: ldr x8, [x0]
804 ; CHECK-SD-NEXT: ldr x9, [x1]
805 ; CHECK-SD-NEXT: and x8, x8, x9
806 ; CHECK-SD-NEXT: fmov d0, x8
807 ; CHECK-SD-NEXT: str w8, [x0]
808 ; CHECK-SD-NEXT: add x8, x0, #4
809 ; CHECK-SD-NEXT: st1 { v0.h }[2], [x8]
812 ; CHECK-GI-LABEL: and_v3i16:
813 ; CHECK-GI: // %bb.0: // %entry
814 ; CHECK-GI-NEXT: ldr h0, [x0]
815 ; CHECK-GI-NEXT: ldr h1, [x1]
816 ; CHECK-GI-NEXT: add x8, x0, #2
817 ; CHECK-GI-NEXT: add x9, x1, #2
818 ; CHECK-GI-NEXT: add x10, x1, #4
819 ; CHECK-GI-NEXT: ld1 { v0.h }[1], [x8]
820 ; CHECK-GI-NEXT: ld1 { v1.h }[1], [x9]
821 ; CHECK-GI-NEXT: add x9, x0, #4
822 ; CHECK-GI-NEXT: ld1 { v0.h }[2], [x9]
823 ; CHECK-GI-NEXT: ld1 { v1.h }[2], [x10]
824 ; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
825 ; CHECK-GI-NEXT: str h0, [x0]
826 ; CHECK-GI-NEXT: st1 { v0.h }[1], [x8]
827 ; CHECK-GI-NEXT: st1 { v0.h }[2], [x9]
830 %d = load <3 x i16>, ptr %p1
831 %e = load <3 x i16>, ptr %p2
832 %s = and <3 x i16> %d, %e
833 store <3 x i16> %s, ptr %p1
837 define void @or_v3i16(ptr %p1, ptr %p2) {
838 ; CHECK-SD-LABEL: or_v3i16:
839 ; CHECK-SD: // %bb.0: // %entry
840 ; CHECK-SD-NEXT: ldr x8, [x0]
841 ; CHECK-SD-NEXT: ldr x9, [x1]
842 ; CHECK-SD-NEXT: orr x8, x8, x9
843 ; CHECK-SD-NEXT: fmov d0, x8
844 ; CHECK-SD-NEXT: str w8, [x0]
845 ; CHECK-SD-NEXT: add x8, x0, #4
846 ; CHECK-SD-NEXT: st1 { v0.h }[2], [x8]
849 ; CHECK-GI-LABEL: or_v3i16:
850 ; CHECK-GI: // %bb.0: // %entry
851 ; CHECK-GI-NEXT: ldr h0, [x0]
852 ; CHECK-GI-NEXT: ldr h1, [x1]
853 ; CHECK-GI-NEXT: add x8, x0, #2
854 ; CHECK-GI-NEXT: add x9, x1, #2
855 ; CHECK-GI-NEXT: add x10, x1, #4
856 ; CHECK-GI-NEXT: ld1 { v0.h }[1], [x8]
857 ; CHECK-GI-NEXT: ld1 { v1.h }[1], [x9]
858 ; CHECK-GI-NEXT: add x9, x0, #4
859 ; CHECK-GI-NEXT: ld1 { v0.h }[2], [x9]
860 ; CHECK-GI-NEXT: ld1 { v1.h }[2], [x10]
861 ; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
862 ; CHECK-GI-NEXT: str h0, [x0]
863 ; CHECK-GI-NEXT: st1 { v0.h }[1], [x8]
864 ; CHECK-GI-NEXT: st1 { v0.h }[2], [x9]
867 %d = load <3 x i16>, ptr %p1
868 %e = load <3 x i16>, ptr %p2
869 %s = or <3 x i16> %d, %e
870 store <3 x i16> %s, ptr %p1
874 define void @xor_v3i16(ptr %p1, ptr %p2) {
875 ; CHECK-SD-LABEL: xor_v3i16:
876 ; CHECK-SD: // %bb.0: // %entry
877 ; CHECK-SD-NEXT: ldr x8, [x0]
878 ; CHECK-SD-NEXT: ldr x9, [x1]
879 ; CHECK-SD-NEXT: eor x8, x8, x9
880 ; CHECK-SD-NEXT: fmov d0, x8
881 ; CHECK-SD-NEXT: str w8, [x0]
882 ; CHECK-SD-NEXT: add x8, x0, #4
883 ; CHECK-SD-NEXT: st1 { v0.h }[2], [x8]
886 ; CHECK-GI-LABEL: xor_v3i16:
887 ; CHECK-GI: // %bb.0: // %entry
888 ; CHECK-GI-NEXT: ldr h0, [x0]
889 ; CHECK-GI-NEXT: ldr h1, [x1]
890 ; CHECK-GI-NEXT: add x8, x0, #2
891 ; CHECK-GI-NEXT: add x9, x1, #2
892 ; CHECK-GI-NEXT: add x10, x1, #4
893 ; CHECK-GI-NEXT: ld1 { v0.h }[1], [x8]
894 ; CHECK-GI-NEXT: ld1 { v1.h }[1], [x9]
895 ; CHECK-GI-NEXT: add x9, x0, #4
896 ; CHECK-GI-NEXT: ld1 { v0.h }[2], [x9]
897 ; CHECK-GI-NEXT: ld1 { v1.h }[2], [x10]
898 ; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
899 ; CHECK-GI-NEXT: str h0, [x0]
900 ; CHECK-GI-NEXT: st1 { v0.h }[1], [x8]
901 ; CHECK-GI-NEXT: st1 { v0.h }[2], [x9]
904 %d = load <3 x i16>, ptr %p1
905 %e = load <3 x i16>, ptr %p2
906 %s = xor <3 x i16> %d, %e
907 store <3 x i16> %s, ptr %p1
911 define <4 x i16> @and_v4i16(<4 x i16> %d, <4 x i16> %e) {
912 ; CHECK-LABEL: and_v4i16:
913 ; CHECK: // %bb.0: // %entry
914 ; CHECK-NEXT: and v0.8b, v0.8b, v1.8b
917 %s = and <4 x i16> %d, %e
921 define <4 x i16> @or_v4i16(<4 x i16> %d, <4 x i16> %e) {
922 ; CHECK-LABEL: or_v4i16:
923 ; CHECK: // %bb.0: // %entry
924 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
927 %s = or <4 x i16> %d, %e
931 define <4 x i16> @xor_v4i16(<4 x i16> %d, <4 x i16> %e) {
932 ; CHECK-LABEL: xor_v4i16:
933 ; CHECK: // %bb.0: // %entry
934 ; CHECK-NEXT: eor v0.8b, v0.8b, v1.8b
937 %s = xor <4 x i16> %d, %e
941 define <8 x i16> @and_v8i16(<8 x i16> %d, <8 x i16> %e) {
942 ; CHECK-LABEL: and_v8i16:
943 ; CHECK: // %bb.0: // %entry
944 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
947 %s = and <8 x i16> %d, %e
951 define <8 x i16> @or_v8i16(<8 x i16> %d, <8 x i16> %e) {
952 ; CHECK-LABEL: or_v8i16:
953 ; CHECK: // %bb.0: // %entry
954 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
957 %s = or <8 x i16> %d, %e
961 define <8 x i16> @xor_v8i16(<8 x i16> %d, <8 x i16> %e) {
962 ; CHECK-LABEL: xor_v8i16:
963 ; CHECK: // %bb.0: // %entry
964 ; CHECK-NEXT: eor v0.16b, v0.16b, v1.16b
967 %s = xor <8 x i16> %d, %e
971 define <16 x i16> @and_v16i16(<16 x i16> %d, <16 x i16> %e) {
972 ; CHECK-SD-LABEL: and_v16i16:
973 ; CHECK-SD: // %bb.0: // %entry
974 ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
975 ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
978 ; CHECK-GI-LABEL: and_v16i16:
979 ; CHECK-GI: // %bb.0: // %entry
980 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v2.16b
981 ; CHECK-GI-NEXT: and v1.16b, v1.16b, v3.16b
984 %s = and <16 x i16> %d, %e
988 define <16 x i16> @or_v16i16(<16 x i16> %d, <16 x i16> %e) {
989 ; CHECK-SD-LABEL: or_v16i16:
990 ; CHECK-SD: // %bb.0: // %entry
991 ; CHECK-SD-NEXT: orr v1.16b, v1.16b, v3.16b
992 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v2.16b
995 ; CHECK-GI-LABEL: or_v16i16:
996 ; CHECK-GI: // %bb.0: // %entry
997 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
998 ; CHECK-GI-NEXT: orr v1.16b, v1.16b, v3.16b
1001 %s = or <16 x i16> %d, %e
1005 define <16 x i16> @xor_v16i16(<16 x i16> %d, <16 x i16> %e) {
1006 ; CHECK-SD-LABEL: xor_v16i16:
1007 ; CHECK-SD: // %bb.0: // %entry
1008 ; CHECK-SD-NEXT: eor v1.16b, v1.16b, v3.16b
1009 ; CHECK-SD-NEXT: eor v0.16b, v0.16b, v2.16b
1010 ; CHECK-SD-NEXT: ret
1012 ; CHECK-GI-LABEL: xor_v16i16:
1013 ; CHECK-GI: // %bb.0: // %entry
1014 ; CHECK-GI-NEXT: eor v0.16b, v0.16b, v2.16b
1015 ; CHECK-GI-NEXT: eor v1.16b, v1.16b, v3.16b
1016 ; CHECK-GI-NEXT: ret
1018 %s = xor <16 x i16> %d, %e
1022 define <2 x i32> @and_v2i32(<2 x i32> %d, <2 x i32> %e) {
1023 ; CHECK-LABEL: and_v2i32:
1024 ; CHECK: // %bb.0: // %entry
1025 ; CHECK-NEXT: and v0.8b, v0.8b, v1.8b
1028 %s = and <2 x i32> %d, %e
1032 define <2 x i32> @or_v2i32(<2 x i32> %d, <2 x i32> %e) {
1033 ; CHECK-LABEL: or_v2i32:
1034 ; CHECK: // %bb.0: // %entry
1035 ; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
1038 %s = or <2 x i32> %d, %e
1042 define <2 x i32> @xor_v2i32(<2 x i32> %d, <2 x i32> %e) {
1043 ; CHECK-LABEL: xor_v2i32:
1044 ; CHECK: // %bb.0: // %entry
1045 ; CHECK-NEXT: eor v0.8b, v0.8b, v1.8b
1048 %s = xor <2 x i32> %d, %e
1052 define <3 x i32> @and_v3i32(<3 x i32> %d, <3 x i32> %e) {
1053 ; CHECK-LABEL: and_v3i32:
1054 ; CHECK: // %bb.0: // %entry
1055 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
1058 %s = and <3 x i32> %d, %e
1062 define <3 x i32> @or_v3i32(<3 x i32> %d, <3 x i32> %e) {
1063 ; CHECK-LABEL: or_v3i32:
1064 ; CHECK: // %bb.0: // %entry
1065 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
1068 %s = or <3 x i32> %d, %e
1072 define <3 x i32> @xor_v3i32(<3 x i32> %d, <3 x i32> %e) {
1073 ; CHECK-LABEL: xor_v3i32:
1074 ; CHECK: // %bb.0: // %entry
1075 ; CHECK-NEXT: eor v0.16b, v0.16b, v1.16b
1078 %s = xor <3 x i32> %d, %e
1082 define <4 x i32> @and_v4i32(<4 x i32> %d, <4 x i32> %e) {
1083 ; CHECK-LABEL: and_v4i32:
1084 ; CHECK: // %bb.0: // %entry
1085 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
1088 %s = and <4 x i32> %d, %e
1092 define <4 x i32> @or_v4i32(<4 x i32> %d, <4 x i32> %e) {
1093 ; CHECK-LABEL: or_v4i32:
1094 ; CHECK: // %bb.0: // %entry
1095 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
1098 %s = or <4 x i32> %d, %e
1102 define <4 x i32> @xor_v4i32(<4 x i32> %d, <4 x i32> %e) {
1103 ; CHECK-LABEL: xor_v4i32:
1104 ; CHECK: // %bb.0: // %entry
1105 ; CHECK-NEXT: eor v0.16b, v0.16b, v1.16b
1108 %s = xor <4 x i32> %d, %e
1112 define <8 x i32> @and_v8i32(<8 x i32> %d, <8 x i32> %e) {
1113 ; CHECK-SD-LABEL: and_v8i32:
1114 ; CHECK-SD: // %bb.0: // %entry
1115 ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
1116 ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
1117 ; CHECK-SD-NEXT: ret
1119 ; CHECK-GI-LABEL: and_v8i32:
1120 ; CHECK-GI: // %bb.0: // %entry
1121 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v2.16b
1122 ; CHECK-GI-NEXT: and v1.16b, v1.16b, v3.16b
1123 ; CHECK-GI-NEXT: ret
1125 %s = and <8 x i32> %d, %e
1129 define <8 x i32> @or_v8i32(<8 x i32> %d, <8 x i32> %e) {
1130 ; CHECK-SD-LABEL: or_v8i32:
1131 ; CHECK-SD: // %bb.0: // %entry
1132 ; CHECK-SD-NEXT: orr v1.16b, v1.16b, v3.16b
1133 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v2.16b
1134 ; CHECK-SD-NEXT: ret
1136 ; CHECK-GI-LABEL: or_v8i32:
1137 ; CHECK-GI: // %bb.0: // %entry
1138 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
1139 ; CHECK-GI-NEXT: orr v1.16b, v1.16b, v3.16b
1140 ; CHECK-GI-NEXT: ret
1142 %s = or <8 x i32> %d, %e
1146 define <8 x i32> @xor_v8i32(<8 x i32> %d, <8 x i32> %e) {
1147 ; CHECK-SD-LABEL: xor_v8i32:
1148 ; CHECK-SD: // %bb.0: // %entry
1149 ; CHECK-SD-NEXT: eor v1.16b, v1.16b, v3.16b
1150 ; CHECK-SD-NEXT: eor v0.16b, v0.16b, v2.16b
1151 ; CHECK-SD-NEXT: ret
1153 ; CHECK-GI-LABEL: xor_v8i32:
1154 ; CHECK-GI: // %bb.0: // %entry
1155 ; CHECK-GI-NEXT: eor v0.16b, v0.16b, v2.16b
1156 ; CHECK-GI-NEXT: eor v1.16b, v1.16b, v3.16b
1157 ; CHECK-GI-NEXT: ret
1159 %s = xor <8 x i32> %d, %e
1163 define <2 x i64> @and_v2i64(<2 x i64> %d, <2 x i64> %e) {
1164 ; CHECK-LABEL: and_v2i64:
1165 ; CHECK: // %bb.0: // %entry
1166 ; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
1169 %s = and <2 x i64> %d, %e
1173 define <2 x i64> @or_v2i64(<2 x i64> %d, <2 x i64> %e) {
1174 ; CHECK-LABEL: or_v2i64:
1175 ; CHECK: // %bb.0: // %entry
1176 ; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
1179 %s = or <2 x i64> %d, %e
1183 define <2 x i64> @xor_v2i64(<2 x i64> %d, <2 x i64> %e) {
1184 ; CHECK-LABEL: xor_v2i64:
1185 ; CHECK: // %bb.0: // %entry
1186 ; CHECK-NEXT: eor v0.16b, v0.16b, v1.16b
1189 %s = xor <2 x i64> %d, %e
1193 define <3 x i64> @and_v3i64(<3 x i64> %d, <3 x i64> %e) {
1194 ; CHECK-SD-LABEL: and_v3i64:
1195 ; CHECK-SD: // %bb.0: // %entry
1196 ; CHECK-SD-NEXT: and v0.8b, v0.8b, v3.8b
1197 ; CHECK-SD-NEXT: and v1.8b, v1.8b, v4.8b
1198 ; CHECK-SD-NEXT: and v2.8b, v2.8b, v5.8b
1199 ; CHECK-SD-NEXT: ret
1201 ; CHECK-GI-LABEL: and_v3i64:
1202 ; CHECK-GI: // %bb.0: // %entry
1203 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1204 ; CHECK-GI-NEXT: // kill: def $d3 killed $d3 def $q3
1205 ; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
1206 ; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q4
1207 ; CHECK-GI-NEXT: fmov x8, d2
1208 ; CHECK-GI-NEXT: fmov x9, d5
1209 ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
1210 ; CHECK-GI-NEXT: mov v3.d[1], v4.d[0]
1211 ; CHECK-GI-NEXT: and x8, x8, x9
1212 ; CHECK-GI-NEXT: fmov d2, x8
1213 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v3.16b
1214 ; CHECK-GI-NEXT: mov d1, v0.d[1]
1215 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
1216 ; CHECK-GI-NEXT: ret
1218 %s = and <3 x i64> %d, %e
1222 define <3 x i64> @or_v3i64(<3 x i64> %d, <3 x i64> %e) {
1223 ; CHECK-SD-LABEL: or_v3i64:
1224 ; CHECK-SD: // %bb.0: // %entry
1225 ; CHECK-SD-NEXT: orr v0.8b, v0.8b, v3.8b
1226 ; CHECK-SD-NEXT: orr v1.8b, v1.8b, v4.8b
1227 ; CHECK-SD-NEXT: orr v2.8b, v2.8b, v5.8b
1228 ; CHECK-SD-NEXT: ret
1230 ; CHECK-GI-LABEL: or_v3i64:
1231 ; CHECK-GI: // %bb.0: // %entry
1232 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1233 ; CHECK-GI-NEXT: // kill: def $d3 killed $d3 def $q3
1234 ; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
1235 ; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q4
1236 ; CHECK-GI-NEXT: fmov x8, d2
1237 ; CHECK-GI-NEXT: fmov x9, d5
1238 ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
1239 ; CHECK-GI-NEXT: mov v3.d[1], v4.d[0]
1240 ; CHECK-GI-NEXT: orr x8, x8, x9
1241 ; CHECK-GI-NEXT: fmov d2, x8
1242 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v3.16b
1243 ; CHECK-GI-NEXT: mov d1, v0.d[1]
1244 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
1245 ; CHECK-GI-NEXT: ret
1247 %s = or <3 x i64> %d, %e
1251 define <3 x i64> @xor_v3i64(<3 x i64> %d, <3 x i64> %e) {
1252 ; CHECK-SD-LABEL: xor_v3i64:
1253 ; CHECK-SD: // %bb.0: // %entry
1254 ; CHECK-SD-NEXT: eor v0.8b, v0.8b, v3.8b
1255 ; CHECK-SD-NEXT: eor v1.8b, v1.8b, v4.8b
1256 ; CHECK-SD-NEXT: eor v2.8b, v2.8b, v5.8b
1257 ; CHECK-SD-NEXT: ret
1259 ; CHECK-GI-LABEL: xor_v3i64:
1260 ; CHECK-GI: // %bb.0: // %entry
1261 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1262 ; CHECK-GI-NEXT: // kill: def $d3 killed $d3 def $q3
1263 ; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
1264 ; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q4
1265 ; CHECK-GI-NEXT: fmov x8, d2
1266 ; CHECK-GI-NEXT: fmov x9, d5
1267 ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
1268 ; CHECK-GI-NEXT: mov v3.d[1], v4.d[0]
1269 ; CHECK-GI-NEXT: eor x8, x8, x9
1270 ; CHECK-GI-NEXT: fmov d2, x8
1271 ; CHECK-GI-NEXT: eor v0.16b, v0.16b, v3.16b
1272 ; CHECK-GI-NEXT: mov d1, v0.d[1]
1273 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
1274 ; CHECK-GI-NEXT: ret
1276 %s = xor <3 x i64> %d, %e
1280 define <4 x i64> @and_v4i64(<4 x i64> %d, <4 x i64> %e) {
1281 ; CHECK-SD-LABEL: and_v4i64:
1282 ; CHECK-SD: // %bb.0: // %entry
1283 ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
1284 ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
1285 ; CHECK-SD-NEXT: ret
1287 ; CHECK-GI-LABEL: and_v4i64:
1288 ; CHECK-GI: // %bb.0: // %entry
1289 ; CHECK-GI-NEXT: and v0.16b, v0.16b, v2.16b
1290 ; CHECK-GI-NEXT: and v1.16b, v1.16b, v3.16b
1291 ; CHECK-GI-NEXT: ret
1293 %s = and <4 x i64> %d, %e
1297 define <4 x i64> @or_v4i64(<4 x i64> %d, <4 x i64> %e) {
1298 ; CHECK-SD-LABEL: or_v4i64:
1299 ; CHECK-SD: // %bb.0: // %entry
1300 ; CHECK-SD-NEXT: orr v1.16b, v1.16b, v3.16b
1301 ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v2.16b
1302 ; CHECK-SD-NEXT: ret
1304 ; CHECK-GI-LABEL: or_v4i64:
1305 ; CHECK-GI: // %bb.0: // %entry
1306 ; CHECK-GI-NEXT: orr v0.16b, v0.16b, v2.16b
1307 ; CHECK-GI-NEXT: orr v1.16b, v1.16b, v3.16b
1308 ; CHECK-GI-NEXT: ret
1310 %s = or <4 x i64> %d, %e
1314 define <4 x i64> @xor_v4i64(<4 x i64> %d, <4 x i64> %e) {
1315 ; CHECK-SD-LABEL: xor_v4i64:
1316 ; CHECK-SD: // %bb.0: // %entry
1317 ; CHECK-SD-NEXT: eor v1.16b, v1.16b, v3.16b
1318 ; CHECK-SD-NEXT: eor v0.16b, v0.16b, v2.16b
1319 ; CHECK-SD-NEXT: ret
1321 ; CHECK-GI-LABEL: xor_v4i64:
1322 ; CHECK-GI: // %bb.0: // %entry
1323 ; CHECK-GI-NEXT: eor v0.16b, v0.16b, v2.16b
1324 ; CHECK-GI-NEXT: eor v1.16b, v1.16b, v3.16b
1325 ; CHECK-GI-NEXT: ret
1327 %s = xor <4 x i64> %d, %e
1331 define <2 x i128> @and_v2i128(<2 x i128> %d, <2 x i128> %e) {
1332 ; CHECK-SD-LABEL: and_v2i128:
1333 ; CHECK-SD: // %bb.0: // %entry
1334 ; CHECK-SD-NEXT: and x2, x2, x6
1335 ; CHECK-SD-NEXT: and x0, x0, x4
1336 ; CHECK-SD-NEXT: and x1, x1, x5
1337 ; CHECK-SD-NEXT: and x3, x3, x7
1338 ; CHECK-SD-NEXT: ret
1340 ; CHECK-GI-LABEL: and_v2i128:
1341 ; CHECK-GI: // %bb.0: // %entry
1342 ; CHECK-GI-NEXT: and x0, x0, x4
1343 ; CHECK-GI-NEXT: and x1, x1, x5
1344 ; CHECK-GI-NEXT: and x2, x2, x6
1345 ; CHECK-GI-NEXT: and x3, x3, x7
1346 ; CHECK-GI-NEXT: ret
1348 %s = and <2 x i128> %d, %e
1352 define <2 x i128> @or_v2i128(<2 x i128> %d, <2 x i128> %e) {
1353 ; CHECK-SD-LABEL: or_v2i128:
1354 ; CHECK-SD: // %bb.0: // %entry
1355 ; CHECK-SD-NEXT: orr x2, x2, x6
1356 ; CHECK-SD-NEXT: orr x0, x0, x4
1357 ; CHECK-SD-NEXT: orr x1, x1, x5
1358 ; CHECK-SD-NEXT: orr x3, x3, x7
1359 ; CHECK-SD-NEXT: ret
1361 ; CHECK-GI-LABEL: or_v2i128:
1362 ; CHECK-GI: // %bb.0: // %entry
1363 ; CHECK-GI-NEXT: orr x0, x0, x4
1364 ; CHECK-GI-NEXT: orr x1, x1, x5
1365 ; CHECK-GI-NEXT: orr x2, x2, x6
1366 ; CHECK-GI-NEXT: orr x3, x3, x7
1367 ; CHECK-GI-NEXT: ret
1369 %s = or <2 x i128> %d, %e
1373 define <2 x i128> @xor_v2i128(<2 x i128> %d, <2 x i128> %e) {
1374 ; CHECK-SD-LABEL: xor_v2i128:
1375 ; CHECK-SD: // %bb.0: // %entry
1376 ; CHECK-SD-NEXT: eor x2, x2, x6
1377 ; CHECK-SD-NEXT: eor x0, x0, x4
1378 ; CHECK-SD-NEXT: eor x1, x1, x5
1379 ; CHECK-SD-NEXT: eor x3, x3, x7
1380 ; CHECK-SD-NEXT: ret
1382 ; CHECK-GI-LABEL: xor_v2i128:
1383 ; CHECK-GI: // %bb.0: // %entry
1384 ; CHECK-GI-NEXT: eor x0, x0, x4
1385 ; CHECK-GI-NEXT: eor x1, x1, x5
1386 ; CHECK-GI-NEXT: eor x2, x2, x6
1387 ; CHECK-GI-NEXT: eor x3, x3, x7
1388 ; CHECK-GI-NEXT: ret
1390 %s = xor <2 x i128> %d, %e
1394 define <3 x i128> @and_v3i128(<3 x i128> %d, <3 x i128> %e) {
1395 ; CHECK-SD-LABEL: and_v3i128:
1396 ; CHECK-SD: // %bb.0: // %entry
1397 ; CHECK-SD-NEXT: ldp x8, x9, [sp]
1398 ; CHECK-SD-NEXT: and x0, x0, x6
1399 ; CHECK-SD-NEXT: ldp x11, x10, [sp, #16]
1400 ; CHECK-SD-NEXT: and x1, x1, x7
1401 ; CHECK-SD-NEXT: and x2, x2, x8
1402 ; CHECK-SD-NEXT: and x3, x3, x9
1403 ; CHECK-SD-NEXT: and x4, x4, x11
1404 ; CHECK-SD-NEXT: and x5, x5, x10
1405 ; CHECK-SD-NEXT: ret
1407 ; CHECK-GI-LABEL: and_v3i128:
1408 ; CHECK-GI: // %bb.0: // %entry
1409 ; CHECK-GI-NEXT: ldp x8, x9, [sp]
1410 ; CHECK-GI-NEXT: and x0, x0, x6
1411 ; CHECK-GI-NEXT: ldp x10, x11, [sp, #16]
1412 ; CHECK-GI-NEXT: and x1, x1, x7
1413 ; CHECK-GI-NEXT: and x2, x2, x8
1414 ; CHECK-GI-NEXT: and x3, x3, x9
1415 ; CHECK-GI-NEXT: and x4, x4, x10
1416 ; CHECK-GI-NEXT: and x5, x5, x11
1417 ; CHECK-GI-NEXT: ret
1419 %s = and <3 x i128> %d, %e
1423 define <3 x i128> @or_v3i128(<3 x i128> %d, <3 x i128> %e) {
1424 ; CHECK-SD-LABEL: or_v3i128:
1425 ; CHECK-SD: // %bb.0: // %entry
1426 ; CHECK-SD-NEXT: ldp x8, x9, [sp]
1427 ; CHECK-SD-NEXT: orr x0, x0, x6
1428 ; CHECK-SD-NEXT: ldp x11, x10, [sp, #16]
1429 ; CHECK-SD-NEXT: orr x1, x1, x7
1430 ; CHECK-SD-NEXT: orr x2, x2, x8
1431 ; CHECK-SD-NEXT: orr x3, x3, x9
1432 ; CHECK-SD-NEXT: orr x4, x4, x11
1433 ; CHECK-SD-NEXT: orr x5, x5, x10
1434 ; CHECK-SD-NEXT: ret
1436 ; CHECK-GI-LABEL: or_v3i128:
1437 ; CHECK-GI: // %bb.0: // %entry
1438 ; CHECK-GI-NEXT: ldp x8, x9, [sp]
1439 ; CHECK-GI-NEXT: orr x0, x0, x6
1440 ; CHECK-GI-NEXT: ldp x10, x11, [sp, #16]
1441 ; CHECK-GI-NEXT: orr x1, x1, x7
1442 ; CHECK-GI-NEXT: orr x2, x2, x8
1443 ; CHECK-GI-NEXT: orr x3, x3, x9
1444 ; CHECK-GI-NEXT: orr x4, x4, x10
1445 ; CHECK-GI-NEXT: orr x5, x5, x11
1446 ; CHECK-GI-NEXT: ret
1448 %s = or <3 x i128> %d, %e
1452 define <3 x i128> @xor_v3i128(<3 x i128> %d, <3 x i128> %e) {
1453 ; CHECK-SD-LABEL: xor_v3i128:
1454 ; CHECK-SD: // %bb.0: // %entry
1455 ; CHECK-SD-NEXT: ldp x8, x9, [sp]
1456 ; CHECK-SD-NEXT: eor x0, x0, x6
1457 ; CHECK-SD-NEXT: ldp x11, x10, [sp, #16]
1458 ; CHECK-SD-NEXT: eor x1, x1, x7
1459 ; CHECK-SD-NEXT: eor x2, x2, x8
1460 ; CHECK-SD-NEXT: eor x3, x3, x9
1461 ; CHECK-SD-NEXT: eor x4, x4, x11
1462 ; CHECK-SD-NEXT: eor x5, x5, x10
1463 ; CHECK-SD-NEXT: ret
1465 ; CHECK-GI-LABEL: xor_v3i128:
1466 ; CHECK-GI: // %bb.0: // %entry
1467 ; CHECK-GI-NEXT: ldp x8, x9, [sp]
1468 ; CHECK-GI-NEXT: eor x0, x0, x6
1469 ; CHECK-GI-NEXT: ldp x10, x11, [sp, #16]
1470 ; CHECK-GI-NEXT: eor x1, x1, x7
1471 ; CHECK-GI-NEXT: eor x2, x2, x8
1472 ; CHECK-GI-NEXT: eor x3, x3, x9
1473 ; CHECK-GI-NEXT: eor x4, x4, x10
1474 ; CHECK-GI-NEXT: eor x5, x5, x11
1475 ; CHECK-GI-NEXT: ret
1477 %s = xor <3 x i128> %d, %e
1481 define <4 x i128> @and_v4i128(<4 x i128> %d, <4 x i128> %e) {
1482 ; CHECK-SD-LABEL: and_v4i128:
1483 ; CHECK-SD: // %bb.0: // %entry
1484 ; CHECK-SD-NEXT: ldp x9, x8, [sp, #32]
1485 ; CHECK-SD-NEXT: ldp x11, x10, [sp]
1486 ; CHECK-SD-NEXT: ldp x13, x12, [sp, #16]
1487 ; CHECK-SD-NEXT: ldp x15, x14, [sp, #48]
1488 ; CHECK-SD-NEXT: and x4, x4, x9
1489 ; CHECK-SD-NEXT: and x0, x0, x11
1490 ; CHECK-SD-NEXT: and x1, x1, x10
1491 ; CHECK-SD-NEXT: and x5, x5, x8
1492 ; CHECK-SD-NEXT: and x2, x2, x13
1493 ; CHECK-SD-NEXT: and x3, x3, x12
1494 ; CHECK-SD-NEXT: and x6, x6, x15
1495 ; CHECK-SD-NEXT: and x7, x7, x14
1496 ; CHECK-SD-NEXT: ret
1498 ; CHECK-GI-LABEL: and_v4i128:
1499 ; CHECK-GI: // %bb.0: // %entry
1500 ; CHECK-GI-NEXT: ldp x8, x9, [sp]
1501 ; CHECK-GI-NEXT: ldp x10, x11, [sp, #16]
1502 ; CHECK-GI-NEXT: ldp x12, x13, [sp, #32]
1503 ; CHECK-GI-NEXT: ldp x14, x15, [sp, #48]
1504 ; CHECK-GI-NEXT: and x0, x0, x8
1505 ; CHECK-GI-NEXT: and x1, x1, x9
1506 ; CHECK-GI-NEXT: and x2, x2, x10
1507 ; CHECK-GI-NEXT: and x3, x3, x11
1508 ; CHECK-GI-NEXT: and x4, x4, x12
1509 ; CHECK-GI-NEXT: and x5, x5, x13
1510 ; CHECK-GI-NEXT: and x6, x6, x14
1511 ; CHECK-GI-NEXT: and x7, x7, x15
1512 ; CHECK-GI-NEXT: ret
1514 %s = and <4 x i128> %d, %e
1518 define <4 x i128> @or_v4i128(<4 x i128> %d, <4 x i128> %e) {
1519 ; CHECK-SD-LABEL: or_v4i128:
1520 ; CHECK-SD: // %bb.0: // %entry
1521 ; CHECK-SD-NEXT: ldp x9, x8, [sp, #32]
1522 ; CHECK-SD-NEXT: ldp x11, x10, [sp]
1523 ; CHECK-SD-NEXT: ldp x13, x12, [sp, #16]
1524 ; CHECK-SD-NEXT: ldp x15, x14, [sp, #48]
1525 ; CHECK-SD-NEXT: orr x4, x4, x9
1526 ; CHECK-SD-NEXT: orr x0, x0, x11
1527 ; CHECK-SD-NEXT: orr x1, x1, x10
1528 ; CHECK-SD-NEXT: orr x5, x5, x8
1529 ; CHECK-SD-NEXT: orr x2, x2, x13
1530 ; CHECK-SD-NEXT: orr x3, x3, x12
1531 ; CHECK-SD-NEXT: orr x6, x6, x15
1532 ; CHECK-SD-NEXT: orr x7, x7, x14
1533 ; CHECK-SD-NEXT: ret
1535 ; CHECK-GI-LABEL: or_v4i128:
1536 ; CHECK-GI: // %bb.0: // %entry
1537 ; CHECK-GI-NEXT: ldp x8, x9, [sp]
1538 ; CHECK-GI-NEXT: ldp x10, x11, [sp, #16]
1539 ; CHECK-GI-NEXT: ldp x12, x13, [sp, #32]
1540 ; CHECK-GI-NEXT: ldp x14, x15, [sp, #48]
1541 ; CHECK-GI-NEXT: orr x0, x0, x8
1542 ; CHECK-GI-NEXT: orr x1, x1, x9
1543 ; CHECK-GI-NEXT: orr x2, x2, x10
1544 ; CHECK-GI-NEXT: orr x3, x3, x11
1545 ; CHECK-GI-NEXT: orr x4, x4, x12
1546 ; CHECK-GI-NEXT: orr x5, x5, x13
1547 ; CHECK-GI-NEXT: orr x6, x6, x14
1548 ; CHECK-GI-NEXT: orr x7, x7, x15
1549 ; CHECK-GI-NEXT: ret
1551 %s = or <4 x i128> %d, %e
1555 define <4 x i128> @xor_v4i128(<4 x i128> %d, <4 x i128> %e) {
1556 ; CHECK-SD-LABEL: xor_v4i128:
1557 ; CHECK-SD: // %bb.0: // %entry
1558 ; CHECK-SD-NEXT: ldp x9, x8, [sp, #32]
1559 ; CHECK-SD-NEXT: ldp x11, x10, [sp]
1560 ; CHECK-SD-NEXT: ldp x13, x12, [sp, #16]
1561 ; CHECK-SD-NEXT: ldp x15, x14, [sp, #48]
1562 ; CHECK-SD-NEXT: eor x4, x4, x9
1563 ; CHECK-SD-NEXT: eor x0, x0, x11
1564 ; CHECK-SD-NEXT: eor x1, x1, x10
1565 ; CHECK-SD-NEXT: eor x5, x5, x8
1566 ; CHECK-SD-NEXT: eor x2, x2, x13
1567 ; CHECK-SD-NEXT: eor x3, x3, x12
1568 ; CHECK-SD-NEXT: eor x6, x6, x15
1569 ; CHECK-SD-NEXT: eor x7, x7, x14
1570 ; CHECK-SD-NEXT: ret
1572 ; CHECK-GI-LABEL: xor_v4i128:
1573 ; CHECK-GI: // %bb.0: // %entry
1574 ; CHECK-GI-NEXT: ldp x8, x9, [sp]
1575 ; CHECK-GI-NEXT: ldp x10, x11, [sp, #16]
1576 ; CHECK-GI-NEXT: ldp x12, x13, [sp, #32]
1577 ; CHECK-GI-NEXT: ldp x14, x15, [sp, #48]
1578 ; CHECK-GI-NEXT: eor x0, x0, x8
1579 ; CHECK-GI-NEXT: eor x1, x1, x9
1580 ; CHECK-GI-NEXT: eor x2, x2, x10
1581 ; CHECK-GI-NEXT: eor x3, x3, x11
1582 ; CHECK-GI-NEXT: eor x4, x4, x12
1583 ; CHECK-GI-NEXT: eor x5, x5, x13
1584 ; CHECK-GI-NEXT: eor x6, x6, x14
1585 ; CHECK-GI-NEXT: eor x7, x7, x15
1586 ; CHECK-GI-NEXT: ret
1588 %s = xor <4 x i128> %d, %e