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