Commit b4eb4418 authored by Andreas Haas's avatar Andreas Haas Committed by Commit Bot

[wasm][liftoff] Push stack parameters of builtins in reversed order

This CL fixes a bug in Liftoff where stack parameters for builtins were
pushed in the reversed order.

CC=bbudge@chromium.org
R=clemensb@chromium.org

Bug: v8:10281
Change-Id: I51ab4f19b0dc3835140ca3c05c98cc82dfe9cac4
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2196341Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67779}
parent 335a141b
......@@ -724,6 +724,8 @@ void LiftoffAssembler::PrepareBuiltinCall(
PrepareStackTransfers(sig, call_descriptor, params.begin(), &stack_slots,
&stack_transfers, &param_regs);
// Create all the slots.
// Builtin stack parameters are pushed in reversed order.
stack_slots.Reverse();
stack_slots.Construct();
// Execute the stack transfers before filling the instance register.
stack_transfers.Execute();
......
......@@ -1221,19 +1221,19 @@ class LiftoffStackSlots {
}
void Add(const LiftoffAssembler::VarState& src) { slots_.emplace_back(src); }
void Reverse() { std::reverse(slots_.begin(), slots_.end()); }
inline void Construct();
private:
struct Slot {
// Allow move construction.
Slot(Slot&&) V8_NOEXCEPT = default;
Slot(const LiftoffAssembler::VarState& src, uint32_t src_offset,
RegPairHalf half)
: src_(src), src_offset_(src_offset), half_(half) {}
explicit Slot(const LiftoffAssembler::VarState& src)
: src_(src), half_(kLowWord) {}
const LiftoffAssembler::VarState src_;
LiftoffAssembler::VarState src_;
uint32_t src_offset_ = 0;
RegPairHalf half_;
};
......
......@@ -705,21 +705,21 @@ void TestTableCopyCalls(ExecutionTier execution_tier, int table_dst,
}
}
WASM_COMPILED_EXEC_TEST(TableCopyCallsFrom0To0) {
WASM_COMPILED_EXEC_TEST(TableCopyCallsTo0From0) {
TestTableCopyCalls(execution_tier, 0, 0);
}
WASM_COMPILED_EXEC_TEST(TableCopyCallsFrom3To0) {
WASM_COMPILED_EXEC_TEST(TableCopyCallsTo3From0) {
EXPERIMENTAL_FLAG_SCOPE(anyref);
TestTableCopyCalls(execution_tier, 3, 0);
}
WASM_COMPILED_EXEC_TEST(TableCopyCallsFrom5To9) {
WASM_COMPILED_EXEC_TEST(TableCopyCallsTo5From9) {
EXPERIMENTAL_FLAG_SCOPE(anyref);
TestTableCopyCalls(execution_tier, 5, 9);
}
WASM_COMPILED_EXEC_TEST(TableCopyCallsFrom6To6) {
WASM_COMPILED_EXEC_TEST(TableCopyCallsTo6From6) {
EXPERIMENTAL_FLAG_SCOPE(anyref);
TestTableCopyCalls(execution_tier, 6, 6);
}
......
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