From: Bernhard Urban Date: Fri, 24 Aug 2012 17:48:14 +0000 (+0200) Subject: Revert "globalmaphack: use old school CPP" X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mate.git;a=commitdiff_plain;h=38a8a9fe4d12f701fb7631208389666bcd568fa9 Revert "globalmaphack: use old school CPP" fall back to "standard" cpp by ghc, since cpphs doesn't work with ghc-mod. This reverts commit 94985402292306da1db46b1750927ef46bdb87d3. Conflicts: Makefile --- diff --git a/Makefile b/Makefile index f05bf97..837c67c 100644 --- a/Makefile +++ b/Makefile @@ -15,10 +15,10 @@ PACKAGES_ := bytestring harpy hs-java plugins PACKAGES := $(addprefix -package ,$(PACKAGES_)) -# use `cpphs' -GHC_CPP := -cpp -pgmP cpphs -optP --cpp +GHC_CPP := -DARCH_X86 GHC_OPT = -I. -O0 -Wall -fno-warn-unused-do-bind -fwarn-tabs +# TODO: define this in cabal... (see cpu package @ hackage) # see *.gdb target. also useful for profiling (-p at call) GHC_OPT += -rtsopts # -prof -auto-all GHC_OPT += $(GHC_CPP) diff --git a/Mate/NativeMachine.hs b/Mate/NativeMachine.hs index 51e1bdf..1474741 100644 --- a/Mate/NativeMachine.hs +++ b/Mate/NativeMachine.hs @@ -7,7 +7,7 @@ module Mate.NativeMachine( NativeWord )where -#ifdef i386_HOST_ARCH +#ifdef ARCH_X86 import Mate.X86CodeGen import Mate.X86TrapHandling import Mate.NativeSizes diff --git a/Mate/NativeSizes.hs b/Mate/NativeSizes.hs index 07c4371..0ba6128 100644 --- a/Mate/NativeSizes.hs +++ b/Mate/NativeSizes.hs @@ -1,9 +1,10 @@ +{-# LANGUAGE CPP #-} module Mate.NativeSizes where import Data.Word ptrSize, longSize :: NativeWord -#ifdef i386_HOST_ARCH +#if defined(ARCH_X86) ptrSize = 4 longSize = 8 diff --git a/Mate/Types.hs b/Mate/Types.hs index 5c5428c..2f4ef6d 100644 --- a/Mate/Types.hs +++ b/Mate/Types.hs @@ -1,5 +1,4 @@ {-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE CPP #-} module Mate.Types where import Data.Int @@ -112,7 +111,6 @@ toString :: B.ByteString -> String toString bstr = decodeString $ map (chr . fromIntegral) $ B.unpack bstr -} --- better solutions for a global map hack are welcome! (typeclasses, TH, ...?) data MateCtx = MateCtx { ctxMethodMap :: MethodMap, @@ -130,32 +128,79 @@ mateCtx :: IORef MateCtx {-# NOINLINE mateCtx #-} mateCtx = unsafePerformIO $ newIORef emptyMateCtx --- TODO(bernhard): if we ever have thread support, don't forget MVars -#define SETMAP(name) set##name :: name -> IO (); \ - set##name m = do ctx <- readIORef mateCtx; \ - writeIORef mateCtx $ ctx { ctx##name = m }; -#define GETMAP(name) get##name :: IO name ; \ - get##name = do ctx <- readIORef mateCtx; \ - return $ ctx##name ctx; +setMethodMap :: MethodMap -> IO () +setMethodMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxMethodMap = m } -SETMAP(MethodMap); -GETMAP(MethodMap) +getMethodMap :: IO MethodMap +getMethodMap = do + ctx <- readIORef mateCtx + return $ ctxMethodMap ctx -SETMAP(TrapMap) -GETMAP(TrapMap) -SETMAP(ClassMap) -GETMAP(ClassMap) +setTrapMap :: TrapMap -> IO () +setTrapMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxTrapMap = m } -SETMAP(VirtualMap) -GETMAP(VirtualMap) +getTrapMap :: IO TrapMap +getTrapMap = do + ctx <- readIORef mateCtx + return $ ctxTrapMap ctx -SETMAP(StringMap) -GETMAP(StringMap) -SETMAP(InterfaceMap) -GETMAP(InterfaceMap) +setClassMap :: ClassMap -> IO () +setClassMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxClassMap = m } -SETMAP(InterfaceMethodMap) -GETMAP(InterfaceMethodMap) +getClassMap :: IO ClassMap +getClassMap = do + ctx <- readIORef mateCtx + return $ ctxClassMap ctx + + +setVirtualMap :: VirtualMap -> IO () +setVirtualMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxVirtualMap = m } + +getVirtualMap :: IO VirtualMap +getVirtualMap = do + ctx <- readIORef mateCtx + return $ ctxVirtualMap ctx + + +setStringMap :: StringMap -> IO () +setStringMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxStringMap = m } + +getStringMap :: IO StringMap +getStringMap = do + ctx <- readIORef mateCtx + return $ ctxStringMap ctx + + +setInterfaceMap :: InterfaceMap -> IO () +setInterfaceMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxInterfaceMap = m } + +getInterfaceMap :: IO InterfaceMap +getInterfaceMap = do + ctx <- readIORef mateCtx + return $ ctxInterfaceMap ctx + + +setInterfaceMethodMap :: InterfaceMethodMap -> IO () +setInterfaceMethodMap m = do + ctx <- readIORef mateCtx + writeIORef mateCtx $ ctx { ctxInterfaceMethodMap = m } + +getInterfaceMethodMap :: IO InterfaceMethodMap +getInterfaceMethodMap = do + ctx <- readIORef mateCtx + return $ ctxInterfaceMethodMap ctx diff --git a/Mate/X86CodeGen.hs b/Mate/X86CodeGen.hs index 40b8262..2f0f6e4 100644 --- a/Mate/X86CodeGen.hs +++ b/Mate/X86CodeGen.hs @@ -324,6 +324,7 @@ emitFromBB cls method = do emit IRETURN = do pop eax; emit RETURN emit invalid = error $ "insn not implemented yet: " ++ show invalid + -- TODO(bernhard): delay to runtime (find counter example!) emitFieldOffset :: Word16 -> CodeGen e s Int32 emitFieldOffset x = do pop eax -- this pointer