From 9c3a49350ad3ce05ffc355d7260041d18afcffde Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Sun, 19 Dec 2021 11:11:27 +0700 Subject: [PATCH] VM: fix pop instruction compilation --- src/Nand2Tetris/VM.hs | 8 ++++++-- test/Test/Nand2Tetris/VM.hs | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Nand2Tetris/VM.hs b/src/Nand2Tetris/VM.hs index 1b69363..c298467 100644 --- a/src/Nand2Tetris/VM.hs +++ b/src/Nand2Tetris/VM.hs @@ -311,11 +311,15 @@ compileInstruction instr = do Code (A (Imm offset)), Code (C [RegD] (SReg RegA) JNone), Code (A (Label regName)), - Code (C [RegA] SDPlusM JNone), - Code (C [RegD] (SReg RegM) JNone), + Code (C [RegD] SDPlusM JNone), + Code (A (Label "R15")), + Code (C [RegM] (SReg RegD) JNone), Code (A (Label "SP")), Code (C [RegA] (SReg RegM) JNone), + Code (C [RegD] (SReg RegM) JNone), + Code (A (Label "R15")), + Code (C [RegA] (SReg RegM) JNone), Code (C [RegM] (SReg RegD) JNone) ] popLabelValue label = [ diff --git a/test/Test/Nand2Tetris/VM.hs b/test/Test/Nand2Tetris/VM.hs index 86adcbb..ec11b83 100644 --- a/test/Test/Nand2Tetris/VM.hs +++ b/test/Test/Nand2Tetris/VM.hs @@ -227,11 +227,15 @@ compilePopInstructionSpec = do Code (A (Imm value)), Code (C [RegD] (SReg RegA) JNone), Code (A (Label reg)), - Code (C [RegA] SDPlusM JNone), - Code (C [RegD] (SReg RegM) JNone), + Code (C [RegD] SDPlusM JNone), + Code (A (Label "R15")), + Code (C [RegM] (SReg RegD) JNone), Code (A (Label "SP")), Code (C [RegA] (SReg RegM) JNone), + Code (C [RegD] (SReg RegM) JNone), + Code (A (Label "R15")), + Code (C [RegA] (SReg RegM) JNone), Code (C [RegM] (SReg RegD) JNone) ]