Home | History | Annotate | Download | only in arm32
      1 ; Show that we know how to translate vmul 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:   -reg-use q10,q11 \
      8 ; RUN:   | FileCheck %s --check-prefix=ASM
      9 
     10 ; Show bytes in assembled standalone code.
     11 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \
     12 ; RUN:   --args -O2 \
     13 ; RUN:   -reg-use q10,q11 \
     14 ; RUN:   | FileCheck %s --check-prefix=DIS
     15 
     16 ; Compile using integrated assembler.
     17 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -O2 \
     18 ; RUN:   -reg-use q10,q11 \
     19 ; RUN:   | FileCheck %s --check-prefix=IASM
     20 
     21 ; Show bytes in assembled integrated code.
     22 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \
     23 ; RUN:   --args -O2 \
     24 ; RUN:   -reg-use q10,q11 \
     25 ; RUN:   | FileCheck %s --check-prefix=DIS
     26 
     27 define internal <4 x float> @testVmulFloat4(<4 x float> %v1, <4 x float> %v2) {
     28 ; ASM-LABEL: testVmulFloat4:
     29 ; DIS-LABEL: 00000000 <testVmulFloat4>:
     30 ; IASM-LABEL: testVmulFloat4:
     31 
     32 entry:
     33   %res = fmul <4 x float> %v1, %v2
     34 
     35 ; ASM:     vmul.f32        q10, q10, q11
     36 ; DIS:   8:       f3444df6
     37 ; IASM-NOT:     vmul.f32
     38 
     39   ret <4 x float> %res
     40 }
     41 
     42 define internal <4 x i32> @testVmul4i32(<4 x i32> %v1, <4 x i32> %v2) {
     43 ; ASM-LABEL: testVmul4i32:
     44 ; DIS-LABEL: 00000020 <testVmul4i32>:
     45 ; IASM-LABEL: testVmul4i32:
     46 
     47 entry:
     48   %res = mul <4 x i32> %v1, %v2
     49 
     50 ; ASM:     vmul.i32        q10, q10, q11
     51 ; DIS:   28:       f26449f6
     52 ; IASM-NOT:     vmul.i32
     53 
     54   ret <4 x i32> %res
     55 }
     56 
     57 define internal <8 x i16> @testVmul8i16(<8 x i16> %v1, <8 x i16> %v2) {
     58 ; ASM-LABEL: testVmul8i16:
     59 ; DIS-LABEL: 00000040 <testVmul8i16>:
     60 ; IASM-LABEL: testVmul8i16:
     61 
     62 entry:
     63   %res = mul <8 x i16> %v1, %v2
     64 
     65 ; ASM:     vmul.i16        q10, q10, q11
     66 ; DIS:   48:       f25449f6
     67 ; IASM-NOT:     vmul.i16
     68 
     69   ret <8 x i16> %res
     70 }
     71 
     72 define internal <16 x i8> @testVmul16i8(<16 x i8> %v1, <16 x i8> %v2) {
     73 ; ASM-LABEL: testVmul16i8:
     74 ; DIS-LABEL: 00000060 <testVmul16i8>:
     75 ; IASM-LABEL: testVmul16i8:
     76 
     77 entry:
     78   %res = mul <16 x i8> %v1, %v2
     79 
     80 ; ASM:     vmul.i8        q10, q10, q11
     81 ; DIS:   68:       f24449f6
     82 ; IASM-NOT:     vmul.i8
     83 
     84   ret <16 x i8> %res
     85 }
     86