[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