let calls' = calls `M.union` M.fromList (catMaybes cs)
case successor bb of
Return -> return (calls', bbstarts')
- FallThrough t -> efBB (t, hmap M.! t) calls' bbstarts' lmap
+ FallThrough t -> do
+ -- TODO(bernhard): le dirty hax. see java/lang/Integer.toString(int, int)
+ jmp (getLabel t lmap)
+ efBB (t, hmap M.! t) calls' bbstarts' lmap
OneTarget t -> efBB (t, hmap M.! t) calls' bbstarts' lmap
TwoTarget t1 t2 -> do
(calls'', bbstarts'') <- efBB (t1, hmap M.! t1) calls' bbstarts' lmap
emit (LDC2 x) = do
value <- case constsPool cls M.! x of
(CString s) -> liftIO $ getUniqueStringAddr s
+ (CInteger i) -> liftIO $ return i
e -> error $ "LDCI... missing impl.: " ++ show e
push value
emit (GETFIELD x) = do
emit IDIV = do pop ebx; pop eax; xor edx edx; div ebx; push eax
emit IREM = do pop ebx; pop eax; xor edx edx; div ebx; push edx
emit IXOR = do pop ebx; pop eax; xor eax ebx; push eax
+ emit IUSHR = do pop ecx; pop eax; sar eax cl; push eax
emit INEG = do pop eax; neg eax; push eax
emit (IINC x imm) =
add (Disp (cArgs x), ebp) (s8_w32 imm)