Commit 608437b4 authored by Clemens Hammacher's avatar Clemens Hammacher Committed by Commit Bot

[Liftoff] Use AVX instructions if available

Mixing SSE and AVX instructions can cause severe slowdowns, so always
use AVX instructions if available.
The {Movss} method of {TurboAssembler} automatically does this,
emitting either {vmovss} or {movss}.

R=titzer@chromium.org

Bug: v8:6600
Change-Id: I45124944964e5a970814c7b50dfbfca333137dc1
Reviewed-on: https://chromium-review.googlesource.com/865910Reviewed-by: 's avatarBen Titzer <titzer@chromium.org>
Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#50572}
parent 153f6705
...@@ -194,7 +194,7 @@ void LiftoffAssembler::Move(LiftoffRegister dst, LiftoffRegister src) { ...@@ -194,7 +194,7 @@ void LiftoffAssembler::Move(LiftoffRegister dst, LiftoffRegister src) {
if (dst.is_gp()) { if (dst.is_gp()) {
movq(dst.gp(), src.gp()); movq(dst.gp(), src.gp());
} else { } else {
movsd(dst.fp(), src.fp()); Movsd(dst.fp(), src.fp());
} }
} }
...@@ -453,7 +453,7 @@ void LiftoffAssembler::PushCallerFrameSlot(const VarState& src, ...@@ -453,7 +453,7 @@ void LiftoffAssembler::PushCallerFrameSlot(const VarState& src,
pushq(src.reg().gp()); pushq(src.reg().gp());
} else { } else {
subp(rsp, Immediate(kStackSlotSize)); subp(rsp, Immediate(kStackSlotSize));
movsd(Operand(rsp, 0), src.reg().fp()); Movsd(Operand(rsp, 0), src.reg().fp());
} }
break; break;
case VarState::kI32Const: case VarState::kI32Const:
...@@ -476,7 +476,7 @@ void LiftoffAssembler::PushRegisters(LiftoffRegList regs) { ...@@ -476,7 +476,7 @@ void LiftoffAssembler::PushRegisters(LiftoffRegList regs) {
unsigned offset = 0; unsigned offset = 0;
while (!fp_regs.is_empty()) { while (!fp_regs.is_empty()) {
LiftoffRegister reg = fp_regs.GetFirstRegSet(); LiftoffRegister reg = fp_regs.GetFirstRegSet();
movsd(Operand(rsp, offset), reg.fp()); Movsd(Operand(rsp, offset), reg.fp());
fp_regs.clear(reg); fp_regs.clear(reg);
offset += sizeof(double); offset += sizeof(double);
} }
...@@ -489,7 +489,7 @@ void LiftoffAssembler::PopRegisters(LiftoffRegList regs) { ...@@ -489,7 +489,7 @@ void LiftoffAssembler::PopRegisters(LiftoffRegList regs) {
unsigned fp_offset = 0; unsigned fp_offset = 0;
while (!fp_regs.is_empty()) { while (!fp_regs.is_empty()) {
LiftoffRegister reg = fp_regs.GetFirstRegSet(); LiftoffRegister reg = fp_regs.GetFirstRegSet();
movsd(reg.fp(), Operand(rsp, fp_offset)); Movsd(reg.fp(), Operand(rsp, fp_offset));
fp_regs.clear(reg); fp_regs.clear(reg);
fp_offset += sizeof(double); fp_offset += sizeof(double);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment