1 ; RUN: llc -show-mc-encoding -march=arm -mcpu=cortex-a8 -mattr=+neon < %s | FileCheck %s
3 ; FIXME: The following instructions still require testing:
4 ; - vand with immediate, vorr with immediate
8 define <8 x i8> @vand_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
9 %tmp1 = load <8 x i8>* %A
10 %tmp2 = load <8 x i8>* %B
11 ; CHECK: vand d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xf2]
12 %tmp3 = and <8 x i8> %tmp1, %tmp2
17 define <16 x i8> @vand_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
18 %tmp1 = load <16 x i8>* %A
19 %tmp2 = load <16 x i8>* %B
20 ; CHECK: vand q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xf2]
21 %tmp3 = and <16 x i8> %tmp1, %tmp2
26 define <8 x i8> @veor_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
27 %tmp1 = load <8 x i8>* %A
28 %tmp2 = load <8 x i8>* %B
29 ; CHECK: veor d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xf3]
30 %tmp3 = xor <8 x i8> %tmp1, %tmp2
35 define <16 x i8> @veor_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
36 %tmp1 = load <16 x i8>* %A
37 %tmp2 = load <16 x i8>* %B
38 ; CHECK: veor q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xf3]
39 %tmp3 = xor <16 x i8> %tmp1, %tmp2
44 define <8 x i8> @vorr_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
45 %tmp1 = load <8 x i8>* %A
46 %tmp2 = load <8 x i8>* %B
47 ; CHECK: vorr d16, d17, d16 @ encoding: [0xb0,0x01,0x61,0xf2]
48 %tmp3 = or <8 x i8> %tmp1, %tmp2
53 define <16 x i8> @vorr_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
54 %tmp1 = load <16 x i8>* %A
55 %tmp2 = load <16 x i8>* %B
56 ; CHECK: vorr q8, q8, q9 @ encoding: [0xf2,0x01,0x60,0xf2]
57 %tmp3 = or <16 x i8> %tmp1, %tmp2
62 define <8 x i8> @vbic_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
63 %tmp1 = load <8 x i8>* %A
64 %tmp2 = load <8 x i8>* %B
65 ; CHECK: vbic d16, d17, d16 @ encoding: [0xb0,0x01,0x51,0xf2]
66 %tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
67 %tmp4 = and <8 x i8> %tmp1, %tmp3
72 define <16 x i8> @vbic_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
73 %tmp1 = load <16 x i8>* %A
74 %tmp2 = load <16 x i8>* %B
75 ; CHECK: vbic q8, q8, q9 @ encoding: [0xf2,0x01,0x50,0xf2]
76 %tmp3 = xor <16 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
77 %tmp4 = and <16 x i8> %tmp1, %tmp3
82 define <8 x i8> @vorn_8xi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
83 %tmp1 = load <8 x i8>* %A
84 %tmp2 = load <8 x i8>* %B
85 ; CHECK: vorn d16, d17, d16 @ encoding: [0xb0,0x01,0x71,0xf2]
86 %tmp3 = xor <8 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
87 %tmp4 = or <8 x i8> %tmp1, %tmp3
92 define <16 x i8> @vorn_16xi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
93 %tmp1 = load <16 x i8>* %A
94 %tmp2 = load <16 x i8>* %B
95 ; CHECK: vorn q8, q8, q9 @ encoding: [0xf2,0x01,0x70,0xf2]
96 %tmp3 = xor <16 x i8> %tmp2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
97 %tmp4 = or <16 x i8> %tmp1, %tmp3
102 define <8 x i8> @vmvn_8xi8(<8 x i8>* %A) nounwind {
103 %tmp1 = load <8 x i8>* %A
104 ; CHECK: vmvn d16, d16 @ encoding: [0xa0,0x05,0xf0,0xf3]
105 %tmp2 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
110 define <16 x i8> @vmvn_16xi8(<16 x i8>* %A) nounwind {
111 %tmp1 = load <16 x i8>* %A
112 ; CHECK: vmvn q8, q8 @ encoding: [0xe0,0x05,0xf0,0xf3]
113 %tmp2 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
118 define <8 x i8> @vbsl_8xi8(<8 x i8>* %A, <8 x i8>* %B, <8 x i8>* %C) nounwind {
119 %tmp1 = load <8 x i8>* %A
120 %tmp2 = load <8 x i8>* %B
121 %tmp3 = load <8 x i8>* %C
122 ; CHECK: vbsl d18, d17, d16 @ encoding: [0xb0,0x21,0x51,0xf3]
123 %tmp4 = and <8 x i8> %tmp1, %tmp2
124 %tmp5 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
125 %tmp6 = and <8 x i8> %tmp5, %tmp3
126 %tmp7 = or <8 x i8> %tmp4, %tmp6
131 define <16 x i8> @vbsl_16xi8(<16 x i8>* %A, <16 x i8>* %B, <16 x i8>* %C) nounwind {
132 %tmp1 = load <16 x i8>* %A
133 %tmp2 = load <16 x i8>* %B
134 %tmp3 = load <16 x i8>* %C
135 ; CHECK: vbsl q8, q10, q9 @ encoding: [0xf2,0x01,0x54,0xf3]
136 %tmp4 = and <16 x i8> %tmp1, %tmp2
137 %tmp5 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
138 %tmp6 = and <16 x i8> %tmp5, %tmp3
139 %tmp7 = or <16 x i8> %tmp4, %tmp6