Index: src/IceTargetLoweringARM32.h |
diff --git a/src/IceTargetLoweringARM32.h b/src/IceTargetLoweringARM32.h |
index 0c21c7c9cd859fb8915f917bb63edbebd4a15a54..88a8eb18a13e3017e1678718a0fe6d75b04a1389 100644 |
--- a/src/IceTargetLoweringARM32.h |
+++ b/src/IceTargetLoweringARM32.h |
@@ -130,9 +130,28 @@ protected: |
// with minimal syntactic overhead, so that the lowering code can |
// look as close to assembly as practical. |
+ void _add(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32Add::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _adds(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ const bool SetFlags = true; |
+ Context.insert(InstARM32Add::create(Func, Dest, Src0, Src1, SetFlags)); |
+ } |
+ void _adc(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32Adc::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _and(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32And::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _eor(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32Eor::create(Func, Dest, Src0, Src1)); |
+ } |
void _ldr(Variable *Dest, OperandARM32Mem *Addr) { |
Context.insert(InstARM32Ldr::create(Func, Dest, Addr)); |
} |
+ void _mla(Variable *Dest, Variable *Src0, Variable *Src1, Variable *Acc) { |
+ Context.insert(InstARM32Mla::create(Func, Dest, Src0, Src1, Acc)); |
+ } |
// If Dest=nullptr is passed in, then a new variable is created, |
// marked as infinite register allocation weight, and returned |
// through the in/out Dest argument. |
@@ -144,18 +163,40 @@ protected: |
} |
// The Operand can only be a 16-bit immediate or a ConstantRelocatable |
// (with an upper16 relocation). |
- void _movt(Variable *&Dest, Operand *Src0) { |
+ void _movt(Variable *Dest, Operand *Src0) { |
Context.insert(InstARM32Movt::create(Func, Dest, Src0)); |
} |
- void _movw(Variable *&Dest, Operand *Src0) { |
+ void _movw(Variable *Dest, Operand *Src0) { |
Context.insert(InstARM32Movw::create(Func, Dest, Src0)); |
} |
- void _mvn(Variable *&Dest, Operand *Src0) { |
+ void _mul(Variable *Dest, Variable *Src0, Variable *Src1) { |
+ Context.insert(InstARM32Mul::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _mvn(Variable *Dest, Operand *Src0) { |
Context.insert(InstARM32Mvn::create(Func, Dest, Src0)); |
} |
+ void _orr(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32Orr::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _sbc(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32Sbc::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _sub(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ Context.insert(InstARM32Sub::create(Func, Dest, Src0, Src1)); |
+ } |
+ void _subs(Variable *Dest, Variable *Src0, Operand *Src1) { |
+ const bool SetFlags = true; |
+ Context.insert(InstARM32Sub::create(Func, Dest, Src0, Src1, SetFlags)); |
+ } |
void _ret(Variable *LR, Variable *Src0 = nullptr) { |
Context.insert(InstARM32Ret::create(Func, LR, Src0)); |
} |
+ void _umull(Variable *DestLo, Variable *DestHi, Variable *Src0, |
+ Variable *Src1) { |
+ Context.insert(InstARM32Umull::create(Func, DestLo, DestHi, Src0, Src1)); |
+ // Model the modification to the second dest as a fake def. |
+ Context.insert(InstFakeDef::create(Func, DestHi, DestLo)); |
+ } |
bool UsesFramePointer; |
bool NeedsStackAlignment; |