1: /*
   2:  * $Header: mulbig.c,v 1.2 83/11/26 12:13:29 sklower Exp $
   3:  * $Locker:  $
   4:  *
   5:  * Copyright (c) 1982, Regents, University of California
   6:  *
   7:  */
   8: 
   9: #include "global.h"
  10: 
  11: struct s_dot    { long I; struct s_dot *CDR; };
  12: struct vl   { long high; long low; };
  13: 
  14: struct s_dot *mulbig(a,b)
  15: struct s_dot *a, *b;
  16: {
  17:     int la = 1, lb = 1;
  18:     long *sa, *sb, *sc, *base, *alloca();
  19:     struct s_dot *export();
  20:     register struct s_dot *p;
  21:     register int *q, *r, *s;
  22:     long carry = 0, test;
  23:     struct vl work;
  24:     Keepxs();
  25: 
  26:     /* compute lengths */
  27: 
  28:     for(p = a; p->CDR; p = p->CDR) la++;
  29:     for(p = b; p->CDR; p = p->CDR) lb++;
  30: 
  31:     /* allocate storage areas on the stack */
  32: 
  33:     base = alloca((la + la + lb + lb + 1)*sizeof(long));
  34:     sc = base + la + lb + 1;
  35:     sb = sc + lb;
  36:     sa = sb + la;
  37:     q  = sa;
  38: 
  39:     /* copy s_dots onto stack */
  40:     p = a;
  41:     do { *--q = p->I; p = p->CDR; } while (p);
  42:     p = b;
  43:     do { *--q = p->I; p = p->CDR; } while (p);
  44:     while(q > base) *--q = 0;  /* initialize target */
  45: 
  46:     /* perform the multiplication */
  47:     for(q = sb; q > sc; *--s = carry)
  48:         for((r = sa, s = (q--) - lb, carry = 0); r > sb;)
  49:         {
  50:             carry += *--s;
  51:             emul(*q,*--r,carry,&work);
  52:             test = work.low;
  53:             carry = work.high << 2;
  54:             if(test < 0) carry += 2;
  55:             if(test & 0x40000000) carry +=1;
  56:             *s = test & 0x3fffffff;
  57:         }
  58: 
  59:     p = export(sc,base);
  60:     Freexs();
  61:     return(p);
  62: }

Defined functions

mulbig defined in line 14; never used

Defined struct's

s_dot defined in line 11; used 10 times
vl defined in line 12; used 2 times
  • in line 23(2)
Last modified: 1985-08-14
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 638
Valid CSS Valid XHTML 1.0 Strict