mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-02-21 10:51:25 +00:00
Remove BUILD code, and marking the 2 remaining headers as uncopyrightable on advice of Graf Zahl.
This commit is contained in:
parent
d4a1043aa2
commit
e74517ff37
4 changed files with 6 additions and 704 deletions
|
@ -1,11 +1,7 @@
|
|||
// "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 is based on pragmas.h from Ken Silverman's original Build
|
||||
// source code release but is meant for use with any compiler and does not
|
||||
// rely on any inline assembly.
|
||||
//
|
||||
// source code release. The functions in here are so simple and so
|
||||
// basic that they can't be rewritten without being copycats of
|
||||
// themselves. As such, they are uncopyrightable.
|
||||
|
||||
#if _MSC_VER
|
||||
#pragma once
|
||||
|
|
332
src/gccinlines.h
332
src/gccinlines.h
|
@ -1,332 +0,0 @@
|
|||
// "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 is based on pragmas.h from Ken Silverman's original Build
|
||||
// source code release but is meant for use with GCC instead of Watcom C.
|
||||
//
|
||||
// Some of the inline assembly has been turned into C code, because
|
||||
// modern compilers are smart enough to produce code at least as good as
|
||||
// Ken's inline assembly.
|
||||
//
|
||||
|
||||
// I can come up with several different operand constraints for the
|
||||
// following that work just fine when used all by themselves, but
|
||||
// when I concatenate them together so that the compiler can choose
|
||||
// between them, I get the following (but only if enough parameters
|
||||
// are passed as the result of some operations instead of as
|
||||
// variables/constants--e.g. DMulScale16 (a*2, b*2, c*2, d*2) instead of
|
||||
// DMulScale16 (a, b, c, d)):
|
||||
//
|
||||
// `asm' operand requires impossible reload
|
||||
//
|
||||
// Why?
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef alloca
|
||||
// MinGW does not seem to come with alloca defined.
|
||||
#define alloca __builtin_alloca
|
||||
#endif
|
||||
|
||||
static inline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
SDWORD result, dummy;
|
||||
|
||||
asm volatile
|
||||
("imull %3\n\t"
|
||||
"idivl %4"
|
||||
: "=a,a,a,a,a,a" (result),
|
||||
"=&d,&d,&d,&d,d,d" (dummy)
|
||||
: "a,a,a,a,a,a" (a),
|
||||
"m,r,m,r,d,d" (b),
|
||||
"r,r,m,m,r,m" (c)
|
||||
: "cc"
|
||||
);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline SDWORD MulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
SDWORD result, dummy;
|
||||
|
||||
asm volatile
|
||||
("imull %3\n\t"
|
||||
"shrdl %b4,%1,%0"
|
||||
: "=a,a,a,a" (result),
|
||||
"=d,d,d,d" (dummy)
|
||||
: "a,a,a,a" (a),
|
||||
"m,r,m,r" (b),
|
||||
"c,c,I,I" (c)
|
||||
: "cc"
|
||||
);
|
||||
return result;
|
||||
}
|
||||
|
||||
#define MAKECONSTMulScale(s) \
|
||||
static inline SDWORD MulScale##s (SDWORD a, SDWORD b) { return ((SQWORD)a * b) >> s; }
|
||||
|
||||
MAKECONSTMulScale(1)
|
||||
MAKECONSTMulScale(2)
|
||||
MAKECONSTMulScale(3)
|
||||
MAKECONSTMulScale(4)
|
||||
MAKECONSTMulScale(5)
|
||||
MAKECONSTMulScale(6)
|
||||
MAKECONSTMulScale(7)
|
||||
MAKECONSTMulScale(8)
|
||||
MAKECONSTMulScale(9)
|
||||
MAKECONSTMulScale(10)
|
||||
MAKECONSTMulScale(11)
|
||||
MAKECONSTMulScale(12)
|
||||
MAKECONSTMulScale(13)
|
||||
MAKECONSTMulScale(14)
|
||||
MAKECONSTMulScale(15)
|
||||
MAKECONSTMulScale(16)
|
||||
MAKECONSTMulScale(17)
|
||||
MAKECONSTMulScale(18)
|
||||
MAKECONSTMulScale(19)
|
||||
MAKECONSTMulScale(20)
|
||||
MAKECONSTMulScale(21)
|
||||
MAKECONSTMulScale(22)
|
||||
MAKECONSTMulScale(23)
|
||||
MAKECONSTMulScale(24)
|
||||
MAKECONSTMulScale(25)
|
||||
MAKECONSTMulScale(26)
|
||||
MAKECONSTMulScale(27)
|
||||
MAKECONSTMulScale(28)
|
||||
MAKECONSTMulScale(29)
|
||||
MAKECONSTMulScale(30)
|
||||
MAKECONSTMulScale(31)
|
||||
MAKECONSTMulScale(32)
|
||||
#undef MAKECONSTMulScale
|
||||
|
||||
static inline DWORD UMulScale16(DWORD a, DWORD b) { return ((QWORD)a * b) >> 16; }
|
||||
|
||||
#define MAKECONSTDMulScale(s) \
|
||||
static inline SDWORD DMulScale##s (SDWORD a, SDWORD b, SDWORD c, SDWORD d) \
|
||||
{ \
|
||||
return (((SQWORD)a * b) + ((SQWORD)c * d)) >> s; \
|
||||
}
|
||||
|
||||
MAKECONSTDMulScale(1)
|
||||
MAKECONSTDMulScale(2)
|
||||
MAKECONSTDMulScale(3)
|
||||
MAKECONSTDMulScale(4)
|
||||
MAKECONSTDMulScale(5)
|
||||
MAKECONSTDMulScale(6)
|
||||
MAKECONSTDMulScale(7)
|
||||
MAKECONSTDMulScale(8)
|
||||
MAKECONSTDMulScale(9)
|
||||
MAKECONSTDMulScale(10)
|
||||
MAKECONSTDMulScale(11)
|
||||
MAKECONSTDMulScale(12)
|
||||
MAKECONSTDMulScale(13)
|
||||
MAKECONSTDMulScale(14)
|
||||
MAKECONSTDMulScale(15)
|
||||
MAKECONSTDMulScale(16)
|
||||
MAKECONSTDMulScale(17)
|
||||
MAKECONSTDMulScale(18)
|
||||
MAKECONSTDMulScale(19)
|
||||
MAKECONSTDMulScale(20)
|
||||
MAKECONSTDMulScale(21)
|
||||
MAKECONSTDMulScale(22)
|
||||
MAKECONSTDMulScale(23)
|
||||
MAKECONSTDMulScale(24)
|
||||
MAKECONSTDMulScale(25)
|
||||
MAKECONSTDMulScale(26)
|
||||
MAKECONSTDMulScale(27)
|
||||
MAKECONSTDMulScale(28)
|
||||
MAKECONSTDMulScale(29)
|
||||
MAKECONSTDMulScale(30)
|
||||
MAKECONSTDMulScale(31)
|
||||
MAKECONSTDMulScale(32)
|
||||
#undef MAKECONSTDMulScale
|
||||
|
||||
#define MAKECONSTTMulScale(s) \
|
||||
static inline SDWORD TMulScale##s (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD ee) \
|
||||
{ \
|
||||
return (((SQWORD)a * b) + ((SQWORD)c * d) + ((SQWORD)e * ee)) >> s; \
|
||||
}
|
||||
|
||||
MAKECONSTTMulScale(1)
|
||||
MAKECONSTTMulScale(2)
|
||||
MAKECONSTTMulScale(3)
|
||||
MAKECONSTTMulScale(4)
|
||||
MAKECONSTTMulScale(5)
|
||||
MAKECONSTTMulScale(6)
|
||||
MAKECONSTTMulScale(7)
|
||||
MAKECONSTTMulScale(8)
|
||||
MAKECONSTTMulScale(9)
|
||||
MAKECONSTTMulScale(10)
|
||||
MAKECONSTTMulScale(11)
|
||||
MAKECONSTTMulScale(12)
|
||||
MAKECONSTTMulScale(13)
|
||||
MAKECONSTTMulScale(14)
|
||||
MAKECONSTTMulScale(15)
|
||||
MAKECONSTTMulScale(16)
|
||||
MAKECONSTTMulScale(17)
|
||||
MAKECONSTTMulScale(18)
|
||||
MAKECONSTTMulScale(19)
|
||||
MAKECONSTTMulScale(20)
|
||||
MAKECONSTTMulScale(21)
|
||||
MAKECONSTTMulScale(22)
|
||||
MAKECONSTTMulScale(23)
|
||||
MAKECONSTTMulScale(24)
|
||||
MAKECONSTTMulScale(25)
|
||||
MAKECONSTTMulScale(26)
|
||||
MAKECONSTTMulScale(27)
|
||||
MAKECONSTTMulScale(28)
|
||||
MAKECONSTTMulScale(29)
|
||||
MAKECONSTTMulScale(30)
|
||||
MAKECONSTTMulScale(31)
|
||||
MAKECONSTTMulScale(32)
|
||||
#undef MAKECONSTTMulScale
|
||||
|
||||
static inline SDWORD BoundMulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
union {
|
||||
long long big;
|
||||
struct
|
||||
{
|
||||
int l, h;
|
||||
};
|
||||
} u;
|
||||
u.big = ((long long)a * b) >> c;
|
||||
if ((u.h ^ u.l) < 0 || (unsigned int)(u.h+1) > 1) return (u.h >> 31) ^ 0x7fffffff;
|
||||
return u.l;
|
||||
}
|
||||
|
||||
static inline SDWORD DivScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
SDWORD result, dummy;
|
||||
SDWORD lo = a << c;
|
||||
SDWORD hi = a >> (-c);
|
||||
|
||||
asm volatile
|
||||
("idivl %4"
|
||||
:"=a" (result),
|
||||
"=d" (dummy)
|
||||
: "a" (lo),
|
||||
"d" (hi),
|
||||
"r" (b)
|
||||
: "cc");
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline SDWORD DivScale1 (SDWORD a, SDWORD b)
|
||||
{
|
||||
SDWORD result, dummy;
|
||||
|
||||
asm volatile
|
||||
("addl %%eax,%%eax\n\t"
|
||||
"sbbl %%edx,%%edx\n\t"
|
||||
"idivl %3"
|
||||
:"=a,a" (result),
|
||||
"=&d,d" (dummy)
|
||||
: "a,a" (a),
|
||||
"r,m" (b)
|
||||
: "cc");
|
||||
return result;
|
||||
}
|
||||
|
||||
#define MAKECONSTDivScale(s) \
|
||||
static inline SDWORD DivScale##s (SDWORD a, SDWORD b) \
|
||||
{ \
|
||||
SDWORD result, dummy; \
|
||||
asm volatile \
|
||||
("idivl %4" \
|
||||
:"=a,a" (result), \
|
||||
"=d,d" (dummy) \
|
||||
: "a,a" (a<<s), \
|
||||
"d,d" (a>>(32-s)), \
|
||||
"r,m" (b) \
|
||||
: "cc"); \
|
||||
return result; \
|
||||
}
|
||||
|
||||
MAKECONSTDivScale(2)
|
||||
MAKECONSTDivScale(3)
|
||||
MAKECONSTDivScale(4)
|
||||
MAKECONSTDivScale(5)
|
||||
MAKECONSTDivScale(6)
|
||||
MAKECONSTDivScale(7)
|
||||
MAKECONSTDivScale(8)
|
||||
MAKECONSTDivScale(9)
|
||||
MAKECONSTDivScale(10)
|
||||
MAKECONSTDivScale(11)
|
||||
MAKECONSTDivScale(12)
|
||||
MAKECONSTDivScale(13)
|
||||
MAKECONSTDivScale(14)
|
||||
MAKECONSTDivScale(15)
|
||||
MAKECONSTDivScale(16)
|
||||
MAKECONSTDivScale(17)
|
||||
MAKECONSTDivScale(18)
|
||||
MAKECONSTDivScale(19)
|
||||
MAKECONSTDivScale(20)
|
||||
MAKECONSTDivScale(21)
|
||||
MAKECONSTDivScale(22)
|
||||
MAKECONSTDivScale(23)
|
||||
MAKECONSTDivScale(24)
|
||||
MAKECONSTDivScale(25)
|
||||
MAKECONSTDivScale(26)
|
||||
MAKECONSTDivScale(27)
|
||||
MAKECONSTDivScale(28)
|
||||
MAKECONSTDivScale(29)
|
||||
MAKECONSTDivScale(30)
|
||||
MAKECONSTDivScale(31)
|
||||
#undef MAKECONSTDivScale
|
||||
|
||||
static inline SDWORD DivScale32 (SDWORD a, SDWORD b)
|
||||
{
|
||||
SDWORD result = 0, dummy;
|
||||
|
||||
asm volatile
|
||||
("idivl %3"
|
||||
:"+a,a" (result),
|
||||
"=d,d" (dummy)
|
||||
: "d,d" (a),
|
||||
"r,m" (b)
|
||||
: "cc");
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline void clearbuf (void *buff, int count, SDWORD clear)
|
||||
{
|
||||
int dummy1, dummy2;
|
||||
asm volatile
|
||||
("rep stosl"
|
||||
:"=D" (dummy1),
|
||||
"=c" (dummy2)
|
||||
: "D" (buff),
|
||||
"c" (count),
|
||||
"a" (clear)
|
||||
);
|
||||
}
|
||||
|
||||
static inline void clearbufshort (void *buff, unsigned int count, WORD clear)
|
||||
{
|
||||
asm volatile
|
||||
("shr $1,%%ecx\n\t"
|
||||
"rep stosl\n\t"
|
||||
"adc %%ecx,%%ecx\n\t"
|
||||
"rep stosw"
|
||||
:"=D" (buff), "=c" (count)
|
||||
:"D" (buff), "c" (count), "a" (clear|(clear<<16))
|
||||
:"cc");
|
||||
}
|
||||
|
||||
static inline SDWORD ksgn (SDWORD a)
|
||||
{
|
||||
SDWORD result, dummy;
|
||||
|
||||
asm volatile
|
||||
("add %0,%0\n\t"
|
||||
"sbb %1,%1\n\t"
|
||||
"cmp %0,%1\n\t"
|
||||
"adc $0,%1"
|
||||
:"=r" (dummy), "=r" (result)
|
||||
:"0" (a)
|
||||
:"cc");
|
||||
return result;
|
||||
}
|
|
@ -1,25 +1,14 @@
|
|||
// "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 is based on pragmas.h from Ken Silverman's original Build
|
||||
// source code release and contains routines that were originally
|
||||
// inline assembly but are not now.
|
||||
// source code release. The functions in here are so simple and so
|
||||
// basic that they can't be rewritten without being copycats of
|
||||
// themselves. As such, they are uncopyrightable.
|
||||
|
||||
#ifndef __M_FIXED__
|
||||
#define __M_FIXED__
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "doomtype.h"
|
||||
|
||||
#if defined(__GNUC__) && defined(__i386__) && !defined(__clang__)
|
||||
#include "gccinlines.h"
|
||||
#elif defined(_MSC_VER) && defined(_M_IX86)
|
||||
#include "mscinlines.h"
|
||||
#else
|
||||
#include "basicinlines.h"
|
||||
#endif
|
||||
|
||||
#include "xs_Float.h"
|
||||
|
||||
#define MAKESAFEDIVSCALE(x) \
|
||||
|
|
351
src/mscinlines.h
351
src/mscinlines.h
|
@ -1,351 +0,0 @@
|
|||
// "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 is based on pragmas.h from Ken Silverman's original Build
|
||||
// source code release but is meant for use with Visual C++ instead of
|
||||
// Watcom C.
|
||||
//
|
||||
// Some of the inline assembly has been turned into C code, because VC++
|
||||
// is smart enough to produce code at least as good as Ken's inlines.
|
||||
// The more used functions are still inline assembly, because they do
|
||||
// things that can't really be done in C. (I consider this a bad thing,
|
||||
// because VC++ has considerably poorer support for inline assembly than
|
||||
// Watcom, so it's better to rely on its C optimizer to produce fast code.)
|
||||
//
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#pragma warning (disable: 4035)
|
||||
|
||||
__forceinline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm imul b
|
||||
__asm idiv c
|
||||
}
|
||||
|
||||
__forceinline SDWORD MulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm mov ecx,c
|
||||
__asm imul b
|
||||
__asm shrd eax,edx,cl
|
||||
}
|
||||
|
||||
#define MAKECONSTMulScale(s) \
|
||||
__forceinline SDWORD MulScale##s (SDWORD a, SDWORD b) \
|
||||
{ \
|
||||
__asm mov eax,a \
|
||||
__asm imul b \
|
||||
__asm shrd eax,edx,s \
|
||||
}
|
||||
MAKECONSTMulScale(1)
|
||||
MAKECONSTMulScale(2)
|
||||
MAKECONSTMulScale(3)
|
||||
MAKECONSTMulScale(4)
|
||||
MAKECONSTMulScale(5)
|
||||
MAKECONSTMulScale(6)
|
||||
MAKECONSTMulScale(7)
|
||||
MAKECONSTMulScale(8)
|
||||
MAKECONSTMulScale(9)
|
||||
MAKECONSTMulScale(10)
|
||||
MAKECONSTMulScale(11)
|
||||
MAKECONSTMulScale(12)
|
||||
MAKECONSTMulScale(13)
|
||||
MAKECONSTMulScale(14)
|
||||
MAKECONSTMulScale(15)
|
||||
MAKECONSTMulScale(16)
|
||||
MAKECONSTMulScale(17)
|
||||
MAKECONSTMulScale(18)
|
||||
MAKECONSTMulScale(19)
|
||||
MAKECONSTMulScale(20)
|
||||
MAKECONSTMulScale(21)
|
||||
MAKECONSTMulScale(22)
|
||||
MAKECONSTMulScale(23)
|
||||
MAKECONSTMulScale(24)
|
||||
MAKECONSTMulScale(25)
|
||||
MAKECONSTMulScale(26)
|
||||
MAKECONSTMulScale(27)
|
||||
MAKECONSTMulScale(28)
|
||||
MAKECONSTMulScale(29)
|
||||
MAKECONSTMulScale(30)
|
||||
MAKECONSTMulScale(31)
|
||||
#undef MAKECONSTMulScale
|
||||
|
||||
__forceinline SDWORD MulScale32 (SDWORD a, SDWORD b)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm imul b
|
||||
__asm mov eax,edx
|
||||
}
|
||||
|
||||
__forceinline DWORD UMulScale16(DWORD a, DWORD b)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm mul b
|
||||
__asm shrd eax,edx,16
|
||||
}
|
||||
|
||||
__forceinline SDWORD DMulScale (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD s)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm imul b
|
||||
__asm mov ebx,eax
|
||||
__asm mov eax,c
|
||||
__asm mov esi,edx
|
||||
__asm mov ecx,s
|
||||
__asm imul d
|
||||
__asm add eax,ebx
|
||||
__asm adc edx,esi
|
||||
__asm shrd eax,edx,cl
|
||||
}
|
||||
|
||||
#define MAKECONSTDMulScale(s) \
|
||||
__forceinline SDWORD DMulScale##s (SDWORD a, SDWORD b, SDWORD c, SDWORD d) \
|
||||
{ \
|
||||
__asm mov eax,a \
|
||||
__asm imul b \
|
||||
__asm mov ebx,eax \
|
||||
__asm mov eax,c \
|
||||
__asm mov esi,edx \
|
||||
__asm imul d \
|
||||
__asm add eax,ebx \
|
||||
__asm adc edx,esi \
|
||||
__asm shrd eax,edx,s \
|
||||
}
|
||||
|
||||
MAKECONSTDMulScale(1)
|
||||
MAKECONSTDMulScale(2)
|
||||
MAKECONSTDMulScale(3)
|
||||
MAKECONSTDMulScale(4)
|
||||
MAKECONSTDMulScale(5)
|
||||
MAKECONSTDMulScale(6)
|
||||
MAKECONSTDMulScale(7)
|
||||
MAKECONSTDMulScale(8)
|
||||
MAKECONSTDMulScale(9)
|
||||
MAKECONSTDMulScale(10)
|
||||
MAKECONSTDMulScale(11)
|
||||
MAKECONSTDMulScale(12)
|
||||
MAKECONSTDMulScale(13)
|
||||
MAKECONSTDMulScale(14)
|
||||
MAKECONSTDMulScale(15)
|
||||
MAKECONSTDMulScale(16)
|
||||
MAKECONSTDMulScale(17)
|
||||
MAKECONSTDMulScale(18)
|
||||
MAKECONSTDMulScale(19)
|
||||
MAKECONSTDMulScale(20)
|
||||
MAKECONSTDMulScale(21)
|
||||
MAKECONSTDMulScale(22)
|
||||
MAKECONSTDMulScale(23)
|
||||
MAKECONSTDMulScale(24)
|
||||
MAKECONSTDMulScale(25)
|
||||
MAKECONSTDMulScale(26)
|
||||
MAKECONSTDMulScale(27)
|
||||
MAKECONSTDMulScale(28)
|
||||
MAKECONSTDMulScale(29)
|
||||
MAKECONSTDMulScale(30)
|
||||
MAKECONSTDMulScale(31)
|
||||
#undef MAKCONSTDMulScale
|
||||
|
||||
__forceinline SDWORD DMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm imul b
|
||||
__asm mov ebx,eax
|
||||
__asm mov eax,c
|
||||
__asm mov esi,edx
|
||||
__asm imul d
|
||||
__asm add eax,ebx
|
||||
__asm adc edx,esi
|
||||
__asm mov eax,edx
|
||||
}
|
||||
|
||||
#define MAKECONSTTMulScale(s) \
|
||||
__forceinline SDWORD TMulScale##s (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) \
|
||||
{ \
|
||||
__asm mov eax,a \
|
||||
__asm imul b \
|
||||
__asm mov ebx,eax \
|
||||
__asm mov eax,d \
|
||||
__asm mov ecx,edx \
|
||||
__asm imul c \
|
||||
__asm add ebx,eax \
|
||||
__asm mov eax,e \
|
||||
__asm adc ecx,edx \
|
||||
__asm imul f \
|
||||
__asm add eax,ebx \
|
||||
__asm adc edx,ecx \
|
||||
__asm shrd eax,edx,s \
|
||||
}
|
||||
|
||||
MAKECONSTTMulScale(1)
|
||||
MAKECONSTTMulScale(2)
|
||||
MAKECONSTTMulScale(3)
|
||||
MAKECONSTTMulScale(4)
|
||||
MAKECONSTTMulScale(5)
|
||||
MAKECONSTTMulScale(6)
|
||||
MAKECONSTTMulScale(7)
|
||||
MAKECONSTTMulScale(8)
|
||||
MAKECONSTTMulScale(9)
|
||||
MAKECONSTTMulScale(10)
|
||||
MAKECONSTTMulScale(11)
|
||||
MAKECONSTTMulScale(12)
|
||||
MAKECONSTTMulScale(13)
|
||||
MAKECONSTTMulScale(14)
|
||||
MAKECONSTTMulScale(15)
|
||||
MAKECONSTTMulScale(16)
|
||||
MAKECONSTTMulScale(17)
|
||||
MAKECONSTTMulScale(18)
|
||||
MAKECONSTTMulScale(19)
|
||||
MAKECONSTTMulScale(20)
|
||||
MAKECONSTTMulScale(21)
|
||||
MAKECONSTTMulScale(22)
|
||||
MAKECONSTTMulScale(23)
|
||||
MAKECONSTTMulScale(24)
|
||||
MAKECONSTTMulScale(25)
|
||||
MAKECONSTTMulScale(26)
|
||||
MAKECONSTTMulScale(27)
|
||||
MAKECONSTTMulScale(28)
|
||||
MAKECONSTTMulScale(29)
|
||||
MAKECONSTTMulScale(30)
|
||||
MAKECONSTTMulScale(31)
|
||||
#undef MAKECONSTTMulScale
|
||||
|
||||
__forceinline SDWORD TMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm imul b
|
||||
__asm mov ebx,eax
|
||||
__asm mov eax,c
|
||||
__asm mov ecx,edx
|
||||
__asm imul d
|
||||
__asm add ebx,eax
|
||||
__asm mov eax,e
|
||||
__asm adc ecx,edx
|
||||
__asm imul f
|
||||
__asm add eax,ebx
|
||||
__asm adc edx,ecx
|
||||
__asm mov eax,edx
|
||||
}
|
||||
|
||||
__forceinline SDWORD BoundMulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm imul b
|
||||
__asm mov ebx,edx
|
||||
__asm mov ecx,c
|
||||
__asm shrd eax,edx,cl
|
||||
__asm sar edx,cl
|
||||
__asm xor edx,eax
|
||||
__asm js checkit
|
||||
__asm xor edx,eax
|
||||
__asm jz skipboundit
|
||||
__asm cmp edx,0xffffffff
|
||||
__asm je skipboundit
|
||||
checkit:
|
||||
__asm mov eax,ebx
|
||||
__asm sar eax,31
|
||||
__asm xor eax,0x7fffffff
|
||||
skipboundit:
|
||||
;
|
||||
}
|
||||
|
||||
__forceinline SDWORD DivScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm mov ecx,c
|
||||
__asm shl eax,cl
|
||||
__asm mov edx,a
|
||||
__asm neg cl
|
||||
__asm sar edx,cl
|
||||
__asm idiv b
|
||||
}
|
||||
|
||||
__forceinline SDWORD DivScale1 (SDWORD a, SDWORD b)
|
||||
{
|
||||
__asm mov eax,a
|
||||
__asm add eax,eax
|
||||
__asm sbb edx,edx
|
||||
__asm idiv b
|
||||
}
|
||||
|
||||
#define MAKECONSTDivScale(s) \
|
||||
__forceinline SDWORD DivScale##s (SDWORD a, SDWORD b) \
|
||||
{ \
|
||||
__asm mov edx,a \
|
||||
__asm sar edx,32-s \
|
||||
__asm mov eax,a \
|
||||
__asm shl eax,s \
|
||||
__asm idiv b \
|
||||
}
|
||||
|
||||
MAKECONSTDivScale(2)
|
||||
MAKECONSTDivScale(3)
|
||||
MAKECONSTDivScale(4)
|
||||
MAKECONSTDivScale(5)
|
||||
MAKECONSTDivScale(6)
|
||||
MAKECONSTDivScale(7)
|
||||
MAKECONSTDivScale(8)
|
||||
MAKECONSTDivScale(9)
|
||||
MAKECONSTDivScale(10)
|
||||
MAKECONSTDivScale(11)
|
||||
MAKECONSTDivScale(12)
|
||||
MAKECONSTDivScale(13)
|
||||
MAKECONSTDivScale(14)
|
||||
MAKECONSTDivScale(15)
|
||||
MAKECONSTDivScale(16)
|
||||
MAKECONSTDivScale(17)
|
||||
MAKECONSTDivScale(18)
|
||||
MAKECONSTDivScale(19)
|
||||
MAKECONSTDivScale(20)
|
||||
MAKECONSTDivScale(21)
|
||||
MAKECONSTDivScale(22)
|
||||
MAKECONSTDivScale(23)
|
||||
MAKECONSTDivScale(24)
|
||||
MAKECONSTDivScale(25)
|
||||
MAKECONSTDivScale(26)
|
||||
MAKECONSTDivScale(27)
|
||||
MAKECONSTDivScale(28)
|
||||
MAKECONSTDivScale(29)
|
||||
MAKECONSTDivScale(30)
|
||||
MAKECONSTDivScale(31)
|
||||
#undef MAKECONSTDivScale
|
||||
|
||||
__forceinline SDWORD DivScale32 (SDWORD a, SDWORD b)
|
||||
{
|
||||
__asm mov edx,a
|
||||
__asm xor eax,eax
|
||||
__asm idiv b
|
||||
}
|
||||
|
||||
__forceinline void clearbuf (void *buff, unsigned int count, SDWORD clear)
|
||||
{
|
||||
SDWORD *b2 = (SDWORD *)buff;
|
||||
for (unsigned int i = 0; i != count; ++i)
|
||||
{
|
||||
b2[i] = clear;
|
||||
}
|
||||
}
|
||||
|
||||
__forceinline void clearbufshort (void *buff, unsigned int count, WORD clear)
|
||||
{
|
||||
SWORD *b2 = (SWORD *)buff;
|
||||
for (unsigned int i = 0; i != count; ++i)
|
||||
{
|
||||
b2[i] = clear;
|
||||
}
|
||||
}
|
||||
|
||||
__forceinline SDWORD ksgn (SDWORD a)
|
||||
{
|
||||
__asm mov edx,a
|
||||
__asm add edx,edx
|
||||
__asm sbb eax,eax
|
||||
__asm cmp eax,edx
|
||||
__asm adc eax,0
|
||||
}
|
||||
|
||||
#pragma warning (default: 4035)
|
Loading…
Reference in a new issue