[Liftoff][arm64] Use wzr/xzr for pushing zero constants
This is an optimization to avoid an unneeded "mov <reg>, #0" instruction. Instead, we can just directly use the zero register. R=ahaas@chromium.org Bug: chromium:854011, v8:6600 Change-Id: I187d7a659c42d7d4a6d5798eddff8b7ee0983bbc Reviewed-on: https://chromium-review.googlesource.com/1124684 Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#54186}
This commit is contained in:
parent
720218c2a8
commit
6406b6610c
@ -957,27 +957,19 @@ void LiftoffStackSlots::Construct() {
|
||||
asm_->Poke(liftoff::GetRegFromType(slot.src_.reg(), slot.src_.type()),
|
||||
poke_offset);
|
||||
break;
|
||||
case LiftoffAssembler::VarState::KIntConst: {
|
||||
switch (slot.src_.type()) {
|
||||
case kWasmI32: {
|
||||
UseScratchRegisterScope temps(asm_);
|
||||
Register scratch = temps.AcquireW();
|
||||
asm_->Mov(scratch, slot.src_.i32_const());
|
||||
asm_->Poke(scratch, poke_offset);
|
||||
break;
|
||||
}
|
||||
case kWasmI64: {
|
||||
UseScratchRegisterScope temps(asm_);
|
||||
Register scratch = temps.AcquireX();
|
||||
asm_->Mov(scratch, int64_t{slot.src_.i32_const()});
|
||||
asm_->Poke(scratch, poke_offset);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
UNREACHABLE();
|
||||
case LiftoffAssembler::VarState::KIntConst:
|
||||
DCHECK(slot.src_.type() == kWasmI32 || slot.src_.type() == kWasmI64);
|
||||
if (slot.src_.i32_const() == 0) {
|
||||
Register zero_reg = slot.src_.type() == kWasmI32 ? wzr : xzr;
|
||||
asm_->Poke(zero_reg, poke_offset);
|
||||
} else {
|
||||
UseScratchRegisterScope temps(asm_);
|
||||
Register scratch = slot.src_.type() == kWasmI32 ? temps.AcquireW()
|
||||
: temps.AcquireX();
|
||||
asm_->Mov(scratch, int64_t{slot.src_.i32_const()});
|
||||
asm_->Poke(scratch, poke_offset);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
slot_index++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user