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;