Browse Source

vmcompiler: fix FFunction compile

master
Denis Tereshkin 4 years ago
parent
commit
96ce89d04c
  1. 11
      src/Nand2Tetris/VM.hs

11
src/Nand2Tetris/VM.hs

@ -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

Loading…
Cancel
Save