X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=Mate%2FX86CodeGen.hs;h=8ac7e7dc79d8b86e1097bd2b94d1d02d06cd89a2;hb=b4cb8e6b7b66e82580b0637ec5a9d9b7531121b4;hp=7d17a9d7314d0f18929f124fdca250909381f9c7;hpb=34939ca19d5f608efb04dcb2cdd97dd3f922d4a6;p=mate.git diff --git a/Mate/X86CodeGen.hs b/Mate/X86CodeGen.hs index 7d17a9d..8ac7e7d 100644 --- a/Mate/X86CodeGen.hs +++ b/Mate/X86CodeGen.hs @@ -63,7 +63,7 @@ emitFromBB cls method = do hmap = rawMapBB method getLabel :: BlockID -> [(BlockID, Label)] -> Label - getLabel _ [] = error "label not found!" + getLabel bid [] = error $ "label " ++ show bid ++ " not found" getLabel i ((x,l):xs) = if i==x then l else getLabel i xs efBB :: (BlockID, BasicBlock) -> TrapMap -> BBStarts -> [(BlockID, Label)] -> CodeGen e s (TrapMap, BBStarts) @@ -99,10 +99,9 @@ emitFromBB cls method = do getCurrentOffset :: CodeGen e s Word32 getCurrentOffset = do - ep <- getEntryPoint - let w32_ep = (fromIntegral $ ptrToIntPtr ep) :: Word32 - offset <- getCodeOffset - return $ w32_ep + fromIntegral offset + ep <- (fromIntegral . ptrToIntPtr) `liftM` getEntryPoint + offset <- fromIntegral `liftM` getCodeOffset + return $ ep + offset emitInvoke :: Word16 -> Bool -> CodeGen e s (Maybe (Word32, TrapCause)) emitInvoke cpidx hasThis = do