diff --git a/src/compiler/GF/Compile/GenerateBC.hs b/src/compiler/GF/Compile/GenerateBC.hs index b749a40e1..3d8a7ef3a 100644 --- a/src/compiler/GF/Compile/GenerateBC.hs +++ b/src/compiler/GF/Compile/GenerateBC.hs @@ -68,11 +68,11 @@ compileEquations gr arity st (i:is) eqs fl bs = whilePP eqs Map.empty (EFloat d) -> CASE_LIT (LFlt d) compileBranch0 fl bs ((t,n),eqs) = - let (bs1,instrs) = compileEquations gr arity (st+n) (push_is st n is) eqs fl bs + let (bs1,instrs) = compileEquations gr arity (st+n) (push_is (st+n-1) n is) eqs fl bs in (bs1, case_instr t n (length bs1) : instrs) compileBranch l bs ((t,n),eqs) = - let (bs1,instrs) = compileEquations gr arity (st+n) (push_is st n is) eqs fl ((case_instr t n (length bs1) : instrs) : bs) + let (bs1,instrs) = compileEquations gr arity (st+n) (push_is (st+n-1) n is) eqs fl ((case_instr t n (length bs1) : instrs) : bs) in bs1 mkFail st1 Nothing = FAIL diff --git a/src/runtime/c/pgf/jit.c b/src/runtime/c/pgf/jit.c index ab8eae1c6..c97113b5a 100644 --- a/src/runtime/c/pgf/jit.c +++ b/src/runtime/c/pgf/jit.c @@ -738,8 +738,8 @@ pgf_jit_function(PgfReader* rdr, PgfAbstr* abstr, call_patch.ref = jump-6; gu_buf_push(rdr->jit_state->call_patches, PgfCallPatch, call_patch); - for (int i = 0; i < n; i++) { - jit_ldxi_p(JIT_R0, JIT_VHEAP, sizeof(PgfValue)+sizeof(PgfClosure*)*i); + for (int i = n; i > 0; i--) { + jit_ldxi_p(JIT_R0, JIT_VHEAP, sizeof(PgfValue)+sizeof(PgfClosure*)*(i-1)); jit_pushr_p(JIT_R0); } break;