build conservative stack frame on x86-64
Should be a behavior no-op, and effective perf no-op.
Change-Id: Iaf755c6938ae5060f11b1ccb83a9273fa53896b2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/282176
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
diff --git a/src/core/SkVM.cpp b/src/core/SkVM.cpp
index 28ea9c9..b644ef8 100644
--- a/src/core/SkVM.cpp
+++ b/src/core/SkVM.cpp
@@ -3421,7 +3421,8 @@
auto add = [&](A::GP64 gp, int imm) { a->add(gp, imm); };
auto sub = [&](A::GP64 gp, int imm) { a->sub(gp, imm); };
- auto exit = [&]{ a->vzeroupper(); a->ret(); };
+ auto enter = [&]{ a->sub(A::rsp, instructions.size()*K*4); };
+ auto exit = [&]{ a->add(A::rsp, instructions.size()*K*4); a->vzeroupper(); a->ret(); };
#elif defined(__aarch64__)
const int K = 4;
auto jump_if_less = [&](A::Label* l) { a->blt(l); };
@@ -3430,13 +3431,15 @@
auto add = [&](A::X gp, int imm) { a->add(gp, gp, imm); };
auto sub = [&](A::X gp, int imm) { a->sub(gp, gp, imm); };
- auto exit = [&]{ a->ret(A::x30); };
+ auto enter = [&]{};
+ auto exit = [&]{ a->ret(A::x30); };
#endif
A::Label body,
tail,
done;
+ enter();
for (Val id = 0; id < (Val)instructions.size(); id++) {
if (hoisted(id) && !emit(id, /*scalar=*/false)) {
return false;