Fix internal compiler panic for unregistered arches

Signed-off-by: David Abdurachmanov <david.abdurachmanov@gmail.com>
This commit is contained in:
David Abdurachmanov 2019-02-24 18:48:36 +01:00
parent eceb72c24e
commit 33d0faf86d
Signed by: davidlt
GPG Key ID: 7108702C938B13C1
2 changed files with 55 additions and 1 deletions

View File

@ -0,0 +1,44 @@
diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs
index 76e4d4c..ab94f2c 100644
--- a/compiler/cmm/PprC.hs
+++ b/compiler/cmm/PprC.hs
@@ -516,9 +516,12 @@ pprLit1 other = pprLit other
pprStatics :: DynFlags -> [CmmStatic] -> [SDoc]
pprStatics _ [] = []
pprStatics dflags (CmmStaticLit (CmmFloat f W32) : rest)
- -- floats are padded to a word by padLitToWord, see #1852
+ -- odd numbers of floats are padded to a word by mkVirtHeapOffsetsWithPadding
| wORD_SIZE dflags == 8, CmmStaticLit (CmmInt 0 W32) : rest' <- rest
= pprLit1 (floatToWord dflags f) : pprStatics dflags rest'
+ -- adjacent floats aren't padded but combined into a single word
+ | wORD_SIZE dflags == 8, CmmStaticLit (CmmFloat g W32) : rest' <- rest
+ = pprLit1 (floatPairToWord dflags f g) : pprStatics dflags rest'
| wORD_SIZE dflags == 4
= pprLit1 (floatToWord dflags f) : pprStatics dflags rest
| otherwise
@@ -1248,6 +1251,25 @@ floatToWord dflags r
, wORDS_BIGENDIAN dflags = 32
| otherwise = 0
+floatPairToWord :: DynFlags -> Rational -> Rational -> CmmLit
+floatPairToWord dflags r1 r2
+ = runST (do
+ arr <- newArray_ ((0::Int),1)
+ writeArray arr 0 (fromRational r1)
+ writeArray arr 1 (fromRational r2)
+ arr' <- castFloatToWord32Array arr
+ w32_1 <- readArray arr' 0
+ w32_2 <- readArray arr' 1
+ return (pprWord32Pair w32_1 w32_2)
+ )
+ where pprWord32Pair w32_1 w32_2
+ | wORDS_BIGENDIAN dflags =
+ CmmInt ((shiftL i1 32) .|. i2) W64
+ | otherwise =
+ CmmInt ((shiftL i2 32) .|. i1) W64
+ where i1 = toInteger w32_1
+ i2 = toInteger w32_2
+
doubleToWords :: DynFlags -> Rational -> [CmmLit]
doubleToWords dflags r
= runST (do

View File

@ -39,7 +39,7 @@ Version: 8.4.4
# - release can only be reset if *all* library versions get bumped simultaneously
# (sometimes after a major release)
# - minor release numbers for a branch should be incremented monotonically
Release: 73.0.riscv64%{?dist}
Release: 73.1.riscv64%{?dist}
Summary: Glasgow Haskell Compiler
License: BSD and HaskellReport
@ -80,6 +80,11 @@ Patch30: fix-build-using-unregisterized-v8.2.patch
# RISC-V
Patch40: ghc-8.2.20-riscv.patch
# See:
# - https://ghc.haskell.org/trac/ghc/ticket/15853
# - https://git.haskell.org/ghc.git/commitdiff/35a897782b6b0a252da7fdcf4921198ad4e1d96c
# - https://phabricator.haskell.org/D5306
Patch41: ghc-8.4.4-fix-ticket-15853.patch
# fedora ghc has been bootstrapped on
# %%{ix86} x86_64 ppc ppc64 armv7hl s390 s390x ppc64le aarch64
@ -309,6 +314,7 @@ rm -r libffi-tarballs
%ifarch riscv64
%patch40 -p1 -b .orig
%patch41 -p1 -b .orig
%endif
%global gen_contents_index gen_contents_index.orig
@ -662,6 +668,10 @@ fi
%changelog
* Sun Feb 24 2019 David Abdurachmanov <david.abdurachmanov@gmail.com> - 8.4.4-73.1.riscv64
- Fix internal compiler panic:
https://ghc.haskell.org/trac/ghc/ticket/15853
* Tue Feb 19 2019 David Abdurachmanov <david.abdurachmanov@gmail.com> - 8.4.4-73.0.riscv64
- Enable RISC-V (riscv64)