From 273815dfea6d700af367dee707753a86e693cf10 Mon Sep 17 00:00:00 2001 From: coderzh Date: Mon, 16 Nov 2020 15:29:41 +0800 Subject: [PATCH] fix PreserveArgsAndLocals bug (#175) --- source/m3_compile.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/m3_compile.c b/source/m3_compile.c index 4fe6323..48615d0 100644 --- a/source/m3_compile.c +++ b/source/m3_compile.c @@ -1532,17 +1532,18 @@ M3Result PreserveArgsAndLocals (IM3Compilation o) for (u32 i = 0; i < numArgsAndLocals; ++i) { + u16 localSlot = GetSlotForStackIndex (o, i); u16 preservedSlotIndex; -_ (FindReferencedLocalWithinCurrentBlock (o, & preservedSlotIndex, i)); +_ (FindReferencedLocalWithinCurrentBlock (o, & preservedSlotIndex, localSlot)); - if (preservedSlotIndex != i) + if (preservedSlotIndex != localSlot) { u8 type = GetStackBottomType (o, i); IM3Operation op = Is64BitType (type) ? op_CopySlot_64 : op_CopySlot_32; EmitOp (o, op); EmitSlotOffset (o, preservedSlotIndex); - EmitSlotOffset (o, i); + EmitSlotOffset (o, localSlot); } } }