| 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 | 
|  |