Home | History | Annotate | Download | only in arm32
      1 ; Show that we know how to translate veor vector instructions.
      2 
      3 ; REQUIRES: allow_dump
      4 
      5 ; Compile using standalone assembler.
      6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -O2 \
      7 ; RUN:   | FileCheck %s --check-prefix=ASM
      8 
      9 ; Show bytes in assembled standalone code.
     10 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \
     11 ; RUN:   --args -O2 \
     12 ; RUN:   | FileCheck %s --check-prefix=DIS
     13 
     14 ; Compile using integrated assembler.
     15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -O2 \
     16 ; RUN:   | FileCheck %s --check-prefix=IASM
     17 
     18 ; Show bytes in assembled integrated code.
     19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \
     20 ; RUN:   --args -O2 \
     21 ; RUN:   | FileCheck %s --check-prefix=DIS
     22 
     23 define internal <4 x i32> @testVxor4i32(<4 x i32> %v1, <4 x i32> %v2) {
     24 ; ASM-LABEL: testVxor4i32:
     25 ; DIS-LABEL: 00000000 <testVxor4i32>:
     26 ; IASM-LABEL: testVxor4i32:
     27 
     28 entry:
     29   %res = xor <4 x i32> %v1, %v2
     30 
     31 ; ASM:     veor.i32        q0, q0, q1
     32 ; DIS:   0:       f3000152
     33 ; IASM-NOT:     veor.i32
     34 
     35   ret <4 x i32> %res
     36 }
     37 
     38 define internal <8 x i16> @testVxor8i16(<8 x i16> %v1, <8 x i16> %v2) {
     39 ; ASM-LABEL: testVxor8i16:
     40 ; DIS-LABEL: 00000010 <testVxor8i16>:
     41 ; IASM-LABEL: testVxor8i16:
     42 
     43 entry:
     44   %res = xor <8 x i16> %v1, %v2
     45 
     46 ; ASM:     veor.i16        q0, q0, q1
     47 ; DIS:   10:       f3000152
     48 ; IASM-NOT:     veor.i16
     49 
     50   ret <8 x i16> %res
     51 }
     52 
     53 define internal <16 x i8> @testVxor16i8(<16 x i8> %v1, <16 x i8> %v2) {
     54 ; ASM-LABEL: testVxor16i8:
     55 ; DIS-LABEL: 00000020 <testVxor16i8>:
     56 ; IASM-LABEL: testVxor16i8:
     57 
     58 entry:
     59   %res = xor <16 x i8> %v1, %v2
     60 
     61 ; ASM:     veor.i8        q0, q0, q1
     62 ; DIS:   20:       f3000152
     63 ; IASM-NOT:     veor.i8
     64 
     65   ret <16 x i8> %res
     66 }
     67 
     68 ;;
     69 ;; The following tests make sure logical xor works on predicate vectors.
     70 ;;
     71 
     72 define internal <4 x i1> @testVxor4i1(<4 x i1> %v1, <4 x i1> %v2) {
     73 ; ASM-LABEL: testVxor4i1:
     74 ; DIS-LABEL: 00000030 <testVxor4i1>:
     75 ; IASM-LABEL: testVxor4i1:
     76 
     77 entry:
     78   %res = xor <4 x i1> %v1, %v2
     79 
     80 ; ASM:     veor.i32        q0, q0, q1
     81 ; DIS:   30:       f3000152
     82 ; IASM-NOT:     veor.i32
     83 
     84   ret <4 x i1> %res
     85 }
     86 
     87 define internal <8 x i1> @testVxor8i1(<8 x i1> %v1, <8 x i1> %v2) {
     88 ; ASM-LABEL: testVxor8i1:
     89 ; DIS-LABEL: 00000040 <testVxor8i1>:
     90 ; IASM-LABEL: testVxor8i1:
     91 
     92 entry:
     93   %res = xor <8 x i1> %v1, %v2
     94 
     95 ; ASM:     veor.i16        q0, q0, q1
     96 ; DIS:   40:       f3000152
     97 ; IASM-NOT:     veor.i16
     98 
     99   ret <8 x i1> %res
    100 }
    101 
    102 define internal <16 x i1> @testVxor16i1(<16 x i1> %v1, <16 x i1> %v2) {
    103 ; ASM-LABEL: testVxor16i1:
    104 ; DIS-LABEL: 00000050 <testVxor16i1>:
    105 ; IASM-LABEL: testVxor16i1:
    106 
    107 entry:
    108   %res = xor <16 x i1> %v1, %v2
    109 
    110 ; ASM:     veor.i8        q0, q0, q1
    111 ; DIS:   50:       f3000152
    112 ; IASM-NOT:     veor.i8
    113 
    114   ret <16 x i1> %res
    115 }
    116