ftp.nice.ch/pub/next/developer/languages/lisp/AKCL.1.599.s.tar.gz#/akcl-1-599/V/c/earith.c

This is earith.c in view mode; [Download] [Up]

Changes file for /usr/local/src/kcl/c/earith.c
Created on Thu Feb  1 07:05:35 1990
Usage \n@s[Original text\n@s|Replacement Text\n@s]
See the file rascal.ics.utexas.edu:/usr2/ftp/merge.c
for a program to merge change files.  Anything not between
"\n@s[" and  "\n@s]" is a simply a comment.
This file was constructed using emacs and  merge.el
Enhancements Copyright (c) W. Schelter All rights reserved.
   by (Bill Schelter)  wfs@carl.ma.utexas.edu 


****Change:(orig (34 34 a))
@s[*/

#include "include.h"


@s|*/

#include "include.h"

#ifdef I386
/* by W. Schelter and M. Ballantyne */


/*  debug print
#include <stdio.h>
extended_mul(a,b,r,c,d)
int a,b,r;
int *c;
int *d;
{extended_mul1(a,b,r,c,d);
 printf("Multiply (%d, %d, %d) --> (%d , %d) for %d \n",a,b,r,*c,*d,a*b+r);
 fflush(stdout);
}
*/

extended_mul(a,b,r,c,d)
int a,b,r;
int *c;
int *d;
{ asm("pushl    %ecx");
  asm("	movl	8(%ebp),%eax");
  asm("	mull	12(%ebp)");
  asm("	addl	16(%ebp),%eax");
  asm(" adcl	$0,%edx");
  asm("	shll	$1,%edx");
  asm(" btrl	$31,%eax");
  asm("	adcl	$0,%edx");
  asm(" movl	20(%ebp),%ecx");
  asm("	movl	%edx, (%ecx)");
  asm("	movl	24(%ebp), %ecx");
  asm("	movl	%eax, (%ecx)");
  asm("popl     %ecx");
}

extended_div(d, h, l, qp, rp)
int d, h, l;
int *qp, *rp;
{ 
asm(  "pushl %ebx");
asm(  "movl 12(%ebp),%edx");
asm(  "movl 16(%ebp),%eax");
asm(  "btl $0,%edx");
asm(  "jae  .WFS");
asm(  "btsl $31,%eax");
asm(".WFS:");
asm(  "shrl $1,%edx");
asm(  "idivl 8(%ebp)");
asm(  "movl 20(%ebp),%ebx");
asm(  "movl %eax,(%ebx)");
asm(  "movl 24(%ebp),%ebx");
asm(  "movl %edx,(%ebx)");
asm(  "popl %ebx");
}
#endif


@s]


****Change:(orig (141 141 a))
@s[	asm("	movl	a6@(24),a0");
	asm("	movl	d0,a0@");

@s|	asm("	movl	a6@(24),a0");
	asm("	movl	d0,a0@");
        asm("	movl	a7@+,d2");

@s]


****Change:(orig (464 464 a))
@s[	asm("move.l	d1,(a0)");
}


@s|	asm("move.l	d1,(a0)");
}

#endif

#ifdef CONVEX

extended_mul(d, q, r, hp, lp)
int d, q, r;
int *hp, *lp;
{
	long long int ld, lq, lr, z;
        int zh, zl;

        ld = d;
        lq = q;
        lr = r;
        z = ld*lq+lr;
        zl = (z & 0x000000007fffffffLL);
        zh = (z >> 31LL);
        *hp = zh;
        *lp = zl;
}

extended_div(d, h, l, qp, rp)
int d, h, l;
int *qp, *rp;
{
	long long int lh, ld, ll;

	ld = d;
	lh = h;
	ll = l;
	lh = (lh << 31LL);
	lh = (lh | ll);
	*qp = (lh/ld);
	*rp = (lh%ld);
}

#endif



#ifdef	hp9000s300

extended_mul(d, q, r, hp, lp)
int d, q, r;
int *hp, *lp;
{
	asm("	mov.l	%d2,-(%a7)");
	asm("	clr.l	%d2");
	asm("	mov.l	(8,%fp),%d0");
	asm("	mulu.l	(12,%fp),%d1:%d0");
	asm("	add.l	(16,%fp),%d0");
	asm("	addx.l	%d2,%d1");
	asm("	lsl.l	&1,%d0");
	asm("	roxl.l	&1,%d1");
	asm("	lsr.l	&1,%d0");
	asm("	mov.l	(20,%fp),%a0");
	asm("	mov.l	%d1,(%a0)");
	asm("	mov.l	(24,%fp),%a0");
	asm("	mov.l	%d0,(%a0)");
	asm("	mov.l	(%a7)+,%d2");
}

extended_div(d, h, l, qp, rp)
int d, h, l;
int *qp, *rp;
{
	asm("	movm.l	(12,%fp),&0x303");
	asm("	lsl.l	&1,%d1");
	asm("	lsr.l	&1,%d0");
	asm("	roxr.l	&1,%d1");
	asm("	divu.l	(8,%fp),%d0:%d1");
	asm("	mov.l	%d0,(%a1)");
	asm("	mov.l	%d1,(%a0)");
}

#endif

#ifdef CMAC
#include "cmac.c"

@s]

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.