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