| Index: src/IceInstX8632.h
|
| diff --git a/src/IceInstX8632.h b/src/IceInstX8632.h
|
| index 25beb6dd93d58dc138109010c1830c3aab27bc05..ffddd7da230675b915176f2e3637208fa53d788f 100644
|
| --- a/src/IceInstX8632.h
|
| +++ b/src/IceInstX8632.h
|
| @@ -165,7 +165,14 @@ public:
|
| Mulss,
|
| Neg,
|
| Or,
|
| + Padd,
|
| + Pand,
|
| + Pmullw,
|
| + Pmuludq,
|
| Pop,
|
| + Por,
|
| + Pshufd,
|
| + Psub,
|
| Push,
|
| Pxor,
|
| Ret,
|
| @@ -175,6 +182,7 @@ public:
|
| Shld,
|
| Shr,
|
| Shrd,
|
| + Shufps,
|
| Sqrtss,
|
| Store,
|
| StoreQ,
|
| @@ -443,17 +451,23 @@ 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;
|
| typedef InstX8632Binop<InstX8632::Sbb> InstX8632Sbb;
|
| +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;
|
| @@ -928,6 +942,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
|
| @@ -948,6 +983,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;
|
| +};
|
| +
|
| // Sqrtss - Scalar sqrt of a float or double.
|
| class InstX8632Sqrtss : public InstX8632 {
|
| public:
|
|
|