| Index: src/IceInstX8632.h
|
| diff --git a/src/IceInstX8632.h b/src/IceInstX8632.h
|
| index 8b8a3fde60e6d808d489c93c4074a095c71743e1..03605ca0cadc6bf9150d6213701d7212d83896cf 100644
|
| --- a/src/IceInstX8632.h
|
| +++ b/src/IceInstX8632.h
|
| @@ -168,14 +168,19 @@ public:
|
| Mulss,
|
| Neg,
|
| Or,
|
| + Padd,
|
| Pand,
|
| Pcmpeq,
|
| Pcmpgt,
|
| + Pmullw,
|
| + Pmuludq,
|
| Pop,
|
| - Push,
|
| + Por,
|
| + Pshufd,
|
| Psll,
|
| Psra,
|
| Psub,
|
| + Push,
|
| Pxor,
|
| Ret,
|
| Sar,
|
| @@ -184,6 +189,7 @@ public:
|
| Shld,
|
| Shr,
|
| Shrd,
|
| + Shufps,
|
| Sqrtss,
|
| Store,
|
| StoreQ,
|
| @@ -455,6 +461,7 @@ typedef InstX8632Binop<InstX8632::Add> InstX8632Add;
|
| typedef InstX8632Binop<InstX8632::Addps> InstX8632Addps;
|
| typedef InstX8632Binop<InstX8632::Adc> InstX8632Adc;
|
| typedef InstX8632Binop<InstX8632::Addss> InstX8632Addss;
|
| +typedef InstX8632Binop<InstX8632::Padd> InstX8632Padd;
|
| typedef InstX8632Binop<InstX8632::Sub> InstX8632Sub;
|
| typedef InstX8632Binop<InstX8632::Subps> InstX8632Subps;
|
| typedef InstX8632Binop<InstX8632::Subss> InstX8632Subss;
|
| @@ -463,11 +470,14 @@ typedef InstX8632Binop<InstX8632::Psub> InstX8632Psub;
|
| typedef InstX8632Binop<InstX8632::And> InstX8632And;
|
| typedef InstX8632Binop<InstX8632::Pand> InstX8632Pand;
|
| typedef InstX8632Binop<InstX8632::Or> InstX8632Or;
|
| +typedef InstX8632Binop<InstX8632::Por> InstX8632Por;
|
| typedef InstX8632Binop<InstX8632::Xor> InstX8632Xor;
|
| typedef InstX8632Binop<InstX8632::Pxor> InstX8632Pxor;
|
| typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul;
|
| typedef InstX8632Binop<InstX8632::Mulps> InstX8632Mulps;
|
| typedef InstX8632Binop<InstX8632::Mulss> InstX8632Mulss;
|
| +typedef InstX8632Binop<InstX8632::Pmullw> InstX8632Pmullw;
|
| +typedef InstX8632Binop<InstX8632::Pmuludq> InstX8632Pmuludq;
|
| typedef InstX8632Binop<InstX8632::Divps> InstX8632Divps;
|
| typedef InstX8632Binop<InstX8632::Divss> InstX8632Divss;
|
| typedef InstX8632Binop<InstX8632::Shl, true> InstX8632Shl;
|
| @@ -984,6 +994,27 @@ private:
|
| virtual ~InstX8632Push() {}
|
| };
|
|
|
| +// Pshufd - shuffle a vector of doublewords
|
| +class InstX8632Pshufd : public InstX8632 {
|
| +public:
|
| + static InstX8632Pshufd *create(Cfg *Func, Variable *Dest, Operand *Source1,
|
| + Operand *Source2) {
|
| + return new (Func->allocate<InstX8632Pshufd>())
|
| + InstX8632Pshufd(Func, Dest, Source1, Source2);
|
| + }
|
| + virtual void emit(const Cfg *Func) const;
|
| + virtual void dump(const Cfg *Func) const;
|
| + static bool classof(const Inst *Inst) { return isClassof(Inst, Pshufd); }
|
| +
|
| +private:
|
| + InstX8632Pshufd(Cfg *Func, Variable *Dest, Operand *Source1,
|
| + Operand *Source2);
|
| + InstX8632Pshufd(const InstX8632Pshufd &) LLVM_DELETED_FUNCTION;
|
| + InstX8632Pshufd &operator=(const InstX8632Pshufd &) LLVM_DELETED_FUNCTION;
|
| + virtual ~InstX8632Pshufd() {}
|
| + static const char *Opcode;
|
| +};
|
| +
|
| // Ret instruction. Currently only supports the "ret" version that
|
| // does not pop arguments. This instruction takes a Source operand
|
| // (for non-void returning functions) for liveness analysis, though
|
| @@ -1004,6 +1035,27 @@ private:
|
| virtual ~InstX8632Ret() {}
|
| };
|
|
|
| +// Shufps - select from two vectors of floating point values
|
| +class InstX8632Shufps : public InstX8632 {
|
| +public:
|
| + static InstX8632Shufps *create(Cfg *Func, Variable *Dest, Operand *Source1,
|
| + Operand *Source2) {
|
| + return new (Func->allocate<InstX8632Shufps>())
|
| + InstX8632Shufps(Func, Dest, Source1, Source2);
|
| + }
|
| + virtual void emit(const Cfg *Func) const;
|
| + virtual void dump(const Cfg *Func) const;
|
| + static bool classof(const Inst *Inst) { return isClassof(Inst, Shufps); }
|
| +
|
| +private:
|
| + InstX8632Shufps(Cfg *Func, Variable *Dest, Operand *Source1,
|
| + Operand *Source2);
|
| + InstX8632Shufps(const InstX8632Shufps &) LLVM_DELETED_FUNCTION;
|
| + InstX8632Shufps &operator=(const InstX8632Shufps &) LLVM_DELETED_FUNCTION;
|
| + virtual ~InstX8632Shufps() {}
|
| + static const char *Opcode;
|
| +};
|
| +
|
| // Exchanging Add instruction. Exchanges the first operand (destination
|
| // operand) with the second operand (source operand), then loads the sum
|
| // of the two values into the destination operand. The destination may be
|
|
|