mirror of
https://github.com/microsoft/Microsoft-3D-Movie-Maker.git
synced 2024-11-22 02:12:33 +01:00
191 lines
4.2 KiB
C
191 lines
4.2 KiB
C
/*
|
|
* Copyright (c) 1992,1993-1995 by Argonaut Technologies Limited. All rights reserved.
|
|
*
|
|
* $Id: wtcifix.h 1.6 1995/02/22 21:37:27 sam Exp $
|
|
* $Locker: $
|
|
*
|
|
* Inline fixed point ops for Watcom C
|
|
*
|
|
*/
|
|
long IFixedMul(long a, long b);
|
|
#pragma aux IFixedMul = \
|
|
"imul ebx" \
|
|
"shrd eax,edx,16" \
|
|
parm nomemory [eax] [ebx] \
|
|
modify nomemory [edx] ;
|
|
|
|
long IFixedDiv(long a, long b);
|
|
#pragma aux IFixedDiv = \
|
|
"mov eax,edx" \
|
|
"shl eax,16" \
|
|
"sar edx,16" \
|
|
"idiv ebx" \
|
|
parm nomemory [edx] [ebx] \
|
|
modify nomemory [eax] ;
|
|
|
|
long IFixedDivR(long a, long b);
|
|
#pragma aux IFixedDivR = \
|
|
"cdq" \
|
|
"xchg edx,eax" \
|
|
"shrd eax,edx,16" \
|
|
"sar edx,16" \
|
|
"idiv ebx" \
|
|
parm nomemory [eax] [ebx] \
|
|
modify nomemory [edx] ;
|
|
|
|
long IFixedDivF(long a, long b);
|
|
#pragma aux IFixedDivF = \
|
|
"xor eax,eax" \
|
|
"sar edx,1" \
|
|
"rcr eax,1" \
|
|
"div ebx" \
|
|
parm nomemory [edx] [ebx] \
|
|
modify nomemory [eax] ;
|
|
|
|
long IFixedRcp(long a);
|
|
#pragma aux IFixedRcp = \
|
|
"mov edx,1" \
|
|
"xor eax,eax" \
|
|
"idiv ebx" \
|
|
parm nomemory [ebx] \
|
|
modify nomemory [eax edx] ;
|
|
|
|
long IFixedMulDiv(long a, long b, long c);
|
|
#pragma aux IFixedMulDiv = \
|
|
"imul ebx" \
|
|
"idiv ecx" \
|
|
parm nomemory [eax] [ebx] [ecx]\
|
|
modify nomemory [edx] ;
|
|
|
|
long IFixedMac2(long a, long b, long c, long d);
|
|
#pragma aux IFixedMac2 =\
|
|
"imul edx"\
|
|
"shrd eax,edx,16"\
|
|
"xchg ecx,eax"\
|
|
"imul ebx"\
|
|
"shrd eax,edx,16"\
|
|
"add eax,ecx"\
|
|
parm nomemory [eax] [edx] [ecx] [ebx] \
|
|
modify nomemory;
|
|
|
|
long IFixedMac3(long a, long b, long c, long d, long e, long f);
|
|
#pragma aux IFixedMac3 =\
|
|
"imul edx"\
|
|
"shrd eax,edx,16"\
|
|
"xchg ecx,eax"\
|
|
"imul ebx"\
|
|
"shrd eax,edx,16"\
|
|
"add ecx,eax"\
|
|
"mov eax,esi"\
|
|
"imul edi"\
|
|
"shrd eax,edx,16"\
|
|
"add eax,ecx"\
|
|
parm nomemory [eax] [edx] [ecx] [ebx] [esi] [edi]\
|
|
modify nomemory;
|
|
|
|
long IFixedFMac2(short a, long b, short c, long d);
|
|
#pragma aux IFixedFMac2 =\
|
|
"cwde"\
|
|
"imul edx"\
|
|
"shrd eax,edx,15"\
|
|
"xchg ecx,eax"\
|
|
"cwde"\
|
|
"imul ebx"\
|
|
"shrd eax,edx,15"\
|
|
"add eax,ecx"\
|
|
parm nomemory [ax] [edx] [cx] [ebx] \
|
|
modify nomemory;
|
|
|
|
long IFixedFMac3(short a, long b, short c, long d, short e, long f);
|
|
#pragma aux IFixedFMac3 =\
|
|
"cwde"\
|
|
"imul edx"\
|
|
"shrd eax,edx,15"\
|
|
"xchg ecx,eax"\
|
|
"cwde"\
|
|
"imul ebx"\
|
|
"shrd eax,edx,15"\
|
|
"add ecx,eax"\
|
|
"mov eax,esi"\
|
|
"cwde"\
|
|
"imul edi"\
|
|
"shrd eax,edx,15"\
|
|
"add eax,ecx"\
|
|
parm nomemory [ax] [edx] [cx] [ebx] [si] [edi]\
|
|
modify nomemory;
|
|
|
|
long IFixedSqr(long a);
|
|
#pragma aux IFixedSqr = \
|
|
"imul eax" \
|
|
"shrd eax,edx,16" \
|
|
parm nomemory [eax] \
|
|
modify nomemory [edx] ;
|
|
|
|
long IFixedSqr2(long a, long b);
|
|
#pragma aux IFixedSqr2 =\
|
|
"imul eax"\
|
|
"xchg ebx,eax"\
|
|
"mov ecx,edx"\
|
|
"imul eax"\
|
|
"add eax,ebx"\
|
|
"adc edx,ecx"\
|
|
"shrd eax,edx,16"\
|
|
parm nomemory [eax] [ebx]\
|
|
modify nomemory [eax ebx ecx edx];
|
|
|
|
long IFixedSqr3(long a, long b, long c);
|
|
#pragma aux IFixedSqr3 =\
|
|
"imul eax"\
|
|
"xchg ebx,eax"\
|
|
"mov ecx,edx"\
|
|
"imul eax"\
|
|
"add ebx,eax"\
|
|
"adc ecx,edx"\
|
|
"mov eax,esi"\
|
|
"imul eax"\
|
|
"add eax,ebx"\
|
|
"adc edx,ecx"\
|
|
"shrd eax,edx,16"\
|
|
parm nomemory [eax] [ebx] [esi]\
|
|
modify nomemory [eax ebx ecx edx];
|
|
|
|
long IFixedSqr4(long a, long b, long c, long d);
|
|
#pragma aux IFixedSqr4 =\
|
|
"imul eax"\
|
|
"xchg ebx,eax"\
|
|
"mov ecx,edx"\
|
|
"imul eax"\
|
|
"add ebx,eax"\
|
|
"adc ecx,edx"\
|
|
"mov eax,esi"\
|
|
"imul eax"\
|
|
"add ebx,eax"\
|
|
"adc ecx,edx"\
|
|
"mov eax,edi"\
|
|
"imul eax"\
|
|
"add eax,ebx"\
|
|
"adc edx,ecx"\
|
|
"shrd eax,edx,16"\
|
|
parm nomemory [eax] [ebx] [esi] [edi]\
|
|
modify nomemory [eax ebx ecx edx];
|
|
|
|
#define BrFixedMul(a,b) IFixedMul(a,b)
|
|
#define BrFixedMac2(a,b,c,d) IFixedMac2(a,b,c,d)
|
|
#define BrFixedMac3(a,b,c,d,e,f) IFixedMac3(a,b,c,d,e,f)
|
|
#define BrFixedMac4(a,b,c,d,e,f,g,h) (IFixedMac2(a,b,c,d)+IFixedMac2(e,f,g,h))
|
|
#define BrFixedDiv(a,b) IFixedDiv(a,b)
|
|
#define BrFixedDivR(a,b) IFixedDivR(a,b)
|
|
#define BrFixedDivF(a,b) IFixedDivF(a,b)
|
|
#define BrFixedMulDiv(a,b,c) IFixedMulDiv(a,b,c)
|
|
#define BrFixedRcp(a) IFixedRcp(a)
|
|
|
|
#define BrFixedSqr(a) IFixedSqr(a)
|
|
#define BrFixedSqr2(a,b) IFixedSqr2(a,b)
|
|
#define BrFixedSqr3(a,b,c) IFixedSqr3(a,b,c)
|
|
#define BrFixedSqr4(a,b,c,d) IFixedSqr4(a,b,c,d)
|
|
|
|
#define BrFixedFMac2(a,b,c,d) IFixedFMac2(a,b,c,d)
|
|
#define BrFixedFMac3(a,b,c,d,e,f) IFixedFMac3(a,b,c,d,e,f)
|
|
#define BrFixedFMac4(a,b,c,d,e,f,g,h) (IFixedFMac2(a,b,c,d)+IFixedFMac2(e,f,g,h))
|
|
|