All pastes #74581 Raw Edit

duke build fix

public c v1 · immutable
#74581 ·published 2006-06-29 06:22 UTC
rendered paste body
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman// Ken Silverman's official web site: "http://www.advsys.net/ken"// See the included license file "BUILDLIC.TXT" for license info.// This file has been modified from Ken Silverman's original release/* DDOI - This file is an attempt to reimplement a_nasm.asm in C */#include "platform.h"#include "build.h"#define shrd(a,b,c) (((b)<<(32-(c))) | ((a)>>(c)))#define shld(a,b,c) (((b)>>(32-(c))) | ((a)<<(c)))extern long asm1;extern long asm2;extern long asm3;extern long asm4;long is_vmware_running(void){    return 0;} /* is_vmware_running *//* #pragma aux mmxoverlay modify [eax ebx ecx edx] */long mmxoverlay(void){    return 0;} /* mmxoverlay *//* #pragma aux sethlinesizes parm [eax][ebx][ecx] */static unsigned char machxbits_al;static unsigned char machxbits_bl;static long machxbits_ecx;void sethlinesizes(long i1, long i2, long i3){    machxbits_al = i1;    machxbits_bl = i2;    machxbits_ecx = i3;} /* sethlinesizes */static unsigned char* pal_eax;void setuphlineasm4(long i1, long i2) { }void setpalookupaddress(unsigned char *i1) { pal_eax = i1; }void hlineasm4(long _count, unsigned long unused_source, long _shade, unsigned long _i4, unsigned long _i5, long i6){    /* force into registers (probably only useful on PowerPC)... */    register unsigned char *dest = (unsigned char *) i6;    register unsigned long i4 = _i4;    register unsigned long i5 = _i5;    register int shifter = ((256-machxbits_al) & 0x1f);    register unsigned long source;    register long shade = _shade & 0xffffff00;    register long count = _count + 1;    register unsigned char bits = machxbits_bl;    register unsigned char *lookup = (unsigned char *) machxbits_ecx;    register unsigned char *pal = (unsigned char *) pal_eax;    register long _asm1 = asm1;    register long _asm2 = asm2;    while (count) {	    source = i5 >> shifter;	    source = shld(source,i4,bits);	    source = lookup[source];	    *dest = pal[shade|source];	    dest--;	    i5 -= _asm1;	    i4 -= _asm2;	    count--;    }}static long rmach_eax;static long rmach_ebx;static long rmach_ecx;static long rmach_edx;static long rmach_esi;void setuprhlineasm4(long i1, long i2, long i3, long i4, long i5, long i6){    rmach_eax = i1;    rmach_ebx = i2;    rmach_ecx = i3;    rmach_edx = i4;    rmach_esi = i5;} /* setuprhlineasm4 */void rhlineasm4(long i1, long i2, long i3, unsigned long i4, unsigned long i5, long i6){    unsigned long ebp = i6 - i1;    unsigned long rmach6b = ebp-1;    if (i1 <= 0) return;    i6 = i1;    do {	    i3 = ((i3&0xffffff00)|(*((unsigned char *)i2)));	    i4 -= rmach_eax;	    ebp = (((i4+rmach_eax) < i4) ? -1 : 0);	    i5 -= rmach_ebx;	    if ((i5 + rmach_ebx) < i5) i2 -= (rmach_ecx+1);	    else i2 -= rmach_ecx;	    ebp &= rmach_esi;	    i1 = ((i1&0xffffff00)|(((unsigned char *)i3)[rmach_edx]));	    ((unsigned char *)rmach6b)[i6] = (i1&0xff);	    i2 -= ebp;	    i6--;    } while (i6);} /* rhlineasm4 */static long rmmach_eax;static long rmmach_ebx;static long rmmach_ecx;static long rmmach_edx;static long rmmach_esi;void setuprmhlineasm4(long i1, long i2, long i3, long i4, long i5, long i6){    rmmach_eax = i1;    rmmach_ebx = i2;    rmmach_ecx = i3;    rmmach_edx = i4;    rmmach_esi = i5;} /* setuprmhlineasm4 *//* #pragma aux rmhlineasm4 parm [eax][ebx][ecx][edx][esi][edi] */void rmhlineasm4(long i1, long i2, long i3, long i4, long i5, long i6){    unsigned long ebp = i6 - i1;    unsigned long rmach6b = ebp-1;    if (i1 <= 0) return;    i6 = i1;    do {	    i3 = ((i3&0xffffff00)|(*((unsigned char *)i2)));	    i4 -= rmmach_eax;	    ebp = (((i4+rmmach_eax) < i4) ? -1 : 0);	    i5 -= rmmach_ebx;	    if ((i5 + rmmach_ebx) < i5) i2 -= (rmmach_ecx+1);	    else i2 -= rmmach_ecx;	    ebp &= rmmach_esi;	    if ((i3&0xff) != 255) {		    i1 = ((i1&0xffffff00)|(((unsigned char *)i3)[rmmach_edx]));		    ((unsigned char *)rmach6b)[i6] = (i1&0xff);	    }	    i2 -= ebp;	    i6--;    } while (i6);} /* rmhlineasm4 *//* #pragma aux setupqrhlineasm4 parm [eax][ebx][ecx][edx][esi][edi] */void setupqrhlineasm4(long i1, long i2, long i3, long i4, long i5, long i6){    setuprhlineasm4(i1,i2,i3,i4,i5,i6);} /* setupqrhlineasm4 *//* #pragma aux qrhlineasm4 parm [eax][ebx][ecx][edx][esi][edi] */void qrhlineasm4(long i1, long i2, long i3, long i4, long i5, long i6){    rhlineasm4(i1,i2,i3,i4,i5,i6);} /* qrhlineasm4 *//* #pragma aux setvlinebpl parm [eax] */static long fixchain;void setvlinebpl(long i1){    fixchain = i1;} /* setvlinebpl *//* #pragma aux fixtransluscence parm [eax] */static long tmach;void fixtransluscence(long i1){    tmach = i1;} /* fixtransluscence */long vlineasm1(long i1, long i2, long i3, long i4, long i5, long i6);/* #pragma aux prevlineasm1 parm [eax][ebx][ecx][edx][esi][edi] */static unsigned char mach3_al;long prevlineasm1(long i1, long i2, long i3, long i4, long i5, long i6){    unsigned char *source = (unsigned char *)i5;    unsigned char *dest = (unsigned char *)i6;    unsigned long i4temp;    if (i3 == 0)    {	    i1 += i4;	    i4temp >>= mach3_al;	    i4temp = (i4temp&0xffffff00) | (source[i4temp]&0xff);	    *dest = ((unsigned char*)i2)[i4temp];	    return i1;    } else {	    return vlineasm1(i1,i2,i3,i4temp,i5,i6);    }} /* prevlineasm1 *//* #pragma aux vlineasm1 parm [eax][ebx][ecx][edx][esi][edi] */long vlineasm1(long vince, long palookupoffse, long i3, long vplce, long bufplce, long i6){    unsigned long temp;    unsigned char *dest = (unsigned char *)i6;    i3++;    while (i3)    {	    temp = ((unsigned)vplce) >> mach3_al;	    temp = ((unsigned char *)bufplce)[temp];	    *dest = ((unsigned char*)palookupoffse)[temp];	    vplce += vince;	    dest += fixchain;	    i3--;    }    return vplce;} /* vlineasm1 *//* #pragma aux setuptvlineasm parm [eax] */static unsigned char transmach3_al = 32;void setuptvlineasm(long i1){    transmach3_al = (i1 & 0x1f);} /* setuptvlineasm *//* #pragma aux tvlineasm1 parm [eax][ebx][ecx][edx][esi][edi] */static int transrev = 0;long tvlineasm1(long i1, long i2, long i3, long i4, long i5, long i6){	unsigned char *source = (unsigned char *)i5;	unsigned char *dest = (unsigned char *)i6;	i3++;	while (i3)	{		unsigned long temp = i4;		temp >>= transmach3_al;		temp = source[temp];		if (temp != 255)		{			unsigned short val;			val = ((unsigned char *)i2)[temp];			val |= ((*dest)<<8);			if (transrev) val = ((val>>8)|(val<<8));			*dest = ((unsigned char *)tmach)[val];		}		i4 += i1;		dest += fixchain;		i3--;	}	return i4;} /* tvlineasm1 *//* #pragma aux setuptvlineasm2 parm [eax][ebx][ecx] */static unsigned char tran2shr;static unsigned long tran2pal_ebx;static unsigned long tran2pal_ecx;void setuptvlineasm2(long i1, long i2, long i3){	tran2shr = (i1&0x1f);	tran2pal_ebx = i2;	tran2pal_ecx = i3;} /* *//* #pragma aux tvlineasm2 parm [eax][ebx][ecx][edx][esi][edi] */void tvlineasm2(unsigned long i1, unsigned long i2, unsigned long i3, unsigned long i4, unsigned long i5, unsigned long i6){	unsigned long ebp = i1;	unsigned long tran2inca = i2;	unsigned long tran2incb = asm1;	unsigned long tran2bufa = i3;	unsigned long tran2bufb = i4;	unsigned long tran2edi = asm2;	unsigned long tran2edi1 = asm2 + 1;	i6 -= asm2;	do {		i1 = i5 >> tran2shr;		i2 = ebp >> tran2shr;		i5 += tran2inca;		ebp += tran2incb;		i3 = ((unsigned char *)tran2bufa)[i1];		i4 = ((unsigned char *)tran2bufb)[i2];		if (i3 == 255) { // skipdraw1			if (i4 != 255) { // skipdraw3				unsigned short val;				val = ((unsigned char *)tran2pal_ecx)[i4];				val |= (((unsigned char *)i6)[tran2edi1]<<8);				if (transrev) val = ((val>>8)|(val<<8));				((unsigned char *)i6)[tran2edi1] =					((unsigned char *)tmach)[val];			}		} else if (i4 == 255) { // skipdraw2			unsigned short val;			val = ((unsigned char *)tran2pal_ebx)[i3];			val |= (((unsigned char *)i6)[tran2edi]<<8);			if (transrev) val = ((val>>8)|(val<<8));			((unsigned char *)i6)[tran2edi] =				((unsigned char *)tmach)[val];		} else {			unsigned short l = ((unsigned char *)i6)[tran2edi]<<8;			unsigned short r = ((unsigned char *)i6)[tran2edi1]<<8;			l |= ((unsigned char *)tran2pal_ebx)[i3];			r |= ((unsigned char *)tran2pal_ecx)[i4];			if (transrev) {				l = ((l>>8)|(l<<8));				r = ((r>>8)|(r<<8));			}			((unsigned char *)i6)[tran2edi] =				((unsigned char *)tmach)[l];			((unsigned char *)i6)[tran2edi1] =				((unsigned char *)tmach)[r];		}		i6 += fixchain;	} while (i6 > i6 - fixchain);	asm1 = i5;	asm2 = ebp;} /* tvlineasm2 *//* #pragma aux mvlineasm1 parm [eax][ebx][ecx][edx][esi][edi] */static unsigned char machmv;long mvlineasm1(long vince, long palookupoffse, long i3, long vplce, long bufplce, long i6){    unsigned long temp;    unsigned char *dest = (unsigned char *)i6;    while (i3)    {	    temp = ((unsigned)vplce) >> machmv;	    temp = ((unsigned char *)bufplce)[temp];	    if (temp != 255) *dest = ((unsigned char*)palookupoffse)[temp];	    vplce += vince;	    dest += fixchain;	    i3--;    }    return vplce;} /* mvlineasm1 *//* #pragma aux setupvlineasm parm [eax] */void setupvlineasm(long i1){    mach3_al = (i1&0x1f);} /* setupvlineasm */extern long vplce[4], vince[4], palookupoffse[4], bufplce[4];#if HAVE_POWERPC/* About 25% faster than the scalar version on my 12" Powerbook. --ryan. */static void vlineasm4_altivec(long i1, long i2){    unsigned int mach_array[4] = { (unsigned int) mach3_al,                                   (unsigned int) mach3_al,                                   (unsigned int) mach3_al,                                   (unsigned int) mach3_al };    unsigned int temp[4];    unsigned long index = (i2 + ylookup[i1]);    unsigned char *dest = (unsigned char*)(-ylookup[i1]);    register vector unsigned int vec_temp;    register vector signed int vec_vplce;    register vector signed int vec_vince;    register vector signed int vec_bufplce;    register vector unsigned int vec_shifter;    register unsigned char *pal0 = (unsigned char *) palookupoffse[0];    register unsigned char *pal1 = (unsigned char *) palookupoffse[1];    register unsigned char *pal2 = (unsigned char *) palookupoffse[2];    register unsigned char *pal3 = (unsigned char *) palookupoffse[3];    vec_shifter = vec_ld(0, mach_array);    vec_vplce = vec_ld(0, vplce);    vec_vince = vec_ld(0, vince);    vec_bufplce = vec_ld(0, bufplce);    do {        vec_temp = (vector unsigned int) vec_sr(vec_vplce, vec_shifter);        vec_temp = (vector unsigned int) vec_add(vec_bufplce, (vector signed int) vec_temp);        vec_st(vec_temp, 0x00, temp);        vec_vplce = vec_add(vec_vplce, vec_vince);	    dest[index] = pal0[*((unsigned char *) temp[0])];	    dest[index+1] = pal1[*((unsigned char *) temp[1])];	    dest[index+2] = pal2[*((unsigned char *) temp[2])];	    dest[index+3] = pal3[*((unsigned char *) temp[3])];        dest += fixchain;    } while (((unsigned)dest - fixchain) < ((unsigned)dest));    vec_st(vec_vplce, 0, vplce);}#endif/* #pragma aux vlineasm4 parm [ecx][edi] modify [eax ebx ecx edx esi edi] */void vlineasm4(long i1, long i2){#if HAVE_POWERPC    if (has_altivec)        vlineasm4_altivec(i1, i2);    else#endif    {        int i;        unsigned long temp;        unsigned long index = (i2 + ylookup[i1]);        unsigned char *dest = (unsigned char*)(-ylookup[i1]);        do {            for (i = 0; i < 4; i++)            {        	    temp = ((unsigned)vplce[i]) >> mach3_al;        	    temp = (((unsigned char*)(bufplce[i]))[temp]);        	    dest[index+i] = ((unsigned char*)(palookupoffse[i]))[temp];	            vplce[i] += vince[i];            }            dest += fixchain;        } while (((unsigned)dest - fixchain) < ((unsigned)dest));    }} /* vlineasm4 *//* #pragma aux setupmvlineasm parm [eax] */void setupmvlineasm(long i1){    machmv = (i1&0x1f);} /* setupmvlineasm *//* #pragma aux mvlineasm4 parm [ecx][edi] modify [eax ebx ecx edx esi edi] */void mvlineasm4(long i1, long i2){    int i;    unsigned long temp;    unsigned long index = (i2 + ylookup[i1]);    unsigned char *dest = (unsigned char*)(-ylookup[i1]);    do {        for (i = 0; i < 4; i++)        {	    temp = ((unsigned)vplce[i]) >> machmv;	    temp = (((unsigned char*)(bufplce[i]))[temp]);	    if (temp != 255)		    dest[index+i] = ((unsigned char*)(palookupoffse[i]))[temp];	    vplce[i] += vince[i];        }        dest += fixchain;    } while (((unsigned)dest - fixchain) < ((unsigned)dest));} /* mvlineasm4 *//* #pragma aux setupspritevline parm [eax][ebx][ecx][edx][esi][edi] */static long spal_eax;static long smach_eax;static long smach2_eax;static long smach5_eax;static long smach_ecx;void setupspritevline(long i1, long i2, long i3, long i4, long i5, long i6){    spal_eax = i1;    smach_eax = (i5<<16);    smach2_eax = (i5>>16)+i2;    smach5_eax = smach2_eax + i4;    smach_ecx = i3;} /* setupspritevline *//* #pragma aux spritevline parm [eax][ebx][ecx][edx][esi][edi] */void spritevline(long i1, unsigned long i2, long i3, unsigned long i4, long i5, long i6){    unsigned char *source = (unsigned char *)i5;    unsigned char *dest = (unsigned char *)i6;dumblabel1:    i2 += smach_eax;    i1 = (i1&0xffffff00) | (*source&0xff);    if ((i2 - smach_eax) > i2) source += smach2_eax + 1;    else source += smach2_eax;dumblabel2:    i1 = (i1&0xffffff00) | (((unsigned char *)spal_eax)[i1]&0xff);    *dest = i1;    dest += fixchain;    i4 += smach_ecx;    i4--;    if (!((i4 - smach_ecx) > i4) && i4 != 0)	    goto dumblabel1;    if (i4 == 0) return;    i2 += smach_eax;    i1 = (i1&0xffffff00) | (*source&0xff);    if ((i2 - smach_eax) > i2) source += smach5_eax + 1;    else source += smach5_eax;    goto dumblabel2;} /* spritevline *//* #pragma aux msetupspritevline parm [eax][ebx][ecx][edx][esi][edi] */static long mspal_eax;static long msmach_eax;static long msmach2_eax;static long msmach5_eax;static long msmach_ecx;void msetupspritevline(long i1, long i2, long i3, long i4, long i5, long i6){    mspal_eax = i1;    msmach_eax = (i5<<16);    msmach2_eax = (i5>>16)+i2;    msmach5_eax = smach2_eax + i4;    msmach_ecx = i3;} /* msetupspritevline *//* #pragma aux mspritevline parm [eax][ebx][ecx][edx][esi][edi] */void mspritevline(long i1, long i2, long i3, long i4, long i5, long i6){    unsigned char *source = (unsigned char *)i5;    unsigned char *dest = (unsigned char *)i6;msdumblabel1:    i2 += smach_eax;    i1 = (i1&0xffffff00) | (*source&0xff);    if ((i2 - smach_eax) > i2) source += smach2_eax + 1;    else source += smach2_eax;msdumblabel2:    if ((i1&0xff) != 255)    {	    i1 = (i1&0xffffff00) | (((unsigned char *)spal_eax)[i1]&0xff);	    *dest = i1;    }    dest += fixchain;    i4 += smach_ecx;    i4--;    if (!((i4 - smach_ecx) > i4) && i4 != 0)	    goto msdumblabel1;    if (i4 == 0) return;    i2 += smach_eax;    i1 = (i1&0xffffff00) | (*source&0xff);    if ((i2 - smach_eax) > i2) source += smach5_eax + 1;    else source += smach5_eax;    goto msdumblabel2;} /* mspritevline *//* #pragma aux tsetupspritevline parm [eax][ebx][ecx][edx][esi][edi] */unsigned long tspal;unsigned long tsmach_eax1;unsigned long tsmach_eax2;unsigned long tsmach_eax3;unsigned long tsmach_ecx;void tsetupspritevline(long i1, long i2, long i3, long i4, long i5, long i6){	tspal = i1;	tsmach_eax1 = i5 << 16;	tsmach_eax2 = (i5 >> 16) + i2;	tsmach_eax3 = tsmach_eax2 + i4;	tsmach_ecx = i3;} /* tsetupspritevline *//* #pragma aux tspritevline parm [eax][ebx][ecx][edx][esi][edi] */void tspritevline(long i1, long i2, long i3, unsigned long i4, long i5, long i6){	while (i3)	{		i3--;		if (i3 != 0)		{			unsigned long adder = tsmach_eax2;			i4 += tsmach_ecx;			if (i4 < (i4 - tsmach_ecx)) adder = tsmach_eax3;			i1 = *((unsigned char *)i5);			i2 += tsmach_eax1;			if (i2 < (i2 - tsmach_eax1)) i5++;			i5 += adder;			// tstartsvline			if (i1 != 0xff)			{				unsigned short val;				val = ((unsigned char*)tspal)[i1];				val |= ((*((unsigned char *)i6))<<8);				if (transrev) val = ((val>>8)|(val<<8));				i1 = ((unsigned char *)tmach)[val];				*((unsigned char *)i6) = (i1&0xff);			}			i6 += fixchain;		}	}} /* tspritevline *//* #pragma aux mhline parm [eax][ebx][ecx][edx][esi][edi] */static long mmach_eax;static long mmach_asm3;static long mmach_asm1;static long mmach_asm2;void mhlineskipmodify(long i1, unsigned long i2, unsigned long i3, long i4, long i5, long i6);void mhline(long i1, long i2, long i3, long i4, long i5, long i6){    mmach_eax = i1;    mmach_asm3 = asm3;    mmach_asm1 = asm1;    mmach_asm2 = asm2;    mhlineskipmodify(asm2,i2,i3,i4,i5,i6);} /* mhline *//* #pragma aux mhlineskipmodify parm [eax][ebx][ecx][edx][esi][edi] */static unsigned char mshift_al = 26;static unsigned char mshift_bl = 6;void mhlineskipmodify(long i1, unsigned long i2, unsigned long i3, long i4, long i5, long i6){    unsigned long ebx;    int counter = (i3>>16);    while (counter >= 0)    {	    ebx = i2 >> mshift_al;	    ebx = shld (ebx, (unsigned)i5, mshift_bl);	    i1 = ((unsigned char *)mmach_eax)[ebx];	    if ((i1&0xff) != 0xff)		    *((unsigned char *)i6) = (((unsigned char*)mmach_asm3)[i1]);	    i2 += mmach_asm1;	    i5 += mmach_asm2;	    i6++;	    counter--;    }} /* mhlineskipmodify *//* #pragma aux msethlineshift parm [eax][ebx] */void msethlineshift(long i1, long i2){    i1 = 256-i1;    mshift_al = (i1&0x1f);    mshift_bl = (i2&0x1f);} /* msethlineshift *//* #pragma aux thline parm [eax][ebx][ecx][edx][esi][edi] */static long tmach_eax;static long tmach_asm3;static long tmach_asm1;static long tmach_asm2;void thlineskipmodify(long i1, unsigned long i2, unsigned long i3, long i4, long i5, long i6);void thline(long i1, long i2, long i3, long i4, long i5, long i6){    tmach_eax = i1;    tmach_asm3 = asm3;    tmach_asm1 = asm1;    tmach_asm2 = asm2;    thlineskipmodify(asm2,i2,i3,i4,i5,i6);} /* thline *//* #pragma aux thlineskipmodify parm [eax][ebx][ecx][edx][esi][edi] */static unsigned char tshift_al = 26;static unsigned char tshift_bl = 6;void thlineskipmodify(long i1, unsigned long i2, unsigned long i3, long i4, long i5, long i6){    unsigned long ebx;    int counter = (i3>>16);    while (counter >= 0)    {	    ebx = i2 >> tshift_al;	    ebx = shld (ebx, (unsigned)i5, tshift_bl);	    i1 = ((unsigned char *)tmach_eax)[ebx];	    if ((i1&0xff) != 0xff)	    {		    unsigned short val = (((unsigned char*)tmach_asm3)[i1]);		    val |= (*((unsigned char *)i6)<<8);		    if (transrev) val = ((val>>8)|(val<<8));		    *((unsigned char *)i6) = (((unsigned char*)tmach)[val]);	    }	    i2 += tmach_asm1;	    i5 += tmach_asm2;	    i6++;	    counter--;    }} /* thlineskipmodify *//* #pragma aux tsethlineshift parm [eax][ebx] */void tsethlineshift(long i1, long i2){    i1 = 256-i1;    tshift_al = (i1&0x1f);    tshift_bl = (i2&0x1f);} /* tsethlineshift *//* #pragma aux setupslopevlin parm [eax][ebx][ecx] modify [edx] */static long slopemach_ebx;static long slopemach_ecx;static long slopemach_edx;static unsigned char slopemach_ah1;static unsigned char slopemach_ah2;static float asm2_f;typedef union { unsigned int i; float f; } bitwisef2i;void setupslopevlin(long i1, long i2, long i3){    bitwisef2i c;    slopemach_ebx = i2;    slopemach_ecx = i3;    slopemach_edx = (1<<(i1&0x1f)) - 1;    slopemach_edx <<= ((i1&0x1f00)>>8);    slopemach_ah1 = 32-((i1&0x1f00)>>8);    slopemach_ah2 = (slopemach_ah1 - (i1&0x1f)) & 0x1f;    c.f = asm2_f = (float)asm1;    asm2 = c.i;} /* setupslopevlin */extern long reciptable[2048];extern long globalx3, globaly3;extern long fpuasm;#define low32(a) ((a&0xffffffff))#define high32(a) ((int)(((__int64)a&(__int64)0xffffffff00000000)>>32))/* #pragma aux slopevlin parm [eax][ebx][ecx][edx][esi][edi] */void slopevlin(long i1, unsigned long i2, long i3, long i4, long i5, long i6){    bitwisef2i c;    unsigned long ecx,eax,ebx,edx,esi,edi;    float a = (float) asm3 + asm2_f;    i1 -= slopemach_ecx;    esi = i5 + low32((__int64)globalx3 * (__int64)(i2<<3));    edi = i6 + low32((__int64)globaly3 * (__int64)(i2<<3));    ebx = i4;    do {	    // -------------	    // All this is calculating a fixed point approx. of 1/a	    c.f = a;	    fpuasm = eax = c.i;	    edx = (((long)eax) < 0) ? 0xffffffff : 0;	    eax = eax << 1;	    ecx = (eax>>24);	//  exponent	    eax = ((eax&0xffe000)>>11);	    ecx = ((ecx&0xffffff00)|((ecx-2)&0xff));	    eax = reciptable[eax/4];	    eax >>= (ecx&0x1f);	    eax ^= edx;	    // -------------	    edx = i2;	    i2 = eax;	    eax -= edx;	    ecx = low32((__int64)globalx3 * (__int64)eax);	    eax = low32((__int64)globaly3 * (__int64)eax);	    a += asm2_f;	    asm4 = ebx;	    ecx = ((ecx&0xffffff00)|(ebx&0xff));	    if (ebx >= 8) ecx = ((ecx&0xffffff00)|8);	    ebx = esi;	    edx = edi;	    while ((ecx&0xff))	    {		    ebx >>= slopemach_ah2;		    esi += ecx;		    edx >>= slopemach_ah1;		    ebx &= slopemach_edx;		    edi += eax;		    i1 += slopemach_ecx;		    edx = ((edx&0xffffff00)|((((unsigned char *)(ebx+edx))[slopemach_ebx])));		    ebx = *((unsigned long*)i3); // register trickery		    i3 -= 4;		    eax = ((eax&0xffffff00)|(*((unsigned char *)(ebx+edx))));		    ebx = esi;		    *((unsigned char *)i1) = (eax&0xff);		    edx = edi;		    ecx = ((ecx&0xffffff00)|((ecx-1)&0xff));	    }	    ebx = asm4;	    ebx -= 8;	// BITSOFPRECISIONPOW    } while ((long)ebx > 0);} /* slopevlin *//* #pragma aux settransnormal parm */void settransnormal(void){	transrev = 0;} /* settransnormal *//* #pragma aux settransreverse parm */void settransreverse(void){	transrev = 1;} /* settransreverse *//* #pragma aux setupdrawslab parm [eax][ebx] */long setupdrawslab(long i1, long i2){    long retval = 0;    /*    __asm__ __volatile__ (        "call _asm_setupdrawslab   \n\t"       : "=a" (retval)        : "a" (i1), "b" (i2)        : "cc", "memory");	*/    return(retval);/*_asm_setupdrawslab:	mov dword [voxbpl1+2], eax	mov dword [voxbpl2+2], eax	mov dword [voxbpl3+2], eax	mov dword [voxbpl4+2], eax	mov dword [voxbpl5+2], eax	mov dword [voxbpl6+2], eax	mov dword [voxbpl7+2], eax	mov dword [voxbpl8+2], eax	mov dword [voxpal1+2], ebx	mov dword [voxpal2+2], ebx	mov dword [voxpal3+2], ebx	mov dword [voxpal4+2], ebx	mov dword [voxpal5+2], ebx	mov dword [voxpal6+2], ebx	mov dword [voxpal7+2], ebx	mov dword [voxpal8+2], ebx	ret*/} /* setupdrawslab *//* #pragma aux drawslab parm [eax][ebx][ecx][edx][esi][edi] */long drawslab(long i1, long i2, long i3, long i4, long i5, long i6){    long retval = 0;    /*    __asm__ __volatile__ (        "call _asm_drawslab   \n\t"       : "=a" (retval)        : "a" (i1), "b" (i2), "c" (i3), "d" (i4), "S" (i5), "D" (i6)        : "cc", "memory");	*/    return(retval);/*_asm_drawslab:	push ebp	cmp eax, 2	je voxbegdraw2	ja voxskip2	xor eax, eaxvoxbegdraw1:	mov ebp, ebx	shr ebp, 16	add ebx, edx	dec ecx	mov al, byte [esi+ebp]voxpal1: mov al, byte [eax+88888888h]	mov byte [edi], alvoxbpl1: lea edi, [edi+88888888h]	jnz voxbegdraw1	pop ebp	retvoxbegdraw2:	mov ebp, ebx	shr ebp, 16	add ebx, edx	xor eax, eax	dec ecx	mov al, byte [esi+ebp]voxpal2: mov al, byte [eax+88888888h]	mov ah, al	mov word [edi], axvoxbpl2: lea edi, [edi+88888888h]	jnz voxbegdraw2	pop ebp	retvoxskip2:	cmp eax, 4	jne voxskip4	xor eax, eaxvoxbegdraw4:	mov ebp, ebx	add ebx, edx	shr ebp, 16	xor eax, eax	mov al, byte [esi+ebp]voxpal3: mov al, byte [eax+88888888h]	mov ah, al	shl eax, 8	mov al, ah	shl eax, 8	mov al, ah	mov dword [edi], eaxvoxbpl3: add edi, 88888888h	dec ecx	jnz voxbegdraw4	pop ebp	retvoxskip4:	add eax, edi	test edi, 1	jz voxskipslab1	cmp edi, eax	je voxskipslab1	push eax	push ebx	push ecx	push edivoxbegslab1:	mov ebp, ebx	add ebx, edx	shr ebp, 16	xor eax, eax	mov al, byte [esi+ebp]voxpal4: mov al, byte [eax+88888888h]	mov byte [edi], alvoxbpl4: add edi, 88888888h	dec ecx	jnz voxbegslab1	pop edi	pop ecx	pop ebx	pop eax	inc edivoxskipslab1:	push eax	test edi, 2	jz voxskipslab2	dec eax	cmp edi, eax	jge voxskipslab2	push ebx	push ecx	push edivoxbegslab2:	mov ebp, ebx	add ebx, edx	shr ebp, 16	xor eax, eax	mov al, byte [esi+ebp]voxpal5: mov al, byte [eax+88888888h]	mov ah, al	mov word [edi], axvoxbpl5: add edi, 88888888h	dec ecx	jnz voxbegslab2	pop edi	pop ecx	pop ebx	add edi, 2voxskipslab2:	mov eax, [esp]	sub eax, 3	cmp edi, eax	jge voxskipslab3voxprebegslab3:	push ebx	push ecx	push edivoxbegslab3:	mov ebp, ebx	add ebx, edx	shr ebp, 16	xor eax, eax	mov al, byte [esi+ebp]voxpal6: mov al, byte [eax+88888888h]	mov ah, al	shl eax, 8	mov al, ah	shl eax, 8	mov al, ah	mov dword [edi], eaxvoxbpl6: add edi, 88888888h	dec ecx	jnz voxbegslab3	pop edi	pop ecx	pop ebx	add edi, 4	mov eax, [esp]	sub eax, 3	cmp edi, eax	jl voxprebegslab3voxskipslab3:	mov eax, [esp]	dec eax	cmp edi, eax	jge voxskipslab4	push ebx	push ecx	push edivoxbegslab4:	mov ebp, ebx	add ebx, edx	shr ebp, 16	xor eax, eax	mov al, byte [esi+ebp]voxpal7: mov al, byte [eax+88888888h]	mov ah, al	mov word [edi], axvoxbpl7: add edi, 88888888h	dec ecx	jnz voxbegslab4	pop edi	pop ecx	pop ebx	add edi, 2voxskipslab4:	pop eax	cmp edi, eax	je voxskipslab5voxbegslab5:	mov ebp, ebx	add ebx, edx	shr ebp, 16	xor eax, eax	mov al, byte [esi+ebp]voxpal8: mov al, byte [eax+88888888h]	mov byte [edi], alvoxbpl8: add edi, 88888888h	dec ecx	jnz voxbegslab5voxskipslab5:	pop ebp	ret*/} /* drawslab *//* #pragma aux stretchhline parm [eax][ebx][ecx][edx][esi][edi] */long stretchhline(long i1, long i2, long i3, long i4, long i5, long i6){    long retval = 0;    /*    __asm__ __volatile__ (        "call _asm_stretchhline   \n\t"       : "=a" (retval)        : "a" (i1), "b" (i2), "c" (i3), "d" (i4), "S" (i5), "D" (i6)        : "cc", "memory");	*/    return(retval);/*_asm_stretchhline:	push ebp	mov eax, ebx	shl ebx, 16	sar eax, 16	and ecx, 0000ffffh	or ecx, ebx	add esi, eax	mov eax, edx	mov edx, esi	mov ebp, eax	shl eax, 16	sar ebp, 16	add ecx, eax	adc esi, ebp	add eax, eax	adc ebp, ebp	mov dword [loinc1+2], eax	mov dword [loinc2+2], eax	mov dword [loinc3+2], eax	mov dword [loinc4+2], eax	inc ch	jmp begloopbegloop:	mov al, [edx]loinc1: sub ebx, 88888888h	sbb edx, ebp	mov ah, [esi]loinc2: sub ecx, 88888888h	sbb esi, ebp	sub edi, 4	shl eax, 16loinc3: sub ebx, 88888888h	mov al, [edx]	sbb edx, ebp	mov ah, [esi]loinc4: sub ecx, 88888888h	sbb esi, ebp	mov [edi], eax	dec cl	jnz begloop	dec ch	jnz begloop	pop ebp	ret*/} /* stretchhline */