| Index: src/IceInstARM32.h | 
| diff --git a/src/IceInstARM32.h b/src/IceInstARM32.h | 
| index 9e0bb650c54bf5900bacfad9f54ce6c2f539112d..3f5f6bd7461f27084431cee2e81163c9d9b570c9 100644 | 
| --- a/src/IceInstARM32.h | 
| +++ b/src/IceInstARM32.h | 
| @@ -91,7 +91,7 @@ public: | 
| // general Constant operands like ConstantRelocatable, since a relocatable | 
| // can potentially take up too many bits. | 
| static OperandARM32Mem *create(Cfg *Func, Type Ty, Variable *Base, | 
| -                                 ConstantInteger32 *ImmOffset = nullptr, | 
| +                                 ConstantInteger32 *ImmOffset, | 
| AddrMode Mode = Offset) { | 
| return new (Func->allocate<OperandARM32Mem>()) | 
| OperandARM32Mem(Func, Ty, Base, ImmOffset, Mode); | 
| @@ -277,6 +277,7 @@ public: | 
| Push, | 
| Ret, | 
| Sbc, | 
| +    Str, | 
| Sub, | 
| Umull | 
| }; | 
| @@ -763,6 +764,31 @@ private: | 
| ~InstARM32Ret() override {} | 
| }; | 
|  | 
| +// Store instruction. It's important for liveness that there is no Dest | 
| +// operand (OperandARM32Mem instead of Dest Variable). | 
| +class InstARM32Str : public InstARM32Pred { | 
| +  InstARM32Str() = delete; | 
| +  InstARM32Str(const InstARM32Str &) = delete; | 
| +  InstARM32Str &operator=(const InstARM32Str &) = delete; | 
| + | 
| +public: | 
| +  // Value must be a register. | 
| +  static InstARM32Str *create(Cfg *Func, Variable *Value, OperandARM32Mem *Mem, | 
| +                              CondARM32::Cond Predicate) { | 
| +    return new (Func->allocate<InstARM32Str>()) | 
| +        InstARM32Str(Func, Value, Mem, Predicate); | 
| +  } | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| +  static bool classof(const Inst *Inst) { return isClassof(Inst, Str); } | 
| + | 
| +private: | 
| +  InstARM32Str(Cfg *Func, Variable *Value, OperandARM32Mem *Mem, | 
| +               CondARM32::Cond Predicate); | 
| +  ~InstARM32Str() override {} | 
| +}; | 
| + | 
| // Unsigned Multiply Long: d.lo, d.hi := x * y | 
| class InstARM32Umull : public InstARM32Pred { | 
| InstARM32Umull() = delete; | 
|  |