projects
/
mate.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
classloading: load classfile on demand
[mate.git]
/
Mate
/
X86CodeGen.hs
diff --git
a/Mate/X86CodeGen.hs
b/Mate/X86CodeGen.hs
index d2d62c27944bdf86b520058a42d7b6a4813df2e7..d2c9caf19d69cce0c19928b8ce542b9af8a4d90f 100644
(file)
--- a/
Mate/X86CodeGen.hs
+++ b/
Mate/X86CodeGen.hs
@@
-119,11
+119,6
@@
type BBStarts = M.Map BlockID Int
type CompileInfo = (EntryPoint, BBStarts, Int, CMap)
type CompileInfo = (EntryPoint, BBStarts, Int, CMap)
--- B.ByteString: encoded name: <Class>.<methodname><signature>
--- Class Resolved: classfile
--- Word16: index of invoke-instruction
-type MethodInfo = (B.ByteString, Class Resolved, Word16)
-
-- Word32 = point of method call in generated code
-- MethodInfo = relevant information about callee
type CMap = M.Map Word32 MethodInfo
-- Word32 = point of method call in generated code
-- MethodInfo = relevant information about callee
type CMap = M.Map Word32 MethodInfo
@@
-176,7
+171,7
@@
emitFromBB cls hmap = do
let l = buildMethodID cls cpidx
calladdr <- getCodeOffset
let w32_calladdr = w32_ep + (fromIntegral calladdr) :: Word32
let l = buildMethodID cls cpidx
calladdr <- getCodeOffset
let w32_calladdr = w32_ep + (fromIntegral calladdr) :: Word32
- newNamedLabel (
toString
l) >>= defineLabel
+ newNamedLabel (
show
l) >>= defineLabel
-- causes SIGILL. in the signal handler we patch it to the acutal call.
-- place a nop at the end, therefore the disasm doesn't screw up
emit32 (0xffff9090 :: Word32) >> emit8 (0x90 :: Word8)
-- causes SIGILL. in the signal handler we patch it to the acutal call.
-- place a nop at the end, therefore the disasm doesn't screw up
emit32 (0xffff9090 :: Word32) >> emit8 (0x90 :: Word8)
@@
-185,7
+180,7
@@
emitFromBB cls hmap = do
when (argcnt > 0) (add esp argcnt)
-- push result on stack if method has a return value
when (methodHaveReturnValue cls cpidx) (push eax)
when (argcnt > 0) (add esp argcnt)
-- push result on stack if method has a return value
when (methodHaveReturnValue cls cpidx) (push eax)
- return $ Just $ (w32_calladdr,
(l, cls, cpidx)
)
+ return $ Just $ (w32_calladdr,
l
)
emit' insn = emit insn >> return Nothing
emit :: J.Instruction -> CodeGen e s ()
emit' insn = emit insn >> return Nothing
emit :: J.Instruction -> CodeGen e s ()