Some changes to unix.c to remove most conditionalization by machine
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Sun, 19 Feb 1989 17:52:08 +0000 (17:52 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Sun, 19 Feb 1989 17:52:08 +0000 (17:52 +0000)
and OS type.  Most of the code is now conditionalized according to
flags like HAS_<mumble> or macros defined by the included files.

mul.c is now included by fixnum.c, and all the assembly language
versions have been moved to mul.c.

v7/src/microcode/array.c
v7/src/microcode/array.h
v7/src/microcode/config.h
v7/src/microcode/fixnum.c
v7/src/microcode/mul.c
v7/src/microcode/sgraph_a.c
v7/src/microcode/version.h
v8/src/microcode/mul.c
v8/src/microcode/version.h

index 59e51954c3b3d2fac9bb01abb22f3cd09d1b82e5..07c34adba0ad59ae25771fb7e7e9736ee501c9ae 100644 (file)
@@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/array.c,v 9.33 1988/08/15 20:35:29 cph Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/array.c,v 9.34 1989/02/19 17:51:20 jinx Exp $ */
 
 /* ARRAY = 
    sequence of REAL(float or double numbers) with a tag on the front */
@@ -1439,7 +1439,7 @@ Pointer C_Array_To_Scheme_Vector(Array, Length) REAL *Array; long Length;
   *Now_Free++ = Make_Non_Pointer(TC_MANIFEST_VECTOR, Length);
 
   for (i=0; i<Length; i++) {
-    My_Store_Reduced_Flonum_Result( Array[i], *Now_Free);
+    Store_Reduced_Flonum_Result( Array[i], *Now_Free);
     Now_Free++; 
   }
   return Result;
index 240e1d417c5c389d69efd8acd8ae78e90bab2478..e08d6e69f4f76b57968d8f6c24956b24caae99e8 100644 (file)
@@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/array.h,v 9.28 1988/08/15 20:35:46 cph Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/array.h,v 9.29 1989/02/19 17:51:28 jinx Exp $ */
 \f
 
 #define REAL float
@@ -191,38 +191,3 @@ extern void    Scheme_Vector_To_C_Array();
 extern void Find_Offset_Scale_For_Linear_Map();
 /* REAL Min,Max, New_Min,New_Max, *Offset,*Scale;
  */
-
-/* other macros
- */
-#define My_Store_Flonum_Result(Ans, Value_Cell)                        \
-  (Value_Cell) = (Allocate_Float( ((double) Ans)));
-
-#define My_Store_Reduced_Flonum_Result(Ans, Value_Cell)                        \
-{ double Number = ((double) Ans);                                      \
-  double floor();                                                      \
-  Pointer result;                                                      \
-  if (floor(Number) != Number)                                         \
-  { My_Store_Flonum_Result(Number, Value_Cell);                                \
-  }                                                                    \
-  else if (Number == 0)                                                        \
-    (Value_Cell) = Make_Unsigned_Fixnum(0);                            \
-  if ((floor(Number) == Number) && (Number != 0))                      \
-  { int exponent;                                                      \
-    double frexp();                                                    \
-    frexp(Number, &exponent);                                          \
-    if (exponent <= FIXNUM_LENGTH)                                     \
-    { double_into_fixnum(Number, result);                              \
-      (Value_Cell) = result;                                           \
-    }                                                                  \
-    /* Since the float has no fraction, we will not gain               \
-       precision if its mantissa has enough bits to support            \
-       the exponent. */                                                        \
-    else if (exponent <= FLONUM_MANTISSA_BITS)                         \
-    {  result = Float_To_Big(Number);                                  \
-      (Value_Cell) = result;                                           \
-    }                                                                  \
-    else if (Number != 0)                                              \
-    { My_Store_Flonum_Result( (Ans), (Value_Cell));                    \
-    }                                                                  \
-  }                                                                    \
-}
index e3738a5a88c54dba813a5fde4437a92dd10d43a2..c3ad10676368992ad5e3c0df3ab3a0483fea9ba7 100644 (file)
@@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/config.h,v 9.40 1989/02/15 19:23:27 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/config.h,v 9.41 1989/02/19 17:51:33 jinx Exp $
  *
  * This file contains the configuration information and the information
  * given on the command line on Unix.
@@ -368,26 +368,21 @@ longjmp(Exit_Point, NORMAL_EXIT)
 #define ULONG_SIZE             32
 #define BELL                   '\007'
 
-#ifdef sun4
-#define FASL_INTERNAL_FORMAT   FASL_SUN4
-#define FLOATING_ALIGNMENT     0x7     /* Low 3 MBZ for float storage */
 #define FLONUM_EXPT_SIZE       10
 #define FLONUM_MANTISSA_BITS   53
 #define MAX_FLONUM_EXPONENT    1023
+
+#ifdef sun4
+#define FASL_INTERNAL_FORMAT   FASL_SUN4
+#define FLOATING_ALIGNMENT     0x7     /* Low 3 MBZ for float storage */
 #endif
 
 #ifdef sun3
 #define FASL_INTERNAL_FORMAT   FASL_68020
-#define FLONUM_EXPT_SIZE       10
-#define FLONUM_MANTISSA_BITS   53
-#define MAX_FLONUM_EXPONENT    1023
 #endif
 
 #ifndef FASL_INTERNAL_FORMAT
 #define FASL_INTERNAL_FORMAT   FASL_68000
-#define FLONUM_EXPT_SIZE       7
-#define FLONUM_MANTISSA_BITS   56
-#define MAX_FLONUM_EXPONENT    127
 #endif
 
 #define HAS_FLOOR
index 0dc5f2961ed3b19220e9075f0ea713d3784301d3..afc44cfd4a8292f4b5e3c47dd724817e6bf33c12 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/fixnum.c,v 9.26 1988/08/15 20:46:58 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/fixnum.c,v 9.27 1989/02/19 17:51:38 jinx Rel $
 
 Copyright (c) 1987, 1988 Massachusetts Institute of Technology
 
@@ -134,11 +134,12 @@ DEFINE_PRIMITIVE ("MINUS-FIXNUM", Prim_minus_fixnum, 2, 2, 0)
   FIXNUM_RESULT (result);
 }
 \f
+/* Fixnum multiplication routine with overflow detection. */
+
+#include "mul.c"
+
 DEFINE_PRIMITIVE ("MULTIPLY-FIXNUM", Prim_multiply_fixnum, 2, 2, 0)
 {
-  /* Mul, which does the multiplication with overflow handling, is
-     customized for some machines.  Therefore, it is in os.c */
-  extern Pointer Mul();
   fast long result;
   Primitive_2_Args ();
 
index fca9abac900a8385a14233c74a370ec348063e68..e160a81b3f57ee62b096bc21a1cf39f4fb92ba8c 100644 (file)
@@ -30,14 +30,154 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/mul.c,v 9.25 1989/02/17 15:05:19 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/mul.c,v 9.26 1989/02/19 17:51:47 jinx Rel $
  *
- * This file contains the portable fixnum multiplication procedure.
+ * This file contains the fixnum multiplication procedure.
  * Returns NIL if the result does not fit in a fixnum.
- * Note: This has only been tried on machines with long = 32 bits.
- * This file is included in the appropriate os file if needed.
+ * Note: The portable version has only been tried on machines with
+ * long = 32 bits.  This file is included in the appropriate os file.
  */
 \f
+extern Pointer Mul();
+
+#if defined(vax) && defined(bsd)
+
+#define MUL_HANDLED
+
+/* Note that "register" is used here (not "fast") since the
+   assembly code requires knowledge of the location of
+   the variables and they therefore must be in registers.
+   This is a kludge.  It depends on what register variables
+   get assigned to what registers.  It should be entirely
+   coded in assembly language.  -- JINX
+*/
+
+Pointer
+Mul(Arg1, Arg2)
+     Pointer Arg1, Arg2;
+{
+  register long A, B, C;
+
+  Sign_Extend(Arg1, A);
+  Sign_Extend(Arg2, B);
+  asm("        emul    r11,r10,$0,r10");  /* A is in 11, B in 10 */
+  C = A;
+  A = B;       /* What is all this shuffling? -- JINX */
+  B = C;
+  /* B should have high order result, A low order */
+  if (((B == 0)  && (A & (-1 << 23)) == 0) ||
+      ((B == -1) && (A & (-1 << 23)) == (-1 << 23)))
+  {
+    return (MAKE_SIGNED_FIXNUM(A));
+  }
+  else
+  {
+    return (NIL);
+  }
+}
+
+#endif
+\f
+/* 68k family code.  Uses hp9000s200 conventions for the new compiler. */
+
+#if defined(hp9000s200) && !defined(old_cc) && !defined(__GNUC__)
+#define MUL_HANDLED
+
+/* The following constants are hard coded in the assembly language
+ * code below.  The code assumes that d0 and d1 are scratch registers
+ * for the compiler.
+ */
+
+#if (NIL != 0) || (TC_FIXNUM != 0x1A)
+#include "Error: types changed.  Change assembly language appropriately"
+#endif
+
+#if defined(MC68020)
+
+static long Fixnum_Range[2] = {SMALLEST_FIXNUM , BIGGEST_FIXNUM};
+
+       asm("   text");
+       asm("   global _Mul");
+       asm("_Mul:");
+       asm("   bfexts  4(%sp){&8:&24},%d0");
+       asm("   bfexts  8(%sp){&8:&24},%d1");
+       asm("   muls.l  %d1,%d0");
+       asm("   bvs.b   result_is_nil");
+       asm("   cmp2.l  %d0,_Fixnum_Range");
+       asm("   bcs.b   result_is_nil");
+       asm("   moveq   &0x1A,%d1");
+       asm("   bfins   %d1,%d0{&0:&8}");
+       asm("   rts");
+       asm("result_is_nil:");
+       asm("   clr.l   %d0");
+       asm("   rts");
+       asm("   data");
+
+#else  /* not MC68020, but 68k family */
+
+       /* 20(sp) = arg0; 24(sp) = arg1 because of movem */
+
+       asm("   text");
+       asm("   global _Mul");
+       asm("_Mul:");
+       asm("   movem.l %d2-%d5,-(%sp)");
+       asm("   clr.b   %d5");
+       asm("   tst.b   21(%sp)");
+       asm("   slt     20(%sp)");
+       asm("   bge.b   coerce_1");
+       asm("   moveq   &1,%d5");
+       asm("   neg.l   20(%sp)");
+\f
+       asm("coerce_1:");
+       asm("   tst.b   25(%sp)");
+       asm("   slt     24(%sp)");
+       asm("   bge.b   after_coerce");
+       asm("   eori.b  &1,%d5");
+       asm("   neg.l   24(%sp)");
+       asm("after_coerce:");
+       asm("   move.l  20(%sp),%d0");
+       asm("   move.l  24(%sp),%d1");
+       asm("   move.w  %d0,%d2");
+       asm("   mulu    %d1,%d2");
+       asm("   move.w  %d1,%d4");
+       asm("   swap    %d1");
+       asm("   move.w  %d1,%d3");
+       asm("   mulu    %d0,%d3");
+       asm("   swap    %d0");
+       asm("   mulu    %d0,%d4");
+       asm("   add.l   %d4,%d3");
+       asm("   bcs.b   result_is_nil");
+       asm("   mulu    %d0,%d1");
+       asm("   bne.b   result_is_nil");
+       asm("   swap    %d2");
+       asm("   add.w   %d3,%d2");
+       asm("   bcs.b   result_is_nil");
+       asm("   swap    %d3");
+       asm("   tst.w   %d3");
+       asm("   bne.b   result_is_nil");
+       asm("   cmpi.w  %d2,&0x7F");
+       asm("   bgt.b   result_is_nil");
+       asm("   swap    %d2");
+       asm("   tst.b   %d5");
+       asm("   beq.b   sign_is_right");
+       asm("   neg.l   %d2");
+       asm("sign_is_right:");
+       asm("   move.l  %d2,-(%sp)");
+       asm("   move.b  &0x1A,(%sp)");
+       asm("   move.l  (%sp)+,%d0");
+       asm("   movem.l (%sp)+,%d2-%d5");
+       asm("   rts");
+       asm("result_is_nil:");
+       asm("   clr.l   %d0");
+       asm("   movem.l (%sp)+,%d2-%d5");
+       asm("   rts");
+       asm("   data");
+
+#endif /* not MC68020 */
+#endif  /* hp9000s200 */
+\f
+#ifndef MUL_HANDLED
+
 #define HALF_WORD_SIZE ((sizeof(long)*CHAR_SIZE)/2)
 #define HALF_WORD_MASK (1<<HALF_WORD_SIZE)-1
 #define MAX_MIDDLE     (1<<((ADDRESS_LENGTH-1)-HALF_WORD_SIZE))
@@ -79,3 +219,5 @@ Mul(Arg1, Arg2)
   }
   return (NIL);
 }
+
+#endif /* not MUL_HANDLED */
index e88fb61b6f2b4d3931d8009baf7ac5bfb7dfb525..11c03adb42c561b5c07c1feac5e5afde4c6b7e5a 100644 (file)
@@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/sgraph_a.c,v 1.5 1988/08/15 20:33:45 cph Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/sgraph_a.c,v 1.6 1989/02/19 17:51:11 jinx Rel $ */
 
 #include "scheme.h"
 #include "prims.h"
@@ -70,11 +70,11 @@ DEFINE_PRIMITIVE ("PLOT-ARRAY-IN-BOX", Prim_plot_array_in_box, 3, 3, 0)
   Answer = Make_Pointer(TC_LIST, Free);
   Orig_Free = Free;
   Free += 4;
-  My_Store_Reduced_Flonum_Result(Offset, *Orig_Free);
+  Store_Reduced_Flonum_Result(Offset, *Orig_Free);
   Orig_Free++;
   *Orig_Free = Make_Pointer(TC_LIST, Orig_Free+1);
   Orig_Free++;
-  My_Store_Reduced_Flonum_Result(Scale, *Orig_Free);
+  Store_Reduced_Flonum_Result(Scale, *Orig_Free);
   Orig_Free++;
   *Orig_Free = EMPTY_LIST;
   PRIMITIVE_RETURN(Answer);
@@ -113,11 +113,11 @@ DEFINE_PRIMITIVE ("PLOT-ARRAY-IN-BOX-WITH-OFFSET-SCALE", Prim_plot_array_in_box_
   Answer = Make_Pointer(TC_LIST, Free);
   Orig_Free = Free;
   Free += 4;
-  My_Store_Reduced_Flonum_Result(Offset, *Orig_Free);
+  Store_Reduced_Flonum_Result(Offset, *Orig_Free);
   Orig_Free++;
   *Orig_Free = Make_Pointer(TC_LIST, Orig_Free+1);
   Orig_Free++;
-  My_Store_Reduced_Flonum_Result(Scale, *Orig_Free);
+  Store_Reduced_Flonum_Result(Scale, *Orig_Free);
   Orig_Free++;
   *Orig_Free = EMPTY_LIST;
   PRIMITIVE_RETURN(Answer);
@@ -1397,15 +1397,15 @@ DEFINE_PRIMITIVE ("INQUIRE-COLOR", Prim_inquire_color, 1, 1, 0)
   Answer = Make_Pointer(TC_LIST, Free);
   Orig_Free = Free;
   Free += 6;
-  My_Store_Reduced_Flonum_Result(red, *Orig_Free);
+  Store_Reduced_Flonum_Result(red, *Orig_Free);
   Orig_Free++;
   *Orig_Free = Make_Pointer(TC_LIST, Orig_Free+1);
   Orig_Free++;
-  My_Store_Reduced_Flonum_Result(green, *Orig_Free);
+  Store_Reduced_Flonum_Result(green, *Orig_Free);
   Orig_Free++;
   *Orig_Free = Make_Pointer(TC_LIST, Orig_Free+1);
   Orig_Free++;
-  My_Store_Reduced_Flonum_Result(blue, *Orig_Free);
+  Store_Reduced_Flonum_Result(blue, *Orig_Free);
   Orig_Free++;
   *Orig_Free = EMPTY_LIST;
   PRIMITIVE_RETURN(Answer);
index d198a9f83c6e68c390c2400ff45a78a58e75c2c9..4c7150f31475384d6a2db123687ceff00ca099c1 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 10.67 1989/01/05 19:02:31 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 10.68 1989/02/19 17:52:08 jinx Exp $
 
 Copyright (c) 1988 Massachusetts Institute of Technology
 
@@ -46,7 +46,7 @@ MIT in each case. */
 #define VERSION                10
 #endif
 #ifndef SUBVERSION
-#define SUBVERSION     67
+#define SUBVERSION     68
 #endif
 
 #ifndef UCODE_TABLES_FILENAME
index 505829fc81e8fe82b4df3f7ce3b6a99acd836f3f..a0fb99805181dfd1bdbff981e91ec698770b0ba0 100644 (file)
@@ -30,14 +30,154 @@ Technology nor of any adaptation thereof in any advertising,
 promotional, or sales literature without prior written consent from
 MIT in each case. */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/mul.c,v 9.25 1989/02/17 15:05:19 jinx Exp $
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/mul.c,v 9.26 1989/02/19 17:51:47 jinx Rel $
  *
- * This file contains the portable fixnum multiplication procedure.
+ * This file contains the fixnum multiplication procedure.
  * Returns NIL if the result does not fit in a fixnum.
- * Note: This has only been tried on machines with long = 32 bits.
- * This file is included in the appropriate os file if needed.
+ * Note: The portable version has only been tried on machines with
+ * long = 32 bits.  This file is included in the appropriate os file.
  */
 \f
+extern Pointer Mul();
+
+#if defined(vax) && defined(bsd)
+
+#define MUL_HANDLED
+
+/* Note that "register" is used here (not "fast") since the
+   assembly code requires knowledge of the location of
+   the variables and they therefore must be in registers.
+   This is a kludge.  It depends on what register variables
+   get assigned to what registers.  It should be entirely
+   coded in assembly language.  -- JINX
+*/
+
+Pointer
+Mul(Arg1, Arg2)
+     Pointer Arg1, Arg2;
+{
+  register long A, B, C;
+
+  Sign_Extend(Arg1, A);
+  Sign_Extend(Arg2, B);
+  asm("        emul    r11,r10,$0,r10");  /* A is in 11, B in 10 */
+  C = A;
+  A = B;       /* What is all this shuffling? -- JINX */
+  B = C;
+  /* B should have high order result, A low order */
+  if (((B == 0)  && (A & (-1 << 23)) == 0) ||
+      ((B == -1) && (A & (-1 << 23)) == (-1 << 23)))
+  {
+    return (MAKE_SIGNED_FIXNUM(A));
+  }
+  else
+  {
+    return (NIL);
+  }
+}
+
+#endif
+\f
+/* 68k family code.  Uses hp9000s200 conventions for the new compiler. */
+
+#if defined(hp9000s200) && !defined(old_cc) && !defined(__GNUC__)
+#define MUL_HANDLED
+
+/* The following constants are hard coded in the assembly language
+ * code below.  The code assumes that d0 and d1 are scratch registers
+ * for the compiler.
+ */
+
+#if (NIL != 0) || (TC_FIXNUM != 0x1A)
+#include "Error: types changed.  Change assembly language appropriately"
+#endif
+
+#if defined(MC68020)
+
+static long Fixnum_Range[2] = {SMALLEST_FIXNUM , BIGGEST_FIXNUM};
+
+       asm("   text");
+       asm("   global _Mul");
+       asm("_Mul:");
+       asm("   bfexts  4(%sp){&8:&24},%d0");
+       asm("   bfexts  8(%sp){&8:&24},%d1");
+       asm("   muls.l  %d1,%d0");
+       asm("   bvs.b   result_is_nil");
+       asm("   cmp2.l  %d0,_Fixnum_Range");
+       asm("   bcs.b   result_is_nil");
+       asm("   moveq   &0x1A,%d1");
+       asm("   bfins   %d1,%d0{&0:&8}");
+       asm("   rts");
+       asm("result_is_nil:");
+       asm("   clr.l   %d0");
+       asm("   rts");
+       asm("   data");
+
+#else  /* not MC68020, but 68k family */
+
+       /* 20(sp) = arg0; 24(sp) = arg1 because of movem */
+
+       asm("   text");
+       asm("   global _Mul");
+       asm("_Mul:");
+       asm("   movem.l %d2-%d5,-(%sp)");
+       asm("   clr.b   %d5");
+       asm("   tst.b   21(%sp)");
+       asm("   slt     20(%sp)");
+       asm("   bge.b   coerce_1");
+       asm("   moveq   &1,%d5");
+       asm("   neg.l   20(%sp)");
+\f
+       asm("coerce_1:");
+       asm("   tst.b   25(%sp)");
+       asm("   slt     24(%sp)");
+       asm("   bge.b   after_coerce");
+       asm("   eori.b  &1,%d5");
+       asm("   neg.l   24(%sp)");
+       asm("after_coerce:");
+       asm("   move.l  20(%sp),%d0");
+       asm("   move.l  24(%sp),%d1");
+       asm("   move.w  %d0,%d2");
+       asm("   mulu    %d1,%d2");
+       asm("   move.w  %d1,%d4");
+       asm("   swap    %d1");
+       asm("   move.w  %d1,%d3");
+       asm("   mulu    %d0,%d3");
+       asm("   swap    %d0");
+       asm("   mulu    %d0,%d4");
+       asm("   add.l   %d4,%d3");
+       asm("   bcs.b   result_is_nil");
+       asm("   mulu    %d0,%d1");
+       asm("   bne.b   result_is_nil");
+       asm("   swap    %d2");
+       asm("   add.w   %d3,%d2");
+       asm("   bcs.b   result_is_nil");
+       asm("   swap    %d3");
+       asm("   tst.w   %d3");
+       asm("   bne.b   result_is_nil");
+       asm("   cmpi.w  %d2,&0x7F");
+       asm("   bgt.b   result_is_nil");
+       asm("   swap    %d2");
+       asm("   tst.b   %d5");
+       asm("   beq.b   sign_is_right");
+       asm("   neg.l   %d2");
+       asm("sign_is_right:");
+       asm("   move.l  %d2,-(%sp)");
+       asm("   move.b  &0x1A,(%sp)");
+       asm("   move.l  (%sp)+,%d0");
+       asm("   movem.l (%sp)+,%d2-%d5");
+       asm("   rts");
+       asm("result_is_nil:");
+       asm("   clr.l   %d0");
+       asm("   movem.l (%sp)+,%d2-%d5");
+       asm("   rts");
+       asm("   data");
+
+#endif /* not MC68020 */
+#endif  /* hp9000s200 */
+\f
+#ifndef MUL_HANDLED
+
 #define HALF_WORD_SIZE ((sizeof(long)*CHAR_SIZE)/2)
 #define HALF_WORD_MASK (1<<HALF_WORD_SIZE)-1
 #define MAX_MIDDLE     (1<<((ADDRESS_LENGTH-1)-HALF_WORD_SIZE))
@@ -79,3 +219,5 @@ Mul(Arg1, Arg2)
   }
   return (NIL);
 }
+
+#endif /* not MUL_HANDLED */
index c100e3829106e88dad20f47bd85363ca99e07a37..95932420d8afa14ebc884f7d09abe0d551b97338 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 10.67 1989/01/05 19:02:31 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 10.68 1989/02/19 17:52:08 jinx Exp $
 
 Copyright (c) 1988 Massachusetts Institute of Technology
 
@@ -46,7 +46,7 @@ MIT in each case. */
 #define VERSION                10
 #endif
 #ifndef SUBVERSION
-#define SUBVERSION     67
+#define SUBVERSION     68
 #endif
 
 #ifndef UCODE_TABLES_FILENAME