[Git][ghc/ghc][wip/romes/26166-move-prims] Move code-gen aux symbols from ghc-internal to rts
Rodrigo Mesquita pushed to branch wip/romes/26166-move-prims at Glasgow Haskell Compiler / GHC Commits: 1e62b9c9 by Rodrigo Mesquita at 2025-10-10T13:34:53+01:00 Move code-gen aux symbols from ghc-internal to rts These symbols were all previously defined in ghc-internal and made the dependency structure awkward, where the rts may refer to some of these symbols and had to work around that circular dependency the way described in #26166. Moreover, the code generator will produce code that uses these symbols! Therefore, they should be available in the rts: PRINCIPLE: If the code generator may produce code which uses this symbol, then it should be defined in the rts rather than, say, ghc-internal. That said, the main motivation is towards fixing #26166. Towards #26166. Pre-requisite of !14892 - - - - - 18 changed files: - hadrian/src/Settings/Packages.hs - libraries/ghc-internal/ghc-internal.cabal.in - rts/RtsSymbols.c - rts/include/stg/Prim.h - libraries/ghc-internal/cbits/atomic.c → rts/prim/atomic.c - libraries/ghc-internal/cbits/bitrev.c → rts/prim/bitrev.c - libraries/ghc-internal/cbits/bswap.c → rts/prim/bswap.c - libraries/ghc-internal/cbits/clz.c → rts/prim/clz.c - libraries/ghc-internal/cbits/ctz.c → rts/prim/ctz.c - libraries/ghc-internal/cbits/int64x2minmax.c → rts/prim/int64x2minmax.c - libraries/ghc-internal/cbits/longlong.c → rts/prim/longlong.c - libraries/ghc-internal/cbits/mulIntMayOflo.c → rts/prim/mulIntMayOflo.c - libraries/ghc-internal/cbits/pdep.c → rts/prim/pdep.c - libraries/ghc-internal/cbits/pext.c → rts/prim/pext.c - libraries/ghc-internal/cbits/popcnt.c → rts/prim/popcnt.c - libraries/ghc-internal/cbits/vectorQuotRem.c → rts/prim/vectorQuotRem.c - libraries/ghc-internal/cbits/word2float.c → rts/prim/word2float.c - rts/rts.cabal Changes: ===================================== hadrian/src/Settings/Packages.hs ===================================== @@ -287,9 +287,6 @@ ghcInternalArgs = package ghcInternal ? do , builder (Cabal Flags) ? flag NeedLibatomic `cabalFlag` "need-atomic" - , builder (Cc CompileC) ? (not <$> flag CcLlvmBackend) ? - input "**/cbits/atomic.c" ? arg "-Wno-sync-nand" - ] -- | RTS-specific command line arguments. @@ -413,6 +410,9 @@ rtsPackageArgs = package rts ? do , input "**/RetainerProfile.c" ? flag CcLlvmBackend ? arg "-Wno-incompatible-pointer-types" + + , input "**/prim/atomic.c" ? (not <$> flag CcLlvmBackend) ? + arg "-Wno-sync-nand" ] mconcat ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -442,20 +442,7 @@ Library cbits/sysconf.c cbits/fs.c cbits/strerror.c - cbits/atomic.c - cbits/bswap.c - cbits/bitrev.c - cbits/clz.c - cbits/ctz.c cbits/debug.c - cbits/int64x2minmax.c - cbits/longlong.c - cbits/mulIntMayOflo.c - cbits/pdep.c - cbits/pext.c - cbits/popcnt.c - cbits/vectorQuotRem.c - cbits/word2float.c cbits/Stack_c.c cmm-sources: ===================================== rts/RtsSymbols.c ===================================== @@ -1016,6 +1016,116 @@ extern char **environ; #define RTS_FINI_ARRAY_SYMBOLS #endif +#define SymI_NeedsProtoAllSizes(symbol) \ + SymI_NeedsProto(##symbol##8) \ + SymI_NeedsProto(##symbol##16) \ + SymI_NeedsProto(##symbol##32) \ + SymI_NeedsProto(##symbol##64) + +#if !defined(arm_HOST_ARCH) +#define RTS_ATOMICS_SYMBOLS \ + SymI_NeedsProtoAllSizes(hs_atomic_add) \ + SymI_NeedsProtoAllSizes(hs_atomic_sub) \ + SymI_NeedsProtoAllSizes(hs_atomic_and) \ + SymI_NeedsProtoAllSizes(hs_atomic_nand) \ + SymI_NeedsProtoAllSizes(hs_atomic_or) \ + SymI_NeedsProtoAllSizes(hs_atomic_xor) \ + SymI_NeedsProtoAllSizes(hs_cmpxchg) \ + SymI_NeedsProtoAllSizes(hs_xchg) \ + SymI_NeedsProtoAllSizes(hs_atomicread) \ + SymI_NeedsProtoAllSizes(hs_atomicwrite) +#else +// No atomics on arm32. See e9abcad4cc3 +#define RTS_ATOMICS_SYMBOLS +#endif + +// In rts/longlong.c +#if WORD_SIZE_IN_BITS < 64 +#define RTS_SYMBOLS_LONGLONG \ + SymI_NeedsProto(hs_eq64) \ + SymI_NeedsProto(hs_ne64) \ + SymI_NeedsProto(hs_gtWord64) \ + SymI_NeedsProto(hs_geWord64) \ + SymI_NeedsProto(hs_ltWord64) \ + SymI_NeedsProto(hs_leWord64) \ + SymI_NeedsProto(hs_gtInt64) \ + SymI_NeedsProto(hs_geInt64) \ + SymI_NeedsProto(hs_ltInt64) \ + SymI_NeedsProto(hs_leInt64) \ + SymI_NeedsProto(hs_neg64) \ + SymI_NeedsProto(hs_add64) \ + SymI_NeedsProto(hs_sub64) \ + SymI_NeedsProto(hs_mul64) \ + SymI_NeedsProto(hs_remWord64) \ + SymI_NeedsProto(hs_quotWord64) \ + SymI_NeedsProto(hs_remInt64) \ + SymI_NeedsProto(hs_quotInt64) \ + SymI_NeedsProto(hs_and64) \ + SymI_NeedsProto(hs_or64) \ + SymI_NeedsProto(hs_xor64) \ + SymI_NeedsProto(hs_not64) \ + SymI_NeedsProto(hs_uncheckedShiftL64) \ + SymI_NeedsProto(hs_uncheckedShiftRL64) \ + SymI_NeedsProto(hs_uncheckedIShiftRA64) \ + SymI_NeedsProto(hs_intToInt64) \ + SymI_NeedsProto(hs_int64ToInt) \ + SymI_NeedsProto(hs_wordToWord64) \ + SymI_NeedsProto(hs_word64ToWord) +#else +#define RTS_SYMBOLS_LONGLONG +#endif + +// rts/prim/vectorQuotRem.c and rts/prim/int64x2minmax +#if defined(__SSE2__) \ +#define RTS_SYMBOLS_VECTORQUOTREM \ + SymI_NeedsProto(hs_quotInt8X16) \ + SymI_NeedsProto(hs_quotInt16X8) \ + SymI_NeedsProto(hs_quotInt32X4) \ + SymI_NeedsProto(hs_quotInt64X2) \ + SymI_NeedsProto(hs_quotWord8X16) \ + SymI_NeedsProto(hs_quotWord16X8) \ + SymI_NeedsProto(hs_quotWord32X4) \ + SymI_NeedsProto(hs_quotWord64X2) \ + SymI_NeedsProto(hs_remInt8X16) \ + SymI_NeedsProto(hs_remInt16X8) \ + SymI_NeedsProto(hs_remInt32X4) \ + SymI_NeedsProto(hs_remInt64X2) \ + SymI_NeedsProto(hs_remWord8X16) \ + SymI_NeedsProto(hs_remWord16X8) \ + SymI_NeedsProto(hs_remWord32X4) \ + SymI_NeedsProto(hs_remWord64X2) +#define RTS_SYMBOLS_INT64X2MINMAX \ + SymI_NeedsProto(hs_minInt64X2) \ + SymI_NeedsProto(hs_maxInt64X2) \ + SymI_NeedsProto(hs_minWord64X2) \ + SymI_NeedsProto(hs_maxWord64X2) +#else +#define RTS_SYMBOLS_VECTORQUOTREM +#define RTS_SYMBOLS_INT64X2MINMAX +#endif + +// Symbols on files in rts/prim/* +#define RTS_SYMBOLS_PRIM \ + RTS_ATOMICS_SYMBOLS \ + RTS_SYMBOLS_INT64X2MINMAX \ + RTS_SYMBOLS_LONGLONG \ + RTS_SYMBOLS_VECTORQUOTREM \ + SymI_NeedsProtoAllSizes(hs_bitrev) \ + SymI_NeedsProto(hs_bswap16) \ + SymI_NeedsProto(hs_bswap32) \ + SymI_NeedsProto(hs_bswap64) \ + SymI_NeedsProtoAllSizes(hs_clz) \ + SymI_NeedsProtoAllSizes(hs_ctz) \ + SymI_NeedsProto(hs_mulIntMayOflo) \ + SymI_NeedsProtoAllSizes(hs_pdep) \ + SymI_NeedsProtoAllSizes(hs_pext) \ + SymI_NeedsProtoAllSizes(hs_pext) \ + SymI_NeedsProto(hs_popcnt) \ + SymI_NeedsProtoAllSizes(hs_popcnt) \ + SymI_NeedsProto(hs_word2float32) \ + SymI_NeedsProto(hs_word2float64) + + /* entirely bogus claims about types of these symbols */ #define SymI_NeedsProto(vvv) extern void vvv(void); #define SymI_NeedsDataProto(vvv) extern StgWord vvv[]; @@ -1038,6 +1148,7 @@ RTS_ARCH_LIBGCC_SYMBOLS RTS_FINI_ARRAY_SYMBOLS RTS_LIBFFI_SYMBOLS RTS_ARM_OUTLINE_ATOMIC_SYMBOLS +RTS_SYMBOLS_PRIM #undef SymI_NeedsProto #undef SymI_NeedsDataProto @@ -1081,6 +1192,7 @@ RtsSymbolVal rtsSyms[] = { RTS_FINI_ARRAY_SYMBOLS RTS_LIBFFI_SYMBOLS RTS_ARM_OUTLINE_ATOMIC_SYMBOLS + RTS_SYMBOLS_PRIM SymI_HasDataProto(nonmoving_write_barrier_enabled) { 0, 0, STRENGTH_NORMAL, SYM_TYPE_CODE } /* sentinel */ }; ===================================== rts/include/stg/Prim.h ===================================== @@ -13,7 +13,7 @@ #pragma once -/* libraries/ghc-internal/cbits/atomic.c */ +/* rts/prim/atomic.c */ StgWord hs_atomic_add8(StgWord x, StgWord val); StgWord hs_atomic_add16(StgWord x, StgWord val); StgWord hs_atomic_add32(StgWord x, StgWord val); ===================================== libraries/ghc-internal/cbits/atomic.c → rts/prim/atomic.c ===================================== @@ -12,90 +12,66 @@ // FetchAddByteArrayOp_Int -extern StgWord hs_atomic_add8(StgWord x, StgWord val); -StgWord -hs_atomic_add8(StgWord x, StgWord val) +StgWord hs_atomic_add8(StgWord x, StgWord val) { return __sync_fetch_and_add((volatile StgWord8 *) x, (StgWord8) val); } -extern StgWord hs_atomic_add16(StgWord x, StgWord val); -StgWord -hs_atomic_add16(StgWord x, StgWord val) +StgWord hs_atomic_add16(StgWord x, StgWord val) { return __sync_fetch_and_add((volatile StgWord16 *) x, (StgWord16) val); } -extern StgWord hs_atomic_add32(StgWord x, StgWord val); -StgWord -hs_atomic_add32(StgWord x, StgWord val) +StgWord hs_atomic_add32(StgWord x, StgWord val) { return __sync_fetch_and_add((volatile StgWord32 *) x, (StgWord32) val); } -extern StgWord64 hs_atomic_add64(StgWord x, StgWord64 val); -StgWord64 -hs_atomic_add64(StgWord x, StgWord64 val) +StgWord64 hs_atomic_add64(StgWord x, StgWord64 val) { return __sync_fetch_and_add((volatile StgWord64 *) x, val); } // FetchSubByteArrayOp_Int -extern StgWord hs_atomic_sub8(StgWord x, StgWord val); -StgWord -hs_atomic_sub8(StgWord x, StgWord val) +StgWord hs_atomic_sub8(StgWord x, StgWord val) { return __sync_fetch_and_sub((volatile StgWord8 *) x, (StgWord8) val); } -extern StgWord hs_atomic_sub16(StgWord x, StgWord val); -StgWord -hs_atomic_sub16(StgWord x, StgWord val) +StgWord hs_atomic_sub16(StgWord x, StgWord val) { return __sync_fetch_and_sub((volatile StgWord16 *) x, (StgWord16) val); } -extern StgWord hs_atomic_sub32(StgWord x, StgWord val); -StgWord -hs_atomic_sub32(StgWord x, StgWord val) +StgWord hs_atomic_sub32(StgWord x, StgWord val) { return __sync_fetch_and_sub((volatile StgWord32 *) x, (StgWord32) val); } -extern StgWord64 hs_atomic_sub64(StgWord x, StgWord64 val); -StgWord64 -hs_atomic_sub64(StgWord x, StgWord64 val) +StgWord64 hs_atomic_sub64(StgWord x, StgWord64 val) { return __sync_fetch_and_sub((volatile StgWord64 *) x, val); } // FetchAndByteArrayOp_Int -extern StgWord hs_atomic_and8(StgWord x, StgWord val); -StgWord -hs_atomic_and8(StgWord x, StgWord val) +StgWord hs_atomic_and8(StgWord x, StgWord val) { return __sync_fetch_and_and((volatile StgWord8 *) x, (StgWord8) val); } -extern StgWord hs_atomic_and16(StgWord x, StgWord val); -StgWord -hs_atomic_and16(StgWord x, StgWord val) +StgWord hs_atomic_and16(StgWord x, StgWord val) { return __sync_fetch_and_and((volatile StgWord16 *) x, (StgWord16) val); } -extern StgWord hs_atomic_and32(StgWord x, StgWord val); -StgWord -hs_atomic_and32(StgWord x, StgWord val) +StgWord hs_atomic_and32(StgWord x, StgWord val) { return __sync_fetch_and_and((volatile StgWord32 *) x, (StgWord32) val); } -extern StgWord64 hs_atomic_and64(StgWord x, StgWord64 val); -StgWord64 -hs_atomic_and64(StgWord x, StgWord64 val) +StgWord64 hs_atomic_and64(StgWord x, StgWord64 val) { return __sync_fetch_and_and((volatile StgWord64 *) x, val); } @@ -167,9 +143,7 @@ hs_atomic_and64(StgWord x, StgWord64 val) #pragma GCC diagnostic ignored "-Wsync-nand" #endif -extern StgWord hs_atomic_nand8(StgWord x, StgWord val); -StgWord -hs_atomic_nand8(StgWord x, StgWord val) +StgWord hs_atomic_nand8(StgWord x, StgWord val) { #if USE_SYNC_FETCH_AND_NAND return __sync_fetch_and_nand((volatile StgWord8 *) x, (StgWord8) val); @@ -178,9 +152,7 @@ hs_atomic_nand8(StgWord x, StgWord val) #endif } -extern StgWord hs_atomic_nand16(StgWord x, StgWord val); -StgWord -hs_atomic_nand16(StgWord x, StgWord val) +StgWord hs_atomic_nand16(StgWord x, StgWord val) { #if USE_SYNC_FETCH_AND_NAND return __sync_fetch_and_nand((volatile StgWord16 *) x, (StgWord16) val); @@ -189,9 +161,7 @@ hs_atomic_nand16(StgWord x, StgWord val) #endif } -extern StgWord hs_atomic_nand32(StgWord x, StgWord val); -StgWord -hs_atomic_nand32(StgWord x, StgWord val) +StgWord hs_atomic_nand32(StgWord x, StgWord val) { #if USE_SYNC_FETCH_AND_NAND return __sync_fetch_and_nand((volatile StgWord32 *) x, (StgWord32) val); @@ -200,9 +170,7 @@ hs_atomic_nand32(StgWord x, StgWord val) #endif } -extern StgWord64 hs_atomic_nand64(StgWord x, StgWord64 val); -StgWord64 -hs_atomic_nand64(StgWord x, StgWord64 val) +StgWord64 hs_atomic_nand64(StgWord x, StgWord64 val) { #if USE_SYNC_FETCH_AND_NAND return __sync_fetch_and_nand((volatile StgWord64 *) x, val); @@ -215,96 +183,72 @@ hs_atomic_nand64(StgWord x, StgWord64 val) // FetchOrByteArrayOp_Int -extern StgWord hs_atomic_or8(StgWord x, StgWord val); -StgWord -hs_atomic_or8(StgWord x, StgWord val) +StgWord hs_atomic_or8(StgWord x, StgWord val) { return __sync_fetch_and_or((volatile StgWord8 *) x, (StgWord8) val); } -extern StgWord hs_atomic_or16(StgWord x, StgWord val); -StgWord -hs_atomic_or16(StgWord x, StgWord val) +StgWord hs_atomic_or16(StgWord x, StgWord val) { return __sync_fetch_and_or((volatile StgWord16 *) x, (StgWord16) val); } -extern StgWord hs_atomic_or32(StgWord x, StgWord val); -StgWord -hs_atomic_or32(StgWord x, StgWord val) +StgWord hs_atomic_or32(StgWord x, StgWord val) { return __sync_fetch_and_or((volatile StgWord32 *) x, (StgWord32) val); } -extern StgWord64 hs_atomic_or64(StgWord x, StgWord64 val); -StgWord64 -hs_atomic_or64(StgWord x, StgWord64 val) +StgWord64 hs_atomic_or64(StgWord x, StgWord64 val) { return __sync_fetch_and_or((volatile StgWord64 *) x, val); } // FetchXorByteArrayOp_Int -extern StgWord hs_atomic_xor8(StgWord x, StgWord val); -StgWord -hs_atomic_xor8(StgWord x, StgWord val) +StgWord hs_atomic_xor8(StgWord x, StgWord val) { return __sync_fetch_and_xor((volatile StgWord8 *) x, (StgWord8) val); } -extern StgWord hs_atomic_xor16(StgWord x, StgWord val); -StgWord -hs_atomic_xor16(StgWord x, StgWord val) +StgWord hs_atomic_xor16(StgWord x, StgWord val) { return __sync_fetch_and_xor((volatile StgWord16 *) x, (StgWord16) val); } -extern StgWord hs_atomic_xor32(StgWord x, StgWord val); -StgWord -hs_atomic_xor32(StgWord x, StgWord val) +StgWord hs_atomic_xor32(StgWord x, StgWord val) { return __sync_fetch_and_xor((volatile StgWord32 *) x, (StgWord32) val); } -extern StgWord64 hs_atomic_xor64(StgWord x, StgWord64 val); -StgWord64 -hs_atomic_xor64(StgWord x, StgWord64 val) +StgWord64 hs_atomic_xor64(StgWord x, StgWord64 val) { return __sync_fetch_and_xor((volatile StgWord64 *) x, val); } // CasByteArrayOp_Int -extern StgWord hs_cmpxchg8(StgWord x, StgWord old, StgWord new); -StgWord -hs_cmpxchg8(StgWord x, StgWord old, StgWord new) +StgWord hs_cmpxchg8(StgWord x, StgWord old, StgWord new) { StgWord8 expected = (StgWord8) old; __atomic_compare_exchange_n((StgWord8 *) x, &expected, (StgWord8) new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return expected; } -extern StgWord hs_cmpxchg16(StgWord x, StgWord old, StgWord new); -StgWord -hs_cmpxchg16(StgWord x, StgWord old, StgWord new) +StgWord hs_cmpxchg16(StgWord x, StgWord old, StgWord new) { StgWord16 expected = (StgWord16) old; __atomic_compare_exchange_n((StgWord16 *) x, &expected, (StgWord16) new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return expected; } -extern StgWord hs_cmpxchg32(StgWord x, StgWord old, StgWord new); -StgWord -hs_cmpxchg32(StgWord x, StgWord old, StgWord new) +StgWord hs_cmpxchg32(StgWord x, StgWord old, StgWord new) { StgWord32 expected = (StgWord32) old; __atomic_compare_exchange_n((StgWord32 *) x, &expected, (StgWord32) new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return expected; } -extern StgWord64 hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new); -StgWord64 -hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new) +StgWord64 hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new) { StgWord64 expected = (StgWord64) old; __atomic_compare_exchange_n((StgWord64 *) x, &expected, (StgWord64) new, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); @@ -313,31 +257,23 @@ hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new) // Atomic exchange operations -extern StgWord hs_xchg8(StgWord x, StgWord val); -StgWord -hs_xchg8(StgWord x, StgWord val) +StgWord hs_xchg8(StgWord x, StgWord val) { return (StgWord) __atomic_exchange_n((StgWord8 *) x, (StgWord8) val, __ATOMIC_SEQ_CST); } -extern StgWord hs_xchg16(StgWord x, StgWord val); -StgWord -hs_xchg16(StgWord x, StgWord val) +StgWord hs_xchg16(StgWord x, StgWord val) { return (StgWord) __atomic_exchange_n((StgWord16 *)x, (StgWord16) val, __ATOMIC_SEQ_CST); } -extern StgWord hs_xchg32(StgWord x, StgWord val); -StgWord -hs_xchg32(StgWord x, StgWord val) +StgWord hs_xchg32(StgWord x, StgWord val) { return (StgWord) __atomic_exchange_n((StgWord32 *) x, (StgWord32) val, __ATOMIC_SEQ_CST); } //GCC provides this even on 32bit, but StgWord is still 32 bits. -extern StgWord64 hs_xchg64(StgWord x, StgWord64 val); -StgWord64 -hs_xchg64(StgWord x, StgWord64 val) +StgWord64 hs_xchg64(StgWord x, StgWord64 val) { return (StgWord64) __atomic_exchange_n((StgWord64 *) x, (StgWord64) val, __ATOMIC_SEQ_CST); } @@ -352,30 +288,22 @@ hs_xchg64(StgWord x, StgWord64 val) // primitives which the GCC documentation claims "usually" implies a full // barrier. -extern StgWord hs_atomicread8(StgWord x); -StgWord -hs_atomicread8(StgWord x) +StgWord hs_atomicread8(StgWord x) { return __atomic_load_n((StgWord8 *) x, __ATOMIC_SEQ_CST); } -extern StgWord hs_atomicread16(StgWord x); -StgWord -hs_atomicread16(StgWord x) +StgWord hs_atomicread16(StgWord x) { return __atomic_load_n((StgWord16 *) x, __ATOMIC_SEQ_CST); } -extern StgWord hs_atomicread32(StgWord x); -StgWord -hs_atomicread32(StgWord x) +StgWord hs_atomicread32(StgWord x) { return __atomic_load_n((StgWord32 *) x, __ATOMIC_SEQ_CST); } -extern StgWord64 hs_atomicread64(StgWord x); -StgWord64 -hs_atomicread64(StgWord x) +StgWord64 hs_atomicread64(StgWord x) { return __atomic_load_n((StgWord64 *) x, __ATOMIC_SEQ_CST); } @@ -384,30 +312,22 @@ hs_atomicread64(StgWord x) // Implies a full memory barrier (see compiler/GHC/Builtin/primops.txt.pp) // __ATOMIC_SEQ_CST: Full barrier (see hs_atomicread8 above). -extern void hs_atomicwrite8(StgWord x, StgWord val); -void -hs_atomicwrite8(StgWord x, StgWord val) +void hs_atomicwrite8(StgWord x, StgWord val) { __atomic_store_n((StgWord8 *) x, (StgWord8) val, __ATOMIC_SEQ_CST); } -extern void hs_atomicwrite16(StgWord x, StgWord val); -void -hs_atomicwrite16(StgWord x, StgWord val) +void hs_atomicwrite16(StgWord x, StgWord val) { __atomic_store_n((StgWord16 *) x, (StgWord16) val, __ATOMIC_SEQ_CST); } -extern void hs_atomicwrite32(StgWord x, StgWord val); -void -hs_atomicwrite32(StgWord x, StgWord val) +void hs_atomicwrite32(StgWord x, StgWord val) { __atomic_store_n((StgWord32 *) x, (StgWord32) val, __ATOMIC_SEQ_CST); } -extern void hs_atomicwrite64(StgWord x, StgWord64 val); -void -hs_atomicwrite64(StgWord x, StgWord64 val) +void hs_atomicwrite64(StgWord x, StgWord64 val) { __atomic_store_n((StgWord64 *) x, (StgWord64) val, __ATOMIC_SEQ_CST); } ===================================== libraries/ghc-internal/cbits/bitrev.c → rts/prim/bitrev.c ===================================== ===================================== libraries/ghc-internal/cbits/bswap.c → rts/prim/bswap.c ===================================== ===================================== libraries/ghc-internal/cbits/clz.c → rts/prim/clz.c ===================================== ===================================== libraries/ghc-internal/cbits/ctz.c → rts/prim/ctz.c ===================================== ===================================== libraries/ghc-internal/cbits/int64x2minmax.c → rts/prim/int64x2minmax.c ===================================== ===================================== libraries/ghc-internal/cbits/longlong.c → rts/prim/longlong.c ===================================== ===================================== libraries/ghc-internal/cbits/mulIntMayOflo.c → rts/prim/mulIntMayOflo.c ===================================== ===================================== libraries/ghc-internal/cbits/pdep.c → rts/prim/pdep.c ===================================== ===================================== libraries/ghc-internal/cbits/pext.c → rts/prim/pext.c ===================================== ===================================== libraries/ghc-internal/cbits/popcnt.c → rts/prim/popcnt.c ===================================== ===================================== libraries/ghc-internal/cbits/vectorQuotRem.c → rts/prim/vectorQuotRem.c ===================================== ===================================== libraries/ghc-internal/cbits/word2float.c → rts/prim/word2float.c ===================================== ===================================== rts/rts.cabal ===================================== @@ -529,6 +529,19 @@ library sm/Storage.c sm/Sweep.c fs.c + prim/atomic.c + prim/bitrev.c + prim/bswap.c + prim/clz.c + prim/ctz.c + prim/int64x2minmax.c + prim/longlong.c + prim/mulIntMayOflo.c + prim/pdep.c + prim/pext.c + prim/popcnt.c + prim/vectorQuotRem.c + prim/word2float.c -- I wish we had wildcards..., this would be: -- *.c hooks/**/*.c sm/**/*.c eventlog/**/*.c linker/**/*.c View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1e62b9c9238220ece0fc567064931f88... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1e62b9c9238220ece0fc567064931f88... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Rodrigo Mesquita (@alt-romes)