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;
|
break;
|
||||||
case kMips64Shr:
|
case kMips64Shr:
|
||||||
if (instr->InputAt(1)->IsRegister()) {
|
if (instr->InputAt(1)->IsRegister()) {
|
||||||
|
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||||
__ srlv(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
|
__ srlv(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
|
||||||
} else {
|
} else {
|
||||||
int64_t imm = i.InputOperand(1).immediate();
|
int64_t imm = i.InputOperand(1).immediate();
|
||||||
|
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||||
__ srl(i.OutputRegister(), i.InputRegister(0),
|
__ srl(i.OutputRegister(), i.InputRegister(0),
|
||||||
static_cast<uint16_t>(imm));
|
static_cast<uint16_t>(imm));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kMips64Sar:
|
case kMips64Sar:
|
||||||
if (instr->InputAt(1)->IsRegister()) {
|
if (instr->InputAt(1)->IsRegister()) {
|
||||||
|
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||||
__ srav(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
|
__ srav(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
|
||||||
} else {
|
} else {
|
||||||
int64_t imm = i.InputOperand(1).immediate();
|
int64_t imm = i.InputOperand(1).immediate();
|
||||||
|
__ sll(i.InputRegister(0), i.InputRegister(0), 0x0);
|
||||||
__ sra(i.OutputRegister(), i.InputRegister(0),
|
__ sra(i.OutputRegister(), i.InputRegister(0),
|
||||||
static_cast<uint16_t>(imm));
|
static_cast<uint16_t>(imm));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user