diff options
author | Adam Gundry <adam@well-typed.com> | 2015-10-16 13:58:52 +0100 |
---|---|---|
committer | Adam Gundry <adam@well-typed.com> | 2015-10-16 13:58:52 +0100 |
commit | 5a1b4f814f74ec1c48152d97523744518e212777 (patch) | |
tree | 7c2207ecacbd37f12c78dbcf9d4334827164e0fb /includes | |
parent | 6757950cdd8bb0af0355539987ee78401a6a8f6b (diff) | |
parent | 808bbdf08058785ae5bc59b5b4f2b04951d4cbbf (diff) | |
download | haskell-wip/orf-reboot.tar.gz |
Merge remote-tracking branch 'origin/master' into wip/orf-rebootwip/orf-reboot
Conflicts:
compiler/rename/RnNames.hs
compiler/typecheck/TcRnMonad.hs
utils/haddock
Diffstat (limited to 'includes')
-rw-r--r-- | includes/CodeGen.Platform.hs | 18 | ||||
-rw-r--r-- | includes/stg/Prim.h | 72 |
2 files changed, 49 insertions, 41 deletions
diff --git a/includes/CodeGen.Platform.hs b/includes/CodeGen.Platform.hs index b93f0074fd..b41ad54349 100644 --- a/includes/CodeGen.Platform.hs +++ b/includes/CodeGen.Platform.hs @@ -874,17 +874,25 @@ freeRegBase _ = True #elif MACHREGS_powerpc -freeReg 0 = False -- Hack: r0 can't be used in all insns, - -- but it's actually free +freeReg 0 = False -- Used by code setting the back chain pointer + -- in stack reallocations on Linux + -- r0 is not usable in all insns so also reserved + -- on Darwin. freeReg 1 = False -- The Stack Pointer # if !MACHREGS_darwin -- most non-darwin powerpc OSes use r2 as a TOC pointer or something like that freeReg 2 = False --- TODO: make this conditonal for ppc64 ELF -freeReg 13 = False -- reserved for system thread ID --- TODO: do not reserve r30 in ppc64 ELF +freeReg 13 = False -- reserved for system thread ID on 64 bit -- at least linux in -fPIC relies on r30 in PLT stubs freeReg 30 = False +{- TODO: reserve r13 on 64 bit systems only and r30 on 32 bit respectively. + For now we use r30 on 64 bit and r13 on 32 bit as a temporary register + in stack handling code. See compiler/nativeGen/PPC/Ppr.hs. + + Later we might want to reserve r13 and r30 only where it is required. + Then use r12 as temporary register, which is also what the C ABI does. +-} + # endif # ifdef REG_Base freeReg REG_Base = False diff --git a/includes/stg/Prim.h b/includes/stg/Prim.h index b07e177542..9872512701 100644 --- a/includes/stg/Prim.h +++ b/includes/stg/Prim.h @@ -15,42 +15,42 @@ #define PRIM_H /* libraries/ghc-prim/cbits/atomic.c */ -StgWord hs_atomic_add8(volatile StgWord8 *x, StgWord val); -StgWord hs_atomic_add16(volatile StgWord16 *x, StgWord val); -StgWord hs_atomic_add32(volatile StgWord32 *x, StgWord val); -StgWord64 hs_atomic_add64(volatile StgWord64 *x, StgWord64 val); -StgWord hs_atomic_sub8(volatile StgWord8 *x, StgWord val); -StgWord hs_atomic_sub16(volatile StgWord16 *x, StgWord val); -StgWord hs_atomic_sub32(volatile StgWord32 *x, StgWord val); -StgWord64 hs_atomic_sub64(volatile StgWord64 *x, StgWord64 val); -StgWord hs_atomic_and8(volatile StgWord8 *x, StgWord val); -StgWord hs_atomic_and16(volatile StgWord16 *x, StgWord val); -StgWord hs_atomic_and32(volatile StgWord32 *x, StgWord val); -StgWord64 hs_atomic_and64(volatile StgWord64 *x, StgWord64 val); -StgWord hs_atomic_nand8(volatile StgWord8 *x, StgWord val); -StgWord hs_atomic_nand16(volatile StgWord16 *x, StgWord val); -StgWord hs_atomic_nand32(volatile StgWord32 *x, StgWord val); -StgWord64 hs_atomic_nand64(volatile StgWord64 *x, StgWord64 val); -StgWord hs_atomic_or8(volatile StgWord8 *x, StgWord val); -StgWord hs_atomic_or16(volatile StgWord16 *x, StgWord val); -StgWord hs_atomic_or32(volatile StgWord32 *x, StgWord val); -StgWord64 hs_atomic_or64(volatile StgWord64 *x, StgWord64 val); -StgWord hs_atomic_xor8(volatile StgWord8 *x, StgWord val); -StgWord hs_atomic_xor16(volatile StgWord16 *x, StgWord val); -StgWord hs_atomic_xor32(volatile StgWord32 *x, StgWord val); -StgWord64 hs_atomic_xor64(volatile StgWord64 *x, StgWord64 val); -StgWord hs_cmpxchg8(volatile StgWord8 *x, StgWord old, StgWord new_); -StgWord hs_cmpxchg16(volatile StgWord16 *x, StgWord old, StgWord new_); -StgWord hs_cmpxchg32(volatile StgWord32 *x, StgWord old, StgWord new_); -StgWord hs_cmpxchg64(volatile StgWord64 *x, StgWord64 old, StgWord64 new_); -StgWord hs_atomicread8(volatile StgWord8 *x); -StgWord hs_atomicread16(volatile StgWord16 *x); -StgWord hs_atomicread32(volatile StgWord32 *x); -StgWord64 hs_atomicread64(volatile StgWord64 *x); -void hs_atomicwrite8(volatile StgWord8 *x, StgWord val); -void hs_atomicwrite16(volatile StgWord16 *x, StgWord val); -void hs_atomicwrite32(volatile StgWord32 *x, StgWord val); -void hs_atomicwrite64(volatile StgWord64 *x, StgWord64 val); +StgWord hs_atomic_add8(StgWord x, StgWord val); +StgWord hs_atomic_add16(StgWord x, StgWord val); +StgWord hs_atomic_add32(StgWord x, StgWord val); +StgWord64 hs_atomic_add64(StgWord x, StgWord64 val); +StgWord hs_atomic_sub8(StgWord x, StgWord val); +StgWord hs_atomic_sub16(StgWord x, StgWord val); +StgWord hs_atomic_sub32(StgWord x, StgWord val); +StgWord64 hs_atomic_sub64(StgWord x, StgWord64 val); +StgWord hs_atomic_and8(StgWord x, StgWord val); +StgWord hs_atomic_and16(StgWord x, StgWord val); +StgWord hs_atomic_and32(StgWord x, StgWord val); +StgWord64 hs_atomic_and64(StgWord x, StgWord64 val); +StgWord hs_atomic_nand8(StgWord x, StgWord val); +StgWord hs_atomic_nand16(StgWord x, StgWord val); +StgWord hs_atomic_nand32(StgWord x, StgWord val); +StgWord64 hs_atomic_nand64(StgWord x, StgWord64 val); +StgWord hs_atomic_or8(StgWord x, StgWord val); +StgWord hs_atomic_or16(StgWord x, StgWord val); +StgWord hs_atomic_or32(StgWord x, StgWord val); +StgWord64 hs_atomic_or64(StgWord x, StgWord64 val); +StgWord hs_atomic_xor8(StgWord x, StgWord val); +StgWord hs_atomic_xor16(StgWord x, StgWord val); +StgWord hs_atomic_xor32(StgWord x, StgWord val); +StgWord64 hs_atomic_xor64(StgWord x, StgWord64 val); +StgWord hs_cmpxchg8(StgWord x, StgWord old, StgWord new_); +StgWord hs_cmpxchg16(StgWord x, StgWord old, StgWord new_); +StgWord hs_cmpxchg32(StgWord x, StgWord old, StgWord new_); +StgWord hs_cmpxchg64(StgWord x, StgWord64 old, StgWord64 new_); +StgWord hs_atomicread8(StgWord x); +StgWord hs_atomicread16(StgWord x); +StgWord hs_atomicread32(StgWord x); +StgWord64 hs_atomicread64(StgWord x); +void hs_atomicwrite8(StgWord x, StgWord val); +void hs_atomicwrite16(StgWord x, StgWord val); +void hs_atomicwrite32(StgWord x, StgWord val); +void hs_atomicwrite64(StgWord x, StgWord64 val); /* libraries/ghc-prim/cbits/bswap.c */ StgWord16 hs_bswap16(StgWord16 x); |