calc-0.1: Asm.hs
module Asm where
import Harpy.X86CodeGen
import Harpy.X86Assembler
import Foreign
-- epilogue/prologue stuff
gfunc x = gprologue >> x >> gepilogue
gprologue = do
push ebp
mov ebp esp
gepilogue = do
pop eax
mov esp ebp
pop ebp
ret
-- actual operations to be done
-- because all of these end up
-- pushing the result to the stack
-- at the very end, our gepilogue
-- will pop whatever's there and mov
-- into eax
gadd = do
pop ebx
pop eax
add eax ebx
push eax
gsub = do
pop ebx
pop eax
sub eax ebx
push eax
gmul = do
pop ebx
pop eax
imul InPlace eax ebx
push eax
gdivmod = do
pop ebx
pop eax
mov edx eax
sar edx (31 :: Word8)
idiv ebx
gdiv = do
gdivmod
push eax
gconst n = do
push (fromIntegral n :: Word32)