implement missing Fabs{32,64} on i386 NCG and UNREG
authorSergei Trofimovich <slyfox@gentoo.org>
Fri, 10 Mar 2017 09:30:10 +0000 (09:30 +0000)
committerSergei Trofimovich <slyfox@gentoo.org>
Fri, 10 Mar 2017 09:30:10 +0000 (09:30 +0000)
Noticed breakage as build failure on i386 freebsd build bot:
  http://haskell.inf.elte.hu/builders/freebsd-i386-head/1267/10.html

  ghc-stage1: panic! (the 'impossible' happened)
    (GHC version 8.1.20170310 for i386-portbld-freebsd):
      outOfLineCmmOp: MO_F64_Fabs not supported here

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
compiler/cmm/PprC.hs
compiler/nativeGen/X86/CodeGen.hs

index 6a84e30..aa21174 100644 (file)
@@ -754,7 +754,7 @@ pprCallishMachOp_for_C mop
         MO_F64_Log      -> text "log"
         MO_F64_Exp      -> text "exp"
         MO_F64_Sqrt     -> text "sqrt"
-        MO_F64_Fabs     -> unsupported
+        MO_F64_Fabs     -> text "fabs"
         MO_F32_Pwr      -> text "powf"
         MO_F32_Sin      -> text "sinf"
         MO_F32_Cos      -> text "cosf"
@@ -768,7 +768,7 @@ pprCallishMachOp_for_C mop
         MO_F32_Log      -> text "logf"
         MO_F32_Exp      -> text "expf"
         MO_F32_Sqrt     -> text "sqrtf"
-        MO_F32_Fabs     -> unsupported
+        MO_F32_Fabs     -> text "fabsf"
         MO_WriteBarrier -> text "write_barrier"
         MO_Memcpy _     -> text "memcpy"
         MO_Memset _     -> text "memset"
index 704514e..562303c 100644 (file)
@@ -2623,7 +2623,7 @@ outOfLineCmmOp mop res args
 
         fn = case mop of
               MO_F32_Sqrt  -> fsLit "sqrtf"
-              MO_F32_Fabs  -> unsupported
+              MO_F32_Fabs  -> fsLit "fabsf"
               MO_F32_Sin   -> fsLit "sinf"
               MO_F32_Cos   -> fsLit "cosf"
               MO_F32_Tan   -> fsLit "tanf"
@@ -2640,7 +2640,7 @@ outOfLineCmmOp mop res args
               MO_F32_Pwr   -> fsLit "powf"
 
               MO_F64_Sqrt  -> fsLit "sqrt"
-              MO_F64_Fabs  -> unsupported
+              MO_F64_Fabs  -> fsLit "fabs"
               MO_F64_Sin   -> fsLit "sin"
               MO_F64_Cos   -> fsLit "cos"
               MO_F64_Tan   -> fsLit "tan"