MIPS64: Fix 32bit right shift operators
Add sign extension for Mips64Shr and Mips64Sar operators. BUG= Review-Url: https://codereview.chromium.org/2154703002 Cr-Commit-Position: refs/heads/master@{#37943}
This commit is contained in:
parent
07a0f9ebff
commit
24d432cb82
@ -1131,18 +1131,22 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
||||
break;
|
||||
case kMips64Shr:
|
||||
if (instr->InputAt(1)->IsRegister()) {
|
||||
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||
__ srlv(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
|
||||
} else {
|
||||
int64_t imm = i.InputOperand(1).immediate();
|
||||
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||
__ srl(i.OutputRegister(), i.InputRegister(0),
|
||||
static_cast<uint16_t>(imm));
|
||||
}
|
||||
break;
|
||||
case kMips64Sar:
|
||||
if (instr->InputAt(1)->IsRegister()) {
|
||||
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||
__ srav(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
|
||||
} else {
|
||||
int64_t imm = i.InputOperand(1).immediate();
|
||||
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||
__ sra(i.OutputRegister(), i.InputRegister(0),
|
||||
static_cast<uint16_t>(imm));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user