llvm.org GIT mirror llvm / 64280cb
[ARM] Fix loads and stores for predicate vectors These predicate vectors can usually be loaded and stored with a single instruction, a VSTR_P0. However this instruction will store the entire P0 predicate, 16 bits, zeroextended to 32bits. Each lane of the the v4i1/v8i1/v16i1 representing 4/2/1 bits. As far as I understand, when llvm says "store this v4i1", it really does need to store 4 bits (or 8, that being the size of a byte, with this bottom 4 as the interesting bits). For example a bitcast from a v8i1 to a i8 is defined as a store followed by a load, which is how the code is expanded. So this instead lowers the v4i1/v8i1 load/store through some shuffles to get the bits into the correct positions. This, as you might imagine, is not as efficient as a single instruction. But I believe it is needed for correctness. v16i1 equally should not load/store 32bits, only storing the 16bits of data. Stack loads/stores are still using the VSTR_P0 (as can be seen by the test not changing). This is fine as they are self-consistent, it is only "externally observable loads/stores" (from our point of view) that need to be corrected. Differential revision: https://reviews.llvm.org/D67085 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371419 91177308-0d34-0410-b5e6-96231b3b80d8 David Green 1 year, 21 days ago
7 changed file(s) with 3135 addition(s) and 819 deletion(s). Raw diff Collapse all Expand all
377377 setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Custom);
378378 setOperationAction(ISD::SETCC, VT, Custom);
379379 setOperationAction(ISD::SCALAR_TO_VECTOR, VT, Expand);
380 setOperationAction(ISD::LOAD, VT, Custom);
381 setOperationAction(ISD::STORE, VT, Custom);
380382 }
381383 }
382384
87828784 Results.push_back(Upper);
87838785 }
87848786
8787 static SDValue LowerPredicateLoad(SDValue Op, SelectionDAG &DAG) {
8788 LoadSDNode *LD = cast(Op.getNode());
8789 EVT MemVT = LD->getMemoryVT();
8790 assert((MemVT == MVT::v4i1 || MemVT == MVT::v8i1 || MemVT == MVT::v16i1) &&
8791 "Expected a predicate type!");
8792 assert(MemVT == Op.getValueType());
8793 assert(LD->getExtensionType() == ISD::NON_EXTLOAD &&
8794 "Expected a non-extending load");
8795 assert(LD->isUnindexed() && "Expected a unindexed load");
8796
8797 // The basic MVE VLDR on a v4i1/v8i1 actually loads the entire 16bit
8798 // predicate, with the "v4i1" bits spread out over the 16 bits loaded. We
8799 // need to make sure that 8/4 bits are actually loaded into the correct
8800 // place, which means loading the value and then shuffling the values into
8801 // the bottom bits of the predicate.
8802 // Equally, VLDR for an v16i1 will actually load 32bits (so will be incorrect
8803 // for BE).
8804
8805 SDLoc dl(Op);
8806 SDValue Load = DAG.getExtLoad(
8807 ISD::EXTLOAD, dl, MVT::i32, LD->getChain(), LD->getBasePtr(),
8808 EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits()),
8809 LD->getMemOperand());
8810 SDValue Pred = DAG.getNode(ARMISD::PREDICATE_CAST, dl, MVT::v16i1, Load);
8811 if (MemVT != MVT::v16i1)
8812 Pred = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MemVT, Pred,
8813 DAG.getConstant(0, dl, MVT::i32));
8814 return DAG.getMergeValues({Pred, Load.getValue(1)}, dl);
8815 }
8816
8817 static SDValue LowerPredicateStore(SDValue Op, SelectionDAG &DAG) {
8818 StoreSDNode *ST = cast(Op.getNode());
8819 EVT MemVT = ST->getMemoryVT();
8820 assert((MemVT == MVT::v4i1 || MemVT == MVT::v8i1 || MemVT == MVT::v16i1) &&
8821 "Expected a predicate type!");
8822 assert(MemVT == ST->getValue().getValueType());
8823 assert(!ST->isTruncatingStore() && "Expected a non-extending store");
8824 assert(ST->isUnindexed() && "Expected a unindexed store");
8825
8826 // Only store the v4i1 or v8i1 worth of bits, via a buildvector with top bits
8827 // unset and a scalar store.
8828 SDLoc dl(Op);
8829 SDValue Build = ST->getValue();
8830 if (MemVT != MVT::v16i1) {
8831 SmallVector Ops;
8832 for (unsigned I = 0; I < MemVT.getVectorNumElements(); I++)
8833 Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32, Build,
8834 DAG.getConstant(I, dl, MVT::i32)));
8835 for (unsigned I = MemVT.getVectorNumElements(); I < 16; I++)
8836 Ops.push_back(DAG.getUNDEF(MVT::i32));
8837 Build = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v16i1, Ops);
8838 }
8839 SDValue GRP = DAG.getNode(ARMISD::PREDICATE_CAST, dl, MVT::i32, Build);
8840 return DAG.getTruncStore(
8841 ST->getChain(), dl, GRP, ST->getBasePtr(),
8842 EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits()),
8843 ST->getMemOperand());
8844 }
8845
87858846 static SDValue LowerAtomicLoadStore(SDValue Op, SelectionDAG &DAG) {
87868847 if (isStrongerThanMonotonic(cast(Op)->getOrdering()))
87878848 // Acquire/Release load/store is not legal for targets without a dmb or
89819042 case ISD::UADDO:
89829043 case ISD::USUBO:
89839044 return LowerUnsignedALUO(Op, DAG);
9045 case ISD::LOAD:
9046 return LowerPredicateLoad(Op, DAG);
9047 case ISD::STORE:
9048 return LowerPredicateStore(Op, DAG);
89849049 case ISD::ATOMIC_LOAD:
89859050 case ISD::ATOMIC_STORE: return LowerAtomicLoadStore(Op, DAG);
89869051 case ISD::FSINCOS: return LowerFSINCOS(Op, DAG);
49984998 def : MVE_vector_offset_store_typed;
49994999 }
50005000
5001 let Predicates = [HasMVEInt] in {
5002 // Predicate loads
5003 def : Pat<(v16i1 (load t2addrmode_imm7<2>:$addr)),
5004 (v16i1 (VLDR_P0_off t2addrmode_imm7<2>:$addr))>;
5005 def : Pat<(v8i1 (load t2addrmode_imm7<2>:$addr)),
5006 (v8i1 (VLDR_P0_off t2addrmode_imm7<2>:$addr))>;
5007 def : Pat<(v4i1 (load t2addrmode_imm7<2>:$addr)),
5008 (v4i1 (VLDR_P0_off t2addrmode_imm7<2>:$addr))>;
5009
5010 // Predicate stores
5011 def : Pat<(store (v4i1 VCCR:$val), t2addrmode_imm7<2>:$addr),
5012 (VSTR_P0_off VCCR:$val, t2addrmode_imm7<2>:$addr)>;
5013 def : Pat<(store (v8i1 VCCR:$val), t2addrmode_imm7<2>:$addr),
5014 (VSTR_P0_off VCCR:$val, t2addrmode_imm7<2>:$addr)>;
5015 def : Pat<(store (v16i1 VCCR:$val), t2addrmode_imm7<2>:$addr),
5016 (VSTR_P0_off VCCR:$val, t2addrmode_imm7<2>:$addr)>;
5017 }
5018
50195001
50205002 // Widening/Narrowing Loads/Stores
50215003
77 ; CHECK-NEXT: .pad #8
88 ; CHECK-NEXT: sub sp, #8
99 ; CHECK-NEXT: vldrw.u32 q0, [r1]
10 ; CHECK-NEXT: add r3, sp, #4
10 ; CHECK-NEXT: movs r3, #0
1111 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
1212 ; CHECK-NEXT: @ implicit-def: $q0
13 ; CHECK-NEXT: vstr p0, [r3]
14 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
13 ; CHECK-NEXT: vmrs r12, p0
14 ; CHECK-NEXT: and r1, r12, #1
15 ; CHECK-NEXT: rsbs r1, r1, #0
16 ; CHECK-NEXT: bfi r3, r1, #0, #1
17 ; CHECK-NEXT: ubfx r1, r12, #4, #1
18 ; CHECK-NEXT: rsbs r1, r1, #0
19 ; CHECK-NEXT: bfi r3, r1, #1, #1
20 ; CHECK-NEXT: ubfx r1, r12, #8, #1
21 ; CHECK-NEXT: rsbs r1, r1, #0
22 ; CHECK-NEXT: bfi r3, r1, #2, #1
23 ; CHECK-NEXT: ubfx r1, r12, #12, #1
24 ; CHECK-NEXT: rsbs r1, r1, #0
25 ; CHECK-NEXT: bfi r3, r1, #3, #1
26 ; CHECK-NEXT: and r1, r3, #15
1527 ; CHECK-NEXT: lsls r3, r1, #31
1628 ; CHECK-NEXT: itt ne
1729 ; CHECK-NEXT: ldrne r3, [r2]
2840 ; CHECK-NEXT: itt mi
2941 ; CHECK-NEXT: ldrmi r1, [r2, #12]
3042 ; CHECK-NEXT: vmovmi.32 q0[3], r1
31 ; CHECK-NEXT: mov r1, sp
32 ; CHECK-NEXT: vstr p0, [r1]
33 ; CHECK-NEXT: ldrb.w r1, [sp]
43 ; CHECK-NEXT: vmrs r2, p0
44 ; CHECK-NEXT: movs r1, #0
45 ; CHECK-NEXT: and r3, r2, #1
46 ; CHECK-NEXT: rsbs r3, r3, #0
47 ; CHECK-NEXT: bfi r1, r3, #0, #1
48 ; CHECK-NEXT: ubfx r3, r2, #4, #1
49 ; CHECK-NEXT: rsbs r3, r3, #0
50 ; CHECK-NEXT: bfi r1, r3, #1, #1
51 ; CHECK-NEXT: ubfx r3, r2, #8, #1
52 ; CHECK-NEXT: ubfx r2, r2, #12, #1
53 ; CHECK-NEXT: rsbs r3, r3, #0
54 ; CHECK-NEXT: bfi r1, r3, #2, #1
55 ; CHECK-NEXT: rsbs r2, r2, #0
56 ; CHECK-NEXT: bfi r1, r2, #3, #1
57 ; CHECK-NEXT: and r1, r1, #15
3458 ; CHECK-NEXT: lsls r2, r1, #31
3559 ; CHECK-NEXT: itt ne
3660 ; CHECK-NEXT: vmovne r2, s0
6387 ; CHECK-NEXT: .pad #8
6488 ; CHECK-NEXT: sub sp, #8
6589 ; CHECK-NEXT: vldrw.u32 q0, [r1]
66 ; CHECK-NEXT: add r3, sp, #4
90 ; CHECK-NEXT: movs r3, #0
6791 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
6892 ; CHECK-NEXT: @ implicit-def: $q0
69 ; CHECK-NEXT: vstr p0, [r3]
70 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
93 ; CHECK-NEXT: vmrs r12, p0
94 ; CHECK-NEXT: and r1, r12, #1
95 ; CHECK-NEXT: rsbs r1, r1, #0
96 ; CHECK-NEXT: bfi r3, r1, #0, #1
97 ; CHECK-NEXT: ubfx r1, r12, #4, #1
98 ; CHECK-NEXT: rsbs r1, r1, #0
99 ; CHECK-NEXT: bfi r3, r1, #1, #1
100 ; CHECK-NEXT: ubfx r1, r12, #8, #1
101 ; CHECK-NEXT: rsbs r1, r1, #0
102 ; CHECK-NEXT: bfi r3, r1, #2, #1
103 ; CHECK-NEXT: ubfx r1, r12, #12, #1
104 ; CHECK-NEXT: rsbs r1, r1, #0
105 ; CHECK-NEXT: bfi r3, r1, #3, #1
106 ; CHECK-NEXT: and r1, r3, #15
71107 ; CHECK-NEXT: lsls r3, r1, #31
72108 ; CHECK-NEXT: itt ne
73109 ; CHECK-NEXT: ldrbne r3, [r2]
84120 ; CHECK-NEXT: itt mi
85121 ; CHECK-NEXT: ldrbmi r1, [r2, #3]
86122 ; CHECK-NEXT: vmovmi.32 q0[3], r1
87 ; CHECK-NEXT: mov r1, sp
123 ; CHECK-NEXT: vmrs r2, p0
124 ; CHECK-NEXT: movs r1, #0
88125 ; CHECK-NEXT: vmovlb.s8 q0, q0
89 ; CHECK-NEXT: vstr p0, [r1]
90126 ; CHECK-NEXT: vmovlb.s16 q0, q0
91 ; CHECK-NEXT: ldrb.w r1, [sp]
127 ; CHECK-NEXT: and r3, r2, #1
128 ; CHECK-NEXT: rsbs r3, r3, #0
129 ; CHECK-NEXT: bfi r1, r3, #0, #1
130 ; CHECK-NEXT: ubfx r3, r2, #4, #1
131 ; CHECK-NEXT: rsbs r3, r3, #0
132 ; CHECK-NEXT: bfi r1, r3, #1, #1
133 ; CHECK-NEXT: ubfx r3, r2, #8, #1
134 ; CHECK-NEXT: ubfx r2, r2, #12, #1
135 ; CHECK-NEXT: rsbs r3, r3, #0
136 ; CHECK-NEXT: bfi r1, r3, #2, #1
137 ; CHECK-NEXT: rsbs r2, r2, #0
138 ; CHECK-NEXT: bfi r1, r2, #3, #1
139 ; CHECK-NEXT: and r1, r1, #15
92140 ; CHECK-NEXT: lsls r2, r1, #31
93141 ; CHECK-NEXT: itt ne
94142 ; CHECK-NEXT: vmovne r2, s0
122170 ; CHECK-NEXT: .pad #8
123171 ; CHECK-NEXT: sub sp, #8
124172 ; CHECK-NEXT: vldrw.u32 q0, [r1]
125 ; CHECK-NEXT: add r3, sp, #4
173 ; CHECK-NEXT: movs r3, #0
126174 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
127175 ; CHECK-NEXT: @ implicit-def: $q0
128 ; CHECK-NEXT: vstr p0, [r3]
129 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
176 ; CHECK-NEXT: vmrs r12, p0
177 ; CHECK-NEXT: and r1, r12, #1
178 ; CHECK-NEXT: rsbs r1, r1, #0
179 ; CHECK-NEXT: bfi r3, r1, #0, #1
180 ; CHECK-NEXT: ubfx r1, r12, #4, #1
181 ; CHECK-NEXT: rsbs r1, r1, #0
182 ; CHECK-NEXT: bfi r3, r1, #1, #1
183 ; CHECK-NEXT: ubfx r1, r12, #8, #1
184 ; CHECK-NEXT: rsbs r1, r1, #0
185 ; CHECK-NEXT: bfi r3, r1, #2, #1
186 ; CHECK-NEXT: ubfx r1, r12, #12, #1
187 ; CHECK-NEXT: rsbs r1, r1, #0
188 ; CHECK-NEXT: bfi r3, r1, #3, #1
189 ; CHECK-NEXT: and r1, r3, #15
130190 ; CHECK-NEXT: lsls r3, r1, #31
131191 ; CHECK-NEXT: itt ne
132192 ; CHECK-NEXT: ldrhne r3, [r2]
143203 ; CHECK-NEXT: itt mi
144204 ; CHECK-NEXT: ldrhmi r1, [r2, #6]
145205 ; CHECK-NEXT: vmovmi.32 q0[3], r1
146 ; CHECK-NEXT: mov r1, sp
206 ; CHECK-NEXT: vmrs r2, p0
207 ; CHECK-NEXT: movs r1, #0
147208 ; CHECK-NEXT: vmovlb.s16 q0, q0
148 ; CHECK-NEXT: vstr p0, [r1]
149 ; CHECK-NEXT: ldrb.w r1, [sp]
209 ; CHECK-NEXT: and r3, r2, #1
210 ; CHECK-NEXT: rsbs r3, r3, #0
211 ; CHECK-NEXT: bfi r1, r3, #0, #1
212 ; CHECK-NEXT: ubfx r3, r2, #4, #1
213 ; CHECK-NEXT: rsbs r3, r3, #0
214 ; CHECK-NEXT: bfi r1, r3, #1, #1
215 ; CHECK-NEXT: ubfx r3, r2, #8, #1
216 ; CHECK-NEXT: ubfx r2, r2, #12, #1
217 ; CHECK-NEXT: rsbs r3, r3, #0
218 ; CHECK-NEXT: bfi r1, r3, #2, #1
219 ; CHECK-NEXT: rsbs r2, r2, #0
220 ; CHECK-NEXT: bfi r1, r2, #3, #1
221 ; CHECK-NEXT: and r1, r1, #15
150222 ; CHECK-NEXT: lsls r2, r1, #31
151223 ; CHECK-NEXT: itt ne
152224 ; CHECK-NEXT: vmovne r2, s0
180252 ; CHECK-NEXT: .pad #8
181253 ; CHECK-NEXT: sub sp, #8
182254 ; CHECK-NEXT: vldrw.u32 q0, [r1]
183 ; CHECK-NEXT: add r3, sp, #4
255 ; CHECK-NEXT: movs r3, #0
184256 ; CHECK-NEXT: vmov.i32 q1, #0xff
185257 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
186258 ; CHECK-NEXT: @ implicit-def: $q0
187 ; CHECK-NEXT: vstr p0, [r3]
188 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
259 ; CHECK-NEXT: vmrs r12, p0
260 ; CHECK-NEXT: and r1, r12, #1
261 ; CHECK-NEXT: rsbs r1, r1, #0
262 ; CHECK-NEXT: bfi r3, r1, #0, #1
263 ; CHECK-NEXT: ubfx r1, r12, #4, #1
264 ; CHECK-NEXT: rsbs r1, r1, #0
265 ; CHECK-NEXT: bfi r3, r1, #1, #1
266 ; CHECK-NEXT: ubfx r1, r12, #8, #1
267 ; CHECK-NEXT: rsbs r1, r1, #0
268 ; CHECK-NEXT: bfi r3, r1, #2, #1
269 ; CHECK-NEXT: ubfx r1, r12, #12, #1
270 ; CHECK-NEXT: rsbs r1, r1, #0
271 ; CHECK-NEXT: bfi r3, r1, #3, #1
272 ; CHECK-NEXT: and r1, r3, #15
189273 ; CHECK-NEXT: lsls r3, r1, #31
190274 ; CHECK-NEXT: itt ne
191275 ; CHECK-NEXT: ldrbne r3, [r2]
202286 ; CHECK-NEXT: itt mi
203287 ; CHECK-NEXT: ldrbmi r1, [r2, #3]
204288 ; CHECK-NEXT: vmovmi.32 q0[3], r1
205 ; CHECK-NEXT: mov r1, sp
289 ; CHECK-NEXT: vmrs r2, p0
290 ; CHECK-NEXT: movs r1, #0
206291 ; CHECK-NEXT: vand q0, q0, q1
207 ; CHECK-NEXT: vstr p0, [r1]
208 ; CHECK-NEXT: ldrb.w r1, [sp]
292 ; CHECK-NEXT: and r3, r2, #1
293 ; CHECK-NEXT: rsbs r3, r3, #0
294 ; CHECK-NEXT: bfi r1, r3, #0, #1
295 ; CHECK-NEXT: ubfx r3, r2, #4, #1
296 ; CHECK-NEXT: rsbs r3, r3, #0
297 ; CHECK-NEXT: bfi r1, r3, #1, #1
298 ; CHECK-NEXT: ubfx r3, r2, #8, #1
299 ; CHECK-NEXT: ubfx r2, r2, #12, #1
300 ; CHECK-NEXT: rsbs r3, r3, #0
301 ; CHECK-NEXT: bfi r1, r3, #2, #1
302 ; CHECK-NEXT: rsbs r2, r2, #0
303 ; CHECK-NEXT: bfi r1, r2, #3, #1
304 ; CHECK-NEXT: and r1, r1, #15
209305 ; CHECK-NEXT: lsls r2, r1, #31
210306 ; CHECK-NEXT: itt ne
211307 ; CHECK-NEXT: vmovne r2, s0
239335 ; CHECK-NEXT: .pad #8
240336 ; CHECK-NEXT: sub sp, #8
241337 ; CHECK-NEXT: vldrw.u32 q0, [r1]
242 ; CHECK-NEXT: add r3, sp, #4
338 ; CHECK-NEXT: movs r3, #0
243339 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
244340 ; CHECK-NEXT: @ implicit-def: $q0
245 ; CHECK-NEXT: vstr p0, [r3]
246 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
341 ; CHECK-NEXT: vmrs r12, p0
342 ; CHECK-NEXT: and r1, r12, #1
343 ; CHECK-NEXT: rsbs r1, r1, #0
344 ; CHECK-NEXT: bfi r3, r1, #0, #1
345 ; CHECK-NEXT: ubfx r1, r12, #4, #1
346 ; CHECK-NEXT: rsbs r1, r1, #0
347 ; CHECK-NEXT: bfi r3, r1, #1, #1
348 ; CHECK-NEXT: ubfx r1, r12, #8, #1
349 ; CHECK-NEXT: rsbs r1, r1, #0
350 ; CHECK-NEXT: bfi r3, r1, #2, #1
351 ; CHECK-NEXT: ubfx r1, r12, #12, #1
352 ; CHECK-NEXT: rsbs r1, r1, #0
353 ; CHECK-NEXT: bfi r3, r1, #3, #1
354 ; CHECK-NEXT: and r1, r3, #15
247355 ; CHECK-NEXT: lsls r3, r1, #31
248356 ; CHECK-NEXT: itt ne
249357 ; CHECK-NEXT: ldrhne r3, [r2]
260368 ; CHECK-NEXT: itt mi
261369 ; CHECK-NEXT: ldrhmi r1, [r2, #6]
262370 ; CHECK-NEXT: vmovmi.32 q0[3], r1
263 ; CHECK-NEXT: mov r1, sp
371 ; CHECK-NEXT: vmrs r2, p0
372 ; CHECK-NEXT: movs r1, #0
264373 ; CHECK-NEXT: vmovlb.u16 q0, q0
265 ; CHECK-NEXT: vstr p0, [r1]
266 ; CHECK-NEXT: ldrb.w r1, [sp]
374 ; CHECK-NEXT: and r3, r2, #1
375 ; CHECK-NEXT: rsbs r3, r3, #0
376 ; CHECK-NEXT: bfi r1, r3, #0, #1
377 ; CHECK-NEXT: ubfx r3, r2, #4, #1
378 ; CHECK-NEXT: rsbs r3, r3, #0
379 ; CHECK-NEXT: bfi r1, r3, #1, #1
380 ; CHECK-NEXT: ubfx r3, r2, #8, #1
381 ; CHECK-NEXT: ubfx r2, r2, #12, #1
382 ; CHECK-NEXT: rsbs r3, r3, #0
383 ; CHECK-NEXT: bfi r1, r3, #2, #1
384 ; CHECK-NEXT: rsbs r2, r2, #0
385 ; CHECK-NEXT: bfi r1, r2, #3, #1
386 ; CHECK-NEXT: and r1, r1, #15
267387 ; CHECK-NEXT: lsls r2, r1, #31
268388 ; CHECK-NEXT: itt ne
269389 ; CHECK-NEXT: vmovne r2, s0
297417 ; CHECK-NEXT: .pad #16
298418 ; CHECK-NEXT: sub sp, #16
299419 ; CHECK-NEXT: vldrh.u16 q0, [r1]
300 ; CHECK-NEXT: add r3, sp, #8
420 ; CHECK-NEXT: movs r3, #0
301421 ; CHECK-NEXT: vcmp.s16 gt, q0, zr
302422 ; CHECK-NEXT: @ implicit-def: $q0
303 ; CHECK-NEXT: vstr p0, [r3]
304 ; CHECK-NEXT: ldrb.w r1, [sp, #8]
305 ; CHECK-NEXT: lsls r3, r1, #31
423 ; CHECK-NEXT: vmrs r12, p0
424 ; CHECK-NEXT: and r1, r12, #1
425 ; CHECK-NEXT: rsbs r1, r1, #0
426 ; CHECK-NEXT: bfi r3, r1, #0, #1
427 ; CHECK-NEXT: ubfx r1, r12, #2, #1
428 ; CHECK-NEXT: rsbs r1, r1, #0
429 ; CHECK-NEXT: bfi r3, r1, #1, #1
430 ; CHECK-NEXT: ubfx r1, r12, #4, #1
431 ; CHECK-NEXT: rsbs r1, r1, #0
432 ; CHECK-NEXT: bfi r3, r1, #2, #1
433 ; CHECK-NEXT: ubfx r1, r12, #6, #1
434 ; CHECK-NEXT: rsbs r1, r1, #0
435 ; CHECK-NEXT: bfi r3, r1, #3, #1
436 ; CHECK-NEXT: ubfx r1, r12, #8, #1
437 ; CHECK-NEXT: rsbs r1, r1, #0
438 ; CHECK-NEXT: bfi r3, r1, #4, #1
439 ; CHECK-NEXT: ubfx r1, r12, #10, #1
440 ; CHECK-NEXT: rsbs r1, r1, #0
441 ; CHECK-NEXT: bfi r3, r1, #5, #1
442 ; CHECK-NEXT: ubfx r1, r12, #12, #1
443 ; CHECK-NEXT: rsbs r1, r1, #0
444 ; CHECK-NEXT: bfi r3, r1, #6, #1
445 ; CHECK-NEXT: ubfx r1, r12, #14, #1
446 ; CHECK-NEXT: rsbs r1, r1, #0
447 ; CHECK-NEXT: bfi r3, r1, #7, #1
448 ; CHECK-NEXT: uxtb r1, r3
449 ; CHECK-NEXT: lsls r3, r3, #31
306450 ; CHECK-NEXT: itt ne
307451 ; CHECK-NEXT: ldrhne r3, [r2]
308452 ; CHECK-NEXT: vmovne.16 q0[0], r3
334478 ; CHECK-NEXT: itt mi
335479 ; CHECK-NEXT: ldrhmi r1, [r2, #14]
336480 ; CHECK-NEXT: vmovmi.16 q0[7], r1
337 ; CHECK-NEXT: mov r1, sp
338 ; CHECK-NEXT: vstr p0, [r1]
339 ; CHECK-NEXT: ldrb.w r1, [sp]
340 ; CHECK-NEXT: lsls r2, r1, #31
481 ; CHECK-NEXT: movs r2, #0
482 ; CHECK-NEXT: vmrs r1, p0
483 ; CHECK-NEXT: and r3, r1, #1
484 ; CHECK-NEXT: rsbs r3, r3, #0
485 ; CHECK-NEXT: bfi r2, r3, #0, #1
486 ; CHECK-NEXT: ubfx r3, r1, #2, #1
487 ; CHECK-NEXT: rsbs r3, r3, #0
488 ; CHECK-NEXT: bfi r2, r3, #1, #1
489 ; CHECK-NEXT: ubfx r3, r1, #4, #1
490 ; CHECK-NEXT: rsbs r3, r3, #0
491 ; CHECK-NEXT: bfi r2, r3, #2, #1
492 ; CHECK-NEXT: ubfx r3, r1, #6, #1
493 ; CHECK-NEXT: rsbs r3, r3, #0
494 ; CHECK-NEXT: bfi r2, r3, #3, #1
495 ; CHECK-NEXT: ubfx r3, r1, #8, #1
496 ; CHECK-NEXT: rsbs r3, r3, #0
497 ; CHECK-NEXT: bfi r2, r3, #4, #1
498 ; CHECK-NEXT: ubfx r3, r1, #10, #1
499 ; CHECK-NEXT: rsbs r3, r3, #0
500 ; CHECK-NEXT: bfi r2, r3, #5, #1
501 ; CHECK-NEXT: ubfx r3, r1, #12, #1
502 ; CHECK-NEXT: ubfx r1, r1, #14, #1
503 ; CHECK-NEXT: rsbs r3, r3, #0
504 ; CHECK-NEXT: bfi r2, r3, #6, #1
505 ; CHECK-NEXT: rsbs r1, r1, #0
506 ; CHECK-NEXT: bfi r2, r1, #7, #1
507 ; CHECK-NEXT: uxtb r1, r2
508 ; CHECK-NEXT: lsls r2, r2, #31
341509 ; CHECK-NEXT: itt ne
342510 ; CHECK-NEXT: vmovne.u16 r2, q0[0]
343511 ; CHECK-NEXT: strhne r2, [r0]
385553 ; CHECK-NEXT: .pad #16
386554 ; CHECK-NEXT: sub sp, #16
387555 ; CHECK-NEXT: vldrh.u16 q0, [r1]
388 ; CHECK-NEXT: add r3, sp, #8
556 ; CHECK-NEXT: movs r3, #0
389557 ; CHECK-NEXT: vcmp.s16 gt, q0, zr
390558 ; CHECK-NEXT: @ implicit-def: $q0
391 ; CHECK-NEXT: vstr p0, [r3]
392 ; CHECK-NEXT: ldrb.w r1, [sp, #8]
393 ; CHECK-NEXT: lsls r3, r1, #31
559 ; CHECK-NEXT: vmrs r12, p0
560 ; CHECK-NEXT: and r1, r12, #1
561 ; CHECK-NEXT: rsbs r1, r1, #0
562 ; CHECK-NEXT: bfi r3, r1, #0, #1
563 ; CHECK-NEXT: ubfx r1, r12, #2, #1
564 ; CHECK-NEXT: rsbs r1, r1, #0
565 ; CHECK-NEXT: bfi r3, r1, #1, #1
566 ; CHECK-NEXT: ubfx r1, r12, #4, #1
567 ; CHECK-NEXT: rsbs r1, r1, #0
568 ; CHECK-NEXT: bfi r3, r1, #2, #1
569 ; CHECK-NEXT: ubfx r1, r12, #6, #1
570 ; CHECK-NEXT: rsbs r1, r1, #0
571 ; CHECK-NEXT: bfi r3, r1, #3, #1
572 ; CHECK-NEXT: ubfx r1, r12, #8, #1
573 ; CHECK-NEXT: rsbs r1, r1, #0
574 ; CHECK-NEXT: bfi r3, r1, #4, #1
575 ; CHECK-NEXT: ubfx r1, r12, #10, #1
576 ; CHECK-NEXT: rsbs r1, r1, #0
577 ; CHECK-NEXT: bfi r3, r1, #5, #1
578 ; CHECK-NEXT: ubfx r1, r12, #12, #1
579 ; CHECK-NEXT: rsbs r1, r1, #0
580 ; CHECK-NEXT: bfi r3, r1, #6, #1
581 ; CHECK-NEXT: ubfx r1, r12, #14, #1
582 ; CHECK-NEXT: rsbs r1, r1, #0
583 ; CHECK-NEXT: bfi r3, r1, #7, #1
584 ; CHECK-NEXT: uxtb r1, r3
585 ; CHECK-NEXT: lsls r3, r3, #31
394586 ; CHECK-NEXT: itt ne
395587 ; CHECK-NEXT: ldrbne r3, [r2]
396588 ; CHECK-NEXT: vmovne.16 q0[0], r3
422614 ; CHECK-NEXT: itt mi
423615 ; CHECK-NEXT: ldrbmi r1, [r2, #7]
424616 ; CHECK-NEXT: vmovmi.16 q0[7], r1
425 ; CHECK-NEXT: mov r1, sp
617 ; CHECK-NEXT: movs r2, #0
618 ; CHECK-NEXT: vmrs r1, p0
426619 ; CHECK-NEXT: vmovlb.s8 q0, q0
427 ; CHECK-NEXT: vstr p0, [r1]
428 ; CHECK-NEXT: ldrb.w r1, [sp]
429 ; CHECK-NEXT: lsls r2, r1, #31
620 ; CHECK-NEXT: and r3, r1, #1
621 ; CHECK-NEXT: rsbs r3, r3, #0
622 ; CHECK-NEXT: bfi r2, r3, #0, #1
623 ; CHECK-NEXT: ubfx r3, r1, #2, #1
624 ; CHECK-NEXT: rsbs r3, r3, #0
625 ; CHECK-NEXT: bfi r2, r3, #1, #1
626 ; CHECK-NEXT: ubfx r3, r1, #4, #1
627 ; CHECK-NEXT: rsbs r3, r3, #0
628 ; CHECK-NEXT: bfi r2, r3, #2, #1
629 ; CHECK-NEXT: ubfx r3, r1, #6, #1
630 ; CHECK-NEXT: rsbs r3, r3, #0
631 ; CHECK-NEXT: bfi r2, r3, #3, #1
632 ; CHECK-NEXT: ubfx r3, r1, #8, #1
633 ; CHECK-NEXT: rsbs r3, r3, #0
634 ; CHECK-NEXT: bfi r2, r3, #4, #1
635 ; CHECK-NEXT: ubfx r3, r1, #10, #1
636 ; CHECK-NEXT: rsbs r3, r3, #0
637 ; CHECK-NEXT: bfi r2, r3, #5, #1
638 ; CHECK-NEXT: ubfx r3, r1, #12, #1
639 ; CHECK-NEXT: ubfx r1, r1, #14, #1
640 ; CHECK-NEXT: rsbs r3, r3, #0
641 ; CHECK-NEXT: bfi r2, r3, #6, #1
642 ; CHECK-NEXT: rsbs r1, r1, #0
643 ; CHECK-NEXT: bfi r2, r1, #7, #1
644 ; CHECK-NEXT: uxtb r1, r2
645 ; CHECK-NEXT: lsls r2, r2, #31
430646 ; CHECK-NEXT: itt ne
431647 ; CHECK-NEXT: vmovne.u16 r2, q0[0]
432648 ; CHECK-NEXT: strhne r2, [r0]
475691 ; CHECK-NEXT: .pad #16
476692 ; CHECK-NEXT: sub sp, #16
477693 ; CHECK-NEXT: vldrh.u16 q0, [r1]
478 ; CHECK-NEXT: add r3, sp, #8
694 ; CHECK-NEXT: movs r3, #0
479695 ; CHECK-NEXT: vcmp.s16 gt, q0, zr
480696 ; CHECK-NEXT: @ implicit-def: $q0
481 ; CHECK-NEXT: vstr p0, [r3]
482 ; CHECK-NEXT: ldrb.w r1, [sp, #8]
483 ; CHECK-NEXT: lsls r3, r1, #31
697 ; CHECK-NEXT: vmrs r12, p0
698 ; CHECK-NEXT: and r1, r12, #1
699 ; CHECK-NEXT: rsbs r1, r1, #0
700 ; CHECK-NEXT: bfi r3, r1, #0, #1
701 ; CHECK-NEXT: ubfx r1, r12, #2, #1
702 ; CHECK-NEXT: rsbs r1, r1, #0
703 ; CHECK-NEXT: bfi r3, r1, #1, #1
704 ; CHECK-NEXT: ubfx r1, r12, #4, #1
705 ; CHECK-NEXT: rsbs r1, r1, #0
706 ; CHECK-NEXT: bfi r3, r1, #2, #1
707 ; CHECK-NEXT: ubfx r1, r12, #6, #1
708 ; CHECK-NEXT: rsbs r1, r1, #0
709 ; CHECK-NEXT: bfi r3, r1, #3, #1
710 ; CHECK-NEXT: ubfx r1, r12, #8, #1
711 ; CHECK-NEXT: rsbs r1, r1, #0
712 ; CHECK-NEXT: bfi r3, r1, #4, #1
713 ; CHECK-NEXT: ubfx r1, r12, #10, #1
714 ; CHECK-NEXT: rsbs r1, r1, #0
715 ; CHECK-NEXT: bfi r3, r1, #5, #1
716 ; CHECK-NEXT: ubfx r1, r12, #12, #1
717 ; CHECK-NEXT: rsbs r1, r1, #0
718 ; CHECK-NEXT: bfi r3, r1, #6, #1
719 ; CHECK-NEXT: ubfx r1, r12, #14, #1
720 ; CHECK-NEXT: rsbs r1, r1, #0
721 ; CHECK-NEXT: bfi r3, r1, #7, #1
722 ; CHECK-NEXT: uxtb r1, r3
723 ; CHECK-NEXT: lsls r3, r3, #31
484724 ; CHECK-NEXT: itt ne
485725 ; CHECK-NEXT: ldrbne r3, [r2]
486726 ; CHECK-NEXT: vmovne.16 q0[0], r3
512752 ; CHECK-NEXT: itt mi
513753 ; CHECK-NEXT: ldrbmi r1, [r2, #7]
514754 ; CHECK-NEXT: vmovmi.16 q0[7], r1
515 ; CHECK-NEXT: mov r1, sp
755 ; CHECK-NEXT: movs r2, #0
756 ; CHECK-NEXT: vmrs r1, p0
516757 ; CHECK-NEXT: vmovlb.u8 q0, q0
517 ; CHECK-NEXT: vstr p0, [r1]
518 ; CHECK-NEXT: ldrb.w r1, [sp]
519 ; CHECK-NEXT: lsls r2, r1, #31
758 ; CHECK-NEXT: and r3, r1, #1
759 ; CHECK-NEXT: rsbs r3, r3, #0
760 ; CHECK-NEXT: bfi r2, r3, #0, #1
761 ; CHECK-NEXT: ubfx r3, r1, #2, #1
762 ; CHECK-NEXT: rsbs r3, r3, #0
763 ; CHECK-NEXT: bfi r2, r3, #1, #1
764 ; CHECK-NEXT: ubfx r3, r1, #4, #1
765 ; CHECK-NEXT: rsbs r3, r3, #0
766 ; CHECK-NEXT: bfi r2, r3, #2, #1
767 ; CHECK-NEXT: ubfx r3, r1, #6, #1
768 ; CHECK-NEXT: rsbs r3, r3, #0
769 ; CHECK-NEXT: bfi r2, r3, #3, #1
770 ; CHECK-NEXT: ubfx r3, r1, #8, #1
771 ; CHECK-NEXT: rsbs r3, r3, #0
772 ; CHECK-NEXT: bfi r2, r3, #4, #1
773 ; CHECK-NEXT: ubfx r3, r1, #10, #1
774 ; CHECK-NEXT: rsbs r3, r3, #0
775 ; CHECK-NEXT: bfi r2, r3, #5, #1
776 ; CHECK-NEXT: ubfx r3, r1, #12, #1
777 ; CHECK-NEXT: ubfx r1, r1, #14, #1
778 ; CHECK-NEXT: rsbs r3, r3, #0
779 ; CHECK-NEXT: bfi r2, r3, #6, #1
780 ; CHECK-NEXT: rsbs r1, r1, #0
781 ; CHECK-NEXT: bfi r2, r1, #7, #1
782 ; CHECK-NEXT: uxtb r1, r2
783 ; CHECK-NEXT: lsls r2, r2, #31
520784 ; CHECK-NEXT: itt ne
521785 ; CHECK-NEXT: vmovne.u16 r2, q0[0]
522786 ; CHECK-NEXT: strhne r2, [r0]
572836 ; CHECK-NEXT: bfc r4, #0, #4
573837 ; CHECK-NEXT: mov sp, r4
574838 ; CHECK-NEXT: vldrb.u8 q0, [r1]
575 ; CHECK-NEXT: add r3, sp, #16
576839 ; CHECK-NEXT: sub.w r4, r7, #8
577840 ; CHECK-NEXT: vcmp.s8 gt, q0, zr
578841 ; CHECK-NEXT: @ implicit-def: $q0
579 ; CHECK-NEXT: vstr p0, [r3]
580 ; CHECK-NEXT: ldrh.w r1, [sp, #16]
581 ; CHECK-NEXT: lsls r3, r1, #31
842 ; CHECK-NEXT: vmrs r3, p0
843 ; CHECK-NEXT: uxth r1, r3
844 ; CHECK-NEXT: lsls r3, r3, #31
582845 ; CHECK-NEXT: itt ne
583846 ; CHECK-NEXT: ldrbne r3, [r2]
584847 ; CHECK-NEXT: vmovne.8 q0[0], r3
642905 ; CHECK-NEXT: itt mi
643906 ; CHECK-NEXT: ldrbmi r1, [r2, #15]
644907 ; CHECK-NEXT: vmovmi.8 q0[15], r1
645 ; CHECK-NEXT: mov r1, sp
646 ; CHECK-NEXT: vstr p0, [r1]
647 ; CHECK-NEXT: ldrh.w r1, [sp]
648 ; CHECK-NEXT: lsls r2, r1, #31
908 ; CHECK-NEXT: vmrs r2, p0
909 ; CHECK-NEXT: uxth r1, r2
910 ; CHECK-NEXT: lsls r2, r2, #31
649911 ; CHECK-NEXT: itt ne
650912 ; CHECK-NEXT: vmovne.u8 r2, q0[0]
651913 ; CHECK-NEXT: strbne r2, [r0]
725987 ; CHECK-NEXT: .pad #16
726988 ; CHECK-NEXT: sub sp, #16
727989 ; CHECK-NEXT: vldrh.u16 q0, [r1]
728 ; CHECK-NEXT: add r3, sp, #8
990 ; CHECK-NEXT: movs r3, #0
729991 ; CHECK-NEXT: vcmp.s16 gt, q0, zr
730992 ; CHECK-NEXT: @ implicit-def: $q0
731 ; CHECK-NEXT: vstr p0, [r3]
732 ; CHECK-NEXT: ldrb.w r1, [sp, #8]
733 ; CHECK-NEXT: lsls r3, r1, #31
993 ; CHECK-NEXT: vmrs r12, p0
994 ; CHECK-NEXT: and r1, r12, #1
995 ; CHECK-NEXT: rsbs r1, r1, #0
996 ; CHECK-NEXT: bfi r3, r1, #0, #1
997 ; CHECK-NEXT: ubfx r1, r12, #2, #1
998 ; CHECK-NEXT: rsbs r1, r1, #0
999 ; CHECK-NEXT: bfi r3, r1, #1, #1
1000 ; CHECK-NEXT: ubfx r1, r12, #4, #1
1001 ; CHECK-NEXT: rsbs r1, r1, #0
1002 ; CHECK-NEXT: bfi r3, r1, #2, #1
1003 ; CHECK-NEXT: ubfx r1, r12, #6, #1
1004 ; CHECK-NEXT: rsbs r1, r1, #0
1005 ; CHECK-NEXT: bfi r3, r1, #3, #1
1006 ; CHECK-NEXT: ubfx r1, r12, #8, #1
1007 ; CHECK-NEXT: rsbs r1, r1, #0
1008 ; CHECK-NEXT: bfi r3, r1, #4, #1
1009 ; CHECK-NEXT: ubfx r1, r12, #10, #1
1010 ; CHECK-NEXT: rsbs r1, r1, #0
1011 ; CHECK-NEXT: bfi r3, r1, #5, #1
1012 ; CHECK-NEXT: ubfx r1, r12, #12, #1
1013 ; CHECK-NEXT: rsbs r1, r1, #0
1014 ; CHECK-NEXT: bfi r3, r1, #6, #1
1015 ; CHECK-NEXT: ubfx r1, r12, #14, #1
1016 ; CHECK-NEXT: rsbs r1, r1, #0
1017 ; CHECK-NEXT: bfi r3, r1, #7, #1
1018 ; CHECK-NEXT: uxtb r1, r3
1019 ; CHECK-NEXT: lsls r3, r3, #31
7341020 ; CHECK-NEXT: itt ne
7351021 ; CHECK-NEXT: ldrhne r3, [r2]
7361022 ; CHECK-NEXT: vmovne.16 q0[0], r3
7621048 ; CHECK-NEXT: itt mi
7631049 ; CHECK-NEXT: ldrhmi r1, [r2, #14]
7641050 ; CHECK-NEXT: vmovmi.16 q0[7], r1
765 ; CHECK-NEXT: mov r1, sp
766 ; CHECK-NEXT: vstr p0, [r1]
767 ; CHECK-NEXT: ldrb.w r1, [sp]
768 ; CHECK-NEXT: lsls r2, r1, #31
1051 ; CHECK-NEXT: movs r2, #0
1052 ; CHECK-NEXT: vmrs r1, p0
1053 ; CHECK-NEXT: and r3, r1, #1
1054 ; CHECK-NEXT: rsbs r3, r3, #0
1055 ; CHECK-NEXT: bfi r2, r3, #0, #1
1056 ; CHECK-NEXT: ubfx r3, r1, #2, #1
1057 ; CHECK-NEXT: rsbs r3, r3, #0
1058 ; CHECK-NEXT: bfi r2, r3, #1, #1
1059 ; CHECK-NEXT: ubfx r3, r1, #4, #1
1060 ; CHECK-NEXT: rsbs r3, r3, #0
1061 ; CHECK-NEXT: bfi r2, r3, #2, #1
1062 ; CHECK-NEXT: ubfx r3, r1, #6, #1
1063 ; CHECK-NEXT: rsbs r3, r3, #0
1064 ; CHECK-NEXT: bfi r2, r3, #3, #1
1065 ; CHECK-NEXT: ubfx r3, r1, #8, #1
1066 ; CHECK-NEXT: rsbs r3, r3, #0
1067 ; CHECK-NEXT: bfi r2, r3, #4, #1
1068 ; CHECK-NEXT: ubfx r3, r1, #10, #1
1069 ; CHECK-NEXT: rsbs r3, r3, #0
1070 ; CHECK-NEXT: bfi r2, r3, #5, #1
1071 ; CHECK-NEXT: ubfx r3, r1, #12, #1
1072 ; CHECK-NEXT: ubfx r1, r1, #14, #1
1073 ; CHECK-NEXT: rsbs r3, r3, #0
1074 ; CHECK-NEXT: bfi r2, r3, #6, #1
1075 ; CHECK-NEXT: rsbs r1, r1, #0
1076 ; CHECK-NEXT: bfi r2, r1, #7, #1
1077 ; CHECK-NEXT: uxtb r1, r2
1078 ; CHECK-NEXT: lsls r2, r2, #31
7691079 ; CHECK-NEXT: itt ne
7701080 ; CHECK-NEXT: vmovne.u16 r2, q0[0]
7711081 ; CHECK-NEXT: strbne r2, [r0]
8141124 ; CHECK-NEXT: .pad #8
8151125 ; CHECK-NEXT: sub sp, #8
8161126 ; CHECK-NEXT: vldrw.u32 q0, [r1]
817 ; CHECK-NEXT: add r3, sp, #4
1127 ; CHECK-NEXT: movs r3, #0
8181128 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
8191129 ; CHECK-NEXT: @ implicit-def: $q0
820 ; CHECK-NEXT: vstr p0, [r3]
821 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
1130 ; CHECK-NEXT: vmrs r12, p0
1131 ; CHECK-NEXT: and r1, r12, #1
1132 ; CHECK-NEXT: rsbs r1, r1, #0
1133 ; CHECK-NEXT: bfi r3, r1, #0, #1
1134 ; CHECK-NEXT: ubfx r1, r12, #4, #1
1135 ; CHECK-NEXT: rsbs r1, r1, #0
1136 ; CHECK-NEXT: bfi r3, r1, #1, #1
1137 ; CHECK-NEXT: ubfx r1, r12, #8, #1
1138 ; CHECK-NEXT: rsbs r1, r1, #0
1139 ; CHECK-NEXT: bfi r3, r1, #2, #1
1140 ; CHECK-NEXT: ubfx r1, r12, #12, #1
1141 ; CHECK-NEXT: rsbs r1, r1, #0
1142 ; CHECK-NEXT: bfi r3, r1, #3, #1
1143 ; CHECK-NEXT: and r1, r3, #15
8221144 ; CHECK-NEXT: lsls r3, r1, #31
8231145 ; CHECK-NEXT: itt ne
8241146 ; CHECK-NEXT: ldrne r3, [r2]
8351157 ; CHECK-NEXT: itt mi
8361158 ; CHECK-NEXT: ldrmi r1, [r2, #12]
8371159 ; CHECK-NEXT: vmovmi.32 q0[3], r1
838 ; CHECK-NEXT: mov r1, sp
839 ; CHECK-NEXT: vstr p0, [r1]
840 ; CHECK-NEXT: ldrb.w r1, [sp]
1160 ; CHECK-NEXT: vmrs r2, p0
1161 ; CHECK-NEXT: movs r1, #0
1162 ; CHECK-NEXT: and r3, r2, #1
1163 ; CHECK-NEXT: rsbs r3, r3, #0
1164 ; CHECK-NEXT: bfi r1, r3, #0, #1
1165 ; CHECK-NEXT: ubfx r3, r2, #4, #1
1166 ; CHECK-NEXT: rsbs r3, r3, #0
1167 ; CHECK-NEXT: bfi r1, r3, #1, #1
1168 ; CHECK-NEXT: ubfx r3, r2, #8, #1
1169 ; CHECK-NEXT: ubfx r2, r2, #12, #1
1170 ; CHECK-NEXT: rsbs r3, r3, #0
1171 ; CHECK-NEXT: bfi r1, r3, #2, #1
1172 ; CHECK-NEXT: rsbs r2, r2, #0
1173 ; CHECK-NEXT: bfi r1, r2, #3, #1
1174 ; CHECK-NEXT: and r1, r1, #15
8411175 ; CHECK-NEXT: lsls r2, r1, #31
8421176 ; CHECK-NEXT: itt ne
8431177 ; CHECK-NEXT: vmovne r2, s0
8711205 ; CHECK-NEXT: .pad #8
8721206 ; CHECK-NEXT: sub sp, #8
8731207 ; CHECK-NEXT: vldrw.u32 q0, [r1]
874 ; CHECK-NEXT: add r3, sp, #4
1208 ; CHECK-NEXT: movs r3, #0
8751209 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
8761210 ; CHECK-NEXT: @ implicit-def: $q0
877 ; CHECK-NEXT: vstr p0, [r3]
878 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
1211 ; CHECK-NEXT: vmrs r12, p0
1212 ; CHECK-NEXT: and r1, r12, #1
1213 ; CHECK-NEXT: rsbs r1, r1, #0
1214 ; CHECK-NEXT: bfi r3, r1, #0, #1
1215 ; CHECK-NEXT: ubfx r1, r12, #4, #1
1216 ; CHECK-NEXT: rsbs r1, r1, #0
1217 ; CHECK-NEXT: bfi r3, r1, #1, #1
1218 ; CHECK-NEXT: ubfx r1, r12, #8, #1
1219 ; CHECK-NEXT: rsbs r1, r1, #0
1220 ; CHECK-NEXT: bfi r3, r1, #2, #1
1221 ; CHECK-NEXT: ubfx r1, r12, #12, #1
1222 ; CHECK-NEXT: rsbs r1, r1, #0
1223 ; CHECK-NEXT: bfi r3, r1, #3, #1
1224 ; CHECK-NEXT: and r1, r3, #15
8791225 ; CHECK-NEXT: lsls r3, r1, #31
8801226 ; CHECK-NEXT: itt ne
8811227 ; CHECK-NEXT: ldrne r3, [r2]
8921238 ; CHECK-NEXT: itt mi
8931239 ; CHECK-NEXT: ldrmi r1, [r2, #12]
8941240 ; CHECK-NEXT: vmovmi.32 q0[3], r1
895 ; CHECK-NEXT: mov r1, sp
896 ; CHECK-NEXT: vstr p0, [r1]
897 ; CHECK-NEXT: ldrb.w r1, [sp]
1241 ; CHECK-NEXT: vmrs r2, p0
1242 ; CHECK-NEXT: movs r1, #0
1243 ; CHECK-NEXT: and r3, r2, #1
1244 ; CHECK-NEXT: rsbs r3, r3, #0
1245 ; CHECK-NEXT: bfi r1, r3, #0, #1
1246 ; CHECK-NEXT: ubfx r3, r2, #4, #1
1247 ; CHECK-NEXT: rsbs r3, r3, #0
1248 ; CHECK-NEXT: bfi r1, r3, #1, #1
1249 ; CHECK-NEXT: ubfx r3, r2, #8, #1
1250 ; CHECK-NEXT: ubfx r2, r2, #12, #1
1251 ; CHECK-NEXT: rsbs r3, r3, #0
1252 ; CHECK-NEXT: bfi r1, r3, #2, #1
1253 ; CHECK-NEXT: rsbs r2, r2, #0
1254 ; CHECK-NEXT: bfi r1, r2, #3, #1
1255 ; CHECK-NEXT: and r1, r1, #15
8981256 ; CHECK-NEXT: lsls r2, r1, #31
8991257 ; CHECK-NEXT: itt ne
9001258 ; CHECK-NEXT: vmovne r2, s0
9281286 ; CHECK-NEXT: .pad #8
9291287 ; CHECK-NEXT: sub sp, #8
9301288 ; CHECK-NEXT: vldrw.u32 q0, [r1]
931 ; CHECK-NEXT: add r3, sp, #4
1289 ; CHECK-NEXT: movs r3, #0
9321290 ; CHECK-NEXT: vcmp.s32 gt, q0, zr
9331291 ; CHECK-NEXT: @ implicit-def: $q0
934 ; CHECK-NEXT: vstr p0, [r3]
935 ; CHECK-NEXT: ldrb.w r1, [sp, #4]
1292 ; CHECK-NEXT: vmrs r12, p0
1293 ; CHECK-NEXT: and r1, r12, #1
1294 ; CHECK-NEXT: rsbs r1, r1, #0
1295 ; CHECK-NEXT: bfi r3, r1, #0, #1
1296 ; CHECK-NEXT: ubfx r1, r12, #4, #1
1297 ; CHECK-NEXT: rsbs r1, r1, #0
1298 ; CHECK-NEXT: bfi r3, r1, #1, #1
1299 ; CHECK-NEXT: ubfx r1, r12, #8, #1
1300 ; CHECK-NEXT: rsbs r1, r1, #0
1301 ; CHECK-NEXT: bfi r3, r1, #2, #1
1302 ; CHECK-NEXT: ubfx r1, r12, #12, #1
1303 ; CHECK-NEXT: rsbs r1, r1, #0
1304 ; CHECK-NEXT: bfi r3, r1, #3, #1
1305 ; CHECK-NEXT: and r1, r3, #15
9361306 ; CHECK-NEXT: lsls r3, r1, #31
9371307 ; CHECK-NEXT: it ne
9381308 ; CHECK-NEXT: vldrne s0, [r2]
9451315 ; CHECK-NEXT: lsls r1, r1, #28
9461316 ; CHECK-NEXT: it mi
9471317 ; CHECK-NEXT: vldrmi s3, [r2, #12]
948 ; CHECK-NEXT: mov r1, sp
949 ; CHECK-NEXT: vstr p0, [r1]
950 ; CHECK-NEXT: ldrb.w r1, [sp]
1318 ; CHECK-NEXT: vmrs r2, p0
1319 ; CHECK-NEXT: movs r1, #0
1320 ; CHECK-NEXT: and r3, r2, #1
1321 ; CHECK-NEXT: rsbs r3, r3, #0
1322 ; CHECK-NEXT: bfi r1, r3, #0, #1
1323 ; CHECK-NEXT: ubfx r3, r2, #4, #1
1324 ; CHECK-NEXT: rsbs r3, r3, #0
1325 ; CHECK-NEXT: bfi r1, r3, #1, #1
1326 ; CHECK-NEXT: ubfx r3, r2, #8, #1
1327 ; CHECK-NEXT: ubfx r2, r2, #12, #1
1328 ; CHECK-NEXT: rsbs r3, r3, #0
1329 ; CHECK-NEXT: bfi r1, r3, #2, #1
1330 ; CHECK-NEXT: rsbs r2, r2, #0
1331 ; CHECK-NEXT: bfi r1, r2, #3, #1
1332 ; CHECK-NEXT: and r1, r1, #15
9511333 ; CHECK-NEXT: lsls r2, r1, #31
9521334 ; CHECK-NEXT: it ne
9531335 ; CHECK-NEXT: vstrne s0, [r0]
9761358 ; CHECK-NEXT: .pad #16
9771359 ; CHECK-NEXT: sub sp, #16
9781360 ; CHECK-NEXT: vldrh.u16 q0, [r1]
979 ; CHECK-NEXT: add r3, sp, #8
1361 ; CHECK-NEXT: movs r3, #0
9801362 ; CHECK-NEXT: vcmp.s16 gt, q0, zr
9811363 ; CHECK-NEXT: @ implicit-def: $q0
982 ; CHECK-NEXT: vstr p0, [r3]
983 ; CHECK-NEXT: ldrb.w r1, [sp, #8]
984 ; CHECK-NEXT: lsls r3, r1, #31
1364 ; CHECK-NEXT: vmrs r12, p0
1365 ; CHECK-NEXT: and r1, r12, #1
1366 ; CHECK-NEXT: rsbs r1, r1, #0
1367 ; CHECK-NEXT: bfi r3, r1, #0, #1
1368 ; CHECK-NEXT: ubfx r1, r12, #2, #1
1369 ; CHECK-NEXT: rsbs r1, r1, #0
1370 ; CHECK-NEXT: bfi r3, r1, #1, #1
1371 ; CHECK-NEXT: ubfx r1, r12, #4, #1
1372 ; CHECK-NEXT: rsbs r1, r1, #0
1373 ; CHECK-NEXT: bfi r3, r1, #2, #1
1374 ; CHECK-NEXT: ubfx r1, r12, #6, #1
1375 ; CHECK-NEXT: rsbs r1, r1, #0
1376 ; CHECK-NEXT: bfi r3, r1, #3, #1
1377 ; CHECK-NEXT: ubfx r1, r12, #8, #1
1378 ; CHECK-NEXT: rsbs r1, r1, #0
1379 ; CHECK-NEXT: bfi r3, r1, #4, #1
1380 ; CHECK-NEXT: ubfx r1, r12, #10, #1
1381 ; CHECK-NEXT: rsbs r1, r1, #0
1382 ; CHECK-NEXT: bfi r3, r1, #5, #1
1383 ; CHECK-NEXT: ubfx r1, r12, #12, #1
1384 ; CHECK-NEXT: rsbs r1, r1, #0
1385 ; CHECK-NEXT: bfi r3, r1, #6, #1
1386 ; CHECK-NEXT: ubfx r1, r12, #14, #1
1387 ; CHECK-NEXT: rsbs r1, r1, #0
1388 ; CHECK-NEXT: bfi r3, r1, #7, #1
1389 ; CHECK-NEXT: uxtb r1, r3
1390 ; CHECK-NEXT: lsls r3, r3, #31
9851391 ; CHECK-NEXT: bne .LBB13_18
9861392 ; CHECK-NEXT: @ %bb.1: @ %else
9871393 ; CHECK-NEXT: lsls r3, r1, #30
10091415 ; CHECK-NEXT: vmov r1, s4
10101416 ; CHECK-NEXT: vmov.16 q0[7], r1
10111417 ; CHECK-NEXT: .LBB13_9: @ %else20
1012 ; CHECK-NEXT: mov r1, sp
1013 ; CHECK-NEXT: vstr p0, [r1]
1014 ; CHECK-NEXT: ldrb.w r1, [sp]
1015 ; CHECK-NEXT: lsls r2, r1, #31
1418 ; CHECK-NEXT: vmrs r1, p0
1419 ; CHECK-NEXT: movs r2, #0
1420 ; CHECK-NEXT: and r3, r1, #1
1421 ; CHECK-NEXT: rsbs r3, r3, #0
1422 ; CHECK-NEXT: bfi r2, r3, #0, #1
1423 ; CHECK-NEXT: ubfx r3, r1, #2, #1
1424 ; CHECK-NEXT: rsbs r3, r3, #0
1425 ; CHECK-NEXT: bfi r2, r3, #1, #1
1426 ; CHECK-NEXT: ubfx r3, r1, #4, #1
1427 ; CHECK-NEXT: rsbs r3, r3, #0
1428 ; CHECK-NEXT: bfi r2, r3, #2, #1
1429 ; CHECK-NEXT: ubfx r3, r1, #6, #1
1430 ; CHECK-NEXT: rsbs r3, r3, #0
1431 ; CHECK-NEXT: bfi r2, r3, #3, #1
1432 ; CHECK-NEXT: ubfx r3, r1, #8, #1
1433 ; CHECK-NEXT: rsbs r3, r3, #0
1434 ; CHECK-NEXT: bfi r2, r3, #4, #1
1435 ; CHECK-NEXT: ubfx r3, r1, #10, #1
1436 ; CHECK-NEXT: rsbs r3, r3, #0
1437 ; CHECK-NEXT: bfi r2, r3, #5, #1
1438 ; CHECK-NEXT: ubfx r3, r1, #12, #1
1439 ; CHECK-NEXT: ubfx r1, r1, #14, #1
1440 ; CHECK-NEXT: rsbs r3, r3, #0
1441 ; CHECK-NEXT: bfi r2, r3, #6, #1
1442 ; CHECK-NEXT: rsbs r1, r1, #0
1443 ; CHECK-NEXT: bfi r2, r1, #7, #1
1444 ; CHECK-NEXT: uxtb r1, r2
1445 ; CHECK-NEXT: lsls r2, r2, #31
10161446 ; CHECK-NEXT: bne .LBB13_25
10171447 ; CHECK-NEXT: @ %bb.10: @ %else23
10181448 ; CHECK-NEXT: lsls r2, r1, #30
10711501 ; CHECK-NEXT: vmov r3, s4
10721502 ; CHECK-NEXT: vmov.16 q0[5], r3
10731503 ; CHECK-NEXT: lsls r3, r1, #25
1074 ; CHECK-NEXT: bpl .LBB13_7
1504 ; CHECK-NEXT: bpl.w .LBB13_7
10751505 ; CHECK-NEXT: .LBB13_24: @ %cond.load16
10761506 ; CHECK-NEXT: vldr.16 s4, [r2, #12]
10771507 ; CHECK-NEXT: vmov r3, s4
10781508 ; CHECK-NEXT: vmov.16 q0[6], r3
10791509 ; CHECK-NEXT: lsls r1, r1, #24
1080 ; CHECK-NEXT: bmi .LBB13_8
1510 ; CHECK-NEXT: bmi.w .LBB13_8
10811511 ; CHECK-NEXT: b .LBB13_9
10821512 ; CHECK-NEXT: .LBB13_25: @ %cond.store
10831513 ; CHECK-NEXT: vstr.16 s0, [r0]
66 ; CHECK-LE: @ %bb.0: @ %entry
77 ; CHECK-LE-NEXT: .pad #4
88 ; CHECK-LE-NEXT: sub sp, #4
9 ; CHECK-LE-NEXT: mov r1, sp
109 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
11 ; CHECK-LE-NEXT: vstr p0, [r1]
12 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
10 ; CHECK-LE-NEXT: movs r2, #0
11 ; CHECK-LE-NEXT: vmrs r1, p0
12 ; CHECK-LE-NEXT: mov.w r12, #0
13 ; CHECK-LE-NEXT: and r3, r1, #1
14 ; CHECK-LE-NEXT: rsbs r3, r3, #0
15 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
16 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
17 ; CHECK-LE-NEXT: rsbs r3, r3, #0
18 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
19 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
20 ; CHECK-LE-NEXT: ubfx r1, r1, #12, #1
21 ; CHECK-LE-NEXT: rsbs r3, r3, #0
22 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
23 ; CHECK-LE-NEXT: rsbs r1, r1, #0
24 ; CHECK-LE-NEXT: bfi r2, r1, #3, #1
25 ; CHECK-LE-NEXT: and r1, r2, #15
1326 ; CHECK-LE-NEXT: lsls r2, r1, #31
1427 ; CHECK-LE-NEXT: beq .LBB0_2
1528 ; CHECK-LE-NEXT: @ %bb.1: @ %cond.load
16 ; CHECK-LE-NEXT: movs r2, #0
17 ; CHECK-LE-NEXT: ldr r3, [r0]
18 ; CHECK-LE-NEXT: vdup.32 q0, r2
19 ; CHECK-LE-NEXT: vmov.32 q0[0], r3
29 ; CHECK-LE-NEXT: ldr r2, [r0]
30 ; CHECK-LE-NEXT: vdup.32 q0, r12
31 ; CHECK-LE-NEXT: vmov.32 q0[0], r2
2032 ; CHECK-LE-NEXT: b .LBB0_3
2133 ; CHECK-LE-NEXT: .LBB0_2:
2234 ; CHECK-LE-NEXT: vmov.i32 q0, #0x0
4153 ; CHECK-BE-NEXT: .pad #4
4254 ; CHECK-BE-NEXT: sub sp, #4
4355 ; CHECK-BE-NEXT: vrev64.32 q1, q0
44 ; CHECK-BE-NEXT: mov r1, sp
56 ; CHECK-BE-NEXT: movs r2, #0
4557 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
46 ; CHECK-BE-NEXT: vstr p0, [r1]
47 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
58 ; CHECK-BE-NEXT: mov.w r12, #0
59 ; CHECK-BE-NEXT: vmrs r1, p0
60 ; CHECK-BE-NEXT: and r3, r1, #1
61 ; CHECK-BE-NEXT: rsbs r3, r3, #0
62 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
63 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
64 ; CHECK-BE-NEXT: rsbs r3, r3, #0
65 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
66 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
67 ; CHECK-BE-NEXT: ubfx r1, r1, #12, #1
68 ; CHECK-BE-NEXT: rsbs r3, r3, #0
69 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
70 ; CHECK-BE-NEXT: rsbs r1, r1, #0
71 ; CHECK-BE-NEXT: bfi r2, r1, #3, #1
72 ; CHECK-BE-NEXT: and r1, r2, #15
4873 ; CHECK-BE-NEXT: lsls r2, r1, #31
4974 ; CHECK-BE-NEXT: beq .LBB0_2
5075 ; CHECK-BE-NEXT: @ %bb.1: @ %cond.load
51 ; CHECK-BE-NEXT: movs r2, #0
52 ; CHECK-BE-NEXT: ldr r3, [r0]
53 ; CHECK-BE-NEXT: vdup.32 q1, r2
54 ; CHECK-BE-NEXT: vmov.32 q1[0], r3
76 ; CHECK-BE-NEXT: ldr r2, [r0]
77 ; CHECK-BE-NEXT: vdup.32 q1, r12
78 ; CHECK-BE-NEXT: vmov.32 q1[0], r2
5579 ; CHECK-BE-NEXT: b .LBB0_3
5680 ; CHECK-BE-NEXT: .LBB0_2:
5781 ; CHECK-BE-NEXT: vmov.i32 q1, #0x0
83107 ; CHECK-LE-NEXT: .pad #4
84108 ; CHECK-LE-NEXT: sub sp, #4
85109 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
86 ; CHECK-LE-NEXT: mov r1, sp
87 ; CHECK-LE-NEXT: vstr p0, [r1]
110 ; CHECK-LE-NEXT: movs r1, #0
111 ; CHECK-LE-NEXT: vmrs r2, p0
88112 ; CHECK-LE-NEXT: @ implicit-def: $q0
89 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
113 ; CHECK-LE-NEXT: and r3, r2, #1
114 ; CHECK-LE-NEXT: rsbs r3, r3, #0
115 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
116 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
117 ; CHECK-LE-NEXT: rsbs r3, r3, #0
118 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
119 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
120 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
121 ; CHECK-LE-NEXT: rsbs r3, r3, #0
122 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
123 ; CHECK-LE-NEXT: rsbs r2, r2, #0
124 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
125 ; CHECK-LE-NEXT: and r1, r1, #15
90126 ; CHECK-LE-NEXT: lsls r2, r1, #31
91127 ; CHECK-LE-NEXT: itt ne
92128 ; CHECK-LE-NEXT: ldrne r2, [r0]
111147 ; CHECK-BE-NEXT: .pad #4
112148 ; CHECK-BE-NEXT: sub sp, #4
113149 ; CHECK-BE-NEXT: vrev64.32 q1, q0
114 ; CHECK-BE-NEXT: mov r1, sp
150 ; CHECK-BE-NEXT: movs r1, #0
115151 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
116152 ; CHECK-BE-NEXT: @ implicit-def: $q1
117 ; CHECK-BE-NEXT: vstr p0, [r1]
118 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
153 ; CHECK-BE-NEXT: vmrs r2, p0
154 ; CHECK-BE-NEXT: and r3, r2, #1
155 ; CHECK-BE-NEXT: rsbs r3, r3, #0
156 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
157 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
158 ; CHECK-BE-NEXT: rsbs r3, r3, #0
159 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
160 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
161 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
162 ; CHECK-BE-NEXT: rsbs r3, r3, #0
163 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
164 ; CHECK-BE-NEXT: rsbs r2, r2, #0
165 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
166 ; CHECK-BE-NEXT: and r1, r1, #15
119167 ; CHECK-BE-NEXT: lsls r2, r1, #31
120168 ; CHECK-BE-NEXT: itt ne
121169 ; CHECK-BE-NEXT: ldrne r2, [r0]
147195 ; CHECK-LE-NEXT: .pad #4
148196 ; CHECK-LE-NEXT: sub sp, #4
149197 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
150 ; CHECK-LE-NEXT: mov r1, sp
151 ; CHECK-LE-NEXT: vstr p0, [r1]
198 ; CHECK-LE-NEXT: movs r1, #0
199 ; CHECK-LE-NEXT: vmrs r2, p0
152200 ; CHECK-LE-NEXT: @ implicit-def: $q0
153 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
201 ; CHECK-LE-NEXT: and r3, r2, #1
202 ; CHECK-LE-NEXT: rsbs r3, r3, #0
203 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
204 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
205 ; CHECK-LE-NEXT: rsbs r3, r3, #0
206 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
207 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
208 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
209 ; CHECK-LE-NEXT: rsbs r3, r3, #0
210 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
211 ; CHECK-LE-NEXT: rsbs r2, r2, #0
212 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
213 ; CHECK-LE-NEXT: and r1, r1, #15
154214 ; CHECK-LE-NEXT: lsls r2, r1, #31
155215 ; CHECK-LE-NEXT: itt ne
156216 ; CHECK-LE-NEXT: ldrne r2, [r0]
175235 ; CHECK-BE-NEXT: .pad #4
176236 ; CHECK-BE-NEXT: sub sp, #4
177237 ; CHECK-BE-NEXT: vrev64.32 q1, q0
178 ; CHECK-BE-NEXT: mov r1, sp
238 ; CHECK-BE-NEXT: movs r1, #0
179239 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
180240 ; CHECK-BE-NEXT: @ implicit-def: $q1
181 ; CHECK-BE-NEXT: vstr p0, [r1]
182 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
241 ; CHECK-BE-NEXT: vmrs r2, p0
242 ; CHECK-BE-NEXT: and r3, r2, #1
243 ; CHECK-BE-NEXT: rsbs r3, r3, #0
244 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
245 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
246 ; CHECK-BE-NEXT: rsbs r3, r3, #0
247 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
248 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
249 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
250 ; CHECK-BE-NEXT: rsbs r3, r3, #0
251 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
252 ; CHECK-BE-NEXT: rsbs r2, r2, #0
253 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
254 ; CHECK-BE-NEXT: and r1, r1, #15
183255 ; CHECK-BE-NEXT: lsls r2, r1, #31
184256 ; CHECK-BE-NEXT: itt ne
185257 ; CHECK-BE-NEXT: ldrne r2, [r0]
210282 ; CHECK-LE: @ %bb.0: @ %entry
211283 ; CHECK-LE-NEXT: .pad #4
212284 ; CHECK-LE-NEXT: sub sp, #4
213 ; CHECK-LE-NEXT: mov r1, sp
214285 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
215 ; CHECK-LE-NEXT: vstr p0, [r1]
216 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
286 ; CHECK-LE-NEXT: movs r1, #0
287 ; CHECK-LE-NEXT: vmrs r2, p0
288 ; CHECK-LE-NEXT: and r3, r2, #1
289 ; CHECK-LE-NEXT: rsbs r3, r3, #0
290 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
291 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
292 ; CHECK-LE-NEXT: rsbs r3, r3, #0
293 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
294 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
295 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
296 ; CHECK-LE-NEXT: rsbs r3, r3, #0
297 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
298 ; CHECK-LE-NEXT: rsbs r2, r2, #0
299 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
300 ; CHECK-LE-NEXT: and r1, r1, #15
217301 ; CHECK-LE-NEXT: lsls r2, r1, #31
218302 ; CHECK-LE-NEXT: itt ne
219303 ; CHECK-LE-NEXT: ldrne r2, [r0]
238322 ; CHECK-BE-NEXT: .pad #4
239323 ; CHECK-BE-NEXT: sub sp, #4
240324 ; CHECK-BE-NEXT: vrev64.32 q1, q0
241 ; CHECK-BE-NEXT: mov r1, sp
325 ; CHECK-BE-NEXT: movs r1, #0
242326 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
243 ; CHECK-BE-NEXT: vstr p0, [r1]
244 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
327 ; CHECK-BE-NEXT: vmrs r2, p0
328 ; CHECK-BE-NEXT: and r3, r2, #1
329 ; CHECK-BE-NEXT: rsbs r3, r3, #0
330 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
331 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
332 ; CHECK-BE-NEXT: rsbs r3, r3, #0
333 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
334 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
335 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
336 ; CHECK-BE-NEXT: rsbs r3, r3, #0
337 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
338 ; CHECK-BE-NEXT: rsbs r2, r2, #0
339 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
340 ; CHECK-BE-NEXT: and r1, r1, #15
245341 ; CHECK-BE-NEXT: lsls r2, r1, #31
246342 ; CHECK-BE-NEXT: itt ne
247343 ; CHECK-BE-NEXT: ldrne r2, [r0]
273369 ; CHECK-LE-NEXT: .pad #4
274370 ; CHECK-LE-NEXT: sub sp, #4
275371 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
276 ; CHECK-LE-NEXT: mov r2, sp
277 ; CHECK-LE-NEXT: vstr p0, [r2]
372 ; CHECK-LE-NEXT: movs r2, #0
373 ; CHECK-LE-NEXT: vmrs r12, p0
278374 ; CHECK-LE-NEXT: @ implicit-def: $q0
279375 ; CHECK-LE-NEXT: adds r0, #4
280 ; CHECK-LE-NEXT: ldrb.w r2, [sp]
376 ; CHECK-LE-NEXT: and r3, r12, #1
377 ; CHECK-LE-NEXT: rsbs r3, r3, #0
378 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
379 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
380 ; CHECK-LE-NEXT: rsbs r3, r3, #0
381 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
382 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
383 ; CHECK-LE-NEXT: rsbs r3, r3, #0
384 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
385 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
386 ; CHECK-LE-NEXT: rsbs r3, r3, #0
387 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
388 ; CHECK-LE-NEXT: and r2, r2, #15
281389 ; CHECK-LE-NEXT: lsls r3, r2, #31
282390 ; CHECK-LE-NEXT: itt ne
283391 ; CHECK-LE-NEXT: ldrne r3, [r0]
303411 ; CHECK-BE-NEXT: .pad #4
304412 ; CHECK-BE-NEXT: sub sp, #4
305413 ; CHECK-BE-NEXT: vrev64.32 q1, q0
306 ; CHECK-BE-NEXT: mov r2, sp
414 ; CHECK-BE-NEXT: movs r2, #0
307415 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
308416 ; CHECK-BE-NEXT: @ implicit-def: $q0
309417 ; CHECK-BE-NEXT: adds r0, #4
310 ; CHECK-BE-NEXT: vstr p0, [r2]
311 ; CHECK-BE-NEXT: ldrb.w r2, [sp]
418 ; CHECK-BE-NEXT: vmrs r12, p0
419 ; CHECK-BE-NEXT: and r3, r12, #1
420 ; CHECK-BE-NEXT: rsbs r3, r3, #0
421 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
422 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
423 ; CHECK-BE-NEXT: rsbs r3, r3, #0
424 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
425 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
426 ; CHECK-BE-NEXT: rsbs r3, r3, #0
427 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
428 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
429 ; CHECK-BE-NEXT: rsbs r3, r3, #0
430 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
431 ; CHECK-BE-NEXT: and r2, r2, #15
312432 ; CHECK-BE-NEXT: lsls r3, r2, #31
313433 ; CHECK-BE-NEXT: itt ne
314434 ; CHECK-BE-NEXT: ldrne r3, [r0]
344464 ; CHECK-LE-NEXT: .pad #4
345465 ; CHECK-LE-NEXT: sub sp, #4
346466 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
347 ; CHECK-LE-NEXT: mov r2, sp
348 ; CHECK-LE-NEXT: vstr p0, [r2]
467 ; CHECK-LE-NEXT: movs r2, #0
468 ; CHECK-LE-NEXT: vmrs r12, p0
349469 ; CHECK-LE-NEXT: @ implicit-def: $q0
470 ; CHECK-LE-NEXT: and r3, r12, #1
471 ; CHECK-LE-NEXT: rsbs r3, r3, #0
472 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
473 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
474 ; CHECK-LE-NEXT: rsbs r3, r3, #0
475 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
476 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
477 ; CHECK-LE-NEXT: rsbs r3, r3, #0
478 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
479 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
480 ; CHECK-LE-NEXT: rsbs r3, r3, #0
350481 ; CHECK-LE-NEXT: add.w r12, r0, #4
351 ; CHECK-LE-NEXT: ldrb.w r3, [sp]
482 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
483 ; CHECK-LE-NEXT: and r3, r2, #15
352484 ; CHECK-LE-NEXT: lsls r2, r3, #31
353485 ; CHECK-LE-NEXT: itt ne
354486 ; CHECK-LE-NEXT: ldrne r2, [r0]
375507 ; CHECK-BE-NEXT: .pad #4
376508 ; CHECK-BE-NEXT: sub sp, #4
377509 ; CHECK-BE-NEXT: vrev64.32 q1, q0
378 ; CHECK-BE-NEXT: mov r2, sp
510 ; CHECK-BE-NEXT: movs r2, #0
379511 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
380512 ; CHECK-BE-NEXT: @ implicit-def: $q0
513 ; CHECK-BE-NEXT: vmrs r12, p0
514 ; CHECK-BE-NEXT: and r3, r12, #1
515 ; CHECK-BE-NEXT: rsbs r3, r3, #0
516 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
517 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
518 ; CHECK-BE-NEXT: rsbs r3, r3, #0
519 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
520 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
521 ; CHECK-BE-NEXT: rsbs r3, r3, #0
522 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
523 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
524 ; CHECK-BE-NEXT: rsbs r3, r3, #0
381525 ; CHECK-BE-NEXT: add.w r12, r0, #4
382 ; CHECK-BE-NEXT: vstr p0, [r2]
383 ; CHECK-BE-NEXT: ldrb.w r3, [sp]
526 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
527 ; CHECK-BE-NEXT: and r3, r2, #15
384528 ; CHECK-BE-NEXT: lsls r2, r3, #31
385529 ; CHECK-BE-NEXT: itt ne
386530 ; CHECK-BE-NEXT: ldrne r2, [r0]
418562 ; CHECK-LE: @ %bb.0: @ %entry
419563 ; CHECK-LE-NEXT: .pad #8
420564 ; CHECK-LE-NEXT: sub sp, #8
421 ; CHECK-LE-NEXT: mov r1, sp
422565 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
423 ; CHECK-LE-NEXT: vstr p0, [r1]
424 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
425 ; CHECK-LE-NEXT: lsls r2, r1, #31
566 ; CHECK-LE-NEXT: mov.w r12, #0
567 ; CHECK-LE-NEXT: vmrs r1, p0
568 ; CHECK-LE-NEXT: and r3, r1, #1
569 ; CHECK-LE-NEXT: rsbs r2, r3, #0
570 ; CHECK-LE-NEXT: movs r3, #0
571 ; CHECK-LE-NEXT: bfi r3, r2, #0, #1
572 ; CHECK-LE-NEXT: ubfx r2, r1, #2, #1
573 ; CHECK-LE-NEXT: rsbs r2, r2, #0
574 ; CHECK-LE-NEXT: bfi r3, r2, #1, #1
575 ; CHECK-LE-NEXT: ubfx r2, r1, #4, #1
576 ; CHECK-LE-NEXT: rsbs r2, r2, #0
577 ; CHECK-LE-NEXT: bfi r3, r2, #2, #1
578 ; CHECK-LE-NEXT: ubfx r2, r1, #6, #1
579 ; CHECK-LE-NEXT: rsbs r2, r2, #0
580 ; CHECK-LE-NEXT: bfi r3, r2, #3, #1
581 ; CHECK-LE-NEXT: ubfx r2, r1, #8, #1
582 ; CHECK-LE-NEXT: rsbs r2, r2, #0
583 ; CHECK-LE-NEXT: bfi r3, r2, #4, #1
584 ; CHECK-LE-NEXT: ubfx r2, r1, #10, #1
585 ; CHECK-LE-NEXT: rsbs r2, r2, #0
586 ; CHECK-LE-NEXT: bfi r3, r2, #5, #1
587 ; CHECK-LE-NEXT: ubfx r2, r1, #12, #1
588 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
589 ; CHECK-LE-NEXT: rsbs r2, r2, #0
590 ; CHECK-LE-NEXT: bfi r3, r2, #6, #1
591 ; CHECK-LE-NEXT: rsbs r1, r1, #0
592 ; CHECK-LE-NEXT: bfi r3, r1, #7, #1
593 ; CHECK-LE-NEXT: uxtb r1, r3
594 ; CHECK-LE-NEXT: lsls r2, r3, #31
426595 ; CHECK-LE-NEXT: beq .LBB6_2
427596 ; CHECK-LE-NEXT: @ %bb.1: @ %cond.load
428 ; CHECK-LE-NEXT: movs r2, #0
429 ; CHECK-LE-NEXT: ldrh r3, [r0]
430 ; CHECK-LE-NEXT: vdup.16 q0, r2
431 ; CHECK-LE-NEXT: vmov.16 q0[0], r3
597 ; CHECK-LE-NEXT: ldrh r2, [r0]
598 ; CHECK-LE-NEXT: vdup.16 q0, r12
599 ; CHECK-LE-NEXT: vmov.16 q0[0], r2
432600 ; CHECK-LE-NEXT: b .LBB6_3
433601 ; CHECK-LE-NEXT: .LBB6_2:
434602 ; CHECK-LE-NEXT: vmov.i32 q0, #0x0
469637 ; CHECK-BE-NEXT: .pad #8
470638 ; CHECK-BE-NEXT: sub sp, #8
471639 ; CHECK-BE-NEXT: vrev64.16 q1, q0
472 ; CHECK-BE-NEXT: mov r1, sp
640 ; CHECK-BE-NEXT: mov.w r12, #0
473641 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
474 ; CHECK-BE-NEXT: vstr p0, [r1]
475 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
476 ; CHECK-BE-NEXT: lsls r2, r1, #31
642 ; CHECK-BE-NEXT: vmrs r1, p0
643 ; CHECK-BE-NEXT: and r3, r1, #1
644 ; CHECK-BE-NEXT: rsbs r2, r3, #0
645 ; CHECK-BE-NEXT: movs r3, #0
646 ; CHECK-BE-NEXT: bfi r3, r2, #0, #1
647 ; CHECK-BE-NEXT: ubfx r2, r1, #2, #1
648 ; CHECK-BE-NEXT: rsbs r2, r2, #0
649 ; CHECK-BE-NEXT: bfi r3, r2, #1, #1
650 ; CHECK-BE-NEXT: ubfx r2, r1, #4, #1
651 ; CHECK-BE-NEXT: rsbs r2, r2, #0
652 ; CHECK-BE-NEXT: bfi r3, r2, #2, #1
653 ; CHECK-BE-NEXT: ubfx r2, r1, #6, #1
654 ; CHECK-BE-NEXT: rsbs r2, r2, #0
655 ; CHECK-BE-NEXT: bfi r3, r2, #3, #1
656 ; CHECK-BE-NEXT: ubfx r2, r1, #8, #1
657 ; CHECK-BE-NEXT: rsbs r2, r2, #0
658 ; CHECK-BE-NEXT: bfi r3, r2, #4, #1
659 ; CHECK-BE-NEXT: ubfx r2, r1, #10, #1
660 ; CHECK-BE-NEXT: rsbs r2, r2, #0
661 ; CHECK-BE-NEXT: bfi r3, r2, #5, #1
662 ; CHECK-BE-NEXT: ubfx r2, r1, #12, #1
663 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
664 ; CHECK-BE-NEXT: rsbs r2, r2, #0
665 ; CHECK-BE-NEXT: bfi r3, r2, #6, #1
666 ; CHECK-BE-NEXT: rsbs r1, r1, #0
667 ; CHECK-BE-NEXT: bfi r3, r1, #7, #1
668 ; CHECK-BE-NEXT: uxtb r1, r3
669 ; CHECK-BE-NEXT: lsls r2, r3, #31
477670 ; CHECK-BE-NEXT: beq .LBB6_2
478671 ; CHECK-BE-NEXT: @ %bb.1: @ %cond.load
479 ; CHECK-BE-NEXT: movs r2, #0
480 ; CHECK-BE-NEXT: ldrh r3, [r0]
481 ; CHECK-BE-NEXT: vdup.16 q1, r2
482 ; CHECK-BE-NEXT: vmov.16 q1[0], r3
672 ; CHECK-BE-NEXT: ldrh r2, [r0]
673 ; CHECK-BE-NEXT: vdup.16 q1, r12
674 ; CHECK-BE-NEXT: vmov.16 q1[0], r2
483675 ; CHECK-BE-NEXT: b .LBB6_3
484676 ; CHECK-BE-NEXT: .LBB6_2:
485677 ; CHECK-BE-NEXT: vmov.i32 q0, #0x0
528720 ; CHECK-LE-NEXT: .pad #8
529721 ; CHECK-LE-NEXT: sub sp, #8
530722 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
531 ; CHECK-LE-NEXT: mov r1, sp
532 ; CHECK-LE-NEXT: vstr p0, [r1]
723 ; CHECK-LE-NEXT: movs r2, #0
724 ; CHECK-LE-NEXT: vmrs r1, p0
533725 ; CHECK-LE-NEXT: @ implicit-def: $q0
534 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
535 ; CHECK-LE-NEXT: lsls r2, r1, #31
726 ; CHECK-LE-NEXT: and r3, r1, #1
727 ; CHECK-LE-NEXT: rsbs r3, r3, #0
728 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
729 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
730 ; CHECK-LE-NEXT: rsbs r3, r3, #0
731 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
732 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
733 ; CHECK-LE-NEXT: rsbs r3, r3, #0
734 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
735 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
736 ; CHECK-LE-NEXT: rsbs r3, r3, #0
737 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
738 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
739 ; CHECK-LE-NEXT: rsbs r3, r3, #0
740 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
741 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
742 ; CHECK-LE-NEXT: rsbs r3, r3, #0
743 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
744 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
745 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
746 ; CHECK-LE-NEXT: rsbs r3, r3, #0
747 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
748 ; CHECK-LE-NEXT: rsbs r1, r1, #0
749 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
750 ; CHECK-LE-NEXT: uxtb r1, r2
751 ; CHECK-LE-NEXT: lsls r2, r2, #31
536752 ; CHECK-LE-NEXT: itt ne
537753 ; CHECK-LE-NEXT: ldrhne r2, [r0]
538754 ; CHECK-LE-NEXT: vmovne.16 q0[0], r2
572788 ; CHECK-BE-NEXT: .pad #8
573789 ; CHECK-BE-NEXT: sub sp, #8
574790 ; CHECK-BE-NEXT: vrev64.16 q1, q0
575 ; CHECK-BE-NEXT: mov r1, sp
791 ; CHECK-BE-NEXT: movs r2, #0
576792 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
577793 ; CHECK-BE-NEXT: @ implicit-def: $q1
578 ; CHECK-BE-NEXT: vstr p0, [r1]
579 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
580 ; CHECK-BE-NEXT: lsls r2, r1, #31
794 ; CHECK-BE-NEXT: vmrs r1, p0
795 ; CHECK-BE-NEXT: and r3, r1, #1
796 ; CHECK-BE-NEXT: rsbs r3, r3, #0
797 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
798 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
799 ; CHECK-BE-NEXT: rsbs r3, r3, #0
800 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
801 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
802 ; CHECK-BE-NEXT: rsbs r3, r3, #0
803 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
804 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
805 ; CHECK-BE-NEXT: rsbs r3, r3, #0
806 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
807 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
808 ; CHECK-BE-NEXT: rsbs r3, r3, #0
809 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
810 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
811 ; CHECK-BE-NEXT: rsbs r3, r3, #0
812 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
813 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
814 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
815 ; CHECK-BE-NEXT: rsbs r3, r3, #0
816 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
817 ; CHECK-BE-NEXT: rsbs r1, r1, #0
818 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
819 ; CHECK-BE-NEXT: uxtb r1, r2
820 ; CHECK-BE-NEXT: lsls r2, r2, #31
581821 ; CHECK-BE-NEXT: itt ne
582822 ; CHECK-BE-NEXT: ldrhne r2, [r0]
583823 ; CHECK-BE-NEXT: vmovne.16 q1[0], r2
624864 ; CHECK-LE-NEXT: .pad #8
625865 ; CHECK-LE-NEXT: sub sp, #8
626866 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
627 ; CHECK-LE-NEXT: mov r1, sp
628 ; CHECK-LE-NEXT: vstr p0, [r1]
867 ; CHECK-LE-NEXT: movs r2, #0
868 ; CHECK-LE-NEXT: vmrs r1, p0
629869 ; CHECK-LE-NEXT: @ implicit-def: $q0
630 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
631 ; CHECK-LE-NEXT: lsls r2, r1, #31
870 ; CHECK-LE-NEXT: and r3, r1, #1
871 ; CHECK-LE-NEXT: rsbs r3, r3, #0
872 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
873 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
874 ; CHECK-LE-NEXT: rsbs r3, r3, #0
875 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
876 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
877 ; CHECK-LE-NEXT: rsbs r3, r3, #0
878 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
879 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
880 ; CHECK-LE-NEXT: rsbs r3, r3, #0
881 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
882 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
883 ; CHECK-LE-NEXT: rsbs r3, r3, #0
884 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
885 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
886 ; CHECK-LE-NEXT: rsbs r3, r3, #0
887 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
888 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
889 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
890 ; CHECK-LE-NEXT: rsbs r3, r3, #0
891 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
892 ; CHECK-LE-NEXT: rsbs r1, r1, #0
893 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
894 ; CHECK-LE-NEXT: uxtb r1, r2
895 ; CHECK-LE-NEXT: lsls r2, r2, #31
632896 ; CHECK-LE-NEXT: itt ne
633897 ; CHECK-LE-NEXT: ldrhne r2, [r0]
634898 ; CHECK-LE-NEXT: vmovne.16 q0[0], r2
668932 ; CHECK-BE-NEXT: .pad #8
669933 ; CHECK-BE-NEXT: sub sp, #8
670934 ; CHECK-BE-NEXT: vrev64.16 q1, q0
671 ; CHECK-BE-NEXT: mov r1, sp
935 ; CHECK-BE-NEXT: movs r2, #0
672936 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
673937 ; CHECK-BE-NEXT: @ implicit-def: $q1
674 ; CHECK-BE-NEXT: vstr p0, [r1]
675 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
676 ; CHECK-BE-NEXT: lsls r2, r1, #31
938 ; CHECK-BE-NEXT: vmrs r1, p0
939 ; CHECK-BE-NEXT: and r3, r1, #1
940 ; CHECK-BE-NEXT: rsbs r3, r3, #0
941 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
942 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
943 ; CHECK-BE-NEXT: rsbs r3, r3, #0
944 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
945 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
946 ; CHECK-BE-NEXT: rsbs r3, r3, #0
947 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
948 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
949 ; CHECK-BE-NEXT: rsbs r3, r3, #0
950 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
951 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
952 ; CHECK-BE-NEXT: rsbs r3, r3, #0
953 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
954 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
955 ; CHECK-BE-NEXT: rsbs r3, r3, #0
956 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
957 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
958 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
959 ; CHECK-BE-NEXT: rsbs r3, r3, #0
960 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
961 ; CHECK-BE-NEXT: rsbs r1, r1, #0
962 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
963 ; CHECK-BE-NEXT: uxtb r1, r2
964 ; CHECK-BE-NEXT: lsls r2, r2, #31
677965 ; CHECK-BE-NEXT: itt ne
678966 ; CHECK-BE-NEXT: ldrhne r2, [r0]
679967 ; CHECK-BE-NEXT: vmovne.16 q1[0], r2
7191007 ; CHECK-LE: @ %bb.0: @ %entry
7201008 ; CHECK-LE-NEXT: .pad #8
7211009 ; CHECK-LE-NEXT: sub sp, #8
722 ; CHECK-LE-NEXT: mov r1, sp
7231010 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
724 ; CHECK-LE-NEXT: vstr p0, [r1]
725 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
726 ; CHECK-LE-NEXT: lsls r2, r1, #31
1011 ; CHECK-LE-NEXT: movs r2, #0
1012 ; CHECK-LE-NEXT: vmrs r1, p0
1013 ; CHECK-LE-NEXT: and r3, r1, #1
1014 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1015 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
1016 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
1017 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1018 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
1019 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
1020 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1021 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
1022 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
1023 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1024 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
1025 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
1026 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1027 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
1028 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
1029 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1030 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
1031 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
1032 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
1033 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1034 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
1035 ; CHECK-LE-NEXT: rsbs r1, r1, #0
1036 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
1037 ; CHECK-LE-NEXT: uxtb r1, r2
1038 ; CHECK-LE-NEXT: lsls r2, r2, #31
7271039 ; CHECK-LE-NEXT: itt ne
7281040 ; CHECK-LE-NEXT: ldrhne r2, [r0]
7291041 ; CHECK-LE-NEXT: vmovne.16 q0[0], r2
7631075 ; CHECK-BE-NEXT: .pad #8
7641076 ; CHECK-BE-NEXT: sub sp, #8
7651077 ; CHECK-BE-NEXT: vrev64.16 q1, q0
766 ; CHECK-BE-NEXT: mov r1, sp
1078 ; CHECK-BE-NEXT: movs r2, #0
7671079 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
768 ; CHECK-BE-NEXT: vstr p0, [r1]
769 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
770 ; CHECK-BE-NEXT: lsls r2, r1, #31
1080 ; CHECK-BE-NEXT: vmrs r1, p0
1081 ; CHECK-BE-NEXT: and r3, r1, #1
1082 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1083 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
1084 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
1085 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1086 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
1087 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
1088 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1089 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
1090 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
1091 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1092 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
1093 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
1094 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1095 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
1096 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
1097 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1098 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
1099 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
1100 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
1101 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1102 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
1103 ; CHECK-BE-NEXT: rsbs r1, r1, #0
1104 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
1105 ; CHECK-BE-NEXT: uxtb r1, r2
1106 ; CHECK-BE-NEXT: lsls r2, r2, #31
7711107 ; CHECK-BE-NEXT: itt ne
7721108 ; CHECK-BE-NEXT: ldrhne r2, [r0]
7731109 ; CHECK-BE-NEXT: vmovne.16 q1[0], r2
8161152 ; CHECK-LE-NEXT: vldr d1, [sp, #8]
8171153 ; CHECK-LE-NEXT: adds r0, #4
8181154 ; CHECK-LE-NEXT: vmov d0, r2, r3
819 ; CHECK-LE-NEXT: mov r2, sp
1155 ; CHECK-LE-NEXT: movs r3, #0
8201156 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
8211157 ; CHECK-LE-NEXT: @ implicit-def: $q0
822 ; CHECK-LE-NEXT: vstr p0, [r2]
823 ; CHECK-LE-NEXT: ldrb.w r2, [sp]
824 ; CHECK-LE-NEXT: lsls r3, r2, #31
1158 ; CHECK-LE-NEXT: vmrs r12, p0
1159 ; CHECK-LE-NEXT: and r2, r12, #1
1160 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1161 ; CHECK-LE-NEXT: bfi r3, r2, #0, #1
1162 ; CHECK-LE-NEXT: ubfx r2, r12, #2, #1
1163 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1164 ; CHECK-LE-NEXT: bfi r3, r2, #1, #1
1165 ; CHECK-LE-NEXT: ubfx r2, r12, #4, #1
1166 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1167 ; CHECK-LE-NEXT: bfi r3, r2, #2, #1
1168 ; CHECK-LE-NEXT: ubfx r2, r12, #6, #1
1169 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1170 ; CHECK-LE-NEXT: bfi r3, r2, #3, #1
1171 ; CHECK-LE-NEXT: ubfx r2, r12, #8, #1
1172 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1173 ; CHECK-LE-NEXT: bfi r3, r2, #4, #1
1174 ; CHECK-LE-NEXT: ubfx r2, r12, #10, #1
1175 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1176 ; CHECK-LE-NEXT: bfi r3, r2, #5, #1
1177 ; CHECK-LE-NEXT: ubfx r2, r12, #12, #1
1178 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1179 ; CHECK-LE-NEXT: bfi r3, r2, #6, #1
1180 ; CHECK-LE-NEXT: ubfx r2, r12, #14, #1
1181 ; CHECK-LE-NEXT: rsbs r2, r2, #0
1182 ; CHECK-LE-NEXT: bfi r3, r2, #7, #1
1183 ; CHECK-LE-NEXT: uxtb r2, r3
1184 ; CHECK-LE-NEXT: lsls r3, r3, #31
8251185 ; CHECK-LE-NEXT: itt ne
8261186 ; CHECK-LE-NEXT: ldrhne r3, [r0]
8271187 ; CHECK-LE-NEXT: vmovne.16 q0[0], r3
8641224 ; CHECK-BE-NEXT: vldr d1, [sp, #8]
8651225 ; CHECK-BE-NEXT: adds r0, #4
8661226 ; CHECK-BE-NEXT: vmov d0, r3, r2
867 ; CHECK-BE-NEXT: mov r2, sp
1227 ; CHECK-BE-NEXT: movs r3, #0
8681228 ; CHECK-BE-NEXT: vrev64.16 q1, q0
8691229 ; CHECK-BE-NEXT: @ implicit-def: $q0
8701230 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
871 ; CHECK-BE-NEXT: vstr p0, [r2]
872 ; CHECK-BE-NEXT: ldrb.w r2, [sp]
873 ; CHECK-BE-NEXT: lsls r3, r2, #31
1231 ; CHECK-BE-NEXT: vmrs r12, p0
1232 ; CHECK-BE-NEXT: and r2, r12, #1
1233 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1234 ; CHECK-BE-NEXT: bfi r3, r2, #0, #1
1235 ; CHECK-BE-NEXT: ubfx r2, r12, #2, #1
1236 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1237 ; CHECK-BE-NEXT: bfi r3, r2, #1, #1
1238 ; CHECK-BE-NEXT: ubfx r2, r12, #4, #1
1239 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1240 ; CHECK-BE-NEXT: bfi r3, r2, #2, #1
1241 ; CHECK-BE-NEXT: ubfx r2, r12, #6, #1
1242 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1243 ; CHECK-BE-NEXT: bfi r3, r2, #3, #1
1244 ; CHECK-BE-NEXT: ubfx r2, r12, #8, #1
1245 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1246 ; CHECK-BE-NEXT: bfi r3, r2, #4, #1
1247 ; CHECK-BE-NEXT: ubfx r2, r12, #10, #1
1248 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1249 ; CHECK-BE-NEXT: bfi r3, r2, #5, #1
1250 ; CHECK-BE-NEXT: ubfx r2, r12, #12, #1
1251 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1252 ; CHECK-BE-NEXT: bfi r3, r2, #6, #1
1253 ; CHECK-BE-NEXT: ubfx r2, r12, #14, #1
1254 ; CHECK-BE-NEXT: rsbs r2, r2, #0
1255 ; CHECK-BE-NEXT: bfi r3, r2, #7, #1
1256 ; CHECK-BE-NEXT: uxtb r2, r3
1257 ; CHECK-BE-NEXT: lsls r3, r3, #31
8741258 ; CHECK-BE-NEXT: itt ne
8751259 ; CHECK-BE-NEXT: ldrhne r3, [r0]
8761260 ; CHECK-BE-NEXT: vmovne.16 q0[0], r3
9211305 ; CHECK-LE-NEXT: .pad #8
9221306 ; CHECK-LE-NEXT: sub sp, #8
9231307 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
924 ; CHECK-LE-NEXT: mov r2, sp
925 ; CHECK-LE-NEXT: vstr p0, [r2]
1308 ; CHECK-LE-NEXT: movs r2, #0
1309 ; CHECK-LE-NEXT: vmrs r12, p0
9261310 ; CHECK-LE-NEXT: @ implicit-def: $q0
1311 ; CHECK-LE-NEXT: and r3, r12, #1
1312 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1313 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
1314 ; CHECK-LE-NEXT: ubfx r3, r12, #2, #1
1315 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1316 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
1317 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
1318 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1319 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
1320 ; CHECK-LE-NEXT: ubfx r3, r12, #6, #1
1321 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1322 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
1323 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
1324 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1325 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
1326 ; CHECK-LE-NEXT: ubfx r3, r12, #10, #1
1327 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1328 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
1329 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
1330 ; CHECK-LE-NEXT: rsbs r3, r3, #0
1331 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
1332 ; CHECK-LE-NEXT: ubfx r3, r12, #14, #1
1333 ; CHECK-LE-NEXT: rsbs r3, r3, #0
9271334 ; CHECK-LE-NEXT: add.w r12, r0, #4
928 ; CHECK-LE-NEXT: ldrb.w r3, [sp]
929 ; CHECK-LE-NEXT: lsls r2, r3, #31
1335 ; CHECK-LE-NEXT: bfi r2, r3, #7, #1
1336 ; CHECK-LE-NEXT: uxtb r3, r2
1337 ; CHECK-LE-NEXT: lsls r2, r2, #31
9301338 ; CHECK-LE-NEXT: itt ne
9311339 ; CHECK-LE-NEXT: ldrhne r2, [r0]
9321340 ; CHECK-LE-NEXT: vmovne.16 q0[0], r2
9681376 ; CHECK-BE-NEXT: .pad #8
9691377 ; CHECK-BE-NEXT: sub sp, #8
9701378 ; CHECK-BE-NEXT: vrev64.16 q1, q0
971 ; CHECK-BE-NEXT: mov r2, sp
1379 ; CHECK-BE-NEXT: movs r2, #0
9721380 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
9731381 ; CHECK-BE-NEXT: @ implicit-def: $q0
1382 ; CHECK-BE-NEXT: vmrs r12, p0
1383 ; CHECK-BE-NEXT: and r3, r12, #1
1384 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1385 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
1386 ; CHECK-BE-NEXT: ubfx r3, r12, #2, #1
1387 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1388 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
1389 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
1390 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1391 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
1392 ; CHECK-BE-NEXT: ubfx r3, r12, #6, #1
1393 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1394 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
1395 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
1396 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1397 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
1398 ; CHECK-BE-NEXT: ubfx r3, r12, #10, #1
1399 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1400 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
1401 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
1402 ; CHECK-BE-NEXT: rsbs r3, r3, #0
1403 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
1404 ; CHECK-BE-NEXT: ubfx r3, r12, #14, #1
1405 ; CHECK-BE-NEXT: rsbs r3, r3, #0
9741406 ; CHECK-BE-NEXT: add.w r12, r0, #4
975 ; CHECK-BE-NEXT: vstr p0, [r2]
976 ; CHECK-BE-NEXT: ldrb.w r3, [sp]
977 ; CHECK-BE-NEXT: lsls r2, r3, #31
1407 ; CHECK-BE-NEXT: bfi r2, r3, #7, #1
1408 ; CHECK-BE-NEXT: uxtb r3, r2
1409 ; CHECK-BE-NEXT: lsls r2, r2, #31
9781410 ; CHECK-BE-NEXT: itt ne
9791411 ; CHECK-BE-NEXT: ldrhne r2, [r0]
9801412 ; CHECK-BE-NEXT: vmovne.16 q0[0], r2
10331465 ; CHECK-LE-NEXT: mov r4, sp
10341466 ; CHECK-LE-NEXT: bfc r4, #0, #4
10351467 ; CHECK-LE-NEXT: mov sp, r4
1036 ; CHECK-LE-NEXT: mov r1, sp
10371468 ; CHECK-LE-NEXT: vcmp.s8 gt, q0, zr
1038 ; CHECK-LE-NEXT: vstr p0, [r1]
1039 ; CHECK-LE-NEXT: ldrh.w r1, [sp]
1040 ; CHECK-LE-NEXT: lsls r2, r1, #31
1469 ; CHECK-LE-NEXT: vmrs r2, p0
1470 ; CHECK-LE-NEXT: uxth r1, r2
1471 ; CHECK-LE-NEXT: lsls r2, r2, #31
10411472 ; CHECK-LE-NEXT: beq .LBB12_2
10421473 ; CHECK-LE-NEXT: @ %bb.1: @ %cond.load
10431474 ; CHECK-LE-NEXT: movs r2, #0
11241555 ; CHECK-BE-NEXT: bfc r4, #0, #4
11251556 ; CHECK-BE-NEXT: mov sp, r4
11261557 ; CHECK-BE-NEXT: vrev64.8 q1, q0
1127 ; CHECK-BE-NEXT: mov r1, sp
11281558 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
1129 ; CHECK-BE-NEXT: vstr p0, [r1]
1130 ; CHECK-BE-NEXT: ldrh.w r1, [sp]
1131 ; CHECK-BE-NEXT: lsls r2, r1, #31
1559 ; CHECK-BE-NEXT: vmrs r2, p0
1560 ; CHECK-BE-NEXT: uxth r1, r2
1561 ; CHECK-BE-NEXT: lsls r2, r2, #31
11321562 ; CHECK-BE-NEXT: beq .LBB12_2
11331563 ; CHECK-BE-NEXT: @ %bb.1: @ %cond.load
11341564 ; CHECK-BE-NEXT: movs r2, #0
12231653 ; CHECK-LE-NEXT: bfc r4, #0, #4
12241654 ; CHECK-LE-NEXT: mov sp, r4
12251655 ; CHECK-LE-NEXT: vcmp.s8 gt, q0, zr
1226 ; CHECK-LE-NEXT: mov r1, sp
1227 ; CHECK-LE-NEXT: vstr p0, [r1]
12281656 ; CHECK-LE-NEXT: @ implicit-def: $q0
12291657 ; CHECK-LE-NEXT: sub.w r4, r7, #8
1230 ; CHECK-LE-NEXT: ldrh.w r1, [sp]
1231 ; CHECK-LE-NEXT: lsls r2, r1, #31
1658 ; CHECK-LE-NEXT: vmrs r2, p0
1659 ; CHECK-LE-NEXT: uxth r1, r2
1660 ; CHECK-LE-NEXT: lsls r2, r2, #31
12321661 ; CHECK-LE-NEXT: itt ne
12331662 ; CHECK-LE-NEXT: ldrbne r2, [r0]
12341663 ; CHECK-LE-NEXT: vmovne.8 q0[0], r2
13071736 ; CHECK-BE-NEXT: bfc r4, #0, #4
13081737 ; CHECK-BE-NEXT: mov sp, r4
13091738 ; CHECK-BE-NEXT: vrev64.8 q1, q0
1310 ; CHECK-BE-NEXT: mov r1, sp
1739 ; CHECK-BE-NEXT: sub.w r4, r7, #8
13111740 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
13121741 ; CHECK-BE-NEXT: @ implicit-def: $q1
1313 ; CHECK-BE-NEXT: sub.w r4, r7, #8
1314 ; CHECK-BE-NEXT: vstr p0, [r1]
1315 ; CHECK-BE-NEXT: ldrh.w r1, [sp]
1316 ; CHECK-BE-NEXT: lsls r2, r1, #31
1742 ; CHECK-BE-NEXT: vmrs r2, p0
1743 ; CHECK-BE-NEXT: uxth r1, r2
1744 ; CHECK-BE-NEXT: lsls r2, r2, #31
13171745 ; CHECK-BE-NEXT: itt ne
13181746 ; CHECK-BE-NEXT: ldrbne r2, [r0]
13191747 ; CHECK-BE-NEXT: vmovne.8 q1[0], r2
13981826 ; CHECK-LE-NEXT: mov r4, sp
13991827 ; CHECK-LE-NEXT: bfc r4, #0, #4
14001828 ; CHECK-LE-NEXT: mov sp, r4
1401 ; CHECK-LE-NEXT: mov r1, sp
14021829 ; CHECK-LE-NEXT: vcmp.s8 gt, q0, zr
1403 ; CHECK-LE-NEXT: vstr p0, [r1]
14041830 ; CHECK-LE-NEXT: sub.w r4, r7, #8
1405 ; CHECK-LE-NEXT: ldrh.w r1, [sp]
1406 ; CHECK-LE-NEXT: lsls r2, r1, #31
1831 ; CHECK-LE-NEXT: vmrs r2, p0
1832 ; CHECK-LE-NEXT: uxth r1, r2
1833 ; CHECK-LE-NEXT: lsls r2, r2, #31
14071834 ; CHECK-LE-NEXT: itt ne
14081835 ; CHECK-LE-NEXT: ldrbne r2, [r0]
14091836 ; CHECK-LE-NEXT: vmovne.8 q0[0], r2
14821909 ; CHECK-BE-NEXT: bfc r4, #0, #4
14831910 ; CHECK-BE-NEXT: mov sp, r4
14841911 ; CHECK-BE-NEXT: vrev64.8 q1, q0
1485 ; CHECK-BE-NEXT: mov r1, sp
1912 ; CHECK-BE-NEXT: sub.w r4, r7, #8
14861913 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
1487 ; CHECK-BE-NEXT: sub.w r4, r7, #8
1488 ; CHECK-BE-NEXT: vstr p0, [r1]
1489 ; CHECK-BE-NEXT: ldrh.w r1, [sp]
1490 ; CHECK-BE-NEXT: lsls r2, r1, #31
1914 ; CHECK-BE-NEXT: vmrs r2, p0
1915 ; CHECK-BE-NEXT: uxth r1, r2
1916 ; CHECK-BE-NEXT: lsls r2, r2, #31
14911917 ; CHECK-BE-NEXT: itt ne
14921918 ; CHECK-BE-NEXT: ldrbne r2, [r0]
14931919 ; CHECK-BE-NEXT: vmovne.8 q1[0], r2
15731999 ; CHECK-LE-NEXT: bfc r4, #0, #4
15742000 ; CHECK-LE-NEXT: mov sp, r4
15752001 ; CHECK-LE-NEXT: vcmp.s8 gt, q0, zr
1576 ; CHECK-LE-NEXT: mov r2, sp
1577 ; CHECK-LE-NEXT: vstr p0, [r2]
15782002 ; CHECK-LE-NEXT: @ implicit-def: $q0
15792003 ; CHECK-LE-NEXT: adds r0, #4
1580 ; CHECK-LE-NEXT: ldrh.w r2, [sp]
2004 ; CHECK-LE-NEXT: vmrs r3, p0
15812005 ; CHECK-LE-NEXT: sub.w r4, r7, #8
1582 ; CHECK-LE-NEXT: lsls r3, r2, #31
2006 ; CHECK-LE-NEXT: uxth r2, r3
2007 ; CHECK-LE-NEXT: lsls r3, r3, #31
15832008 ; CHECK-LE-NEXT: itt ne
15842009 ; CHECK-LE-NEXT: ldrbne r3, [r0]
15852010 ; CHECK-LE-NEXT: vmovne.8 q0[0], r3
16592084 ; CHECK-BE-NEXT: bfc r4, #0, #4
16602085 ; CHECK-BE-NEXT: mov sp, r4
16612086 ; CHECK-BE-NEXT: vrev64.8 q1, q0
1662 ; CHECK-BE-NEXT: mov r2, sp
1663 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
16642087 ; CHECK-BE-NEXT: @ implicit-def: $q0
16652088 ; CHECK-BE-NEXT: adds r0, #4
1666 ; CHECK-BE-NEXT: vstr p0, [r2]
2089 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
16672090 ; CHECK-BE-NEXT: sub.w r4, r7, #8
1668 ; CHECK-BE-NEXT: ldrh.w r2, [sp]
1669 ; CHECK-BE-NEXT: lsls r3, r2, #31
2091 ; CHECK-BE-NEXT: vmrs r3, p0
2092 ; CHECK-BE-NEXT: uxth r2, r3
2093 ; CHECK-BE-NEXT: lsls r3, r3, #31
16702094 ; CHECK-BE-NEXT: itt ne
16712095 ; CHECK-BE-NEXT: ldrbne r3, [r0]
16722096 ; CHECK-BE-NEXT: vmovne.8 q0[0], r3
17562180 ; CHECK-LE-NEXT: bfc r4, #0, #4
17572181 ; CHECK-LE-NEXT: mov sp, r4
17582182 ; CHECK-LE-NEXT: vcmp.s8 gt, q0, zr
1759 ; CHECK-LE-NEXT: mov r2, sp
1760 ; CHECK-LE-NEXT: vstr p0, [r2]
17612183 ; CHECK-LE-NEXT: @ implicit-def: $q0
17622184 ; CHECK-LE-NEXT: sub.w r4, r7, #8
1763 ; CHECK-LE-NEXT: ldrh.w r3, [sp]
2185 ; CHECK-LE-NEXT: vmrs r2, p0
17642186 ; CHECK-LE-NEXT: add.w r12, r0, #4
1765 ; CHECK-LE-NEXT: lsls r2, r3, #31
2187 ; CHECK-LE-NEXT: uxth r3, r2
2188 ; CHECK-LE-NEXT: lsls r2, r2, #31
17662189 ; CHECK-LE-NEXT: itt ne
17672190 ; CHECK-LE-NEXT: ldrbne r2, [r0]
17682191 ; CHECK-LE-NEXT: vmovne.8 q0[0], r2
18432266 ; CHECK-BE-NEXT: bfc r4, #0, #4
18442267 ; CHECK-BE-NEXT: mov sp, r4
18452268 ; CHECK-BE-NEXT: vrev64.8 q1, q0
1846 ; CHECK-BE-NEXT: mov r2, sp
1847 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
18482269 ; CHECK-BE-NEXT: @ implicit-def: $q0
18492270 ; CHECK-BE-NEXT: sub.w r4, r7, #8
1850 ; CHECK-BE-NEXT: vstr p0, [r2]
2271 ; CHECK-BE-NEXT: vcmp.s8 gt, q1, zr
18512272 ; CHECK-BE-NEXT: add.w r12, r0, #4
1852 ; CHECK-BE-NEXT: ldrh.w r3, [sp]
1853 ; CHECK-BE-NEXT: lsls r2, r3, #31
2273 ; CHECK-BE-NEXT: vmrs r2, p0
2274 ; CHECK-BE-NEXT: uxth r3, r2
2275 ; CHECK-BE-NEXT: lsls r2, r2, #31
18542276 ; CHECK-BE-NEXT: itt ne
18552277 ; CHECK-BE-NEXT: ldrbne r2, [r0]
18562278 ; CHECK-BE-NEXT: vmovne.8 q0[0], r2
19342356 ; CHECK-LE: @ %bb.0: @ %entry
19352357 ; CHECK-LE-NEXT: .pad #4
19362358 ; CHECK-LE-NEXT: sub sp, #4
1937 ; CHECK-LE-NEXT: mov r1, sp
19382359 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
1939 ; CHECK-LE-NEXT: vstr p0, [r1]
1940 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2360 ; CHECK-LE-NEXT: movs r1, #0
2361 ; CHECK-LE-NEXT: vmrs r2, p0
2362 ; CHECK-LE-NEXT: and r3, r2, #1
2363 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2364 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
2365 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
2366 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2367 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
2368 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
2369 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
2370 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2371 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
2372 ; CHECK-LE-NEXT: rsbs r2, r2, #0
2373 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
2374 ; CHECK-LE-NEXT: and r1, r1, #15
19412375 ; CHECK-LE-NEXT: lsls r2, r1, #31
19422376 ; CHECK-LE-NEXT: beq .LBB17_2
19432377 ; CHECK-LE-NEXT: @ %bb.1: @ %cond.load
19712405 ; CHECK-BE-NEXT: .pad #4
19722406 ; CHECK-BE-NEXT: sub sp, #4
19732407 ; CHECK-BE-NEXT: vrev64.32 q1, q0
1974 ; CHECK-BE-NEXT: mov r1, sp
2408 ; CHECK-BE-NEXT: movs r1, #0
19752409 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
1976 ; CHECK-BE-NEXT: vstr p0, [r1]
1977 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2410 ; CHECK-BE-NEXT: vmrs r2, p0
2411 ; CHECK-BE-NEXT: and r3, r2, #1
2412 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2413 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
2414 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
2415 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2416 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
2417 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
2418 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
2419 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2420 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
2421 ; CHECK-BE-NEXT: rsbs r2, r2, #0
2422 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
2423 ; CHECK-BE-NEXT: and r1, r1, #15
19782424 ; CHECK-BE-NEXT: lsls r2, r1, #31
19792425 ; CHECK-BE-NEXT: beq .LBB17_2
19802426 ; CHECK-BE-NEXT: @ %bb.1: @ %cond.load
20152461 ; CHECK-LE-NEXT: .pad #4
20162462 ; CHECK-LE-NEXT: sub sp, #4
20172463 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
2018 ; CHECK-LE-NEXT: mov r1, sp
2019 ; CHECK-LE-NEXT: vstr p0, [r1]
2464 ; CHECK-LE-NEXT: movs r1, #0
2465 ; CHECK-LE-NEXT: vmrs r2, p0
20202466 ; CHECK-LE-NEXT: @ implicit-def: $q0
2021 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2467 ; CHECK-LE-NEXT: and r3, r2, #1
2468 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2469 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
2470 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
2471 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2472 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
2473 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
2474 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
2475 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2476 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
2477 ; CHECK-LE-NEXT: rsbs r2, r2, #0
2478 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
2479 ; CHECK-LE-NEXT: and r1, r1, #15
20222480 ; CHECK-LE-NEXT: lsls r2, r1, #31
20232481 ; CHECK-LE-NEXT: it ne
20242482 ; CHECK-LE-NEXT: vldrne s0, [r0]
20392497 ; CHECK-BE-NEXT: .pad #4
20402498 ; CHECK-BE-NEXT: sub sp, #4
20412499 ; CHECK-BE-NEXT: vrev64.32 q1, q0
2042 ; CHECK-BE-NEXT: mov r1, sp
2500 ; CHECK-BE-NEXT: movs r1, #0
20432501 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
20442502 ; CHECK-BE-NEXT: @ implicit-def: $q1
2045 ; CHECK-BE-NEXT: vstr p0, [r1]
2046 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2503 ; CHECK-BE-NEXT: vmrs r2, p0
2504 ; CHECK-BE-NEXT: and r3, r2, #1
2505 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2506 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
2507 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
2508 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2509 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
2510 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
2511 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
2512 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2513 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
2514 ; CHECK-BE-NEXT: rsbs r2, r2, #0
2515 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
2516 ; CHECK-BE-NEXT: and r1, r1, #15
20472517 ; CHECK-BE-NEXT: lsls r2, r1, #31
20482518 ; CHECK-BE-NEXT: it ne
20492519 ; CHECK-BE-NEXT: vldrne s4, [r0]
20712541 ; CHECK-LE-NEXT: .pad #4
20722542 ; CHECK-LE-NEXT: sub sp, #4
20732543 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
2074 ; CHECK-LE-NEXT: mov r1, sp
2075 ; CHECK-LE-NEXT: vstr p0, [r1]
2544 ; CHECK-LE-NEXT: movs r1, #0
2545 ; CHECK-LE-NEXT: vmrs r2, p0
20762546 ; CHECK-LE-NEXT: @ implicit-def: $q0
2077 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2547 ; CHECK-LE-NEXT: and r3, r2, #1
2548 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2549 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
2550 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
2551 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2552 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
2553 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
2554 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
2555 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2556 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
2557 ; CHECK-LE-NEXT: rsbs r2, r2, #0
2558 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
2559 ; CHECK-LE-NEXT: and r1, r1, #15
20782560 ; CHECK-LE-NEXT: lsls r2, r1, #31
20792561 ; CHECK-LE-NEXT: itt ne
20802562 ; CHECK-LE-NEXT: ldrne r2, [r0]
20992581 ; CHECK-BE-NEXT: .pad #4
21002582 ; CHECK-BE-NEXT: sub sp, #4
21012583 ; CHECK-BE-NEXT: vrev64.32 q1, q0
2102 ; CHECK-BE-NEXT: mov r1, sp
2584 ; CHECK-BE-NEXT: movs r1, #0
21032585 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
21042586 ; CHECK-BE-NEXT: @ implicit-def: $q1
2105 ; CHECK-BE-NEXT: vstr p0, [r1]
2106 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2587 ; CHECK-BE-NEXT: vmrs r2, p0
2588 ; CHECK-BE-NEXT: and r3, r2, #1
2589 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2590 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
2591 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
2592 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2593 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
2594 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
2595 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
2596 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2597 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
2598 ; CHECK-BE-NEXT: rsbs r2, r2, #0
2599 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
2600 ; CHECK-BE-NEXT: and r1, r1, #15
21072601 ; CHECK-BE-NEXT: lsls r2, r1, #31
21082602 ; CHECK-BE-NEXT: itt ne
21092603 ; CHECK-BE-NEXT: ldrne r2, [r0]
21342628 ; CHECK-LE: @ %bb.0: @ %entry
21352629 ; CHECK-LE-NEXT: .pad #4
21362630 ; CHECK-LE-NEXT: sub sp, #4
2137 ; CHECK-LE-NEXT: mov r1, sp
21382631 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
2139 ; CHECK-LE-NEXT: vstr p0, [r1]
2140 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2632 ; CHECK-LE-NEXT: movs r1, #0
2633 ; CHECK-LE-NEXT: vmrs r2, p0
2634 ; CHECK-LE-NEXT: and r3, r2, #1
2635 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2636 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
2637 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
2638 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2639 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
2640 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
2641 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
2642 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2643 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
2644 ; CHECK-LE-NEXT: rsbs r2, r2, #0
2645 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
2646 ; CHECK-LE-NEXT: and r1, r1, #15
21412647 ; CHECK-LE-NEXT: lsls r2, r1, #31
21422648 ; CHECK-LE-NEXT: it ne
21432649 ; CHECK-LE-NEXT: vldrne s4, [r0]
21592665 ; CHECK-BE-NEXT: .pad #4
21602666 ; CHECK-BE-NEXT: sub sp, #4
21612667 ; CHECK-BE-NEXT: vrev64.32 q2, q0
2162 ; CHECK-BE-NEXT: mov r1, sp
2668 ; CHECK-BE-NEXT: movs r1, #0
21632669 ; CHECK-BE-NEXT: vcmp.s32 gt, q2, zr
21642670 ; CHECK-BE-NEXT: vrev64.32 q2, q1
2165 ; CHECK-BE-NEXT: vstr p0, [r1]
2166 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2671 ; CHECK-BE-NEXT: vmrs r2, p0
2672 ; CHECK-BE-NEXT: and r3, r2, #1
2673 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2674 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
2675 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
2676 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2677 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
2678 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
2679 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
2680 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2681 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
2682 ; CHECK-BE-NEXT: rsbs r2, r2, #0
2683 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
2684 ; CHECK-BE-NEXT: and r1, r1, #15
21672685 ; CHECK-BE-NEXT: lsls r2, r1, #31
21682686 ; CHECK-BE-NEXT: it ne
21692687 ; CHECK-BE-NEXT: vldrne s8, [r0]
21912709 ; CHECK-LE-NEXT: .pad #4
21922710 ; CHECK-LE-NEXT: sub sp, #4
21932711 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
2194 ; CHECK-LE-NEXT: mov r2, sp
2195 ; CHECK-LE-NEXT: vstr p0, [r2]
2712 ; CHECK-LE-NEXT: movs r2, #0
2713 ; CHECK-LE-NEXT: vmrs r12, p0
21962714 ; CHECK-LE-NEXT: @ implicit-def: $q0
21972715 ; CHECK-LE-NEXT: adds r0, #4
2198 ; CHECK-LE-NEXT: ldrb.w r2, [sp]
2716 ; CHECK-LE-NEXT: and r3, r12, #1
2717 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2718 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
2719 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
2720 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2721 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
2722 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
2723 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2724 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
2725 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
2726 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2727 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
2728 ; CHECK-LE-NEXT: and r2, r2, #15
21992729 ; CHECK-LE-NEXT: lsls r3, r2, #31
22002730 ; CHECK-LE-NEXT: it ne
22012731 ; CHECK-LE-NEXT: vldrne s0, [r0]
22172747 ; CHECK-BE-NEXT: .pad #4
22182748 ; CHECK-BE-NEXT: sub sp, #4
22192749 ; CHECK-BE-NEXT: vrev64.32 q1, q0
2220 ; CHECK-BE-NEXT: mov r2, sp
2750 ; CHECK-BE-NEXT: movs r2, #0
22212751 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
22222752 ; CHECK-BE-NEXT: @ implicit-def: $q0
22232753 ; CHECK-BE-NEXT: adds r0, #4
2224 ; CHECK-BE-NEXT: vstr p0, [r2]
2225 ; CHECK-BE-NEXT: ldrb.w r2, [sp]
2754 ; CHECK-BE-NEXT: vmrs r12, p0
2755 ; CHECK-BE-NEXT: and r3, r12, #1
2756 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2757 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
2758 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
2759 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2760 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
2761 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
2762 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2763 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
2764 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
2765 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2766 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
2767 ; CHECK-BE-NEXT: and r2, r2, #15
22262768 ; CHECK-BE-NEXT: lsls r3, r2, #31
22272769 ; CHECK-BE-NEXT: it ne
22282770 ; CHECK-BE-NEXT: vldrne s0, [r0]
22542796 ; CHECK-LE-NEXT: .pad #4
22552797 ; CHECK-LE-NEXT: sub sp, #4
22562798 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
2257 ; CHECK-LE-NEXT: mov r2, sp
2258 ; CHECK-LE-NEXT: vstr p0, [r2]
2799 ; CHECK-LE-NEXT: movs r2, #0
2800 ; CHECK-LE-NEXT: vmrs r12, p0
22592801 ; CHECK-LE-NEXT: @ implicit-def: $q0
2802 ; CHECK-LE-NEXT: and r3, r12, #1
2803 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2804 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
2805 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
2806 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2807 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
2808 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
2809 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2810 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
2811 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
2812 ; CHECK-LE-NEXT: rsbs r3, r3, #0
22602813 ; CHECK-LE-NEXT: add.w r12, r0, #4
2261 ; CHECK-LE-NEXT: ldrb.w r3, [sp]
2814 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
2815 ; CHECK-LE-NEXT: and r3, r2, #15
22622816 ; CHECK-LE-NEXT: lsls r2, r3, #31
22632817 ; CHECK-LE-NEXT: it ne
22642818 ; CHECK-LE-NEXT: vldrne s0, [r0]
22812835 ; CHECK-BE-NEXT: .pad #4
22822836 ; CHECK-BE-NEXT: sub sp, #4
22832837 ; CHECK-BE-NEXT: vrev64.32 q1, q0
2284 ; CHECK-BE-NEXT: mov r2, sp
2838 ; CHECK-BE-NEXT: movs r2, #0
22852839 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
22862840 ; CHECK-BE-NEXT: @ implicit-def: $q0
2841 ; CHECK-BE-NEXT: vmrs r12, p0
2842 ; CHECK-BE-NEXT: and r3, r12, #1
2843 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2844 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
2845 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
2846 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2847 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
2848 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
2849 ; CHECK-BE-NEXT: rsbs r3, r3, #0
2850 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
2851 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
2852 ; CHECK-BE-NEXT: rsbs r3, r3, #0
22872853 ; CHECK-BE-NEXT: add.w r12, r0, #4
2288 ; CHECK-BE-NEXT: vstr p0, [r2]
2289 ; CHECK-BE-NEXT: ldrb.w r3, [sp]
2854 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
2855 ; CHECK-BE-NEXT: and r3, r2, #15
22902856 ; CHECK-BE-NEXT: lsls r2, r3, #31
22912857 ; CHECK-BE-NEXT: it ne
22922858 ; CHECK-BE-NEXT: vldrne s0, [r0]
23192885 ; CHECK-LE: @ %bb.0: @ %entry
23202886 ; CHECK-LE-NEXT: .pad #8
23212887 ; CHECK-LE-NEXT: sub sp, #8
2322 ; CHECK-LE-NEXT: mov r1, sp
23232888 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
2324 ; CHECK-LE-NEXT: vstr p0, [r1]
2325 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2326 ; CHECK-LE-NEXT: lsls r2, r1, #31
2889 ; CHECK-LE-NEXT: movs r2, #0
2890 ; CHECK-LE-NEXT: vmrs r1, p0
2891 ; CHECK-LE-NEXT: and r3, r1, #1
2892 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2893 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
2894 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
2895 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2896 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
2897 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
2898 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2899 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
2900 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
2901 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2902 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
2903 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
2904 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2905 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
2906 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
2907 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2908 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
2909 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
2910 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
2911 ; CHECK-LE-NEXT: rsbs r3, r3, #0
2912 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
2913 ; CHECK-LE-NEXT: rsbs r1, r1, #0
2914 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
2915 ; CHECK-LE-NEXT: uxtb r1, r2
2916 ; CHECK-LE-NEXT: lsls r2, r2, #31
23272917 ; CHECK-LE-NEXT: beq .LBB23_2
23282918 ; CHECK-LE-NEXT: @ %bb.1: @ %cond.load
23292919 ; CHECK-LE-NEXT: vldr.16 s0, .LCPI23_0
24103000 ; CHECK-BE-NEXT: .pad #8
24113001 ; CHECK-BE-NEXT: sub sp, #8
24123002 ; CHECK-BE-NEXT: vrev64.16 q1, q0
2413 ; CHECK-BE-NEXT: mov r1, sp
3003 ; CHECK-BE-NEXT: movs r2, #0
24143004 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
2415 ; CHECK-BE-NEXT: vstr p0, [r1]
2416 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2417 ; CHECK-BE-NEXT: lsls r2, r1, #31
3005 ; CHECK-BE-NEXT: vmrs r1, p0
3006 ; CHECK-BE-NEXT: and r3, r1, #1
3007 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3008 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
3009 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
3010 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3011 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
3012 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
3013 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3014 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
3015 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
3016 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3017 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
3018 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
3019 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3020 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
3021 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
3022 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3023 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
3024 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
3025 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
3026 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3027 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
3028 ; CHECK-BE-NEXT: rsbs r1, r1, #0
3029 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
3030 ; CHECK-BE-NEXT: uxtb r1, r2
3031 ; CHECK-BE-NEXT: lsls r2, r2, #31
24183032 ; CHECK-BE-NEXT: beq .LBB23_2
24193033 ; CHECK-BE-NEXT: @ %bb.1: @ %cond.load
24203034 ; CHECK-BE-NEXT: vldr.16 s0, .LCPI23_0
25083122 ; CHECK-LE-NEXT: .pad #8
25093123 ; CHECK-LE-NEXT: sub sp, #8
25103124 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
2511 ; CHECK-LE-NEXT: mov r1, sp
2512 ; CHECK-LE-NEXT: vstr p0, [r1]
3125 ; CHECK-LE-NEXT: movs r2, #0
3126 ; CHECK-LE-NEXT: vmrs r1, p0
25133127 ; CHECK-LE-NEXT: @ implicit-def: $q0
2514 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2515 ; CHECK-LE-NEXT: lsls r2, r1, #31
3128 ; CHECK-LE-NEXT: and r3, r1, #1
3129 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3130 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
3131 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
3132 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3133 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
3134 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
3135 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3136 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
3137 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
3138 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3139 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
3140 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
3141 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3142 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
3143 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
3144 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3145 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
3146 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
3147 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
3148 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3149 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
3150 ; CHECK-LE-NEXT: rsbs r1, r1, #0
3151 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
3152 ; CHECK-LE-NEXT: uxtb r1, r2
3153 ; CHECK-LE-NEXT: lsls r2, r2, #31
25163154 ; CHECK-LE-NEXT: bne .LBB24_9
25173155 ; CHECK-LE-NEXT: @ %bb.1: @ %else
25183156 ; CHECK-LE-NEXT: lsls r2, r1, #30
25903228 ; CHECK-BE-NEXT: .pad #8
25913229 ; CHECK-BE-NEXT: sub sp, #8
25923230 ; CHECK-BE-NEXT: vrev64.16 q1, q0
2593 ; CHECK-BE-NEXT: mov r1, sp
3231 ; CHECK-BE-NEXT: movs r2, #0
25943232 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
25953233 ; CHECK-BE-NEXT: @ implicit-def: $q1
2596 ; CHECK-BE-NEXT: vstr p0, [r1]
2597 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2598 ; CHECK-BE-NEXT: lsls r2, r1, #31
3234 ; CHECK-BE-NEXT: vmrs r1, p0
3235 ; CHECK-BE-NEXT: and r3, r1, #1
3236 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3237 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
3238 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
3239 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3240 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
3241 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
3242 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3243 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
3244 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
3245 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3246 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
3247 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
3248 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3249 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
3250 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
3251 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3252 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
3253 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
3254 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
3255 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3256 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
3257 ; CHECK-BE-NEXT: rsbs r1, r1, #0
3258 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
3259 ; CHECK-BE-NEXT: uxtb r1, r2
3260 ; CHECK-BE-NEXT: lsls r2, r2, #31
25993261 ; CHECK-BE-NEXT: bne .LBB24_10
26003262 ; CHECK-BE-NEXT: @ %bb.1: @ %else
26013263 ; CHECK-BE-NEXT: lsls r2, r1, #30
26793341 ; CHECK-LE-NEXT: .pad #40
26803342 ; CHECK-LE-NEXT: sub sp, #40
26813343 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
2682 ; CHECK-LE-NEXT: add r1, sp, #32
2683 ; CHECK-LE-NEXT: vstr p0, [r1]
3344 ; CHECK-LE-NEXT: movs r2, #0
3345 ; CHECK-LE-NEXT: vmrs r1, p0
26843346 ; CHECK-LE-NEXT: @ implicit-def: $q0
2685 ; CHECK-LE-NEXT: ldrb.w r1, [sp, #32]
2686 ; CHECK-LE-NEXT: lsls r2, r1, #31
3347 ; CHECK-LE-NEXT: and r3, r1, #1
3348 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3349 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
3350 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
3351 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3352 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
3353 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
3354 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3355 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
3356 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
3357 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3358 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
3359 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
3360 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3361 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
3362 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
3363 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3364 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
3365 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
3366 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
3367 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3368 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
3369 ; CHECK-LE-NEXT: rsbs r1, r1, #0
3370 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
3371 ; CHECK-LE-NEXT: uxtb r1, r2
3372 ; CHECK-LE-NEXT: lsls r2, r2, #31
26873373 ; CHECK-LE-NEXT: bne .LBB25_9
26883374 ; CHECK-LE-NEXT: @ %bb.1: @ %else
26893375 ; CHECK-LE-NEXT: lsls r2, r1, #30
27773463 ; CHECK-BE-NEXT: .pad #40
27783464 ; CHECK-BE-NEXT: sub sp, #40
27793465 ; CHECK-BE-NEXT: vrev64.16 q1, q0
2780 ; CHECK-BE-NEXT: add r1, sp, #32
3466 ; CHECK-BE-NEXT: movs r2, #0
27813467 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
27823468 ; CHECK-BE-NEXT: @ implicit-def: $q1
2783 ; CHECK-BE-NEXT: vstr p0, [r1]
2784 ; CHECK-BE-NEXT: ldrb.w r1, [sp, #32]
2785 ; CHECK-BE-NEXT: lsls r2, r1, #31
3469 ; CHECK-BE-NEXT: vmrs r1, p0
3470 ; CHECK-BE-NEXT: and r3, r1, #1
3471 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3472 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
3473 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
3474 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3475 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
3476 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
3477 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3478 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
3479 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
3480 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3481 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
3482 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
3483 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3484 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
3485 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
3486 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3487 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
3488 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
3489 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
3490 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3491 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
3492 ; CHECK-BE-NEXT: rsbs r1, r1, #0
3493 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
3494 ; CHECK-BE-NEXT: uxtb r1, r2
3495 ; CHECK-BE-NEXT: lsls r2, r2, #31
27863496 ; CHECK-BE-NEXT: bne .LBB25_10
27873497 ; CHECK-BE-NEXT: @ %bb.1: @ %else
27883498 ; CHECK-BE-NEXT: lsls r2, r1, #30
28813591 ; CHECK-LE: @ %bb.0: @ %entry
28823592 ; CHECK-LE-NEXT: .pad #8
28833593 ; CHECK-LE-NEXT: sub sp, #8
2884 ; CHECK-LE-NEXT: mov r1, sp
28853594 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
2886 ; CHECK-LE-NEXT: vstr p0, [r1]
2887 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
2888 ; CHECK-LE-NEXT: lsls r2, r1, #31
3595 ; CHECK-LE-NEXT: movs r2, #0
3596 ; CHECK-LE-NEXT: vmrs r1, p0
3597 ; CHECK-LE-NEXT: and r3, r1, #1
3598 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3599 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
3600 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
3601 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3602 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
3603 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
3604 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3605 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
3606 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
3607 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3608 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
3609 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
3610 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3611 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
3612 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
3613 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3614 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
3615 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
3616 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
3617 ; CHECK-LE-NEXT: rsbs r3, r3, #0
3618 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
3619 ; CHECK-LE-NEXT: rsbs r1, r1, #0
3620 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
3621 ; CHECK-LE-NEXT: uxtb r1, r2
3622 ; CHECK-LE-NEXT: lsls r2, r2, #31
28893623 ; CHECK-LE-NEXT: bne .LBB26_10
28903624 ; CHECK-LE-NEXT: @ %bb.1: @ %else
28913625 ; CHECK-LE-NEXT: lsls r2, r1, #30
29653699 ; CHECK-BE-NEXT: .pad #8
29663700 ; CHECK-BE-NEXT: sub sp, #8
29673701 ; CHECK-BE-NEXT: vrev64.16 q2, q0
2968 ; CHECK-BE-NEXT: mov r1, sp
3702 ; CHECK-BE-NEXT: movs r2, #0
29693703 ; CHECK-BE-NEXT: vcmp.s16 gt, q2, zr
29703704 ; CHECK-BE-NEXT: vrev64.16 q2, q1
2971 ; CHECK-BE-NEXT: vstr p0, [r1]
2972 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
2973 ; CHECK-BE-NEXT: lsls r2, r1, #31
3705 ; CHECK-BE-NEXT: vmrs r1, p0
3706 ; CHECK-BE-NEXT: and r3, r1, #1
3707 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3708 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
3709 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
3710 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3711 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
3712 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
3713 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3714 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
3715 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
3716 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3717 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
3718 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
3719 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3720 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
3721 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
3722 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3723 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
3724 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
3725 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
3726 ; CHECK-BE-NEXT: rsbs r3, r3, #0
3727 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
3728 ; CHECK-BE-NEXT: rsbs r1, r1, #0
3729 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
3730 ; CHECK-BE-NEXT: uxtb r1, r2
3731 ; CHECK-BE-NEXT: lsls r2, r2, #31
29743732 ; CHECK-BE-NEXT: bne .LBB26_10
29753733 ; CHECK-BE-NEXT: @ %bb.1: @ %else
29763734 ; CHECK-BE-NEXT: lsls r2, r1, #30
30563814 ; CHECK-LE-NEXT: .pad #8
30573815 ; CHECK-LE-NEXT: sub sp, #8
30583816 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
3059 ; CHECK-LE-NEXT: mov r2, sp
3060 ; CHECK-LE-NEXT: vstr p0, [r2]
3817 ; CHECK-LE-NEXT: movs r3, #0
3818 ; CHECK-LE-NEXT: vmrs r12, p0
30613819 ; CHECK-LE-NEXT: adds r0, #4
3062 ; CHECK-LE-NEXT: ldrb.w r2, [sp]
30633820 ; CHECK-LE-NEXT: @ implicit-def: $q0
3064 ; CHECK-LE-NEXT: lsls r3, r2, #31
3821 ; CHECK-LE-NEXT: and r2, r12, #1
3822 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3823 ; CHECK-LE-NEXT: bfi r3, r2, #0, #1
3824 ; CHECK-LE-NEXT: ubfx r2, r12, #2, #1
3825 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3826 ; CHECK-LE-NEXT: bfi r3, r2, #1, #1
3827 ; CHECK-LE-NEXT: ubfx r2, r12, #4, #1
3828 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3829 ; CHECK-LE-NEXT: bfi r3, r2, #2, #1
3830 ; CHECK-LE-NEXT: ubfx r2, r12, #6, #1
3831 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3832 ; CHECK-LE-NEXT: bfi r3, r2, #3, #1
3833 ; CHECK-LE-NEXT: ubfx r2, r12, #8, #1
3834 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3835 ; CHECK-LE-NEXT: bfi r3, r2, #4, #1
3836 ; CHECK-LE-NEXT: ubfx r2, r12, #10, #1
3837 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3838 ; CHECK-LE-NEXT: bfi r3, r2, #5, #1
3839 ; CHECK-LE-NEXT: ubfx r2, r12, #12, #1
3840 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3841 ; CHECK-LE-NEXT: bfi r3, r2, #6, #1
3842 ; CHECK-LE-NEXT: ubfx r2, r12, #14, #1
3843 ; CHECK-LE-NEXT: rsbs r2, r2, #0
3844 ; CHECK-LE-NEXT: bfi r3, r2, #7, #1
3845 ; CHECK-LE-NEXT: uxtb r2, r3
3846 ; CHECK-LE-NEXT: lsls r3, r3, #31
30653847 ; CHECK-LE-NEXT: bne .LBB27_10
30663848 ; CHECK-LE-NEXT: @ %bb.1: @ %else
30673849 ; CHECK-LE-NEXT: lsls r3, r2, #30
31393921 ; CHECK-BE-NEXT: .pad #8
31403922 ; CHECK-BE-NEXT: sub sp, #8
31413923 ; CHECK-BE-NEXT: vrev64.16 q1, q0
3142 ; CHECK-BE-NEXT: mov r2, sp
3924 ; CHECK-BE-NEXT: movs r3, #0
31433925 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
31443926 ; CHECK-BE-NEXT: adds r0, #4
3145 ; CHECK-BE-NEXT: vstr p0, [r2]
3927 ; CHECK-BE-NEXT: vmrs r12, p0
31463928 ; CHECK-BE-NEXT: @ implicit-def: $q0
3147 ; CHECK-BE-NEXT: ldrb.w r2, [sp]
3148 ; CHECK-BE-NEXT: lsls r3, r2, #31
3929 ; CHECK-BE-NEXT: and r2, r12, #1
3930 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3931 ; CHECK-BE-NEXT: bfi r3, r2, #0, #1
3932 ; CHECK-BE-NEXT: ubfx r2, r12, #2, #1
3933 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3934 ; CHECK-BE-NEXT: bfi r3, r2, #1, #1
3935 ; CHECK-BE-NEXT: ubfx r2, r12, #4, #1
3936 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3937 ; CHECK-BE-NEXT: bfi r3, r2, #2, #1
3938 ; CHECK-BE-NEXT: ubfx r2, r12, #6, #1
3939 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3940 ; CHECK-BE-NEXT: bfi r3, r2, #3, #1
3941 ; CHECK-BE-NEXT: ubfx r2, r12, #8, #1
3942 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3943 ; CHECK-BE-NEXT: bfi r3, r2, #4, #1
3944 ; CHECK-BE-NEXT: ubfx r2, r12, #10, #1
3945 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3946 ; CHECK-BE-NEXT: bfi r3, r2, #5, #1
3947 ; CHECK-BE-NEXT: ubfx r2, r12, #12, #1
3948 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3949 ; CHECK-BE-NEXT: bfi r3, r2, #6, #1
3950 ; CHECK-BE-NEXT: ubfx r2, r12, #14, #1
3951 ; CHECK-BE-NEXT: rsbs r2, r2, #0
3952 ; CHECK-BE-NEXT: bfi r3, r2, #7, #1
3953 ; CHECK-BE-NEXT: uxtb r2, r3
3954 ; CHECK-BE-NEXT: lsls r3, r3, #31
31493955 ; CHECK-BE-NEXT: bne .LBB27_10
31503956 ; CHECK-BE-NEXT: @ %bb.1: @ %else
31513957 ; CHECK-BE-NEXT: lsls r3, r2, #30
32334039 ; CHECK-LE-NEXT: .pad #8
32344040 ; CHECK-LE-NEXT: sub sp, #8
32354041 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
3236 ; CHECK-LE-NEXT: mov r2, sp
3237 ; CHECK-LE-NEXT: vstr p0, [r2]
4042 ; CHECK-LE-NEXT: movs r2, #0
4043 ; CHECK-LE-NEXT: vmrs r12, p0
32384044 ; CHECK-LE-NEXT: @ implicit-def: $q0
3239 ; CHECK-LE-NEXT: ldrb.w r3, [sp]
3240 ; CHECK-LE-NEXT: lsls r2, r3, #31
4045 ; CHECK-LE-NEXT: and r3, r12, #1
4046 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4047 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
4048 ; CHECK-LE-NEXT: ubfx r3, r12, #2, #1
4049 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4050 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
4051 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
4052 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4053 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
4054 ; CHECK-LE-NEXT: ubfx r3, r12, #6, #1
4055 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4056 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
4057 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
4058 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4059 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
4060 ; CHECK-LE-NEXT: ubfx r3, r12, #10, #1
4061 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4062 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
4063 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
4064 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4065 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
4066 ; CHECK-LE-NEXT: ubfx r3, r12, #14, #1
4067 ; CHECK-LE-NEXT: rsbs r3, r3, #0
4068 ; CHECK-LE-NEXT: bfi r2, r3, #7, #1
4069 ; CHECK-LE-NEXT: uxtb r3, r2
4070 ; CHECK-LE-NEXT: lsls r2, r2, #31
32414071 ; CHECK-LE-NEXT: bne .LBB28_12
32424072 ; CHECK-LE-NEXT: @ %bb.1: @ %else
32434073 ; CHECK-LE-NEXT: lsls r2, r3, #30
33134143 ; CHECK-BE-NEXT: .pad #8
33144144 ; CHECK-BE-NEXT: sub sp, #8
33154145 ; CHECK-BE-NEXT: vrev64.16 q1, q0
3316 ; CHECK-BE-NEXT: mov r2, sp
4146 ; CHECK-BE-NEXT: movs r2, #0
33174147 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
33184148 ; CHECK-BE-NEXT: @ implicit-def: $q0
3319 ; CHECK-BE-NEXT: vstr p0, [r2]
3320 ; CHECK-BE-NEXT: ldrb.w r3, [sp]
3321 ; CHECK-BE-NEXT: lsls r2, r3, #31
4149 ; CHECK-BE-NEXT: vmrs r12, p0
4150 ; CHECK-BE-NEXT: and r3, r12, #1
4151 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4152 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
4153 ; CHECK-BE-NEXT: ubfx r3, r12, #2, #1
4154 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4155 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
4156 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
4157 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4158 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
4159 ; CHECK-BE-NEXT: ubfx r3, r12, #6, #1
4160 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4161 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
4162 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
4163 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4164 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
4165 ; CHECK-BE-NEXT: ubfx r3, r12, #10, #1
4166 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4167 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
4168 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
4169 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4170 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
4171 ; CHECK-BE-NEXT: ubfx r3, r12, #14, #1
4172 ; CHECK-BE-NEXT: rsbs r3, r3, #0
4173 ; CHECK-BE-NEXT: bfi r2, r3, #7, #1
4174 ; CHECK-BE-NEXT: uxtb r3, r2
4175 ; CHECK-BE-NEXT: lsls r2, r2, #31
33224176 ; CHECK-BE-NEXT: bne .LBB28_12
33234177 ; CHECK-BE-NEXT: @ %bb.1: @ %else
33244178 ; CHECK-BE-NEXT: lsls r2, r3, #30
66 ; CHECK-LE: @ %bb.0: @ %entry
77 ; CHECK-LE-NEXT: .pad #4
88 ; CHECK-LE-NEXT: sub sp, #4
9 ; CHECK-LE-NEXT: mov r1, sp
109 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
11 ; CHECK-LE-NEXT: vstr p0, [r1]
12 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
10 ; CHECK-LE-NEXT: movs r1, #0
11 ; CHECK-LE-NEXT: vmrs r2, p0
12 ; CHECK-LE-NEXT: and r3, r2, #1
13 ; CHECK-LE-NEXT: rsbs r3, r3, #0
14 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
15 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
16 ; CHECK-LE-NEXT: rsbs r3, r3, #0
17 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
18 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
19 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
20 ; CHECK-LE-NEXT: rsbs r3, r3, #0
21 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
22 ; CHECK-LE-NEXT: rsbs r2, r2, #0
23 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
24 ; CHECK-LE-NEXT: and r1, r1, #15
1325 ; CHECK-LE-NEXT: lsls r2, r1, #31
1426 ; CHECK-LE-NEXT: itt ne
1527 ; CHECK-LE-NEXT: vmovne r2, s0
3446 ; CHECK-BE-NEXT: .pad #4
3547 ; CHECK-BE-NEXT: sub sp, #4
3648 ; CHECK-BE-NEXT: vrev64.32 q1, q0
37 ; CHECK-BE-NEXT: mov r1, sp
49 ; CHECK-BE-NEXT: movs r1, #0
3850 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
39 ; CHECK-BE-NEXT: vstr p0, [r1]
40 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
51 ; CHECK-BE-NEXT: vmrs r2, p0
52 ; CHECK-BE-NEXT: and r3, r2, #1
53 ; CHECK-BE-NEXT: rsbs r3, r3, #0
54 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
55 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
56 ; CHECK-BE-NEXT: rsbs r3, r3, #0
57 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
58 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
59 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
60 ; CHECK-BE-NEXT: rsbs r3, r3, #0
61 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
62 ; CHECK-BE-NEXT: rsbs r2, r2, #0
63 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
64 ; CHECK-BE-NEXT: and r1, r1, #15
4165 ; CHECK-BE-NEXT: lsls r2, r1, #31
4266 ; CHECK-BE-NEXT: itt ne
4367 ; CHECK-BE-NEXT: vmovne r2, s4
6791 ; CHECK-LE: @ %bb.0: @ %entry
6892 ; CHECK-LE-NEXT: .pad #4
6993 ; CHECK-LE-NEXT: sub sp, #4
70 ; CHECK-LE-NEXT: mov r1, sp
7194 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
72 ; CHECK-LE-NEXT: vstr p0, [r1]
73 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
95 ; CHECK-LE-NEXT: movs r1, #0
96 ; CHECK-LE-NEXT: vmrs r2, p0
97 ; CHECK-LE-NEXT: and r3, r2, #1
98 ; CHECK-LE-NEXT: rsbs r3, r3, #0
99 ; CHECK-LE-NEXT: bfi r1, r3, #0, #1
100 ; CHECK-LE-NEXT: ubfx r3, r2, #4, #1
101 ; CHECK-LE-NEXT: rsbs r3, r3, #0
102 ; CHECK-LE-NEXT: bfi r1, r3, #1, #1
103 ; CHECK-LE-NEXT: ubfx r3, r2, #8, #1
104 ; CHECK-LE-NEXT: ubfx r2, r2, #12, #1
105 ; CHECK-LE-NEXT: rsbs r3, r3, #0
106 ; CHECK-LE-NEXT: bfi r1, r3, #2, #1
107 ; CHECK-LE-NEXT: rsbs r2, r2, #0
108 ; CHECK-LE-NEXT: bfi r1, r2, #3, #1
109 ; CHECK-LE-NEXT: and r1, r1, #15
74110 ; CHECK-LE-NEXT: lsls r2, r1, #31
75111 ; CHECK-LE-NEXT: itt ne
76112 ; CHECK-LE-NEXT: vmovne r2, s0
95131 ; CHECK-BE-NEXT: .pad #4
96132 ; CHECK-BE-NEXT: sub sp, #4
97133 ; CHECK-BE-NEXT: vrev64.32 q1, q0
98 ; CHECK-BE-NEXT: mov r1, sp
134 ; CHECK-BE-NEXT: movs r1, #0
99135 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
100 ; CHECK-BE-NEXT: vstr p0, [r1]
101 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
136 ; CHECK-BE-NEXT: vmrs r2, p0
137 ; CHECK-BE-NEXT: and r3, r2, #1
138 ; CHECK-BE-NEXT: rsbs r3, r3, #0
139 ; CHECK-BE-NEXT: bfi r1, r3, #0, #1
140 ; CHECK-BE-NEXT: ubfx r3, r2, #4, #1
141 ; CHECK-BE-NEXT: rsbs r3, r3, #0
142 ; CHECK-BE-NEXT: bfi r1, r3, #1, #1
143 ; CHECK-BE-NEXT: ubfx r3, r2, #8, #1
144 ; CHECK-BE-NEXT: ubfx r2, r2, #12, #1
145 ; CHECK-BE-NEXT: rsbs r3, r3, #0
146 ; CHECK-BE-NEXT: bfi r1, r3, #2, #1
147 ; CHECK-BE-NEXT: rsbs r2, r2, #0
148 ; CHECK-BE-NEXT: bfi r1, r2, #3, #1
149 ; CHECK-BE-NEXT: and r1, r1, #15
102150 ; CHECK-BE-NEXT: lsls r2, r1, #31
103151 ; CHECK-BE-NEXT: itt ne
104152 ; CHECK-BE-NEXT: vmovne r2, s4
131179 ; CHECK-LE-NEXT: vldr d1, [sp, #8]
132180 ; CHECK-LE-NEXT: adds r0, #4
133181 ; CHECK-LE-NEXT: vmov d0, r2, r3
134 ; CHECK-LE-NEXT: add r2, sp, #4
182 ; CHECK-LE-NEXT: movs r2, #0
135183 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
136 ; CHECK-LE-NEXT: vstr p0, [r2]
137 ; CHECK-LE-NEXT: ldrb.w r2, [sp, #4]
184 ; CHECK-LE-NEXT: vmrs r12, p0
185 ; CHECK-LE-NEXT: and r3, r12, #1
186 ; CHECK-LE-NEXT: rsbs r3, r3, #0
187 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
188 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
189 ; CHECK-LE-NEXT: rsbs r3, r3, #0
190 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
191 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
192 ; CHECK-LE-NEXT: rsbs r3, r3, #0
193 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
194 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
195 ; CHECK-LE-NEXT: rsbs r3, r3, #0
138196 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
139 ; CHECK-LE-NEXT: lsls r1, r2, #31
197 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
198 ; CHECK-LE-NEXT: and r1, r2, #15
199 ; CHECK-LE-NEXT: lsls r2, r1, #31
140200 ; CHECK-LE-NEXT: itt ne
141 ; CHECK-LE-NEXT: vmovne r1, s0
142 ; CHECK-LE-NEXT: strne r1, [r0]
143 ; CHECK-LE-NEXT: lsls r1, r2, #30
144 ; CHECK-LE-NEXT: itt mi
145 ; CHECK-LE-NEXT: vmovmi r1, s1
146 ; CHECK-LE-NEXT: strmi r1, [r0, #4]
147 ; CHECK-LE-NEXT: lsls r1, r2, #29
148 ; CHECK-LE-NEXT: itt mi
149 ; CHECK-LE-NEXT: vmovmi r1, s2
150 ; CHECK-LE-NEXT: strmi r1, [r0, #8]
151 ; CHECK-LE-NEXT: lsls r1, r2, #28
201 ; CHECK-LE-NEXT: vmovne r2, s0
202 ; CHECK-LE-NEXT: strne r2, [r0]
203 ; CHECK-LE-NEXT: lsls r2, r1, #30
204 ; CHECK-LE-NEXT: itt mi
205 ; CHECK-LE-NEXT: vmovmi r2, s1
206 ; CHECK-LE-NEXT: strmi r2, [r0, #4]
207 ; CHECK-LE-NEXT: lsls r2, r1, #29
208 ; CHECK-LE-NEXT: itt mi
209 ; CHECK-LE-NEXT: vmovmi r2, s2
210 ; CHECK-LE-NEXT: strmi r2, [r0, #8]
211 ; CHECK-LE-NEXT: lsls r1, r1, #28
152212 ; CHECK-LE-NEXT: itt mi
153213 ; CHECK-LE-NEXT: vmovmi r1, s3
154214 ; CHECK-LE-NEXT: strmi r1, [r0, #12]
162222 ; CHECK-BE-NEXT: vldr d1, [sp, #8]
163223 ; CHECK-BE-NEXT: adds r0, #4
164224 ; CHECK-BE-NEXT: vmov d0, r3, r2
165 ; CHECK-BE-NEXT: add r2, sp, #4
225 ; CHECK-BE-NEXT: movs r2, #0
166226 ; CHECK-BE-NEXT: vrev64.32 q1, q0
167227 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
168 ; CHECK-BE-NEXT: vstr p0, [r2]
169 ; CHECK-BE-NEXT: ldrb.w r2, [sp, #4]
228 ; CHECK-BE-NEXT: vmrs r12, p0
229 ; CHECK-BE-NEXT: and r3, r12, #1
230 ; CHECK-BE-NEXT: rsbs r3, r3, #0
231 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
232 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
233 ; CHECK-BE-NEXT: rsbs r3, r3, #0
234 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
235 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
236 ; CHECK-BE-NEXT: rsbs r3, r3, #0
237 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
238 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
239 ; CHECK-BE-NEXT: rsbs r3, r3, #0
170240 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
171 ; CHECK-BE-NEXT: lsls r1, r2, #31
241 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
242 ; CHECK-BE-NEXT: and r1, r2, #15
243 ; CHECK-BE-NEXT: lsls r2, r1, #31
172244 ; CHECK-BE-NEXT: itt ne
173 ; CHECK-BE-NEXT: vmovne r1, s0
174 ; CHECK-BE-NEXT: strne r1, [r0]
175 ; CHECK-BE-NEXT: lsls r1, r2, #30
176 ; CHECK-BE-NEXT: itt mi
177 ; CHECK-BE-NEXT: vmovmi r1, s1
178 ; CHECK-BE-NEXT: strmi r1, [r0, #4]
179 ; CHECK-BE-NEXT: lsls r1, r2, #29
180 ; CHECK-BE-NEXT: itt mi
181 ; CHECK-BE-NEXT: vmovmi r1, s2
182 ; CHECK-BE-NEXT: strmi r1, [r0, #8]
183 ; CHECK-BE-NEXT: lsls r1, r2, #28
245 ; CHECK-BE-NEXT: vmovne r2, s0
246 ; CHECK-BE-NEXT: strne r2, [r0]
247 ; CHECK-BE-NEXT: lsls r2, r1, #30
248 ; CHECK-BE-NEXT: itt mi
249 ; CHECK-BE-NEXT: vmovmi r2, s1
250 ; CHECK-BE-NEXT: strmi r2, [r0, #4]
251 ; CHECK-BE-NEXT: lsls r2, r1, #29
252 ; CHECK-BE-NEXT: itt mi
253 ; CHECK-BE-NEXT: vmovmi r2, s2
254 ; CHECK-BE-NEXT: strmi r2, [r0, #8]
255 ; CHECK-BE-NEXT: lsls r1, r1, #28
184256 ; CHECK-BE-NEXT: itt mi
185257 ; CHECK-BE-NEXT: vmovmi r1, s3
186258 ; CHECK-BE-NEXT: strmi r1, [r0, #12]
203275 ; CHECK-LE-NEXT: sub sp, #8
204276 ; CHECK-LE-NEXT: vldr d1, [sp, #8]
205277 ; CHECK-LE-NEXT: vmov d0, r2, r3
206 ; CHECK-LE-NEXT: add r2, sp, #4
278 ; CHECK-LE-NEXT: movs r2, #0
207279 ; CHECK-LE-NEXT: vcmp.s32 gt, q0, zr
208 ; CHECK-LE-NEXT: vstr p0, [r2]
209 ; CHECK-LE-NEXT: ldrb.w r2, [sp, #4]
280 ; CHECK-LE-NEXT: vmrs r12, p0
281 ; CHECK-LE-NEXT: and r3, r12, #1
282 ; CHECK-LE-NEXT: rsbs r3, r3, #0
283 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
284 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
285 ; CHECK-LE-NEXT: rsbs r3, r3, #0
286 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
287 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
288 ; CHECK-LE-NEXT: rsbs r3, r3, #0
289 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
290 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
291 ; CHECK-LE-NEXT: rsbs r3, r3, #0
210292 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
293 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
294 ; CHECK-LE-NEXT: and r2, r2, #15
211295 ; CHECK-LE-NEXT: lsls r1, r2, #31
212296 ; CHECK-LE-NEXT: itt ne
213297 ; CHECK-LE-NEXT: vmovne r1, s0
235319 ; CHECK-BE-NEXT: sub sp, #8
236320 ; CHECK-BE-NEXT: vldr d1, [sp, #8]
237321 ; CHECK-BE-NEXT: vmov d0, r3, r2
238 ; CHECK-BE-NEXT: add r2, sp, #4
322 ; CHECK-BE-NEXT: movs r2, #0
239323 ; CHECK-BE-NEXT: vrev64.32 q1, q0
240324 ; CHECK-BE-NEXT: vcmp.s32 gt, q1, zr
241 ; CHECK-BE-NEXT: vstr p0, [r2]
242 ; CHECK-BE-NEXT: ldrb.w r2, [sp, #4]
325 ; CHECK-BE-NEXT: vmrs r12, p0
326 ; CHECK-BE-NEXT: and r3, r12, #1
327 ; CHECK-BE-NEXT: rsbs r3, r3, #0
328 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
329 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
330 ; CHECK-BE-NEXT: rsbs r3, r3, #0
331 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
332 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
333 ; CHECK-BE-NEXT: rsbs r3, r3, #0
334 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
335 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
336 ; CHECK-BE-NEXT: rsbs r3, r3, #0
243337 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
338 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
339 ; CHECK-BE-NEXT: and r2, r2, #15
244340 ; CHECK-BE-NEXT: lsls r1, r2, #31
245341 ; CHECK-BE-NEXT: itt ne
246342 ; CHECK-BE-NEXT: vmovne r1, s0
277373 ; CHECK-LE: @ %bb.0: @ %entry
278374 ; CHECK-LE-NEXT: .pad #8
279375 ; CHECK-LE-NEXT: sub sp, #8
280 ; CHECK-LE-NEXT: mov r1, sp
281376 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
282 ; CHECK-LE-NEXT: vstr p0, [r1]
283 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
284 ; CHECK-LE-NEXT: lsls r2, r1, #31
377 ; CHECK-LE-NEXT: movs r2, #0
378 ; CHECK-LE-NEXT: vmrs r1, p0
379 ; CHECK-LE-NEXT: and r3, r1, #1
380 ; CHECK-LE-NEXT: rsbs r3, r3, #0
381 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
382 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
383 ; CHECK-LE-NEXT: rsbs r3, r3, #0
384 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
385 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
386 ; CHECK-LE-NEXT: rsbs r3, r3, #0
387 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
388 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
389 ; CHECK-LE-NEXT: rsbs r3, r3, #0
390 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
391 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
392 ; CHECK-LE-NEXT: rsbs r3, r3, #0
393 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
394 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
395 ; CHECK-LE-NEXT: rsbs r3, r3, #0
396 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
397 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
398 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
399 ; CHECK-LE-NEXT: rsbs r3, r3, #0
400 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
401 ; CHECK-LE-NEXT: rsbs r1, r1, #0
402 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
403 ; CHECK-LE-NEXT: uxtb r1, r2
404 ; CHECK-LE-NEXT: lsls r2, r2, #31
285405 ; CHECK-LE-NEXT: itt ne
286406 ; CHECK-LE-NEXT: vmovne.u16 r2, q0[0]
287407 ; CHECK-LE-NEXT: strhne r2, [r0]
321441 ; CHECK-BE-NEXT: .pad #8
322442 ; CHECK-BE-NEXT: sub sp, #8
323443 ; CHECK-BE-NEXT: vrev64.16 q1, q0
324 ; CHECK-BE-NEXT: mov r1, sp
444 ; CHECK-BE-NEXT: movs r2, #0
325445 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
326 ; CHECK-BE-NEXT: vstr p0, [r1]
327 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
328 ; CHECK-BE-NEXT: lsls r2, r1, #31
446 ; CHECK-BE-NEXT: vmrs r1, p0
447 ; CHECK-BE-NEXT: and r3, r1, #1
448 ; CHECK-BE-NEXT: rsbs r3, r3, #0
449 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
450 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
451 ; CHECK-BE-NEXT: rsbs r3, r3, #0
452 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
453 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
454 ; CHECK-BE-NEXT: rsbs r3, r3, #0
455 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
456 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
457 ; CHECK-BE-NEXT: rsbs r3, r3, #0
458 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
459 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
460 ; CHECK-BE-NEXT: rsbs r3, r3, #0
461 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
462 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
463 ; CHECK-BE-NEXT: rsbs r3, r3, #0
464 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
465 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
466 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
467 ; CHECK-BE-NEXT: rsbs r3, r3, #0
468 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
469 ; CHECK-BE-NEXT: rsbs r1, r1, #0
470 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
471 ; CHECK-BE-NEXT: uxtb r1, r2
472 ; CHECK-BE-NEXT: lsls r2, r2, #31
329473 ; CHECK-BE-NEXT: itt ne
330474 ; CHECK-BE-NEXT: vmovne.u16 r2, q1[0]
331475 ; CHECK-BE-NEXT: strhne r2, [r0]
370514 ; CHECK-LE: @ %bb.0: @ %entry
371515 ; CHECK-LE-NEXT: .pad #8
372516 ; CHECK-LE-NEXT: sub sp, #8
373 ; CHECK-LE-NEXT: mov r1, sp
374517 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
375 ; CHECK-LE-NEXT: vstr p0, [r1]
376 ; CHECK-LE-NEXT: ldrb.w r1, [sp]
377 ; CHECK-LE-NEXT: lsls r2, r1, #31
518 ; CHECK-LE-NEXT: movs r2, #0
519 ; CHECK-LE-NEXT: vmrs r1, p0
520 ; CHECK-LE-NEXT: and r3, r1, #1
521 ; CHECK-LE-NEXT: rsbs r3, r3, #0
522 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
523 ; CHECK-LE-NEXT: ubfx r3, r1, #2, #1
524 ; CHECK-LE-NEXT: rsbs r3, r3, #0
525 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
526 ; CHECK-LE-NEXT: ubfx r3, r1, #4, #1
527 ; CHECK-LE-NEXT: rsbs r3, r3, #0
528 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
529 ; CHECK-LE-NEXT: ubfx r3, r1, #6, #1
530 ; CHECK-LE-NEXT: rsbs r3, r3, #0
531 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
532 ; CHECK-LE-NEXT: ubfx r3, r1, #8, #1
533 ; CHECK-LE-NEXT: rsbs r3, r3, #0
534 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
535 ; CHECK-LE-NEXT: ubfx r3, r1, #10, #1
536 ; CHECK-LE-NEXT: rsbs r3, r3, #0
537 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
538 ; CHECK-LE-NEXT: ubfx r3, r1, #12, #1
539 ; CHECK-LE-NEXT: ubfx r1, r1, #14, #1
540 ; CHECK-LE-NEXT: rsbs r3, r3, #0
541 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
542 ; CHECK-LE-NEXT: rsbs r1, r1, #0
543 ; CHECK-LE-NEXT: bfi r2, r1, #7, #1
544 ; CHECK-LE-NEXT: uxtb r1, r2
545 ; CHECK-LE-NEXT: lsls r2, r2, #31
378546 ; CHECK-LE-NEXT: itt ne
379547 ; CHECK-LE-NEXT: vmovne.u16 r2, q0[0]
380548 ; CHECK-LE-NEXT: strhne r2, [r0]
414582 ; CHECK-BE-NEXT: .pad #8
415583 ; CHECK-BE-NEXT: sub sp, #8
416584 ; CHECK-BE-NEXT: vrev64.16 q1, q0
417 ; CHECK-BE-NEXT: mov r1, sp
585 ; CHECK-BE-NEXT: movs r2, #0
418586 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
419 ; CHECK-BE-NEXT: vstr p0, [r1]
420 ; CHECK-BE-NEXT: ldrb.w r1, [sp]
421 ; CHECK-BE-NEXT: lsls r2, r1, #31
587 ; CHECK-BE-NEXT: vmrs r1, p0
588 ; CHECK-BE-NEXT: and r3, r1, #1
589 ; CHECK-BE-NEXT: rsbs r3, r3, #0
590 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
591 ; CHECK-BE-NEXT: ubfx r3, r1, #2, #1
592 ; CHECK-BE-NEXT: rsbs r3, r3, #0
593 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
594 ; CHECK-BE-NEXT: ubfx r3, r1, #4, #1
595 ; CHECK-BE-NEXT: rsbs r3, r3, #0
596 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
597 ; CHECK-BE-NEXT: ubfx r3, r1, #6, #1
598 ; CHECK-BE-NEXT: rsbs r3, r3, #0
599 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
600 ; CHECK-BE-NEXT: ubfx r3, r1, #8, #1
601 ; CHECK-BE-NEXT: rsbs r3, r3, #0
602 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
603 ; CHECK-BE-NEXT: ubfx r3, r1, #10, #1
604 ; CHECK-BE-NEXT: rsbs r3, r3, #0
605 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
606 ; CHECK-BE-NEXT: ubfx r3, r1, #12, #1
607 ; CHECK-BE-NEXT: ubfx r1, r1, #14, #1
608 ; CHECK-BE-NEXT: rsbs r3, r3, #0
609 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
610 ; CHECK-BE-NEXT: rsbs r1, r1, #0
611 ; CHECK-BE-NEXT: bfi r2, r1, #7, #1
612 ; CHECK-BE-NEXT: uxtb r1, r2
613 ; CHECK-BE-NEXT: lsls r2, r2, #31
422614 ; CHECK-BE-NEXT: itt ne
423615 ; CHECK-BE-NEXT: vmovne.u16 r2, q1[0]
424616 ; CHECK-BE-NEXT: strhne r2, [r0]
466658 ; CHECK-LE-NEXT: vldr d1, [sp, #8]
467659 ; CHECK-LE-NEXT: adds r0, #4
468660 ; CHECK-LE-NEXT: vmov d0, r2, r3
469 ; CHECK-LE-NEXT: mov r2, sp
661 ; CHECK-LE-NEXT: movs r2, #0
470662 ; CHECK-LE-NEXT: vcmp.s16 gt, q0, zr
471 ; CHECK-LE-NEXT: vstr p0, [r2]
472 ; CHECK-LE-NEXT: ldrb.w r2, [sp]
663 ; CHECK-LE-NEXT: vmrs r12, p0
664 ; CHECK-LE-NEXT: and r3, r12, #1
665 ; CHECK-LE-NEXT: rsbs r3, r3, #0
666 ; CHECK-LE-NEXT: bfi r2, r3, #0, #1
667 ; CHECK-LE-NEXT: ubfx r3, r12, #2, #1
668 ; CHECK-LE-NEXT: rsbs r3, r3, #0
669 ; CHECK-LE-NEXT: bfi r2, r3, #1, #1
670 ; CHECK-LE-NEXT: ubfx r3, r12, #4, #1
671 ; CHECK-LE-NEXT: rsbs r3, r3, #0
672 ; CHECK-LE-NEXT: bfi r2, r3, #2, #1
673 ; CHECK-LE-NEXT: ubfx r3, r12, #6, #1
674 ; CHECK-LE-NEXT: rsbs r3, r3, #0
675 ; CHECK-LE-NEXT: bfi r2, r3, #3, #1
676 ; CHECK-LE-NEXT: ubfx r3, r12, #8, #1
677 ; CHECK-LE-NEXT: rsbs r3, r3, #0
678 ; CHECK-LE-NEXT: bfi r2, r3, #4, #1
679 ; CHECK-LE-NEXT: ubfx r3, r12, #10, #1
680 ; CHECK-LE-NEXT: rsbs r3, r3, #0
681 ; CHECK-LE-NEXT: bfi r2, r3, #5, #1
682 ; CHECK-LE-NEXT: ubfx r3, r12, #12, #1
683 ; CHECK-LE-NEXT: rsbs r3, r3, #0
684 ; CHECK-LE-NEXT: bfi r2, r3, #6, #1
685 ; CHECK-LE-NEXT: ubfx r3, r12, #14, #1
686 ; CHECK-LE-NEXT: rsbs r3, r3, #0
473687 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
474 ; CHECK-LE-NEXT: lsls r1, r2, #31
688 ; CHECK-LE-NEXT: bfi r2, r3, #7, #1
689 ; CHECK-LE-NEXT: uxtb r1, r2
690 ; CHECK-LE-NEXT: lsls r2, r2, #31
475691 ; CHECK-LE-NEXT: itt ne
476 ; CHECK-LE-NEXT: vmovne.u16 r1, q0[0]
477 ; CHECK-LE-NEXT: strhne r1, [r0]
478 ; CHECK-LE-NEXT: lsls r1, r2, #30
479 ; CHECK-LE-NEXT: itt mi
480 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[1]
481 ; CHECK-LE-NEXT: strhmi r1, [r0, #2]
482 ; CHECK-LE-NEXT: lsls r1, r2, #29
483 ; CHECK-LE-NEXT: itt mi
484 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[2]
485 ; CHECK-LE-NEXT: strhmi r1, [r0, #4]
486 ; CHECK-LE-NEXT: lsls r1, r2, #28
487 ; CHECK-LE-NEXT: itt mi
488 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[3]
489 ; CHECK-LE-NEXT: strhmi r1, [r0, #6]
490 ; CHECK-LE-NEXT: lsls r1, r2, #27
491 ; CHECK-LE-NEXT: itt mi
492 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[4]
493 ; CHECK-LE-NEXT: strhmi r1, [r0, #8]
494 ; CHECK-LE-NEXT: lsls r1, r2, #26
495 ; CHECK-LE-NEXT: itt mi
496 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[5]
497 ; CHECK-LE-NEXT: strhmi r1, [r0, #10]
498 ; CHECK-LE-NEXT: lsls r1, r2, #25
499 ; CHECK-LE-NEXT: itt mi
500 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[6]
501 ; CHECK-LE-NEXT: strhmi r1, [r0, #12]
502 ; CHECK-LE-NEXT: lsls r1, r2, #24
692 ; CHECK-LE-NEXT: vmovne.u16 r2, q0[0]
693 ; CHECK-LE-NEXT: strhne r2, [r0]
694 ; CHECK-LE-NEXT: lsls r2, r1, #30
695 ; CHECK-LE-NEXT: itt mi
696 ; CHECK-LE-NEXT: vmovmi.u16 r2, q0[1]
697 ; CHECK-LE-NEXT: strhmi r2, [r0, #2]
698 ; CHECK-LE-NEXT: lsls r2, r1, #29
699 ; CHECK-LE-NEXT: itt mi
700 ; CHECK-LE-NEXT: vmovmi.u16 r2, q0[2]
701 ; CHECK-LE-NEXT: strhmi r2, [r0, #4]
702 ; CHECK-LE-NEXT: lsls r2, r1, #28
703 ; CHECK-LE-NEXT: itt mi
704 ; CHECK-LE-NEXT: vmovmi.u16 r2, q0[3]
705 ; CHECK-LE-NEXT: strhmi r2, [r0, #6]
706 ; CHECK-LE-NEXT: lsls r2, r1, #27
707 ; CHECK-LE-NEXT: itt mi
708 ; CHECK-LE-NEXT: vmovmi.u16 r2, q0[4]
709 ; CHECK-LE-NEXT: strhmi r2, [r0, #8]
710 ; CHECK-LE-NEXT: lsls r2, r1, #26
711 ; CHECK-LE-NEXT: itt mi
712 ; CHECK-LE-NEXT: vmovmi.u16 r2, q0[5]
713 ; CHECK-LE-NEXT: strhmi r2, [r0, #10]
714 ; CHECK-LE-NEXT: lsls r2, r1, #25
715 ; CHECK-LE-NEXT: itt mi
716 ; CHECK-LE-NEXT: vmovmi.u16 r2, q0[6]
717 ; CHECK-LE-NEXT: strhmi r2, [r0, #12]
718 ; CHECK-LE-NEXT: lsls r1, r1, #24
503719 ; CHECK-LE-NEXT: itt mi
504720 ; CHECK-LE-NEXT: vmovmi.u16 r1, q0[7]
505721 ; CHECK-LE-NEXT: strhmi r1, [r0, #14]
513729 ; CHECK-BE-NEXT: vldr d1, [sp, #8]
514730 ; CHECK-BE-NEXT: adds r0, #4
515731 ; CHECK-BE-NEXT: vmov d0, r3, r2
516 ; CHECK-BE-NEXT: mov r2, sp
732 ; CHECK-BE-NEXT: movs r2, #0
517733 ; CHECK-BE-NEXT: vrev64.16 q1, q0
518734 ; CHECK-BE-NEXT: vcmp.s16 gt, q1, zr
519 ; CHECK-BE-NEXT: vstr p0, [r2]
520 ; CHECK-BE-NEXT: ldrb.w r2, [sp]
735 ; CHECK-BE-NEXT: vmrs r12, p0
736 ; CHECK-BE-NEXT: and r3, r12, #1
737 ; CHECK-BE-NEXT: rsbs r3, r3, #0
738 ; CHECK-BE-NEXT: bfi r2, r3, #0, #1
739 ; CHECK-BE-NEXT: ubfx r3, r12, #2, #1
740 ; CHECK-BE-NEXT: rsbs r3, r3, #0
741 ; CHECK-BE-NEXT: bfi r2, r3, #1, #1
742 ; CHECK-BE-NEXT: ubfx r3, r12, #4, #1
743 ; CHECK-BE-NEXT: rsbs r3, r3, #0
744 ; CHECK-BE-NEXT: bfi r2, r3, #2, #1
745 ; CHECK-BE-NEXT: ubfx r3, r12, #6, #1
746 ; CHECK-BE-NEXT: rsbs r3, r3, #0
747 ; CHECK-BE-NEXT: bfi r2, r3, #3, #1
748 ; CHECK-BE-NEXT: ubfx r3, r12, #8, #1
749 ; CHECK-BE-NEXT: rsbs r3, r3, #0
750 ; CHECK-BE-NEXT: bfi r2, r3, #4, #1
751 ; CHECK-BE-NEXT: ubfx r3, r12, #10, #1
752 ; CHECK-BE-NEXT: rsbs r3, r3, #0
753 ; CHECK-BE-NEXT: bfi r2, r3, #5, #1
754 ; CHECK-BE-NEXT: ubfx r3, r12, #12, #1
755 ; CHECK-BE-NEXT: rsbs r3, r3, #0
756 ; CHECK-BE-NEXT: bfi r2, r3, #6, #1
757 ; CHECK-BE-NEXT: ubfx r3, r12, #14, #1
758 ; CHECK-BE-NEXT: rsbs r3, r3, #0
521759 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
522 ; CHECK-BE-NEXT: lsls r1, r2, #31
760 ; CHECK-BE-NEXT: bfi r2, r3, #7, #1
761 ; CHECK-BE-NEXT: uxtb r1, r2
762 ; CHECK-BE-NEXT: lsls r2, r2, #31
523763 ; CHECK-BE-NEXT: itt ne
524 ; CHECK-BE-NEXT: vmovne.u16 r1, q0[0]
525 ; CHECK-BE-NEXT: strhne r1, [r0]
526 ; CHECK-BE-NEXT: lsls r1, r2, #30
527 ; CHECK-BE-NEXT: itt mi
528 ; CHECK-BE-NEXT: vmovmi.u16 r1, q0[1]
529 ; CHECK-BE-NEXT: strhmi r1, [r0, #2]
530 ; CHECK-BE-NEXT: lsls r1, r2, #29
531 ; CHECK-BE-NEXT: itt mi
532 ; CHECK-BE-NEXT: vmovmi.u16 r1, q0[2]
533 ; CHECK-BE-NEXT: strhmi r1, [r0, #4]
534 ; CHECK-BE-NEXT: lsls r1, r2, #28
535 ; CHECK-BE-NEXT: itt mi
536 ; CHECK-BE-NEXT: vmovmi.u16 r1, q0[3]
537 ; CHECK-BE-NEXT: strhmi r1, [r0, #6]
538 ; CHECK-BE-NEXT: lsls r1, r2, #27
539 ; CHECK-BE-NEXT: itt mi
540 ; CHECK-BE-NEXT: vmovmi.u16 r1, q0[4]
541 ; CHECK-BE-NEXT: strhmi r1, [r0, #8]
542 ; CHECK-BE-NEXT: lsls r1, r2, #26
543 ; CHECK-BE-NEXT: itt mi
544 ; CHECK-BE-NEXT: vmovmi.u16 r1, q0[5]
545 ; CHECK-BE-NEXT: strhmi r1, [r0, #10]
546 ; CHECK-BE-NEXT: lsls r1, r2, #25
547 ; CHECK-BE-NEXT: itt mi
548 ; CHECK-BE-NEXT: vmovmi.u16 r1, q0[6]
549 ; CHECK-BE-NEXT: strhmi r1, [r0, #12]
550 ; CHECK-BE-NEXT: lsls r1, r2, #24
764 ; CHECK-BE-NEXT: vmovne.u16 r2, q0[0]
765 ; CHECK-BE-NEXT: strhne r2, [r0]
766 ; CHECK-BE-NEXT: lsls r2, r1, #30
767 ; CHECK-BE-NEXT: itt mi
768 ; CHECK-BE-NEXT: vmovmi.u16 r2, q0[1]
769 ; CHECK-BE-NEXT: strhmi r2, [r0, #2]
770 ; CHECK-BE-NEXT: lsls r2, r1, #29
771 ; CHECK-BE-NEXT: itt mi
772 ; CHECK-BE-NEXT: vmovmi.u16 r2, q0[2]
773 ; CHECK-BE-NEXT: strhmi r2, [r0, #4]
774 ; CHECK-BE-NEXT: lsls r2, r1, #28
775 ; CHECK-BE-NEXT: itt mi
776 ; CHECK-BE-NEXT: vmovmi.u16 r2, q0[3]
777 ; CHECK-BE-NEXT: strhmi r2, [r0, #6]
778 ; CHECK-BE-NEXT: lsls r2, r1, #27
779 ; CHECK-BE-NEXT: itt mi
780 ; CHECK-BE-NEXT: vmovmi.u16 r2, q0[4]
781 ; CHECK-BE-NEXT: strhmi r2, [r0, #8]
782 ; CHECK-BE-NEXT: lsls r2, r1, #26