[nhc-users] failure to compile on mips-sgi6.5

Malcolm Wallace Malcolm.Wallace at cs.york.ac.uk
Tue Dec 16 16:40:21 EST 2003


I wrote earlier:

>                    We do not yet know the exact cause, or a fix,
> although we think it is probably something to do with changes in the
> gcc-3.x series compiler that break various assumptions made by the
> nhc98 code generator.

In fact, by chance another nhc98-user reported a similar failure
yesterday, and was able to give me access to the machine on which the
failure occurred.  This enabled me to discover the cause and find
a fix, which in his case was due to a change in the assembler code
format between gcc-3.2 and gcc-3.3.

If you are also using gcc-3.3, then it is possible that the same fix
might cure your build error as well.

To try it out, please delete your build tree, and unpack a fresh copy.
Then apply the patch attached to this message, which should contain
all the fixes we already discussed for the mips-irix6 build, together
with the new fix.  If you are not familiar with the patch utility,
it should be as simple as this:
    cd nhc98-1.16
    patch -p1 <patch-1.16-gcc3.3
Finally, start the build again with
    ./configure
    make basic

Regards,
    Malcolm
-------------- next part --------------
diff -u -r nhc98-1.16-old/include/HsFFI.h nhc98-1.16/include/HsFFI.h
--- nhc98-1.16-old/include/HsFFI.h	2002-04-05 18:06:13.000000000 +0100
+++ nhc98-1.16/include/HsFFI.h	2003-12-16 16:33:02.000000000 +0000
@@ -14,7 +14,7 @@
      typedef unsigned int    uint32_t;
      typedef unsigned long long   uint64_t;
 #  else
-#    if defined(__sun__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+#    if defined(__sun__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sgi)
 #      include <inttypes.h>
 #    else
 #      include <stdint.h>
diff -u -r nhc98-1.16-old/script/nhc98.inst nhc98-1.16/script/nhc98.inst
--- nhc98-1.16-old/script/nhc98.inst	2003-03-07 16:48:45.000000000 +0000
+++ nhc98-1.16/script/nhc98.inst	2003-12-16 16:30:11.000000000 +0000
@@ -543,6 +543,7 @@
           echo $CPPAS $ENDIAN $CPPASFLAGS $CINCDIRS $TMPCPPASFILE -o $TMPASFILE
 	fi
 	$CPPAS $ENDIAN $CPPASFLAGS $CINCDIRS $TMPCPPASFILE -o - | \
+                sed -e '/.p2align 5/s/5/2/' |\
 		sed -e '/.align 32/s/32/4/' >$TMPASFILE		# evil mangler!
 	if test $CSRC -eq 0
         then
diff -u -r nhc98-1.16-old/src/prelude/Makefile nhc98-1.16/src/prelude/Makefile
--- nhc98-1.16-old/src/prelude/Makefile	2002-10-07 15:05:46.000000000 +0100
+++ nhc98-1.16/src/prelude/Makefile	2003-12-16 16:34:55.000000000 +0000
@@ -45,7 +45,7 @@
 prel: $(patsubst %,%.make,${PRELSUBDIRS})
 boot: ${OBJDIR} ${OBJDIRS} ${SUBDIRBOOT}
 	cd $(OBJDIR); $(AR) $(ARFLAGS) ${ARCHIVE} */*.$O
-	ranlib ${ARCHIVE}
+	-ranlib ${ARCHIVE}
 objdir: ${OBJDIR} ${OBJDIRS}
 cfiles: ${SUBDIRCFILES}
 fromC: ${OBJDIR} ${OBJDIRS} ${SUBDIRFROMC}
@@ -86,11 +86,11 @@
 
 relink:
 	cd $(OBJDIR); $(AR) $(ARFLAGS) ${ARCHIVE} */*.$O
-	ranlib ${ARCHIVE}
+	-ranlib ${ARCHIVE}
 
 ${ARCHIVE}: ${OBJDIR} ${OBJDIRS} ${SUBDIRTARGETS}
 	cd $(OBJDIR); $(AR) $(ARFLAGS) $@ */*.$O
-	ranlib $@
+	-ranlib $@
 
 #else    #### PHtprof
 #
@@ -295,7 +295,7 @@
 cfiles: ${SUBDIRCFILES}
 fromC: ${OBJDIR} ${OBJDIRS} ${SUBDIRFROMC}
 	cd $(OBJDIR); $(AR) $(ARFLAGS) $(ARCHIVE) */*.o
-	ranlib $(ARCHIVE)
+	-ranlib $(ARCHIVE)
 hiclean: ${HICLEAN}
 ifeq "${TPROF}" ""
 clean: ${CLEANDIRS}
@@ -337,11 +337,11 @@
 ${ARCHIVE}: ${OBJDIR} ${OBJDIRS} ${SUBDIRSMK}
 	rm -f $@
 	cd $(OBJDIR); $(AR) $(ARFLAGS) ${ARCHIVE} */*.T.o
-	ranlib $@
+	-ranlib $@
 
 relink:
 	cd $(OBJDIR); $(AR) $(ARFLAGS) ${ARCHIVE} */*.T.o
-	ranlib ${ARCHIVE}
+	-ranlib ${ARCHIVE}
 
 endif
 endif
@@ -485,7 +485,7 @@
 	cd $(OBJDIR); $(AR) $(ARFLAGS) $@ \
 	$(patsubst ${DST}/%.${CFG}.a, ${OBJDIR}/tpl?%.o,$@) \
 	$(patsubst ${DST}/%.${CFG}.a, ${OBJDIR}/%/*.${O},$@)
-	ranlib $@
+	-ranlib $@
 
 #All the tpl?*.o are in ${BUILDDIR}/obj/prelude/
 TPLABELS:= ${TPLABELS3} ${TPLABELS1}
diff -u -r nhc98-1.16-old/src/runtime/Integer/alloca.c nhc98-1.16/src/runtime/Integer/alloca.c
--- nhc98-1.16-old/src/runtime/Integer/alloca.c	1999-10-11 12:50:23.000000000 +0100
+++ nhc98-1.16/src/runtime/Integer/alloca.c	2003-12-16 16:34:05.000000000 +0000
@@ -4,5 +4,5 @@
 void *alloca (unsigned size)
 {
   fprintf(stderr,"Falilure alloca %d called:-(\n",size);
-  abort(-1);
+  abort();
 }
diff -u -r nhc98-1.16-old/src/runtime/Integer/asmlong.h nhc98-1.16/src/runtime/Integer/asmlong.h
--- nhc98-1.16-old/src/runtime/Integer/asmlong.h	2003-02-27 10:19:30.000000000 +0000
+++ nhc98-1.16/src/runtime/Integer/asmlong.h	2003-12-16 16:33:42.000000000 +0000
@@ -1,13 +1,13 @@
 #if defined (__a29k__) || defined (___AM29K__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add %1,%4,%5
-	addc %0,%2,%3"							\
+  __asm__ ("add %1,%4,%5\n"	\
+"	addc %0,%2,%3"		\
 	 : "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl)) \
 	 : "%r" ((unsigned long int)(ah)), "rI" ((unsigned long int)(bh)), \
 	   "%r" ((unsigned long int)(al)), "rI" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub %1,%4,%5
-	subc %0,%2,%3"							\
+  __asm__ ("sub %1,%4,%5\n"	\
+"	subc %0,%2,%3"		\
 	 : "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl)) \
 	 : "r" ((unsigned long int)(ah)), "rI" ((unsigned long int)(bh)), \
 	   "r" ((unsigned long int)(al)), "rI" ((unsigned long int)(bl)))
@@ -31,14 +31,14 @@
 
 #if defined (__arm__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("adds %1,%4,%5
-	adc %0,%2,%3"							\
+  __asm__ ("adds %1,%4,%5\n"	\
+"	adc %0,%2,%3"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl)) \
 	: "%r" ((unsigned long int)(ah)), "rI" ((unsigned long int)(bh)), \
 	  "%r" ((unsigned long int)(al)), "rI" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subs %1,%4,%5
-	sbc %0,%2,%3"							\
+  __asm__ ("subs %1,%4,%5\n"	\
+"	sbc %0,%2,%3"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl)) \
 	: "r" ((unsigned long int)(ah)), "rI" ((unsigned long int)(bh)), \
 	  "r" ((unsigned long int)(al)), "rI" ((unsigned long int)(bl)))
@@ -46,14 +46,14 @@
 
 #if defined (__gmicro__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add.w %5,%1
-	addx %3,%0"							\
+  __asm__ ("add.w %5,%1\n"	\
+"	addx %3,%0"		\
        : "=g" ((unsigned long int)(sh)), "=&g" ((unsigned long int)(sl))\
        : "%0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),	\
 	 "%1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub.w %5,%1
-	subx %3,%0"							\
+  __asm__ ("sub.w %5,%1\n"	\
+"	subx %3,%0"		\
        : "=g" ((unsigned long int)(sh)), "=&g" ((unsigned long int)(sl))\
        : "0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),	\
 	 "1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
@@ -74,14 +74,14 @@
 
 #if defined (__hppa)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add %4,%5,%1
-        addc %2,%3,%0"				\
+  __asm__ ("add %4,%5,%1\n"	\
+"        addc %2,%3,%0"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "%r" ((unsigned long int)(ah)), "r" ((unsigned long int)(bh)),\
 	  "%r" ((unsigned long int)(al)), "r" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub %5,%4,%1
-        subb %3,%2,%0"				\
+  __asm__ ("sub %5,%4,%1\n"	\
+"        subb %3,%2,%0"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "r" ((unsigned long int)(ah)), "r" ((unsigned long int)(bh)),	\
 	  "r" ((unsigned long int)(al)), "r" ((unsigned long int)(bl)))
@@ -89,14 +89,14 @@
 
 #if defined (__i386__) || defined (__i486__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addl %5,%1
-	adcl %3,%0"							\
+  __asm__ ("addl %5,%1\n"	\
+"	adcl %3,%0"		\
        : "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
        : "%0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),	\
 	 "%1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subl %5,%1
-	sbbl %3,%0"							\
+  __asm__ ("subl %5,%1\n"	\
+"	sbbl %3,%0"		\
        : "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
        : "0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),	\
 	 "1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
@@ -157,14 +157,14 @@
 
 #if defined (___IBMR2__) /* IBM RS6000 */
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("a %1,%4,%5
-	ae %0,%2,%3"							\
+  __asm__ ("a %1,%4,%5\n"	\
+"	ae %0,%2,%3"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "%r" ((unsigned long int)(ah)), "r" ((unsigned long int)(bh)),\
 	  "%r" ((unsigned long int)(al)), "r" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sf %1,%5,%4
-	sfe %0,%3,%2"							\
+  __asm__ ("sf %1,%5,%4\n"	\
+"	sfe %0,%3,%2"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "r" ((unsigned long int)(ah)), "r" ((unsigned long int)(bh)),	\
 	  "r" ((unsigned long int)(al)), "r" ((unsigned long int)(bl)))
@@ -264,32 +264,32 @@
 	: "od" ((unsigned long int)(x)), "n" (0))
 #else /* not mc68020 */
 #define umul_ppmm(xh, xl, a, b) \
-  __asm__ ("| Inlined umul_ppmm
-	movel	%2,d0
-	movel	%3,d1
-	movel	d0,d2
-	swap	d0
-	movel	d1,d3
-	swap	d1
-	movew	d2,d4
-	mulu	d3,d4
-	mulu	d1,d2
-	mulu	d0,d3
-	mulu	d0,d1
-	movel	d4,d0
-	eorw	d0,d0
-	swap	d0
-	addl	d0,d2
-	addl	d3,d2
-	jcc	1f
-	addl	#65536,d1
-1:	swap	d2
-	moveq	#0,d0
-	movew	d2,d0
-	movew	d4,d2
-	movel	d2,%1
-	addl	d1,d0
-	movel	d0,%0"							\
+  __asm__ ("| Inlined umul_ppmm\n"	\
+"	movel	%2,d0\n"	\
+"	movel	%3,d1\n"	\
+"	movel	d0,d2\n"	\
+"	swap	d0\n"		\
+"	movel	d1,d3\n"	\
+"	swap	d1\n"		\
+"	movew	d2,d4\n"	\
+"	mulu	d3,d4\n"	\
+"	mulu	d1,d2\n"	\
+"	mulu	d0,d3\n"	\
+"	mulu	d0,d1\n"	\
+"	movel	d4,d0\n"	\
+"	eorw	d0,d0\n"	\
+"	swap	d0\n"		\
+"	addl	d0,d2\n"	\
+"	addl	d3,d2\n"	\
+"	jcc	1f\n"		\
+"	addl	#65536,d1\n"	\
+"1:	swap	d2\n"		\
+"	moveq	#0,d0\n"	\
+"	movew	d2,d0\n"	\
+"	movew	d4,d2\n"	\
+"	movel	d2,%1\n"	\
+"	addl	d1,d0\n"	\
+"	movel	d0,%0"		\
        : "=g" ((unsigned long int)(xh)), "=g" ((unsigned long int)(xl))	\
        :"g" ((unsigned long int)(a)), "g" ((unsigned long int)(b))	\
        : "d0", "d1", "d2", "d3", "d4")
@@ -298,14 +298,12 @@
 
 #if defined (__m88000__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addu.co %1,%r4,%r5
-	addu.ci %0,%r2,%r3"						\
+  __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3"			\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "%rJ" ((unsigned long int)(ah)), "rJ" ((unsigned long int)(bh)),\
 	  "%rJ" ((unsigned long int)(al)), "rJ" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subu.co %1,%r4,%r5
-	subu.ci %0,%r2,%r3"						\
+  __asm__ ("subu.co %1,%r4,%r5\n\t subu.ci %0,%r2,%r3"			\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "rJ" ((unsigned long int)(ah)), "rJ" ((unsigned long int)(bh)),\
 	  "rJ" ((unsigned long int)(al)), "rJ" ((unsigned long int)(bl)))
@@ -322,9 +320,9 @@
 
 #if defined (__mips__)
 #define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("multu %2,%3
-	mflo %0
-	mfhi %1"							\
+  __asm__ ("multu %2,%3\n"	\
+"	mflo %0\n"		\
+"	mfhi %1"		\
 	: "=r" ((unsigned long int)(w0)), "=r" ((unsigned long int)(w1))\
 	: "r" ((unsigned long int)(u)), "r" ((unsigned long int)(v)))
 #define UMUL_TIME 5
@@ -338,11 +336,11 @@
 	: "%0" ((unsigned long int)(u)), "g" ((unsigned long int)(v)));	\
       __w; })
 #define div_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("movd %2,r0
-	movd %3,r1
-	deid %4,r0
-	movd r1,%0
-	movd r0,%1"							\
+  __asm__ ("movd %2,r0\n"	\
+"	movd %3,r1\n"	\
+"	deid %4,r0\n"	\
+"	movd r1,%0\n"	\
+"	movd r0,%1"	\
 	: "=g" ((unsigned long int)(q)), "=g" ((unsigned long int)(r))	\
 	: "g" ((unsigned long int)(n0)), "g" ((unsigned long int)(n1)),	\
 	  "g" ((unsigned long int)(d)) : "r0", "r1")
@@ -350,23 +348,23 @@
 
 #if defined (__pyr__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addw	%5,%1
-	addwc	%3,%0"							\
+  __asm__ ("addw	%5,%1\n"	\
+"	addwc	%3,%0"							\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "%0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),\
 	  "%1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subw	%5,%1
-	subwb	%3,%0"							\
+  __asm__ ("subw	%5,%1\n"	\
+"	subwb	%3,%0"							\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),	\
 	  "1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
 /* This insn doesn't work on ancient pyramids.  */
 #define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("movw %2,tr11
-	uemul %3,tr10
-	movw tr10,%0
-	movw tr11,%1"							\
+  __asm__ ("movw %2,tr11\n"	\
+"	uemul %3,tr10\n"	\
+"	movw tr10,%0\n"		\
+"	movw tr11,%1"							\
 	: "=r" ((unsigned long int)(w1)), "=r" ((unsigned long int)(w0))\
 	: "r" ((unsigned long int)(u)), "r" ((unsigned long int)(v))	\
 	: "tr10", "tr11")
@@ -374,14 +372,14 @@
 
 #if defined (__ibm032__) /* RT/ROMP */
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("a %1,%5
-	ae %0,%3"							\
+  __asm__ ("a %1,%5\n"	\
+"	ae %0,%3"							\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "%0" ((unsigned long int)(ah)), "r" ((unsigned long int)(bh)),\
 	  "%1" ((unsigned long int)(al)), "r" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("s %1,%5
-	se %0,%3"							\
+  __asm__ ("s %1,%5\n"	\
+"	se %0,%3"							\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "0" ((unsigned long int)(ah)), "r" ((unsigned long int)(bh)),	\
 	  "1" ((unsigned long int)(al)), "r" ((unsigned long int)(bl)))
@@ -389,26 +387,26 @@
   do {									\
     unsigned long int __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
-	mfs	r10,%1"							\
+       "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" ((unsigned long int)(ph)), "=r" ((unsigned long int)(pl))	\
        : "%r" (__m0), "r" (__m1)					\
        : "r2");								\
@@ -433,14 +431,14 @@
 
 #if defined (__sparc__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addcc %4,%5,%1
-	addx %2,%3,%0"							\
+  __asm__ ("addcc %4,%5,%1\n"	\
+"	addx %2,%3,%0"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "%r" ((unsigned long int)(ah)), "rI" ((unsigned long int)(bh)),\
 	  "%r" ((unsigned long int)(al)), "rI" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subcc %4,%5,%1
-	subx %2,%3,%0"							\
+  __asm__ ("subcc %4,%5,%1\n"	\
+"	subx %2,%3,%0"		\
 	: "=r" ((unsigned long int)(sh)), "=&r" ((unsigned long int)(sl))\
 	: "r" ((unsigned long int)(ah)), "rI" ((unsigned long int)(bh)),\
 	  "r" ((unsigned long int)(al)), "rI" ((unsigned long int)(bl)))
@@ -458,46 +456,46 @@
 /* SPARC without integer multiplication and divide instructions.
    (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
 #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
-	rd	%%y,%1"							\
+  __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" ((unsigned long int)(w1)), "=r" ((unsigned long int)(w0))\
 	: "%rI" ((unsigned long int)(u)), "r" ((unsigned long int)(v))	\
        : "%g1", "%g2")
@@ -505,30 +503,30 @@
 /* It's quite necessary to add this much assembler for the sparc.
    The default udiv_qrnnd (in C) is more than 10 times slower!  */
 #define udiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("! Inlined udiv_qrnnd
-	mov	32,%%g1
-	subcc	%1,%2,%%g0
-1:	bcs	5f
-	 addxcc %0,%0,%0	! shift n1n0 and a q-bit in lsb
-	sub	%1,%2,%1	! this kills msb of n
-	addx	%1,%1,%1	! so this can't give carry
-	subcc	%%g1,1,%%g1
-2:	bne	1b
-	 subcc	%1,%2,%%g0
-	bcs	3f
-	 addxcc %0,%0,%0	! shift n1n0 and a q-bit in lsb
-	b	3f
-	 sub	%1,%2,%1	! this kills msb of n
-4:	sub	%1,%2,%1
-5:	addxcc	%1,%1,%1
-	bcc	2b
-	 subcc	%%g1,1,%%g1
-! Got carry from n.  Subtract next step to cancel this carry.
-	bne	4b
-	 addcc	%0,%0,%0	! shift n1n0 and a 0-bit in lsb
-	sub	%1,%2,%1
-3:	xnor	%0,0,%0
-	! End of inline udiv_qrnnd"					\
+  __asm__ ("! Inlined udiv_qrnnd\n"					\
+"	mov	32,%%g1\n"						\
+"	subcc	%1,%2,%%g0\n"						\
+"1:	bcs	5f\n"							\
+"	 addxcc %0,%0,%0	! shift n1n0 and a q-bit in lsb\n"	\
+"	sub	%1,%2,%1	! this kills msb of n\n"		\
+"	addx	%1,%1,%1	! so this can't give carry\n"		\
+"	subcc	%%g1,1,%%g1\n"						\
+"2:	bne	1b\n"							\
+"	 subcc	%1,%2,%%g0\n"						\
+"	bcs	3f\n"							\
+"	 addxcc %0,%0,%0	! shift n1n0 and a q-bit in lsb\n"	\
+"	b	3f\n"							\
+"	 sub	%1,%2,%1	! this kills msb of n\n"		\
+"4:	sub	%1,%2,%1\n"						\
+"5:	addxcc	%1,%1,%1\n"						\
+"	bcc	2b\n"							\
+"	 subcc	%%g1,1,%%g1\n"						\
+"! Got carry from n.  Subtract next step to cancel this carry.\n"	\
+"	bne	4b\n"							\
+"	 addcc	%0,%0,%0	! shift n1n0 and a 0-bit in lsb\n"	\
+"	sub	%1,%2,%1\n"						\
+"3:	xnor	%0,0,%0\n"						\
+"	! End of inline udiv_qrnnd"					\
 	: "=r&" ((unsigned long int)(q)), "=r&" ((unsigned long int)(r))\
 	: "r" ((unsigned long int)(d)), "1" ((unsigned long int)(n1)),	\
 	  "0" ((unsigned long int)(n0)) : "%g1")
@@ -538,14 +536,14 @@
 
 #if defined (__vax__)
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addl2 %5,%1
-	adwc %3,%0"							\
+  __asm__ ("addl2 %5,%1\n"	\
+"	adwc %3,%0"							\
 	: "=g" ((unsigned long int)(sh)), "=&g" ((unsigned long int)(sl))\
 	: "%0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),\
 	  "%1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subl2 %5,%1
-	sbwc %3,%0"							\
+  __asm__ ("subl2 %5,%1\n"	\
+"	sbwc %3,%0"							\
 	: "=g" ((unsigned long int)(sh)), "=&g" ((unsigned long int)(sl))\
 	: "0" ((unsigned long int)(ah)), "g" ((unsigned long int)(bh)),	\
 	  "1" ((unsigned long int)(al)), "g" ((unsigned long int)(bl)))
diff -u -r nhc98-1.16-old/src/runtime/Kernel/Makefile nhc98-1.16/src/runtime/Kernel/Makefile
--- nhc98-1.16-old/src/runtime/Kernel/Makefile	2003-02-05 15:39:18.000000000 +0000
+++ nhc98-1.16/src/runtime/Kernel/Makefile	2003-12-16 16:31:29.000000000 +0000
@@ -38,8 +38,9 @@
 ${AOBJS} ${OOBJS}: ${OBJDIR}/%.o: %.c
 	${CC} -c ${CFLAGS} -o $@ $<
 ${SOBJS}: ${OBJDIR}/%.o: %.c
-	${CC} -S ${CFLAGS} -o - $< | sed '/.align 32/s/32/4/' |\
-		 ${CC} -c -x assembler ${CFLAGS} -o $@ -
+	${CC} -S ${CFLAGS} -o - $< |\
+		sed -e '/.align 32/s/32/4/' -e '/.p2align 5/s/5/2/' |\
+		${CC} -c -x assembler-with-cpp ${CFLAGS} -o $@ -
 
 LINKS = bytecode.h cinterface.h mutlib.h newmacros.h \
 	node.h runtime.h stableptr.h newbytecode.h bytecode_o.h
diff -u -r nhc98-1.16-old/src/runtime/Kernel/mark.h nhc98-1.16/src/runtime/Kernel/mark.h
--- nhc98-1.16-old/src/runtime/Kernel/mark.h	2002-04-05 18:07:05.000000000 +0100
+++ nhc98-1.16/src/runtime/Kernel/mark.h	2003-12-16 16:32:43.000000000 +0000
@@ -4,7 +4,7 @@
 #if defined(__CYGWIN32__)
 #  include <sys/types.h>
 #else
-#  if defined(__sun__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+#  if defined(__sun__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sgi)
 #    include <inttypes.h>
 #  else
 #    include <stdint.h>
diff -u -r nhc98-1.16-old/src/runtime/Makefile nhc98-1.16/src/runtime/Makefile
--- nhc98-1.16-old/src/runtime/Makefile	2002-03-26 12:04:36.000000000 +0000
+++ nhc98-1.16/src/runtime/Makefile	2003-12-16 16:31:38.000000000 +0000
@@ -21,7 +21,7 @@
 install: ofiles afile
 	${INSTALL} ${OBJDIR}/Kernel/$(RUNTIME)$(SUF).a ${DST}
 	$(AR) $(ARFLAGS) ${DST}/$(RUNTIME)$(SUF).a ${OBJDIR}/Integer/*.o ${OBJDIR}/Builtin/*.o ${OBJDIR}/Mk/*.o
-	ranlib ${DST}/$(RUNTIME)$(SUF).a
+	-ranlib ${DST}/$(RUNTIME)$(SUF).a
 	${INSTALL} ${OBJDIR}/Kernel/mutator.o ${DST}/mutator$(SUF).o
 	${INSTALL} ${OBJDIR}/Kernel/mutlib.o ${DST}/mutlib$(SUF).o
 	${INSTALL} ${OBJDIR}/Kernel/main.o ${DST}/main$(SUF).o


More information about the Nhc-users mailing list