| Index: src/IceAssemblerARM32.h
|
| diff --git a/src/IceAssemblerARM32.h b/src/IceAssemblerARM32.h
|
| index b3e656d8c914151e8f80f0cc7fd37a0a03c0f967..acef261c2907b648fe37922da0a968aab9a3ccbf 100644
|
| --- a/src/IceAssemblerARM32.h
|
| +++ b/src/IceAssemblerARM32.h
|
| @@ -73,6 +73,14 @@ public:
|
| kRotate24 // ror #24
|
| };
|
|
|
| + // Encoding of the number of D registers in a list of D registers.
|
| + enum DRegListSize {
|
| + DRegListSize1 = 7, // 0b0111
|
| + DRegListSize2 = 10, // 0b1010
|
| + DRegListSIze3 = 6, // 0b0110
|
| + DRegListSize4 = 2 // 0b0010
|
| + };
|
| +
|
| class TargetInfo {
|
| TargetInfo(const TargetInfo &) = delete;
|
| TargetInfo &operator=(const TargetInfo &) = delete;
|
| @@ -399,6 +407,16 @@ public:
|
| vldrs(OpSd, OpAddress, Cond, TInfo);
|
| }
|
|
|
| + // ElmtSize = #bits in vector element.
|
| + void vld1qr(size_t ElmtSize, const Operand *OpQd, const Operand *OpRn,
|
| + const TargetInfo &TInfo);
|
| +
|
| + void vld1qr(size_t ElmtSize, const Operand *OpQd, const Operand *OpRn,
|
| + const TargetLowering *Lowering) {
|
| + const TargetInfo TInfo(Lowering);
|
| + vld1qr(ElmtSize, OpQd, OpRn, TInfo);
|
| + }
|
| +
|
| void vmovd(const Operand *OpDn, const OperandARM32FlexFpImm *OpFpImm,
|
| CondARM32::Cond Cond);
|
|
|
| @@ -477,6 +495,16 @@ public:
|
| vstrs(OpSd, OpAddress, Cond, TInfo);
|
| }
|
|
|
| + // ElmtSize = #bits in vector element.
|
| + void vst1qr(size_t ElmtSize, const Operand *OpQd, const Operand *OpAddress,
|
| + const TargetInfo &TInfo);
|
| +
|
| + void vst1qr(size_t ElmtSize, const Operand *OpQd, const Operand *OpRn,
|
| + const TargetLowering *Lowering) {
|
| + const TargetInfo TInfo(Lowering);
|
| + vst1qr(ElmtSize, OpQd, OpRn, TInfo);
|
| + }
|
| +
|
| void vsubd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm,
|
| CondARM32::Cond Cond);
|
|
|
| @@ -601,6 +629,13 @@ private:
|
| // mmmmM=Sm, and xx0xxxxxxdddd000xxx0x0000=Opcode.
|
| void emitVFPds(CondARM32::Cond Cond, IValueT Opcode, IValueT Dd, IValueT Sm);
|
|
|
| + // Pattern 111100000D00nnnnddddttttssaammmm | Opcode where Ddddd=Dd, nnnn=Rn,
|
| + // mmmmm=Rm, tttt=NumDRegs, ElmtSize in {8, 16, 32, 64) and defines ss, and
|
| + // aa=Align.
|
| + void emitVMem1Op(IValueT Opcode, IValueT Dd, IValueT Rn, IValueT Rm,
|
| + DRegListSize NumDRegs, size_t ElmtSize, IValueT Align,
|
| + const char *InstName);
|
| +
|
| // Pattern cccc011100x1dddd1111mmmm0001nnn where cccc=Cond,
|
| // x=Opcode, dddd=Rd, nnnn=Rn, mmmm=Rm.
|
| void emitDivOp(CondARM32::Cond Cond, IValueT Opcode, IValueT Rd, IValueT Rn,
|
|
|