Chromium Code Reviews| Index: src/IceInstMIPS32.h |
| diff --git a/src/IceInstMIPS32.h b/src/IceInstMIPS32.h |
| index e364f7f2ea8b5850761e2eb84b69bd0509a35d09..83a8decd200c76f560a099cc866ce82ff2d8f88d 100644 |
| --- a/src/IceInstMIPS32.h |
| +++ b/src/IceInstMIPS32.h |
| @@ -121,6 +121,7 @@ public: |
| Addiu, |
| Addu, |
| And, |
| + Andi, |
| Br, |
| Call, |
| La, |
| @@ -137,10 +138,12 @@ public: |
| Or, |
| Ori, |
| Ret, |
| + Sll, |
| Slt, |
| Slti, |
| Sltiu, |
| Sltu, |
| + Sra, |
| Sub, |
| Subu, |
| Xor, |
| @@ -404,6 +407,12 @@ public: |
| InstMIPS32Imm16(Func, Dest, Imm); |
| } |
| + static InstMIPS32Imm16 *create(Cfg *Func, Variable *Dest, Operand *Source, |
| + ConstantInteger32 *Imm) { |
| + return new (Func->allocate<InstMIPS32Imm16>()) |
| + InstMIPS32Imm16(Func, Dest, Source, Imm); |
| + } |
| + |
| void emit(const Cfg *Func) const override { |
| if (!BuildDefs::dump()) |
| return; |
| @@ -453,6 +462,12 @@ private: |
| InstMIPS32Imm16(Cfg *Func, Variable *Dest, uint32_t Imm) |
| : InstMIPS32(Func, K, 0, Dest), Imm(Imm) {} |
| + InstMIPS32Imm16(Cfg *Func, Variable *Dest, Operand *Source, |
|
Jim Stichnoth
2016/05/06 19:55:09
Why is this new form needed?
It seems to me that
sagar.thakur
2016/05/09 11:03:40
I was following arm and x86 implementation of Targ
|
| + ConstantInteger32 *Imm) |
| + : InstMIPS32(Func, K, 1, Dest), Imm(Imm->getValue()) { |
| + addSource(Source); |
| + } |
| + |
| static const char *Opcode; |
| const uint32_t Imm; |
| @@ -462,6 +477,7 @@ using InstMIPS32Add = InstMIPS32ThreeAddrGPR<InstMIPS32::Add>; |
| using InstMIPS32Addu = InstMIPS32ThreeAddrGPR<InstMIPS32::Addu>; |
| using InstMIPS32Addiu = InstMIPS32Imm16<InstMIPS32::Addiu, true>; |
| using InstMIPS32And = InstMIPS32ThreeAddrGPR<InstMIPS32::And>; |
| +using InstMIPS32Andi = InstMIPS32Imm16<InstMIPS32::Andi>; |
| using InstMIPS32Lui = InstMIPS32Imm16<InstMIPS32::Lui>; |
| using InstMIPS32La = InstMIPS32UnaryopGPR<InstMIPS32::La>; |
| using InstMIPS32Mfhi = InstMIPS32UnaryopGPR<InstMIPS32::Mfhi>; |
| @@ -473,10 +489,12 @@ using InstMIPS32Mult = InstMIPS32ThreeAddrGPR<InstMIPS32::Mult>; |
| using InstMIPS32Multu = InstMIPS32ThreeAddrGPR<InstMIPS32::Multu>; |
| using InstMIPS32Or = InstMIPS32ThreeAddrGPR<InstMIPS32::Or>; |
| using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>; |
| +using InstMIPS32Sll = InstMIPS32Imm16<InstMIPS32::Sll>; |
| using InstMIPS32Slt = InstMIPS32ThreeAddrGPR<InstMIPS32::Slt>; |
| using InstMIPS32Slti = InstMIPS32Imm16<InstMIPS32::Slti>; |
| using InstMIPS32Sltiu = InstMIPS32Imm16<InstMIPS32::Sltiu>; |
| using InstMIPS32Sltu = InstMIPS32ThreeAddrGPR<InstMIPS32::Sltu>; |
| +using InstMIPS32Sra = InstMIPS32Imm16<InstMIPS32::Sra>; |
| using InstMIPS32Sub = InstMIPS32ThreeAddrGPR<InstMIPS32::Sub>; |
| using InstMIPS32Subu = InstMIPS32ThreeAddrGPR<InstMIPS32::Subu>; |
| using InstMIPS32Ori = InstMIPS32Imm16<InstMIPS32::Ori>; |