Index: src/compiler/mips64/code-generator-mips64.cc |
diff --git a/src/compiler/mips64/code-generator-mips64.cc b/src/compiler/mips64/code-generator-mips64.cc |
index 387b1db04073637151a5c5da09cef559287f849b..e362b18968a0da35ff07cc2c5461df16c4b3fbae 100644 |
--- a/src/compiler/mips64/code-generator-mips64.cc |
+++ b/src/compiler/mips64/code-generator-mips64.cc |
@@ -920,9 +920,29 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kMips64And: |
__ And(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
break; |
+ case kMips64And32: |
+ if (instr->InputAt(1)->IsRegister()) { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ sll(i.InputRegister(1), i.InputRegister(1), 0x0); |
+ __ And(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } else { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ And(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } |
+ break; |
case kMips64Or: |
__ Or(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
break; |
+ case kMips64Or32: |
+ if (instr->InputAt(1)->IsRegister()) { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ sll(i.InputRegister(1), i.InputRegister(1), 0x0); |
+ __ Or(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } else { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ Or(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } |
+ break; |
case kMips64Nor: |
if (instr->InputAt(1)->IsRegister()) { |
__ Nor(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
@@ -931,9 +951,30 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ Nor(i.OutputRegister(), i.InputRegister(0), zero_reg); |
} |
break; |
+ case kMips64Nor32: |
+ if (instr->InputAt(1)->IsRegister()) { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ sll(i.InputRegister(1), i.InputRegister(1), 0x0); |
+ __ Nor(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } else { |
+ DCHECK(i.InputOperand(1).immediate() == 0); |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ Nor(i.OutputRegister(), i.InputRegister(0), zero_reg); |
+ } |
+ break; |
case kMips64Xor: |
__ Xor(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
break; |
+ case kMips64Xor32: |
+ if (instr->InputAt(1)->IsRegister()) { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ sll(i.InputRegister(1), i.InputRegister(1), 0x0); |
+ __ Xor(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } else { |
+ __ sll(i.InputRegister(0), i.InputRegister(0), 0x0); |
+ __ Xor(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1)); |
+ } |
+ break; |
case kMips64Clz: |
__ Clz(i.OutputRegister(), i.InputRegister(0)); |
break; |