| Index: src/IceTargetLoweringX8632.h
|
| diff --git a/src/IceTargetLoweringX8632.h b/src/IceTargetLoweringX8632.h
|
| index a77d39aaf22d866fe523bcf9ae15d4cbca792155..9c9a091ceb834972c1b4bd0105b3fc6dcff476d1 100644
|
| --- a/src/IceTargetLoweringX8632.h
|
| +++ b/src/IceTargetLoweringX8632.h
|
| @@ -82,9 +82,11 @@ protected:
|
| virtual void lowerBr(const InstBr *Inst);
|
| virtual void lowerCall(const InstCall *Inst);
|
| virtual void lowerCast(const InstCast *Inst);
|
| + virtual void lowerExtractElement(const InstExtractElement *Inst);
|
| virtual void lowerFcmp(const InstFcmp *Inst);
|
| virtual void lowerIcmp(const InstIcmp *Inst);
|
| virtual void lowerIntrinsicCall(const InstIntrinsicCall *Inst);
|
| + virtual void lowerInsertElement(const InstInsertElement *Inst);
|
| virtual void lowerLoad(const InstLoad *Inst);
|
| virtual void lowerPhi(const InstPhi *Inst);
|
| virtual void lowerRet(const InstRet *Inst);
|
| @@ -152,6 +154,10 @@ protected:
|
| Variable *makeVectorOfZeros(Type Ty, int32_t RegNum = Variable::NoRegister);
|
| Variable *makeVectorOfOnes(Type Ty, int32_t RegNum = Variable::NoRegister);
|
|
|
| + // Return a memory operand corresponding to a stack allocated Variable.
|
| + OperandX8632Mem *getMemoryOperandForStackSlot(Type Ty, Variable *Slot,
|
| + uint32_t Offset = 0);
|
| +
|
| // The following are helpers that insert lowered x86 instructions
|
| // with minimal syntactic overhead, so that the lowering code can
|
| // look as close to assembly as practical.
|
| @@ -237,6 +243,9 @@ protected:
|
| void _imul(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Imul::create(Func, Dest, Src0));
|
| }
|
| + void _lea(Variable *Dest, Operand *Src0) {
|
| + Context.insert(InstX8632Lea::create(Func, Dest, Src0));
|
| + }
|
| void _mfence() { Context.insert(InstX8632Mfence::create(Func)); }
|
| // If Dest=NULL is passed in, then a new variable is created, marked
|
| // as infinite register allocation weight, and returned through the
|
| @@ -249,12 +258,18 @@ protected:
|
| Context.insert(InstX8632Mov::create(Func, Dest, Src0));
|
| }
|
| }
|
| + void _movd(Variable *Dest, Operand *Src0) {
|
| + Context.insert(InstX8632Movd::create(Func, Dest, Src0));
|
| + }
|
| void _movp(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Movp::create(Func, Dest, Src0));
|
| }
|
| void _movq(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Movq::create(Func, Dest, Src0));
|
| }
|
| + void _movss(Variable *Dest, Operand *Src0) {
|
| + Context.insert(InstX8632Movss::create(Func, Dest, Src0));
|
| + }
|
| void _movsx(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Movsx::create(Func, Dest, Src0));
|
| }
|
| @@ -285,6 +300,12 @@ protected:
|
| void _pcmpgt(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Pcmpgt::create(Func, Dest, Src0));
|
| }
|
| + void _pextrw(Variable *Dest, Operand *Src0, Operand *Src1) {
|
| + Context.insert(InstX8632Pextrw::create(Func, Dest, Src0, Src1));
|
| + }
|
| + void _pinsrw(Variable *Dest, Operand *Src0, Operand *Src1) {
|
| + Context.insert(InstX8632Pinsrw::create(Func, Dest, Src0, Src1));
|
| + }
|
| void _pop(Variable *Dest) {
|
| Context.insert(InstX8632Pop::create(Func, Dest));
|
| }
|
| @@ -297,6 +318,9 @@ protected:
|
| void _psra(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Psra::create(Func, Dest, Src0));
|
| }
|
| + void _pshufd(Variable *Dest, Operand *Src0, Operand *Src1) {
|
| + Context.insert(InstX8632Pshufd::create(Func, Dest, Src0, Src1));
|
| + }
|
| void _psub(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Psub::create(Func, Dest, Src0));
|
| }
|
| @@ -324,6 +348,9 @@ protected:
|
| void _shrd(Variable *Dest, Variable *Src0, Variable *Src1) {
|
| Context.insert(InstX8632Shrd::create(Func, Dest, Src0, Src1));
|
| }
|
| + void _shufps(Variable *Dest, Operand *Src0, Operand *Src1) {
|
| + Context.insert(InstX8632Shufps::create(Func, Dest, Src0, Src1));
|
| + }
|
| void _sqrtss(Variable *Dest, Operand *Src0) {
|
| Context.insert(InstX8632Sqrtss::create(Func, Dest, Src0));
|
| }
|
|
|