s390x: Reland "Reland "[wasm][liftoff] Respect CallDescriptor linkage""
Port c2a1d633a2
Change-Id: I2062ce41260b3e55fdcfff7e47de3aab5132d391
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2739247
Reviewed-by: Milad Fa <mfarazma@redhat.com>
Commit-Queue: Junliang Yan <junyan@redhat.com>
Cr-Commit-Position: refs/heads/master@{#73269}
This commit is contained in:
parent
174f0e9515
commit
8167cf9031
@ -977,6 +977,12 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
|
|||||||
// Returns the pc offset at which the frame ends.
|
// Returns the pc offset at which the frame ends.
|
||||||
int LeaveFrame(StackFrame::Type type, int stack_adjustment = 0);
|
int LeaveFrame(StackFrame::Type type, int stack_adjustment = 0);
|
||||||
|
|
||||||
|
void AllocateStackSpace(int bytes) {
|
||||||
|
DCHECK_GE(bytes, 0);
|
||||||
|
if (bytes == 0) return;
|
||||||
|
lay(sp, MemOperand(sp, -bytes));
|
||||||
|
}
|
||||||
|
|
||||||
void CheckPageFlag(Register object, Register scratch, int mask, Condition cc,
|
void CheckPageFlag(Register object, Register scratch, int mask, Condition cc,
|
||||||
Label* condition_met);
|
Label* condition_met);
|
||||||
|
|
||||||
|
@ -2855,8 +2855,15 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) {
|
|||||||
bailout(kUnsupportedArchitecture, "DeallocateStackSlot");
|
bailout(kUnsupportedArchitecture, "DeallocateStackSlot");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiftoffStackSlots::Construct() {
|
void LiftoffStackSlots::Construct(int param_slots) {
|
||||||
|
DCHECK_LT(0, slots_.size());
|
||||||
|
SortInPushOrder();
|
||||||
|
int last_stack_slot = param_slots;
|
||||||
for (auto& slot : slots_) {
|
for (auto& slot : slots_) {
|
||||||
|
const int stack_slot = slot.dst_slot_;
|
||||||
|
int stack_decrement = (last_stack_slot - stack_slot) * kSystemPointerSize;
|
||||||
|
DCHECK_LT(0, stack_decrement);
|
||||||
|
last_stack_slot = stack_slot;
|
||||||
const LiftoffAssembler::VarState& src = slot.src_;
|
const LiftoffAssembler::VarState& src = slot.src_;
|
||||||
switch (src.loc()) {
|
switch (src.loc()) {
|
||||||
case LiftoffAssembler::VarState::kStack: {
|
case LiftoffAssembler::VarState::kStack: {
|
||||||
@ -2867,6 +2874,7 @@ void LiftoffStackSlots::Construct() {
|
|||||||
case kRtt:
|
case kRtt:
|
||||||
case kRttWithDepth:
|
case kRttWithDepth:
|
||||||
case kI64: {
|
case kI64: {
|
||||||
|
asm_->AllocateStackSpace(stack_decrement - kSystemPointerSize);
|
||||||
UseScratchRegisterScope temps(asm_);
|
UseScratchRegisterScope temps(asm_);
|
||||||
Register scratch = temps.Acquire();
|
Register scratch = temps.Acquire();
|
||||||
asm_->LoadU64(scratch, liftoff::GetStackSlot(slot.src_offset_));
|
asm_->LoadU64(scratch, liftoff::GetStackSlot(slot.src_offset_));
|
||||||
@ -2874,6 +2882,7 @@ void LiftoffStackSlots::Construct() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kF32: {
|
case kF32: {
|
||||||
|
asm_->AllocateStackSpace(stack_decrement - kSystemPointerSize);
|
||||||
asm_->LoadF32(kScratchDoubleReg,
|
asm_->LoadF32(kScratchDoubleReg,
|
||||||
liftoff::GetStackSlot(slot.src_offset_));
|
liftoff::GetStackSlot(slot.src_offset_));
|
||||||
asm_->lay(sp, MemOperand(sp, -kSystemPointerSize));
|
asm_->lay(sp, MemOperand(sp, -kSystemPointerSize));
|
||||||
@ -2881,12 +2890,14 @@ void LiftoffStackSlots::Construct() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kF64: {
|
case kF64: {
|
||||||
|
asm_->AllocateStackSpace(stack_decrement - kDoubleSize);
|
||||||
asm_->LoadF64(kScratchDoubleReg,
|
asm_->LoadF64(kScratchDoubleReg,
|
||||||
liftoff::GetStackSlot(slot.src_offset_));
|
liftoff::GetStackSlot(slot.src_offset_));
|
||||||
asm_->push(kScratchDoubleReg);
|
asm_->push(kScratchDoubleReg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kS128: {
|
case kS128: {
|
||||||
|
asm_->AllocateStackSpace(stack_decrement - kSimd128Size);
|
||||||
UseScratchRegisterScope temps(asm_);
|
UseScratchRegisterScope temps(asm_);
|
||||||
Register scratch = temps.Acquire();
|
Register scratch = temps.Acquire();
|
||||||
asm_->LoadV128(kScratchDoubleReg,
|
asm_->LoadV128(kScratchDoubleReg,
|
||||||
@ -2900,7 +2911,9 @@ void LiftoffStackSlots::Construct() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LiftoffAssembler::VarState::kRegister:
|
case LiftoffAssembler::VarState::kRegister: {
|
||||||
|
int pushed_bytes = SlotSizeInBytes(slot);
|
||||||
|
asm_->AllocateStackSpace(stack_decrement - pushed_bytes);
|
||||||
switch (src.kind()) {
|
switch (src.kind()) {
|
||||||
case kI64:
|
case kI64:
|
||||||
case kI32:
|
case kI32:
|
||||||
@ -2928,7 +2941,9 @@ void LiftoffStackSlots::Construct() {
|
|||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case LiftoffAssembler::VarState::kIntConst: {
|
case LiftoffAssembler::VarState::kIntConst: {
|
||||||
|
asm_->AllocateStackSpace(stack_decrement - kSystemPointerSize);
|
||||||
DCHECK(src.kind() == kI32 || src.kind() == kI64);
|
DCHECK(src.kind() == kI32 || src.kind() == kI64);
|
||||||
UseScratchRegisterScope temps(asm_);
|
UseScratchRegisterScope temps(asm_);
|
||||||
Register scratch = temps.Acquire();
|
Register scratch = temps.Acquire();
|
||||||
|
Loading…
Reference in New Issue
Block a user