X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fghci%2FByteCodeAsm.lhs;h=5067aea2e07271a9353a278c58714de9366df201;hb=0b52ff431d933e3410221d8482de057b6e9112de;hp=f0678402ec8e019b5cae64228002e2954f512080;hpb=69164b870a57e9f7bd6f4eb3d257c8c3e80fcb0f;p=ghc-hetmet.git diff --git a/ghc/compiler/ghci/ByteCodeAsm.lhs b/ghc/compiler/ghci/ByteCodeAsm.lhs index f067840..5067aea 100644 --- a/ghc/compiler/ghci/ByteCodeAsm.lhs +++ b/ghc/compiler/ghci/ByteCodeAsm.lhs @@ -26,23 +26,23 @@ import FiniteMap ( addToFM, lookupFM, emptyFM ) import Literal ( Literal(..) ) import TyCon ( TyCon ) import PrimOp ( PrimOp ) -import PrimRep ( PrimRep(..), isFollowableRep, is64BitRep ) import Constants ( wORD_SIZE ) -import FastString ( FastString(..), unpackFS ) -import SMRep ( StgWord ) +import FastString ( FastString(..) ) +import SMRep ( CgRep(..), StgWord ) import FiniteMap import Outputable -import Control.Monad ( foldM, zipWithM ) -import Control.Monad.ST ( ST, runST ) +import Control.Monad ( foldM ) +import Control.Monad.ST ( runST ) import GHC.Word ( Word(..) ) import Data.Array.MArray import Data.Array.Unboxed ( listArray ) -import Data.Array.Base ( STUArray, UArray(..), unsafeWrite ) +import Data.Array.Base ( UArray(..) ) import Data.Array.ST ( castSTUArray ) import Foreign ( Word16, free ) import Data.Int ( Int64 ) +import Data.Char ( ord ) import GHC.Base ( ByteArray# ) import GHC.IOBase ( IO(..) ) @@ -249,7 +249,6 @@ mkBits findLabel st proto_insns PUSH_APPLY_PPPP -> do instr1 st bci_PUSH_APPLY_PPPP PUSH_APPLY_PPPPP -> do instr1 st bci_PUSH_APPLY_PPPPP PUSH_APPLY_PPPPPP -> do instr1 st bci_PUSH_APPLY_PPPPPP - PUSH_APPLY_PPPPPPP -> do instr1 st bci_PUSH_APPLY_PPPPPPP SLIDE n by -> instr3 st bci_SLIDE n by ALLOC_AP n -> instr2 st bci_ALLOC_AP n @@ -349,33 +348,25 @@ mkBits findLabel st proto_insns literal st (MachInt j) = int st (fromIntegral j) literal st (MachFloat r) = float st (fromRational r) literal st (MachDouble r) = double st (fromRational r) - literal st (MachChar c) = int st c + literal st (MachChar c) = int st (ord c) literal st (MachInt64 ii) = int64 st (fromIntegral ii) literal st (MachWord64 ii) = int64 st (fromIntegral ii) literal st other = pprPanic "ByteCodeLink.literal" (ppr other) -push_alts WordRep = bci_PUSH_ALTS_N -push_alts IntRep = bci_PUSH_ALTS_N -push_alts AddrRep = bci_PUSH_ALTS_N -push_alts CharRep = bci_PUSH_ALTS_N -push_alts FloatRep = bci_PUSH_ALTS_F -push_alts DoubleRep = bci_PUSH_ALTS_D -push_alts VoidRep = bci_PUSH_ALTS_V -push_alts pk - | is64BitRep pk = bci_PUSH_ALTS_L - | isFollowableRep pk = bci_PUSH_ALTS_P - -return_ubx WordRep = bci_RETURN_N -return_ubx IntRep = bci_RETURN_N -return_ubx AddrRep = bci_RETURN_N -return_ubx CharRep = bci_RETURN_N -return_ubx FloatRep = bci_RETURN_F -return_ubx DoubleRep = bci_RETURN_D -return_ubx VoidRep = bci_RETURN_V -return_ubx pk - | is64BitRep pk = bci_RETURN_L - | isFollowableRep pk = bci_RETURN_P +push_alts NonPtrArg = bci_PUSH_ALTS_N +push_alts FloatArg = bci_PUSH_ALTS_F +push_alts DoubleArg = bci_PUSH_ALTS_D +push_alts VoidArg = bci_PUSH_ALTS_V +push_alts LongArg = bci_PUSH_ALTS_L +push_alts PtrArg = bci_PUSH_ALTS_P + +return_ubx NonPtrArg = bci_RETURN_N +return_ubx FloatArg = bci_RETURN_F +return_ubx DoubleArg = bci_RETURN_D +return_ubx VoidArg = bci_RETURN_V +return_ubx LongArg = bci_RETURN_L +return_ubx PtrArg = bci_RETURN_P -- The size in 16-bit entities of an instruction. @@ -403,7 +394,6 @@ instrSize16s instr PUSH_APPLY_PPPP{} -> 1 PUSH_APPLY_PPPPP{} -> 1 PUSH_APPLY_PPPPPP{} -> 1 - PUSH_APPLY_PPPPPPP{} -> 1 SLIDE{} -> 3 ALLOC_AP{} -> 2 ALLOC_PAP{} -> 3