Browse Source

VM: fix pop instruction compilation

master
Denis Tereshkin 4 years ago
parent
commit
9c3a49350a
  1. 8
      src/Nand2Tetris/VM.hs
  2. 8
      test/Test/Nand2Tetris/VM.hs

8
src/Nand2Tetris/VM.hs

@ -311,11 +311,15 @@ compileInstruction instr = do
Code (A (Imm offset)), Code (A (Imm offset)),
Code (C [RegD] (SReg RegA) JNone), Code (C [RegD] (SReg RegA) JNone),
Code (A (Label regName)), Code (A (Label regName)),
Code (C [RegA] SDPlusM JNone), Code (C [RegD] SDPlusM JNone),
Code (C [RegD] (SReg RegM) JNone), Code (A (Label "R15")),
Code (C [RegM] (SReg RegD) JNone),
Code (A (Label "SP")), Code (A (Label "SP")),
Code (C [RegA] (SReg RegM) JNone), 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) Code (C [RegM] (SReg RegD) JNone)
] ]
popLabelValue label = [ popLabelValue label = [

8
test/Test/Nand2Tetris/VM.hs

@ -227,11 +227,15 @@ compilePopInstructionSpec = do
Code (A (Imm value)), Code (A (Imm value)),
Code (C [RegD] (SReg RegA) JNone), Code (C [RegD] (SReg RegA) JNone),
Code (A (Label reg)), Code (A (Label reg)),
Code (C [RegA] SDPlusM JNone), Code (C [RegD] SDPlusM JNone),
Code (C [RegD] (SReg RegM) JNone), Code (A (Label "R15")),
Code (C [RegM] (SReg RegD) JNone),
Code (A (Label "SP")), Code (A (Label "SP")),
Code (C [RegA] (SReg RegM) JNone), 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) Code (C [RegM] (SReg RegD) JNone)
] ]

Loading…
Cancel
Save