~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to mp/mp_addmul.c

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/*          Copyright (C) 1994 W. Schelter
 
3
 
 
4
This file is part of GNU Common Lisp, herein referred to as GCL
 
5
 
 
6
GCL is free software; you can redistribute it and/or modify it under
 
7
the terms of the GNU LIBRARY GENERAL PUBLIC LICENSE as published by
 
8
the Free Software Foundation; either version 2, or (at your option)
 
9
any later version.
 
10
 
 
11
GCL is distributed in the hope that it will be useful, but WITHOUT
 
12
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
13
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
14
for more details.
 
15
 
 
16
You should have received a copy of the GNU library general public
 
17
license along with GCL; see the file COPYING.  If not, write to the
 
18
Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 
19
*/
 
20
 
 
21
#include "include.h"
 
22
#include "arith.h"  
 
23
/*
 
24
   (h = hiremainder, y = addmul(a,b), hiremainder:y == a*b + h) is true
 
25
*/
 
26
 
 
27
int addmul(x,y)
 
28
     ulong x,y;
 
29
{
 
30
  ulong xlo,xhi,ylo,yhi;
 
31
  ulong z,z2; TEMPVARS
 
32
 
 
33
  xlo=x&65535;xhi=x>>16;ylo=y&65535;yhi=y>>16;
 
34
  z=addll(xlo*yhi,xhi*ylo);
 
35
  z2=(overflow)?xhi*yhi+65536+(z>>16):xhi*yhi+(z>>16);
 
36
  z=addll(xlo*ylo,(z<<16));z2+=overflow;
 
37
  z=addll(z,hiremainder);hiremainder=z2+overflow;
 
38
  return z;
 
39
}
 
40