-t_01 :: IO ()
-t_01 = do
- (entry, _) <- testCase "./tests/Fib.class" "fib"
- let int_entry = ((fromIntegral $ ptrToIntPtr entry) :: Word32)
- let mmap = M.insert ("fib" :: String) int_entry M.empty
- mapM_ (\(x,y) -> printf "%s at 0x%08x\n" x y) $ M.toList mmap
+-- t_01 :: IO ()
+-- t_01 = do
+-- (entry, _) <- testCase "./tests/Fib.class" "fib"
+-- let int_entry = ((fromIntegral $ ptrToIntPtr entry) :: Word32)
+-- let mmap = M.insert ("fib" :: String) int_entry M.empty
+-- mapM_ (\(x,y) -> printf "%s at 0x%08x\n" x y) $ M.toList mmap
+-- mmap2ptr mmap >>= set_mmap
+-- demo_mmap -- access Data.Map from C
+
+initMethodPool :: IO ()
+initMethodPool = mmap2ptr M.empty >>= set_mmap
+
+compileBB :: MapBB -> B.ByteString -> IO (Ptr Word8)
+compileBB hmap name = do
+ mmap <- get_mmap >>= ptr2mmap
+ let ebb = emitFromBB hmap
+ (_, Right ((entry, bbstarts, end), disasm)) <- runCodeGen ebb () ()
+ let w32_entry = ((fromIntegral $ ptrToIntPtr entry) :: Word32)
+ let mmap' = M.insert name w32_entry mmap
+ mmap2ptr mmap' >>= set_mmap
+ printf "disasm:\n"
+ mapM_ (putStrLn . showAtt) disasm
+ return entry
+
+foreign import ccall "dynamic"
+ code_void :: FunPtr (IO ()) -> (IO ())
+
+executeFuncPtr :: Ptr Word8 -> IO ()
+executeFuncPtr entry = code_void $ ((castPtrToFunPtr entry) :: FunPtr (IO ()))
+
+mmap2ptr :: MMap -> IO (Ptr ())
+mmap2ptr mmap = do