Commit 4173ae86 authored by Austin Seipp's avatar Austin Seipp
Browse files

nativeGen: detabify/dewhitespace Size


Signed-off-by: default avatarAustin Seipp <austin@well-typed.com>
parent b5b1a2db
{-# OPTIONS_GHC -fno-warn-tabs #-}
-- The above warning supression flag is a temporary kludge.
-- While working on this module you are encouraged to remove it and
-- detab the module (please do the detabbing in a separate patch). See
-- http://ghc.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#TabsvsSpaces
-- for details
-- | Sizes on this architecture
-- A Size is a combination of width and class
--
-- TODO: Rename this to "Format" instead of "Size" to reflect
-- the fact that it represents floating point vs integer.
-- A Size is a combination of width and class
--
-- TODO: Rename this to "Format" instead of "Size" to reflect
-- the fact that it represents floating point vs integer.
--
-- TODO: Signed vs unsigned?
-- TODO: Signed vs unsigned?
--
-- TODO: This module is currenly shared by all architectures because
-- NCGMonad need to know about it to make a VReg. It would be better
-- to have architecture specific formats, and do the overloading
-- properly. eg SPARC doesn't care about FF80.
-- TODO: This module is currenly shared by all architectures because
-- NCGMonad need to know about it to make a VReg. It would be better
-- to have architecture specific formats, and do the overloading
-- properly. eg SPARC doesn't care about FF80.
--
module Size (
Size(..),
......@@ -37,76 +30,76 @@ import Outputable
-- significance, here in the native code generator. You can change it
-- without global consequences.
--
-- A major use is as an opcode qualifier; thus the opcode
-- mov.l a b
-- might be encoded
-- MOV II32 a b
-- A major use is as an opcode qualifier; thus the opcode
-- mov.l a b
-- might be encoded
-- MOV II32 a b
-- where the Size field encodes the ".l" part.
-- ToDo: it's not clear to me that we need separate signed-vs-unsigned sizes
-- here. I've removed them from the x86 version, we'll see what happens --SDM
-- here. I've removed them from the x86 version, we'll see what happens --SDM
-- ToDo: quite a few occurrences of Size could usefully be replaced by Width
data Size
= II8
| II16
| II32
| II64
| FF32
| FF64
| FF80
deriving (Show, Eq)
= II8
| II16
| II32
| II64
| FF32
| FF64
| FF80
deriving (Show, Eq)
-- | Get the integer size of this width.
intSize :: Width -> Size
intSize width
= case width of
W8 -> II8
W16 -> II16
W32 -> II32
W64 -> II64
other -> pprPanic "Size.intSize" (ppr other)
W8 -> II8
W16 -> II16
W32 -> II32
W64 -> II64
other -> pprPanic "Size.intSize" (ppr other)
-- | Get the float size of this width.
floatSize :: Width -> Size
floatSize width
= case width of
W32 -> FF32
W64 -> FF64
other -> pprPanic "Size.floatSize" (ppr other)
W32 -> FF32
W64 -> FF64
other -> pprPanic "Size.floatSize" (ppr other)
-- | Check if a size represents a floating point value.
isFloatSize :: Size -> Bool
isFloatSize size
= case size of
FF32 -> True
FF64 -> True
FF80 -> True
_ -> False
FF32 -> True
FF64 -> True
FF80 -> True
_ -> False
-- | Convert a Cmm type to a Size.
cmmTypeSize :: CmmType -> Size
cmmTypeSize ty
| isFloatType ty = floatSize (typeWidth ty)
| otherwise = intSize (typeWidth ty)
cmmTypeSize ty
| isFloatType ty = floatSize (typeWidth ty)
| otherwise = intSize (typeWidth ty)
-- | Get the Width of a Size.
sizeToWidth :: Size -> Width
sizeToWidth size
= case size of
II8 -> W8
II16 -> W16
II32 -> W32
II64 -> W64
FF32 -> W32
FF64 -> W64
FF80 -> W80
II8 -> W8
II16 -> W16
II32 -> W32
II64 -> W64
FF32 -> W32
FF64 -> W64
FF80 -> W80
sizeInBytes :: Size -> Int
sizeInBytes = widthInBytes . sizeToWidth
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment