Index: src/IceAssemblerARM32.h |
diff --git a/src/IceAssemblerARM32.h b/src/IceAssemblerARM32.h |
index 2b52a7b1390ef58a8ceab26979f1fa81e27632ee..b1ca928cfb533aaa04bfabd3bb9a70ec8ffce2c9 100644 |
--- a/src/IceAssemblerARM32.h |
+++ b/src/IceAssemblerARM32.h |
@@ -381,6 +381,14 @@ public: |
// vcvt<c>.u32.f32 |
void vcvtus(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); |
+ void vcvtqsi(const Operand *OpQd, const Operand *OpQm); |
+ |
+ void vcvtqsu(const Operand *OpQd, const Operand *OpQm); |
+ |
+ void vcvtqis(const Operand *OpQd, const Operand *OpQm); |
+ |
+ void vcvtqus(const Operand *OpQd, const Operand *OpQm); |
+ |
void vdivd(const Operand *OpDd, const Operand *OpDn, const Operand *OpDm, |
CondARM32::Cond Cond); |
@@ -511,6 +519,15 @@ public: |
void vshlqu(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
const Operand *OpQn); |
+ void vshlqc(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
+ const ConstantInteger32 *OpQn); |
+ |
+ void vshrqic(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
+ const ConstantInteger32 *OpQn); |
+ |
+ void vshrquc(Type ElmtTy, const Operand *OpQd, const Operand *OpQm, |
+ const ConstantInteger32 *OpQn); |
+ |
void vsqrtd(const Operand *OpDd, const Operand *OpDm, CondARM32::Cond Cond); |
void vsqrts(const Operand *OpSd, const Operand *OpSm, CondARM32::Cond Cond); |
@@ -739,6 +756,20 @@ private: |
const Operand *OpQn, const Operand *OpQm, |
const char *OpcodeName); |
+ // Implements various forms of vector (SIMD) shifts using Q registers. |
+ // Implements pattern 111100101Diiiiiidddd010101M1mmmm where Dddd=Qd, Mmmm=Qm, |
+ // iiiiii=Imm6, and Opcode is unioned into the pattern. |
+ void emitSIMDShiftqqc(IValueT Opcode, const Operand *OpQd, |
+ const Operand *OpQm, const IValueT Imm6, |
+ const char *OpcodeName); |
+ |
+ // Implements various forms of vector (SIMD) casts between (signed and |
+ // unsigned) integer and floating point types (f32). Implements pattern |
+ // 111100111D11ss11dddd011ooQM0mmmm where Dddd=Qd, Mmmm=Qm, 10=ss, op=00, 1=Q, |
+ // and Opcode is unioned into the pattern. |
+ void emitSIMDCvtqq(IValueT Opcode, const Operand *OpQd, const Operand *OpQm, |
+ const char *CvtName); |
+ |
// Pattern cccctttxxxxnnnn0000iiiiiiiiiiii where cccc=Cond, nnnn=Rn, |
// ttt=Instruction type (derived from OpSrc1), iiiiiiiiiiii is derived from |
// OpSrc1, and xxxx=Opcode. |