]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve func calls, use less adds
authorJérémie Astor <fennecdjay@gmail.com>
Sat, 12 Jun 2021 17:18:49 +0000 (19:18 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sat, 12 Jun 2021 17:18:49 +0000 (19:18 +0200)
src/vm/gack.c
src/vm/vm.c

index 4ffa777edf3531c9a60df37876b82c0aa9395f40..dd49b76c5768792f35c95a5d3eeb1968bd213693 100644 (file)
@@ -49,7 +49,7 @@ ANN2(2) int gw_asprintf(MemPool mp, char **str, const char *fmt, ...) {
 ANN static void prepare_call(const VM_Shred shred, const m_uint offset) {
   shred->mem += offset + SZ_INT + sizeof(struct frame_t);
   register struct frame_t *frame = (struct frame_t*)(shred->mem - sizeof(struct frame_t));
-  frame->push = offset + SZ_INT;
+  frame->push = offset + SZ_INT + sizeof(struct frame_t);
   frame->code = shred->code;
   frame->pc   = shred->pc;
   shred->pc = 0;
index 42d674467f986535aec9f1971f02ddb34b2d94b9..ce3710bbd8428d6489bf4c859ea7a968b0c874e5 100644 (file)
@@ -44,7 +44,7 @@ ANN static inline void shred_unwind(const VM_Shred shred) {
   register struct frame_t *frame = &*(struct frame_t*)(shred->mem - sizeof(struct frame_t));
   shred->code = frame->code;
   shred->pc   = frame->pc;
-  shred->mem -= (frame->push + sizeof(struct frame_t));
+  shred->mem -= frame->push;
 }
 
 ANN static bool unwind(VM_Shred shred, const Symbol effect, const m_uint size) {
@@ -549,7 +549,7 @@ funcreturn:
 {
   register struct frame_t frame = *(struct frame_t*)(mem - sizeof(struct frame_t));
   bytecode = (code = frame.code)->bytecode;
-  mem -= (frame.push + sizeof(struct frame_t));
+  mem -= frame.push;
   PC_DISPATCH(frame.pc);
 }
 _goto:
@@ -711,8 +711,8 @@ timeadv:
   break;
 recurs:
 {
-  register const uint push = *(m_uint*)reg + code->stack_depth;
-  mem += push + sizeof(struct frame_t);
+  register const uint push = *(m_uint*)reg + code->stack_depth + sizeof(struct frame_t);
+  mem += push;
   *(struct frame_t*)(mem - sizeof(struct frame_t)) = (struct frame_t){.code=code,.pc=VAL2,.push=push};
   reg += (m_int)VAL;
   next = eFuncUsrEnd2;
@@ -722,8 +722,8 @@ setcode:
 PRAGMA_PUSH()
   a.code = *(VM_Code*)(reg - SZ_INT);
   if(!a.code->builtin) {
-    register const uint push = *(m_uint*)reg + code->stack_depth;
-    mem += push + sizeof(struct frame_t);
+    register const uint push = *(m_uint*)reg + code->stack_depth + sizeof(struct frame_t);
+    mem += push;
     *(struct frame_t*)(mem - sizeof(struct frame_t)) = (struct frame_t){.code=code,.pc=PC+VAL2,.push=push};
     next = eFuncUsrEnd;
   } else {