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