[project @ 2005-09-24 04:22:22 by wolfgang]
authorwolfgang <unknown>
Sat, 24 Sep 2005 04:22:22 +0000 (04:22 +0000)
committerwolfgang <unknown>
Sat, 24 Sep 2005 04:22:22 +0000 (04:22 +0000)
x86 & PIC: make floating point constants on x86 PIC-aware

ghc/compiler/nativeGen/MachCodeGen.hs

index 8560d4a..50d886c 100644 (file)
@@ -735,12 +735,14 @@ getRegister leaf
 
 getRegister (CmmLit (CmmFloat f F32)) = do
     lbl <- getNewLabelNat
-    let code dst = toOL [
+    dynRef <- cmmMakeDynamicReference addImportNat False lbl
+    Amode addr addr_code <- getAmode dynRef
+    let code dst =
            LDATA ReadOnlyData
                        [CmmDataLabel lbl,
-                        CmmStaticLit (CmmFloat f F32)],
-           GLD F32 (ImmAddr (ImmCLbl lbl) 0) dst
-           ]
+                        CmmStaticLit (CmmFloat f F32)]
+           `consOL` (addr_code `snocOL`
+           GLD F32 addr dst)
     -- in
     return (Any F32 code)
 
@@ -756,12 +758,14 @@ getRegister (CmmLit (CmmFloat d F64))
 
   | otherwise = do
     lbl <- getNewLabelNat
-    let code dst = toOL [
+    dynRef <- cmmMakeDynamicReference addImportNat False lbl
+    Amode addr addr_code <- getAmode dynRef
+    let code dst =
            LDATA ReadOnlyData
                        [CmmDataLabel lbl,
-                        CmmStaticLit (CmmFloat d F64)],
-           GLD F64 (ImmAddr (ImmCLbl lbl) 0) dst
-           ]
+                        CmmStaticLit (CmmFloat d F64)]
+           `consOL` (addr_code `snocOL`
+           GLD F64 addr dst)
     -- in
     return (Any F64 code)