[project @ 2000-01-24 18:22:07 by sewardj]
[ghc-hetmet.git] / ghc / compiler / nativeGen / StixInfo.lhs
index b72675f..61bd8ec 100644 (file)
@@ -25,6 +25,10 @@ import BitSet                ( intBS )
 
 import Bits
 import Word
+
+#if __GLASGOW_HASKELL__ >= 404
+import GlaExts         ( fromInt )
+#endif
 \end{code}
 
 Generating code for info tables (arrays of data).
@@ -38,10 +42,11 @@ genCodeInfoTable (CClosureInfoAndCode cl_info _ _ cl_descr)
   = returnUs (\xs -> StData PtrRep table : StLabel info_lbl : xs)
 
     where
-       info_lbl = infoTableLabelFromCI cl_info
+       info_lbl  = infoTableLabelFromCI cl_info
+        needs_srt = infoTblNeedsSRT cl_info
 
-       table | infoTblNeedsSRT cl_info = srt_label : rest_of_table
-             | otherwise               = rest_of_table
+       table | needs_srt = srt_label : rest_of_table
+             | otherwise = rest_of_table
 
        rest_of_table = 
                [
@@ -54,22 +59,22 @@ genCodeInfoTable (CClosureInfoAndCode cl_info _ _ cl_descr)
        -- ToDo: do this using .byte and .word directives.
        type_info :: Word32
 #ifdef WORDS_BIGENDIAN
-        type_info = (fromInt flags `shiftL` 24) .|.
-                   (fromInt closure_type `shiftL` 16) .|.
+        type_info = (fromInt closure_type `shiftL` 16) .|.
                    (fromInt srt_len)
 #else 
-        type_info = (fromInt flags) .|.
-                   (fromInt closure_type `shiftL` 8) .|.
+        type_info = (fromInt closure_type) .|.
                    (fromInt srt_len `shiftL` 16)
 #endif      
        srt = getSRTInfo cl_info             
 
-       (srt_label,srt_len) = 
-            case srt of
-               (lbl, NoSRT) -> (StInt 0, 0)
+       (srt_label,srt_len)
+           | needs_srt
+          = case srt of
                (lbl, SRT off len) -> 
                        (StIndex DataPtrRep (StCLbl lbl) 
                                (StInt (toInteger off)), len)
+           | otherwise
+           = (StInt 0, 0)
 
        layout_info :: Word32
 #ifdef WORDS_BIGENDIAN
@@ -85,7 +90,6 @@ genCodeInfoTable (CClosureInfoAndCode cl_info _ _ cl_descr)
 
        closure_type = getSMRepClosureTypeInt (closureSMRep cl_info)
 
-       flags = 0 -- for now
 
 
 genBitmapInfoTable
@@ -117,12 +121,10 @@ genBitmapInfoTable liveness srt closure_type include_srt
 
        type_info :: Word32
 #ifdef WORDS_BIGENDIAN
-        type_info = (fromInt flags `shiftL` 24) .|.
-                   (fromInt closure_type `shiftL` 16) .|.
+        type_info = (fromInt closure_type `shiftL` 16) .|.
                    (fromInt srt_len)
 #else 
-        type_info = (fromInt flags) .|.
-                   (fromInt closure_type `shiftL` 8) .|.
+        type_info = (fromInt closure_type) .|.
                    (fromInt srt_len `shiftL` 16)
 #endif      
 
@@ -132,6 +134,4 @@ genBitmapInfoTable liveness srt closure_type include_srt
                (lbl, SRT off len) -> 
                        (StIndex DataPtrRep (StCLbl lbl) 
                                (StInt (toInteger off)), len)
-
-       flags = 0 -- for now
 \end{code}