|
|
|
|
@ -310,11 +310,18 @@ compileInstruction instr = do
@@ -310,11 +310,18 @@ compileInstruction instr = do
|
|
|
|
|
compileInstruction' (VMFunction (FFunction name nvars)) = do |
|
|
|
|
modify' (\s -> s { ceCurrentFunction = Just name }) |
|
|
|
|
return ([ ALabel name, |
|
|
|
|
Code (A (Label "SP")) ]<> |
|
|
|
|
Code (A (Label "SP")), |
|
|
|
|
Code (C [RegA] (SReg RegM) JNone) |
|
|
|
|
] <> |
|
|
|
|
(concat . replicate nvars $ |
|
|
|
|
[ Code (C [RegM] S0 JNone), |
|
|
|
|
Code (C [RegA] (SRegPlus1 RegA) JNone) |
|
|
|
|
])) |
|
|
|
|
]) <> |
|
|
|
|
[ Code (C [RegD] (SReg RegA) JNone), |
|
|
|
|
Code (A (Label "SP")), |
|
|
|
|
Code (C [RegM] (SReg RegD) JNone) |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
compileInstruction' (VMFunction (FCall name nargs)) = do |
|
|
|
|
lab <- nextLabelId |
|
|
|
|
|