diff options
author | Cheng Shao <astrohavoc@gmail.com> | 2022-09-06 06:07:30 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-09-08 17:49:47 -0400 |
commit | 9c4ea90c6b493eee6df1798c63a6031cc18ae6da (patch) | |
tree | 60ed7235a0ef617f08ffea03e9c00d9de6e5de99 | |
parent | a4b34808720e93b434b4fcf18db114bc1f0599aa (diff) | |
download | haskell-9c4ea90c6b493eee6df1798c63a6031cc18ae6da.tar.gz |
CmmToC: enable 64-bit CallishMachOp on 32-bit targets
Normally, the unregisterised builds avoid generating 64-bit
CallishMachOp in StgToCmm, so CmmToC doesn't support these. However,
there do exist cases where we'd like to invoke cmmToC for other cmm
inputs which may contain such CallishMachOps, and it's a rather low
effort to add support for these since they only require calling into
existing ghc-prim cbits.
-rw-r--r-- | compiler/GHC/CmmToC.hs | 60 |
1 files changed, 29 insertions, 31 deletions
diff --git a/compiler/GHC/CmmToC.hs b/compiler/GHC/CmmToC.hs index 1659575459..6a016a4814 100644 --- a/compiler/GHC/CmmToC.hs +++ b/compiler/GHC/CmmToC.hs @@ -967,39 +967,37 @@ pprCallishMachOp_for_C mop -- Not adding it for now (MO_Prefetch_Data _ ) -> unsupported - MO_I64_ToI -> dontReach64 - MO_I64_FromI -> dontReach64 - MO_W64_ToW -> dontReach64 - MO_W64_FromW -> dontReach64 - MO_x64_Neg -> dontReach64 - MO_x64_Add -> dontReach64 - MO_x64_Sub -> dontReach64 - MO_x64_Mul -> dontReach64 - MO_I64_Quot -> dontReach64 - MO_I64_Rem -> dontReach64 - MO_W64_Quot -> dontReach64 - MO_W64_Rem -> dontReach64 - MO_x64_And -> dontReach64 - MO_x64_Or -> dontReach64 - MO_x64_Xor -> dontReach64 - MO_x64_Not -> dontReach64 - MO_x64_Shl -> dontReach64 - MO_I64_Shr -> dontReach64 - MO_W64_Shr -> dontReach64 - MO_x64_Eq -> dontReach64 - MO_x64_Ne -> dontReach64 - MO_I64_Ge -> dontReach64 - MO_I64_Gt -> dontReach64 - MO_I64_Le -> dontReach64 - MO_I64_Lt -> dontReach64 - MO_W64_Ge -> dontReach64 - MO_W64_Gt -> dontReach64 - MO_W64_Le -> dontReach64 - MO_W64_Lt -> dontReach64 + MO_I64_ToI -> text "hs_int64ToInt" + MO_I64_FromI -> text "hs_intToInt64" + MO_W64_ToW -> text "hs_word64ToWord" + MO_W64_FromW -> text "hs_wordToWord64" + MO_x64_Neg -> text "hs_neg64" + MO_x64_Add -> text "hs_add64" + MO_x64_Sub -> text "hs_sub64" + MO_x64_Mul -> text "hs_mul64" + MO_I64_Quot -> text "hs_quotInt64" + MO_I64_Rem -> text "hs_remInt64" + MO_W64_Quot -> text "hs_quotWord64" + MO_W64_Rem -> text "hs_remWord64" + MO_x64_And -> text "hs_and64" + MO_x64_Or -> text "hs_or64" + MO_x64_Xor -> text "hs_xor64" + MO_x64_Not -> text "hs_not64" + MO_x64_Shl -> text "hs_uncheckedShiftL64" + MO_I64_Shr -> text "hs_uncheckedIShiftRA64" + MO_W64_Shr -> text "hs_uncheckedShiftRL64" + MO_x64_Eq -> text "hs_eq64" + MO_x64_Ne -> text "hs_ne64" + MO_I64_Ge -> text "hs_geInt64" + MO_I64_Gt -> text "hs_gtInt64" + MO_I64_Le -> text "hs_leInt64" + MO_I64_Lt -> text "hs_ltInt64" + MO_W64_Ge -> text "hs_geWord64" + MO_W64_Gt -> text "hs_gtWord64" + MO_W64_Le -> text "hs_leWord64" + MO_W64_Lt -> text "hs_ltWord64" where unsupported = panic ("pprCallishMachOp_for_C: " ++ show mop ++ " not supported!") - dontReach64 = panic ("pprCallishMachOp_for_C: " ++ show mop - ++ " should be not be encountered because the regular primop for this 64-bit operation is used instead.") -- --------------------------------------------------------------------- -- Useful #defines |