* gnu/packages/patches/ghc-4.patch: New file * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/haskell.scm (ghc-4): New variable.
		
			
				
	
	
		
			708 lines
		
	
	
		
			No EOL
		
	
	
		
			21 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			708 lines
		
	
	
		
			No EOL
		
	
	
		
			21 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| The GHC 4 runtime system was written before GCC 3.5 deprecated lvalue casts.
 | ||
| The runtime system's sources are littered with these casts, so early versions
 | ||
| of this patch were dedicated to rewriting those statements to a standards
 | ||
| compliant form.  Unfortunately, this led to subtle breakage, so instead we
 | ||
| build with GCC 2.95.
 | ||
| 
 | ||
| Problematic for newer versions of GCC is also the assembly in the bundled
 | ||
| sources of GMP 2.0.2, which spans multiple lines without escaping line breaks.
 | ||
| 
 | ||
| TODO: We aren't yet using anything under ghc/compiler, so the patches there
 | ||
| aren't needed at this time.  The intent was to ensure that the compiler
 | ||
| sources can be used even when they are interpreted by Hugs.
 | ||
| 
 | ||
| TODO: There are some more problems with the Haskell sources.  Some files have
 | ||
| too many commas (both at the end of the line and at the beginning of the next
 | ||
| line).  Others use a trailing hash, which Hugs doesn't understand.
 | ||
| 
 | ||
| TODO: Hugs doesn't understand "unsafe" in hslib/lang/Storable.lhs
 | ||
| 
 | ||
| diff --git a/ghc/compiler/main/CmdLineOpts.lhs b/ghc/compiler/main/CmdLineOpts.lhs
 | ||
| index ca1b58d..074fcaf 100644
 | ||
| --- a/ghc/compiler/main/CmdLineOpts.lhs
 | ||
| +++ b/ghc/compiler/main/CmdLineOpts.lhs
 | ||
| @@ -163,9 +163,9 @@ import Constants	-- Default values for some flags
 | ||
|  
 | ||
|  import FastString	( headFS )
 | ||
|  import Maybes		( assocMaybe, firstJust, maybeToBool )
 | ||
| -import Panic		( panic, panic# )
 | ||
| +import Panic		( panic, panic' )
 | ||
|  
 | ||
| -#if __GLASGOW_HASKELL__ < 301
 | ||
| +#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 301
 | ||
|  import ArrBase	( Array(..) )
 | ||
|  #else
 | ||
|  import PrelArr  ( Array(..) )
 | ||
| diff --git a/ghc/compiler/prelude/PrimOp.lhs b/ghc/compiler/prelude/PrimOp.lhs
 | ||
| index 7a0627d..59802c4 100644
 | ||
| --- a/ghc/compiler/prelude/PrimOp.lhs
 | ||
| +++ b/ghc/compiler/prelude/PrimOp.lhs
 | ||
| @@ -502,7 +502,7 @@ tagOf_PrimOp UnblockAsyncExceptionsOp	      = ILIT(260)
 | ||
|  tagOf_PrimOp DataToTagOp		      = ILIT(261)
 | ||
|  tagOf_PrimOp TagToEnumOp		      = ILIT(262)
 | ||
|  
 | ||
| -tagOf_PrimOp op = pprPanic# "tagOf_PrimOp: pattern-match" (ppr op)
 | ||
| +tagOf_PrimOp op = pprPanic' "tagOf_PrimOp: pattern-match" (ppr op)
 | ||
|  
 | ||
|  instance Eq PrimOp where
 | ||
|      op1 == op2 = tagOf_PrimOp op1 _EQ_ tagOf_PrimOp op2
 | ||
| diff --git a/ghc/compiler/utils/Outputable.lhs b/ghc/compiler/utils/Outputable.lhs
 | ||
| index 19ad666..89d07cb 100644
 | ||
| --- a/ghc/compiler/utils/Outputable.lhs
 | ||
| +++ b/ghc/compiler/utils/Outputable.lhs
 | ||
| @@ -42,8 +42,8 @@ module Outputable (
 | ||
|  
 | ||
|  
 | ||
|  	-- error handling
 | ||
| -	pprPanic, pprPanic#, pprError, pprTrace, assertPprPanic, warnPprTrace,
 | ||
| -	trace, panic, panic#, assertPanic
 | ||
| +	pprPanic, pprPanic', pprError, pprTrace, assertPprPanic, warnPprTrace,
 | ||
| +	trace, panic, panic', assertPanic
 | ||
|      ) where
 | ||
|  
 | ||
|  #include "HsVersions.h"
 | ||
| @@ -420,7 +420,7 @@ pprPanic  = pprAndThen panic
 | ||
|  pprError  = pprAndThen error
 | ||
|  pprTrace  = pprAndThen trace
 | ||
|  
 | ||
| -pprPanic# heading pretty_msg = panic# (show (doc PprDebug))
 | ||
| +pprPanic' heading pretty_msg = panic' (show (doc PprDebug))
 | ||
|  			     where
 | ||
|  			       doc = text heading <+> pretty_msg
 | ||
|  
 | ||
| diff --git a/ghc/compiler/utils/Panic.lhs b/ghc/compiler/utils/Panic.lhs
 | ||
| index 907d8aa..37a2d87 100644
 | ||
| --- a/ghc/compiler/utils/Panic.lhs
 | ||
| +++ b/ghc/compiler/utils/Panic.lhs
 | ||
| @@ -9,7 +9,7 @@ It's hard to put these functions anywhere else without causing
 | ||
|  some unnecessary loops in the module dependency graph.
 | ||
|  
 | ||
|  \begin{code}
 | ||
| -module Panic  ( panic, panic#, assertPanic, trace ) where
 | ||
| +module Panic  ( panic, panic', assertPanic, trace ) where
 | ||
|  
 | ||
|  import IOExts ( trace )
 | ||
|  
 | ||
| @@ -27,8 +27,8 @@ panic x = error ("panic! (the `impossible' happened):\n\t"
 | ||
|  -- what TAG_ is with GHC at the moment.  Ugh. (Simon)
 | ||
|  -- No, man -- Too Beautiful! (Will)
 | ||
|  
 | ||
| -panic# :: String -> FAST_INT
 | ||
| -panic# s = case (panic s) of () -> ILIT(0)
 | ||
| +panic' :: String -> FAST_INT
 | ||
| +panic' s = case (panic s) of () -> ILIT(0)
 | ||
|  
 | ||
|  assertPanic :: String -> Int -> a
 | ||
|  assertPanic file line = panic ("ASSERT failed! file " ++ file ++ ", line " ++ show line)
 | ||
| diff --git a/ghc/includes/PrimOps.h b/ghc/includes/PrimOps.h
 | ||
| index 8b8c2f9..7f43ab0 100644
 | ||
| --- a/ghc/includes/PrimOps.h
 | ||
| +++ b/ghc/includes/PrimOps.h
 | ||
| @@ -893,6 +893,7 @@ EXTFUN_RTS(mkForeignObjzh_fast);
 | ||
|  #define STG_SIG_ERR  (-3)
 | ||
|  #define STG_SIG_HAN  (-4)
 | ||
|  
 | ||
| +#include <signal.h>
 | ||
|  extern StgInt sig_install (StgInt, StgInt, StgStablePtr, sigset_t *);
 | ||
|  #define stg_sig_default(sig,mask) sig_install(sig,STG_SIG_DFL,0,(sigset_t *)mask)
 | ||
|  #define stg_sig_ignore(sig,mask) sig_install(sig,STG_SIG_IGN,0,(sigset_t *)mask)
 | ||
| diff --git a/ghc/rts/RtsFlags.c b/ghc/rts/RtsFlags.c
 | ||
| index a05036f..9cd6c83 100644
 | ||
| --- a/ghc/rts/RtsFlags.c
 | ||
| +++ b/ghc/rts/RtsFlags.c
 | ||
| @@ -1132,8 +1132,7 @@ process_gran_option(int arg, int *rts_argc, char *rts_argv[], rtsBool *error)
 | ||
|  	      } else if (RtsFlags.GranFlags.proc > MAX_PROC || 
 | ||
|  			 RtsFlags.GranFlags.proc < 1)
 | ||
|  		{
 | ||
| -		  fprintf(stderr,"setupRtsFlags: no more than %u processors
 | ||
| -allowed\n", 
 | ||
| +		  fprintf(stderr,"setupRtsFlags: no more than %u processors allowed\n", 
 | ||
|  			  MAX_PROC);
 | ||
|  		  *error = rtsTrue;
 | ||
|  		}
 | ||
| diff --git a/ghc/rts/gmp/longlong.h b/ghc/rts/gmp/longlong.h
 | ||
| index 382fcc0..0cf79fa 100644
 | ||
| --- a/ghc/rts/gmp/longlong.h
 | ||
| +++ b/ghc/rts/gmp/longlong.h
 | ||
| @@ -106,7 +106,7 @@ MA 02111-1307, USA. */
 | ||
|  
 | ||
|  #if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("add %1,%4,%5
 | ||
| +  __asm__ ("add %1,%4,%5\n\
 | ||
|  	addc %0,%2,%3"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	    "=&r" ((USItype)(sl))					\
 | ||
| @@ -115,7 +115,7 @@ MA 02111-1307, USA. */
 | ||
|  	     "%r" ((USItype)(al)),					\
 | ||
|  	     "rI" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("sub %1,%4,%5
 | ||
| +  __asm__ ("sub %1,%4,%5\n\
 | ||
|  	subc %0,%2,%3"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -173,7 +173,7 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__arm__) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("adds	%1, %4, %5
 | ||
| +  __asm__ ("adds	%1, %4, %5\n\
 | ||
|  	adc	%0, %2, %3"						\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -182,7 +182,7 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  	     "%r" ((USItype)(al)),					\
 | ||
|  	     "rI" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("subs	%1, %4, %5
 | ||
| +  __asm__ ("subs	%1, %4, %5\n\
 | ||
|  	sbc	%0, %2, %3"						\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -191,18 +191,18 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  	     "r" ((USItype)(al)),					\
 | ||
|  	     "rI" ((USItype)(bl)))
 | ||
|  #define umul_ppmm(xh, xl, a, b) \
 | ||
| -  __asm__ ("%@ Inlined umul_ppmm
 | ||
| -	mov	%|r0, %2, lsr #16
 | ||
| -	mov	%|r2, %3, lsr #16
 | ||
| -	bic	%|r1, %2, %|r0, lsl #16
 | ||
| -	bic	%|r2, %3, %|r2, lsl #16
 | ||
| -	mul	%1, %|r1, %|r2
 | ||
| -	mul	%|r2, %|r0, %|r2
 | ||
| -	mul	%|r1, %0, %|r1
 | ||
| -	mul	%0, %|r0, %0
 | ||
| -	adds	%|r1, %|r2, %|r1
 | ||
| -	addcs	%0, %0, #65536
 | ||
| -	adds	%1, %1, %|r1, lsl #16
 | ||
| +  __asm__ ("%@ Inlined umul_ppmm\n\
 | ||
| +	mov	%|r0, %2, lsr #16\n\
 | ||
| +	mov	%|r2, %3, lsr #16\n\
 | ||
| +	bic	%|r1, %2, %|r0, lsl #16\n\
 | ||
| +	bic	%|r2, %3, %|r2, lsl #16\n\
 | ||
| +	mul	%1, %|r1, %|r2\n\
 | ||
| +	mul	%|r2, %|r0, %|r2\n\
 | ||
| +	mul	%|r1, %0, %|r1\n\
 | ||
| +	mul	%0, %|r0, %0\n\
 | ||
| +	adds	%|r1, %|r2, %|r1\n\
 | ||
| +	addcs	%0, %0, #65536\n\
 | ||
| +	adds	%1, %1, %|r1, lsl #16\n\
 | ||
|  	adc	%0, %0, %|r1, lsr #16"					\
 | ||
|  	   : "=&r" ((USItype)(xh)),					\
 | ||
|  	     "=r" ((USItype)(xl))					\
 | ||
| @@ -243,7 +243,7 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__gmicro__) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("add.w %5,%1
 | ||
| +  __asm__ ("add.w %5,%1\n\
 | ||
|  	addx %3,%0"							\
 | ||
|  	   : "=g" ((USItype)(sh)),					\
 | ||
|  	     "=&g" ((USItype)(sl))					\
 | ||
| @@ -252,7 +252,7 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  	     "%1" ((USItype)(al)),					\
 | ||
|  	     "g" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("sub.w %5,%1
 | ||
| +  __asm__ ("sub.w %5,%1\n\
 | ||
|  	subx %3,%0"							\
 | ||
|  	   : "=g" ((USItype)(sh)),					\
 | ||
|  	     "=&g" ((USItype)(sl))					\
 | ||
| @@ -282,7 +282,7 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__hppa) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("add %4,%5,%1
 | ||
| +  __asm__ ("add %4,%5,%1\n\
 | ||
|  	addc %2,%3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -291,7 +291,7 @@ extern UDItype __udiv_qrnnd ();
 | ||
|  	     "%rM" ((USItype)(al)),					\
 | ||
|  	     "rM" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("sub %4,%5,%1
 | ||
| +  __asm__ ("sub %4,%5,%1\n\
 | ||
|  	subb %2,%3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -330,21 +330,21 @@ extern USItype __udiv_qrnnd ();
 | ||
|    do {									\
 | ||
|      USItype __tmp;							\
 | ||
|      __asm__ (								\
 | ||
| -       "ldi		1,%0
 | ||
| -	extru,=		%1,15,16,%%r0		; Bits 31..16 zero?
 | ||
| -	extru,tr	%1,15,16,%1		; No.  Shift down, skip add.
 | ||
| -	ldo		16(%0),%0		; Yes.  Perform add.
 | ||
| -	extru,=		%1,23,8,%%r0		; Bits 15..8 zero?
 | ||
| -	extru,tr	%1,23,8,%1		; No.  Shift down, skip add.
 | ||
| -	ldo		8(%0),%0		; Yes.  Perform add.
 | ||
| -	extru,=		%1,27,4,%%r0		; Bits 7..4 zero?
 | ||
| -	extru,tr	%1,27,4,%1		; No.  Shift down, skip add.
 | ||
| -	ldo		4(%0),%0		; Yes.  Perform add.
 | ||
| -	extru,=		%1,29,2,%%r0		; Bits 3..2 zero?
 | ||
| -	extru,tr	%1,29,2,%1		; No.  Shift down, skip add.
 | ||
| -	ldo		2(%0),%0		; Yes.  Perform add.
 | ||
| -	extru		%1,30,1,%1		; Extract bit 1.
 | ||
| -	sub		%0,%1,%0		; Subtract it.
 | ||
| +       "ldi		1,%0\n\
 | ||
| +	extru,=		%1,15,16,%%r0		; Bits 31..16 zero?\n\
 | ||
| +	extru,tr	%1,15,16,%1		; No.  Shift down, skip add.\n\
 | ||
| +	ldo		16(%0),%0		; Yes.  Perform add.\n\
 | ||
| +	extru,=		%1,23,8,%%r0		; Bits 15..8 zero?\n\
 | ||
| +	extru,tr	%1,23,8,%1		; No.  Shift down, skip add.\n\
 | ||
| +	ldo		8(%0),%0		; Yes.  Perform add.\n\
 | ||
| +	extru,=		%1,27,4,%%r0		; Bits 7..4 zero?\n\
 | ||
| +	extru,tr	%1,27,4,%1		; No.  Shift down, skip add.\n\
 | ||
| +	ldo		4(%0),%0		; Yes.  Perform add.\n\
 | ||
| +	extru,=		%1,29,2,%%r0		; Bits 3..2 zero?\n\
 | ||
| +	extru,tr	%1,29,2,%1		; No.  Shift down, skip add.\n\
 | ||
| +	ldo		2(%0),%0		; Yes.  Perform add.\n\
 | ||
| +	extru		%1,30,1,%1		; Extract bit 1.\n\
 | ||
| +	sub		%0,%1,%0		; Subtract it.\n\
 | ||
|  	" : "=r" (count), "=r" (__tmp) : "1" (x));			\
 | ||
|    } while (0)
 | ||
|  #endif /* hppa */
 | ||
| @@ -392,7 +392,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("addl %5,%1
 | ||
| +  __asm__ ("addl %5,%1\n\
 | ||
|  	adcl %3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -401,7 +401,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "%1" ((USItype)(al)),					\
 | ||
|  	     "g" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("subl %5,%1
 | ||
| +  __asm__ ("subl %5,%1\n\
 | ||
|  	sbbl %3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -514,7 +514,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("add%.l %5,%1
 | ||
| +  __asm__ ("add%.l %5,%1\n\
 | ||
|  	addx%.l %3,%0"							\
 | ||
|  	   : "=d" ((USItype)(sh)),					\
 | ||
|  	     "=&d" ((USItype)(sl))					\
 | ||
| @@ -523,7 +523,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "%1" ((USItype)(al)),					\
 | ||
|  	     "g" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("sub%.l %5,%1
 | ||
| +  __asm__ ("sub%.l %5,%1\n\
 | ||
|  	subx%.l %3,%0"							\
 | ||
|  	   : "=d" ((USItype)(sh)),					\
 | ||
|  	     "=&d" ((USItype)(sl))					\
 | ||
| @@ -562,27 +562,27 @@ extern USItype __udiv_qrnnd ();
 | ||
|  #else /* not mc68020 */
 | ||
|  #define umul_ppmm(xh, xl, a, b) \
 | ||
|    do { USItype __umul_tmp1, __umul_tmp2;				\
 | ||
| -	__asm__ ("| Inlined umul_ppmm
 | ||
| -	move%.l	%5,%3
 | ||
| -	move%.l	%2,%0
 | ||
| -	move%.w	%3,%1
 | ||
| -	swap	%3
 | ||
| -	swap	%0
 | ||
| -	mulu	%2,%1
 | ||
| -	mulu	%3,%0
 | ||
| -	mulu	%2,%3
 | ||
| -	swap	%2
 | ||
| -	mulu	%5,%2
 | ||
| -	add%.l	%3,%2
 | ||
| -	jcc	1f
 | ||
| -	add%.l	%#0x10000,%0
 | ||
| -1:	move%.l	%2,%3
 | ||
| -	clr%.w	%2
 | ||
| -	swap	%2
 | ||
| -	swap	%3
 | ||
| -	clr%.w	%3
 | ||
| -	add%.l	%3,%1
 | ||
| -	addx%.l	%2,%0
 | ||
| +	__asm__ ("| Inlined umul_ppmm\n\
 | ||
| +	move%.l	%5,%3\n\
 | ||
| +	move%.l	%2,%0\n\
 | ||
| +	move%.w	%3,%1\n\
 | ||
| +	swap	%3\n\
 | ||
| +	swap	%0\n\
 | ||
| +	mulu	%2,%1\n\
 | ||
| +	mulu	%3,%0\n\
 | ||
| +	mulu	%2,%3\n\
 | ||
| +	swap	%2\n\
 | ||
| +	mulu	%5,%2\n\
 | ||
| +	add%.l	%3,%2\n\
 | ||
| +	jcc	1f\n\
 | ||
| +	add%.l	%#0x10000,%0\n\
 | ||
| +1:	move%.l	%2,%3\n\
 | ||
| +	clr%.w	%2\n\
 | ||
| +	swap	%2\n\
 | ||
| +	swap	%3\n\
 | ||
| +	clr%.w	%3\n\
 | ||
| +	add%.l	%3,%1\n\
 | ||
| +	addx%.l	%2,%0\n\
 | ||
|  	| End inlined umul_ppmm"					\
 | ||
|  	      : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)),		\
 | ||
|  	        "=d" (__umul_tmp1), "=&d" (__umul_tmp2)			\
 | ||
| @@ -595,7 +595,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__m88000__) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("addu.co %1,%r4,%r5
 | ||
| +  __asm__ ("addu.co %1,%r4,%r5\n\
 | ||
|  	addu.ci %0,%r2,%r3"						\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -604,7 +604,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "%rJ" ((USItype)(al)),					\
 | ||
|  	     "rJ" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("subu.co %1,%r4,%r5
 | ||
| +  __asm__ ("subu.co %1,%r4,%r5\n\
 | ||
|  	subu.ci %0,%r2,%r3"						\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -663,8 +663,8 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "d" ((USItype)(v)))
 | ||
|  #else
 | ||
|  #define umul_ppmm(w1, w0, u, v) \
 | ||
| -  __asm__ ("multu %2,%3
 | ||
| -	mflo %0
 | ||
| +  __asm__ ("multu %2,%3\n\
 | ||
| +	mflo %0\n\
 | ||
|  	mfhi %1"							\
 | ||
|  	   : "=d" ((USItype)(w0)),					\
 | ||
|  	     "=d" ((USItype)(w1))					\
 | ||
| @@ -685,8 +685,8 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "d" ((UDItype)(v)))
 | ||
|  #else
 | ||
|  #define umul_ppmm(w1, w0, u, v) \
 | ||
| -  __asm__ ("dmultu %2,%3
 | ||
| -	mflo %0
 | ||
| +  __asm__ ("dmultu %2,%3\n\
 | ||
| +	mflo %0\n\
 | ||
|  	mfhi %1"							\
 | ||
|  	   : "=d" ((UDItype)(w0)),					\
 | ||
|  	     "=d" ((UDItype)(w1))					\
 | ||
| @@ -855,7 +855,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__pyr__) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("addw	%5,%1
 | ||
| +  __asm__ ("addw	%5,%1\n\
 | ||
|  	addwc	%3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -864,7 +864,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "%1" ((USItype)(al)),					\
 | ||
|  	     "g" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("subw	%5,%1
 | ||
| +  __asm__ ("subw	%5,%1\n\
 | ||
|  	subwb	%3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -877,7 +877,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|    ({union {UDItype __ll;						\
 | ||
|  	   struct {USItype __h, __l;} __i;				\
 | ||
|  	  } __xx;							\
 | ||
| -  __asm__ ("movw %1,%R0
 | ||
| +  __asm__ ("movw %1,%R0\n\
 | ||
|  	uemul %2,%0"							\
 | ||
|  	   : "=&r" (__xx.__ll)						\
 | ||
|  	   : "g" ((USItype) (u)),					\
 | ||
| @@ -887,7 +887,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__ibm032__) /* RT/ROMP */  && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("a %1,%5
 | ||
| +  __asm__ ("a %1,%5\n\
 | ||
|  	ae %0,%3"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -896,7 +896,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "%1" ((USItype)(al)),					\
 | ||
|  	     "r" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("s %1,%5
 | ||
| +  __asm__ ("s %1,%5\n\
 | ||
|  	se %0,%3"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -908,25 +908,25 @@ extern USItype __udiv_qrnnd ();
 | ||
|    do {									\
 | ||
|      USItype __m0 = (m0), __m1 = (m1);					\
 | ||
|      __asm__ (								\
 | ||
| -       "s	r2,r2
 | ||
| -	mts	r10,%2
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	m	r2,%3
 | ||
| -	cas	%0,r2,r0
 | ||
| +       "s	r2,r2\n\
 | ||
| +	mts	r10,%2\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	m	r2,%3\n\
 | ||
| +	cas	%0,r2,r0\n\
 | ||
|  	mfs	r10,%1"							\
 | ||
|  	     : "=r" ((USItype)(ph)),					\
 | ||
|  	       "=r" ((USItype)(pl))					\
 | ||
| @@ -957,8 +957,8 @@ extern USItype __udiv_qrnnd ();
 | ||
|  #if defined (__sh2__) && W_TYPE_SIZE == 32
 | ||
|  #define umul_ppmm(w1, w0, u, v) \
 | ||
|    __asm__ (								\
 | ||
| -       "dmulu.l	%2,%3
 | ||
| -	sts	macl,%1
 | ||
| +       "dmulu.l	%2,%3\n\
 | ||
| +	sts	macl,%1\n\
 | ||
|  	sts	mach,%0"						\
 | ||
|  	   : "=r" ((USItype)(w1)),					\
 | ||
|  	     "=r" ((USItype)(w0))					\
 | ||
| @@ -970,7 +970,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__sparc__) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("addcc %r4,%5,%1
 | ||
| +  __asm__ ("addcc %r4,%5,%1\n\
 | ||
|  	addx %r2,%3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -980,7 +980,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "rI" ((USItype)(bl))					\
 | ||
|  	   __CLOBBER_CC)
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("subcc %r4,%5,%1
 | ||
| +  __asm__ ("subcc %r4,%5,%1\n\
 | ||
|  	subx %r2,%3,%0"							\
 | ||
|  	   : "=r" ((USItype)(sh)),					\
 | ||
|  	     "=&r" ((USItype)(sl))					\
 | ||
| @@ -1027,44 +1027,44 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "r" ((USItype)(v)))
 | ||
|  #define UMUL_TIME 5
 | ||
|  #define udiv_qrnnd(q, r, n1, n0, d) \
 | ||
| -  __asm__ ("! Inlined udiv_qrnnd
 | ||
| -	wr	%%g0,%2,%%y	! Not a delayed write for sparclite
 | ||
| -	tst	%%g0
 | ||
| -	divscc	%3,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%%g1
 | ||
| -	divscc	%%g1,%4,%0
 | ||
| -	rd	%%y,%1
 | ||
| -	bl,a 1f
 | ||
| -	add	%1,%4,%1
 | ||
| +  __asm__ ("! Inlined udiv_qrnnd\n\
 | ||
| +	wr	%%g0,%2,%%y	! Not a delayed write for sparclite\n\
 | ||
| +	tst	%%g0\n\
 | ||
| +	divscc	%3,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%%g1\n\
 | ||
| +	divscc	%%g1,%4,%0\n\
 | ||
| +	rd	%%y,%1\n\
 | ||
| +	bl,a 1f\n\
 | ||
| +	add	%1,%4,%1\n\
 | ||
|  1:	! End of inline udiv_qrnnd"					\
 | ||
|  	   : "=r" ((USItype)(q)),					\
 | ||
|  	     "=r" ((USItype)(r))					\
 | ||
| @@ -1085,45 +1085,45 @@ extern USItype __udiv_qrnnd ();
 | ||
|  /* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd.  */
 | ||
|  #ifndef umul_ppmm
 | ||
|  #define umul_ppmm(w1, w0, u, v) \
 | ||
| -  __asm__ ("! Inlined umul_ppmm
 | ||
| -	wr	%%g0,%2,%%y	! SPARC has 0-3 delay insn after a wr
 | ||
| -	sra	%3,31,%%g2	! Don't move this insn
 | ||
| -	and	%2,%%g2,%%g2	! Don't move this insn
 | ||
| -	andcc	%%g0,0,%%g1	! Don't move this insn
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,%3,%%g1
 | ||
| -	mulscc	%%g1,0,%%g1
 | ||
| -	add	%%g1,%%g2,%0
 | ||
| +  __asm__ ("! Inlined umul_ppmm\n\
 | ||
| +	wr	%%g0,%2,%%y	! SPARC has 0-3 delay insn after a wr\n\
 | ||
| +	sra	%3,31,%%g2	! Don't move this insn\n\
 | ||
| +	and	%2,%%g2,%%g2	! Don't move this insn\n\
 | ||
| +	andcc	%%g0,0,%%g1	! Don't move this insn\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,%3,%%g1\n\
 | ||
| +	mulscc	%%g1,0,%%g1\n\
 | ||
| +	add	%%g1,%%g2,%0\n\
 | ||
|  	rd	%%y,%1"							\
 | ||
|  	   : "=r" ((USItype)(w1)),					\
 | ||
|  	     "=r" ((USItype)(w0))					\
 | ||
| @@ -1147,7 +1147,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  
 | ||
|  #if defined (__vax__) && W_TYPE_SIZE == 32
 | ||
|  #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("addl2 %5,%1
 | ||
| +  __asm__ ("addl2 %5,%1\n\
 | ||
|  	adwc %3,%0"							\
 | ||
|  	   : "=g" ((USItype)(sh)),					\
 | ||
|  	     "=&g" ((USItype)(sl))					\
 | ||
| @@ -1156,7 +1156,7 @@ extern USItype __udiv_qrnnd ();
 | ||
|  	     "%1" ((USItype)(al)),					\
 | ||
|  	     "g" ((USItype)(bl)))
 | ||
|  #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 | ||
| -  __asm__ ("subl2 %5,%1
 | ||
| +  __asm__ ("subl2 %5,%1\n\
 | ||
|  	sbwc %3,%0"							\
 | ||
|  	   : "=g" ((USItype)(sh)),					\
 | ||
|  	     "=&g" ((USItype)(sl))					\
 | ||
| diff --git a/ghc/lib/std/CPUTime.lhs b/ghc/lib/std/CPUTime.lhs
 | ||
| --- a/ghc/lib/std/CPUTime.lhs
 | ||
| +++ b/ghc/lib/std/CPUTime.lhs
 | ||
| @@ -9,6 +9,6 @@
 | ||
|  module CPUTime 
 | ||
|  	(
 | ||
|           getCPUTime,       -- :: IO Integer
 | ||
| -	 cpuTimePrecision  -- ::<3A>Integer
 | ||
| +	 cpuTimePrecision  -- :: Integer
 | ||
|          ) where
 | ||
|  \end{code}
 | ||
|  
 |