mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 05:51:20 +00:00
- Assembly code is disabled when building with __APPLE__ defined, for now.
- If you aren't targeting x86, m_fixed.h only includes basicinlines.h now. - Moved x64inlines.h into basicinlines.h. - Replaced uses of __int64 with types from doomtype.h. - The stop console command no longer ends single player games, just the demo that was being recorded. - In C mode, the sc_man parser no longer allows multi-line string constants without using the \ character to preface the newline character. This makes it much easier to diagnose errors where you forget the closing quote of a string. - Fixed: V_BreakLines() added the terminating '\0' to the last line of the input string. - Added font as a parameter to V_BreakLines and removed its keepspace parameter, which was never passed as anything other than the default. SVN r331 (trunk)
This commit is contained in:
parent
73032c2f3d
commit
419724dd02
30 changed files with 327 additions and 565 deletions
|
@ -22,7 +22,7 @@ DEBUGTARGET ?= zdoomgccd.exe
|
|||
DEBUGOBJDIR ?= debugobj
|
||||
RELEASEOBJDIR ?= releaseobj
|
||||
|
||||
CCDV = @ccdv
|
||||
CCDV ?= @ccdv
|
||||
RE2C = tools/re2c/re2c
|
||||
|
||||
CPPFLAGS = -DWIN32 -D_WIN32 -D_WINDOWS -DHAVE_STRUPR -DHAVE_FILELENGTH -DI_DO_NOT_LIKE_BIG_DOWNLOADS -D__forceinline=inline -MMD -Izlib -IFLAC -Ijpeg-6b -Isrc -Isrc/win32 -Isrc/g_doom -Isrc/g_heretic -I src/g_hexen -Isrc/g_raven -Isrc/g_strife -Isrc/g_shared -Isrc/oplsynth -Isrc/sound
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
September 19, 2006
|
||||
- Assembly code is disabled when building with __APPLE__ defined, for now.
|
||||
- If you aren't targeting x86, m_fixed.h only includes basicinlines.h now.
|
||||
- Moved x64inlines.h into basicinlines.h.
|
||||
- Replaced uses of __int64 with types from doomtype.h.
|
||||
- The stop console command no longer ends single player games, just the demo
|
||||
that was being recorded.
|
||||
- In C mode, the sc_man parser no longer allows multi-line string constants
|
||||
without using the \ character to preface the newline character. This makes
|
||||
it much easier to diagnose errors where you forget the closing quote of a
|
||||
string.
|
||||
- Fixed: V_BreakLines() added the terminating '\0' to the last line of the
|
||||
input string.
|
||||
- Added font as a parameter to V_BreakLines and removed its keepspace
|
||||
parameter, which was never passed as anything other than the default.
|
||||
|
||||
September 18, 2006
|
||||
- Removed REGEXEPEEK. It was only there for a Dev-C++ project, and the Dev-C++
|
||||
project was long ago removed, thanks to that particular IDE being so agonizingly
|
||||
slow.
|
||||
|
||||
September 17, 2006 (Changes by Graf Zahl)
|
||||
- Fixed: Texture scale calculations for HIRESTEX were incorrect.
|
||||
- Fixed: The sky scrolling calculations caused an integer multiplication overflow.
|
||||
|
|
|
@ -32,21 +32,26 @@
|
|||
**
|
||||
*/
|
||||
|
||||
#if defined(__GNUC__) && defined(_WIN32)
|
||||
|
||||
void InitAutoSegMarkers ();
|
||||
|
||||
#define REGEXEPEEK
|
||||
#define REGMARKER(x) (*x)
|
||||
typedef void **REGINFO;
|
||||
#ifndef AUTOSEGS_H
|
||||
#define AUTOSEGS_H
|
||||
|
||||
#ifdef __GNUC__
|
||||
#ifdef __MACH__
|
||||
#define AREG_SECTION "__DATA,areg"
|
||||
#define CREG_SECTION "__DATA,creg"
|
||||
#define GREG_SECTION "__DATA,greg"
|
||||
#define SREG_SECTION "__DATA,sreg"
|
||||
#else
|
||||
#define AREG_SECTION "areg"
|
||||
#define CREG_SECTION "creg"
|
||||
#define GREG_SECTION "greg"
|
||||
#define SREG_SECTION "sreg"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define REGMARKER(x) (x)
|
||||
typedef void *REGINFO;
|
||||
|
||||
#endif
|
||||
|
||||
// List of ActorInfos and the TypeInfos they belong to
|
||||
extern REGINFO ARegHead;
|
||||
extern REGINFO ARegTail;
|
||||
|
@ -63,13 +68,24 @@ extern REGINFO SRegTail;
|
|||
extern REGINFO CRegHead;
|
||||
extern REGINFO CRegTail;
|
||||
|
||||
template<class T, REGINFO *head, REGINFO *tail>
|
||||
template<class T, REGINFO *_head, REGINFO *_tail>
|
||||
class TAutoSegIteratorNoArrow
|
||||
{
|
||||
public:
|
||||
TAutoSegIteratorNoArrow ()
|
||||
{
|
||||
Probe = (T *)REGMARKER(head);
|
||||
// Weirdness. Mingw's linker puts these together backwards.
|
||||
if (_head < _tail)
|
||||
{
|
||||
Head = _head;
|
||||
Tail = _tail;
|
||||
}
|
||||
else
|
||||
{
|
||||
Head = _tail;
|
||||
Tail = _head;
|
||||
}
|
||||
Probe = (T *)REGMARKER(Head);
|
||||
}
|
||||
operator T () const
|
||||
{
|
||||
|
@ -80,16 +96,18 @@ class TAutoSegIteratorNoArrow
|
|||
do
|
||||
{
|
||||
++Probe;
|
||||
} while (*Probe == 0 && Probe < (T *)REGMARKER(tail));
|
||||
} while (*Probe == 0 && Probe < (T *)REGMARKER(Tail));
|
||||
return *this;
|
||||
}
|
||||
void Reset ()
|
||||
{
|
||||
Probe = (T *)REGMARKER(head);
|
||||
Probe = (T *)REGMARKER(Head);
|
||||
}
|
||||
|
||||
protected:
|
||||
T *Probe;
|
||||
REGINFO *Head;
|
||||
REGINFO *Tail;
|
||||
};
|
||||
|
||||
template<class T, REGINFO *head, REGINFO *tail>
|
||||
|
@ -101,3 +119,5 @@ class TAutoSegIterator : public TAutoSegIteratorNoArrow<T, head, tail>
|
|||
return *(this->Probe);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -83,73 +83,13 @@ void *SRegHead = 0;
|
|||
|
||||
#elif defined(__GNUC__)
|
||||
|
||||
#ifndef _WIN32
|
||||
void *ARegHead __attribute__((section("areg"))) = 0;
|
||||
void *CRegHead __attribute__((section("creg"))) = 0;
|
||||
void *GRegHead __attribute__((section("greg"))) = 0;
|
||||
void *SRegHead __attribute__((section("sreg"))) = 0;
|
||||
#else
|
||||
|
||||
// I can't find any way to specify the order to link files with
|
||||
// Dev C++, so when compiling with GCC under WIN32, I inspect
|
||||
// the executable instead of letting the linker do all the work for
|
||||
// me.
|
||||
|
||||
void **ARegHead;
|
||||
void **CRegHead;
|
||||
void **GRegHead;
|
||||
void **SRegHead;
|
||||
|
||||
#endif
|
||||
void *ARegHead __attribute__((section(AREG_SECTION))) = 0;
|
||||
void *CRegHead __attribute__((section(CREG_SECTION))) = 0;
|
||||
void *GRegHead __attribute__((section(GREG_SECTION))) = 0;
|
||||
void *SRegHead __attribute__((section(SREG_SECTION))) = 0;
|
||||
|
||||
#elif
|
||||
|
||||
#error Please fix autostart.cpp for your compiler
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef REGEXEPEEK
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <winnt.h>
|
||||
|
||||
struct AutoSegStuff
|
||||
{
|
||||
char name[IMAGE_SIZEOF_SHORT_NAME];
|
||||
REGINFO *HeadPtr;
|
||||
REGINFO *TailPtr;
|
||||
};
|
||||
|
||||
static const AutoSegStuff Stuff[5] =
|
||||
{
|
||||
{ "areg", &ARegHead, &ARegTail },
|
||||
{ "creg", &CRegHead, &CRegTail },
|
||||
{ "greg", &GRegHead, &GRegTail },
|
||||
{ "sreg", &SRegHead, &SRegTail },
|
||||
};
|
||||
|
||||
void InitAutoSegMarkers ()
|
||||
{
|
||||
BYTE *module = (BYTE *)GetModuleHandle (NULL);
|
||||
IMAGE_DOS_HEADER *dosHeader = (IMAGE_DOS_HEADER *)module;
|
||||
IMAGE_NT_HEADERS *ntHeaders = (IMAGE_NT_HEADERS *)(module + dosHeader->e_lfanew);
|
||||
IMAGE_SECTION_HEADER *sections = IMAGE_FIRST_SECTION (ntHeaders);
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < 5; ++i)
|
||||
{
|
||||
for (j = 0; j < ntHeaders->FileHeader.NumberOfSections; ++j)
|
||||
{
|
||||
if (memcmp (sections[j].Name, Stuff[i].name, IMAGE_SIZEOF_SHORT_NAME) == 0)
|
||||
{
|
||||
*Stuff[i].HeadPtr = (REGINFO)(sections[j].VirtualAddress + module - 4);
|
||||
*Stuff[i].TailPtr = (REGINFO)(sections[j].VirtualAddress + module + sections[j].Misc.VirtualSize);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -55,23 +55,10 @@ void *SRegTail = 0;
|
|||
|
||||
#elif defined(__GNUC__)
|
||||
|
||||
#ifndef _WIN32
|
||||
void *ARegTail __attribute__((section("areg"))) = 0;
|
||||
void *CRegTail __attribute__((section("creg"))) = 0;
|
||||
void *GRegTail __attribute__((section("greg"))) = 0;
|
||||
void *SRegTail __attribute__((section("sreg"))) = 0;
|
||||
#else
|
||||
|
||||
// I can't find any way to specify the order to link files with
|
||||
// Dev C++, so when compiling with GCC under WIN32, I inspect
|
||||
// the executable instead of letting the linker do all the work for
|
||||
// me.
|
||||
|
||||
void **ARegTail;
|
||||
void **CRegTail;
|
||||
void **GRegTail;
|
||||
void **SRegTail;
|
||||
#endif
|
||||
void *ARegTail __attribute__((section(AREG_SECTION))) = 0;
|
||||
void *CRegTail __attribute__((section(CREG_SECTION))) = 0;
|
||||
void *GRegTail __attribute__((section(GREG_SECTION))) = 0;
|
||||
void *SRegTail __attribute__((section(SREG_SECTION))) = 0;
|
||||
|
||||
#elif
|
||||
|
||||
|
|
|
@ -6,232 +6,206 @@
|
|||
// source code release but is meant for use with any compiler and does not
|
||||
// rely on any inline assembly.
|
||||
//
|
||||
// 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>
|
||||
#if _MSC_VER
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#define toint(f) ((int)(f))
|
||||
#define quickertoint(f) ((int)(f))
|
||||
#ifndef _MSC_VER
|
||||
#define __forceinline inline
|
||||
#endif
|
||||
|
||||
inline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
|
||||
__forceinline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return (fixed_t)(((__int64) a * (__int64) b) / c);
|
||||
return (SDWORD)(((SQWORD)a*b)/c);
|
||||
}
|
||||
|
||||
inline SDWORD MulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
__forceinline SDWORD MulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return (fixed_t)(((__int64) a * (__int64) b) >> c);
|
||||
return (SDWORD)(((SQWORD)a*b)>>c);
|
||||
}
|
||||
|
||||
#define MAKECONSTMulScale(s) \
|
||||
inline SDWORD MulScale##s (SDWORD a, SDWORD b) \
|
||||
{ \
|
||||
return (fixed_t)(((__int64) a * (__int64) 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
|
||||
__forceinline SDWORD MulScale1 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 1); }
|
||||
__forceinline SDWORD MulScale2 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 2); }
|
||||
__forceinline SDWORD MulScale3 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 3); }
|
||||
__forceinline SDWORD MulScale4 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 4); }
|
||||
__forceinline SDWORD MulScale5 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 5); }
|
||||
__forceinline SDWORD MulScale6 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 6); }
|
||||
__forceinline SDWORD MulScale7 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 7); }
|
||||
__forceinline SDWORD MulScale8 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 8); }
|
||||
__forceinline SDWORD MulScale9 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 9); }
|
||||
__forceinline SDWORD MulScale10 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 10); }
|
||||
__forceinline SDWORD MulScale11 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 11); }
|
||||
__forceinline SDWORD MulScale12 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 12); }
|
||||
__forceinline SDWORD MulScale13 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 13); }
|
||||
__forceinline SDWORD MulScale14 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 14); }
|
||||
__forceinline SDWORD MulScale15 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 15); }
|
||||
__forceinline SDWORD MulScale16 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 16); }
|
||||
__forceinline SDWORD MulScale17 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 17); }
|
||||
__forceinline SDWORD MulScale18 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 18); }
|
||||
__forceinline SDWORD MulScale19 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 19); }
|
||||
__forceinline SDWORD MulScale20 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 20); }
|
||||
__forceinline SDWORD MulScale21 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 21); }
|
||||
__forceinline SDWORD MulScale22 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 22); }
|
||||
__forceinline SDWORD MulScale23 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 23); }
|
||||
__forceinline SDWORD MulScale24 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 24); }
|
||||
__forceinline SDWORD MulScale25 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 25); }
|
||||
__forceinline SDWORD MulScale26 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 26); }
|
||||
__forceinline SDWORD MulScale27 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 27); }
|
||||
__forceinline SDWORD MulScale28 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 28); }
|
||||
__forceinline SDWORD MulScale29 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 29); }
|
||||
__forceinline SDWORD MulScale30 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 30); }
|
||||
__forceinline SDWORD MulScale31 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 31); }
|
||||
__forceinline SDWORD MulScale32 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 32); }
|
||||
|
||||
inline SDWORD DMulScale (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD s)
|
||||
__forceinline SDWORD DMulScale (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD s)
|
||||
{
|
||||
return (fixed_t)((((__int64) a * (__int64) b) + ((__int64) c * (__int64) d)) >> s);
|
||||
return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> s);
|
||||
}
|
||||
|
||||
#define MAKECONSTDMulScale(s) \
|
||||
inline SDWORD DMulScale##s (SDWORD a, SDWORD b, SDWORD c, SDWORD d) \
|
||||
{ \
|
||||
return (fixed_t)((((__int64) a * (__int64) b) + ((__int64) c * (__int64) d)) >> s); \
|
||||
}
|
||||
__forceinline SDWORD DMulScale1 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 1); }
|
||||
__forceinline SDWORD DMulScale2 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 2); }
|
||||
__forceinline SDWORD DMulScale3 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 3); }
|
||||
__forceinline SDWORD DMulScale4 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 4); }
|
||||
__forceinline SDWORD DMulScale5 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 5); }
|
||||
__forceinline SDWORD DMulScale6 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 6); }
|
||||
__forceinline SDWORD DMulScale7 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 7); }
|
||||
__forceinline SDWORD DMulScale8 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 8); }
|
||||
__forceinline SDWORD DMulScale9 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 9); }
|
||||
__forceinline SDWORD DMulScale10 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 10); }
|
||||
__forceinline SDWORD DMulScale11 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 11); }
|
||||
__forceinline SDWORD DMulScale12 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 12); }
|
||||
__forceinline SDWORD DMulScale13 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 13); }
|
||||
__forceinline SDWORD DMulScale14 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 14); }
|
||||
__forceinline SDWORD DMulScale15 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 15); }
|
||||
__forceinline SDWORD DMulScale16 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 16); }
|
||||
__forceinline SDWORD DMulScale17 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 17); }
|
||||
__forceinline SDWORD DMulScale18 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 18); }
|
||||
__forceinline SDWORD DMulScale19 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 19); }
|
||||
__forceinline SDWORD DMulScale20 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 20); }
|
||||
__forceinline SDWORD DMulScale21 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 21); }
|
||||
__forceinline SDWORD DMulScale22 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 22); }
|
||||
__forceinline SDWORD DMulScale23 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 23); }
|
||||
__forceinline SDWORD DMulScale24 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 24); }
|
||||
__forceinline SDWORD DMulScale25 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 25); }
|
||||
__forceinline SDWORD DMulScale26 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 26); }
|
||||
__forceinline SDWORD DMulScale27 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 27); }
|
||||
__forceinline SDWORD DMulScale28 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 28); }
|
||||
__forceinline SDWORD DMulScale29 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 29); }
|
||||
__forceinline SDWORD DMulScale30 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 30); }
|
||||
__forceinline SDWORD DMulScale31 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 31); }
|
||||
__forceinline SDWORD DMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 32); }
|
||||
|
||||
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 MAKCONSTDMulScale
|
||||
__forceinline SDWORD TMulScale1 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 1); }
|
||||
__forceinline SDWORD TMulScale2 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 2); }
|
||||
__forceinline SDWORD TMulScale3 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 3); }
|
||||
__forceinline SDWORD TMulScale4 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 4); }
|
||||
__forceinline SDWORD TMulScale5 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 5); }
|
||||
__forceinline SDWORD TMulScale6 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 6); }
|
||||
__forceinline SDWORD TMulScale7 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 7); }
|
||||
__forceinline SDWORD TMulScale8 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 8); }
|
||||
__forceinline SDWORD TMulScale9 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 9); }
|
||||
__forceinline SDWORD TMulScale10 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 10); }
|
||||
__forceinline SDWORD TMulScale11 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 11); }
|
||||
__forceinline SDWORD TMulScale12 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 12); }
|
||||
__forceinline SDWORD TMulScale13 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 13); }
|
||||
__forceinline SDWORD TMulScale14 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 14); }
|
||||
__forceinline SDWORD TMulScale15 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 15); }
|
||||
__forceinline SDWORD TMulScale16 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 16); }
|
||||
__forceinline SDWORD TMulScale17 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 17); }
|
||||
__forceinline SDWORD TMulScale18 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 18); }
|
||||
__forceinline SDWORD TMulScale19 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 19); }
|
||||
__forceinline SDWORD TMulScale20 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 20); }
|
||||
__forceinline SDWORD TMulScale21 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 21); }
|
||||
__forceinline SDWORD TMulScale22 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 22); }
|
||||
__forceinline SDWORD TMulScale23 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 23); }
|
||||
__forceinline SDWORD TMulScale24 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 24); }
|
||||
__forceinline SDWORD TMulScale25 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 25); }
|
||||
__forceinline SDWORD TMulScale26 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 26); }
|
||||
__forceinline SDWORD TMulScale27 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 27); }
|
||||
__forceinline SDWORD TMulScale28 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 28); }
|
||||
__forceinline SDWORD TMulScale29 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 29); }
|
||||
__forceinline SDWORD TMulScale30 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 30); }
|
||||
__forceinline SDWORD TMulScale31 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 31); }
|
||||
__forceinline SDWORD TMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 32); }
|
||||
|
||||
#define MAKECONSTTMulScale(s) \
|
||||
inline SDWORD TMulScale##s (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) \
|
||||
{ \
|
||||
return (fixed_t)((((__int64) a * (__int64) b) + ((__int64) c * (__int64) d) \
|
||||
+ ((__int64) e* (__int64) f)) >> 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
|
||||
|
||||
inline SDWORD BoundMulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
__forceinline SDWORD BoundMulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return 0xBadBeef;
|
||||
SQWORD x = ((SQWORD)a * b) >> c;
|
||||
return x > 0x7FFFFFFFll ? 0x7FFFFFFF :
|
||||
x < -0x80000000ll ? 0x80000000 :
|
||||
(SDWORD)x;
|
||||
}
|
||||
|
||||
inline SDWORD DivScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return (fixed_t)((((__int64) a) << c) / b);
|
||||
return (SDWORD)(((SQWORD)a << c) / b);
|
||||
}
|
||||
|
||||
#define MAKECONSTDivScale(s) \
|
||||
inline SDWORD DivScale##s (SDWORD a, SDWORD b) \
|
||||
{ \
|
||||
return (fixed_t)((((__int64) a) << s) / b); \
|
||||
}
|
||||
inline SDWORD DivScale1 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 1) / b); }
|
||||
inline SDWORD DivScale2 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 2) / b); }
|
||||
inline SDWORD DivScale3 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 3) / b); }
|
||||
inline SDWORD DivScale4 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 4) / b); }
|
||||
inline SDWORD DivScale5 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 5) / b); }
|
||||
inline SDWORD DivScale6 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 6) / b); }
|
||||
inline SDWORD DivScale7 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 7) / b); }
|
||||
inline SDWORD DivScale8 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 8) / b); }
|
||||
inline SDWORD DivScale9 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 9) / b); }
|
||||
inline SDWORD DivScale10 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 10) / b); }
|
||||
inline SDWORD DivScale11 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 11) / b); }
|
||||
inline SDWORD DivScale12 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 12) / b); }
|
||||
inline SDWORD DivScale13 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 13) / b); }
|
||||
inline SDWORD DivScale14 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 14) / b); }
|
||||
inline SDWORD DivScale15 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 15) / b); }
|
||||
inline SDWORD DivScale16 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 16) / b); }
|
||||
inline SDWORD DivScale17 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 17) / b); }
|
||||
inline SDWORD DivScale18 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 18) / b); }
|
||||
inline SDWORD DivScale19 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 19) / b); }
|
||||
inline SDWORD DivScale20 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 20) / b); }
|
||||
inline SDWORD DivScale21 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 21) / b); }
|
||||
inline SDWORD DivScale22 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 22) / b); }
|
||||
inline SDWORD DivScale23 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 23) / b); }
|
||||
inline SDWORD DivScale24 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 24) / b); }
|
||||
inline SDWORD DivScale25 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 25) / b); }
|
||||
inline SDWORD DivScale26 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 26) / b); }
|
||||
inline SDWORD DivScale27 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 27) / b); }
|
||||
inline SDWORD DivScale28 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 28) / b); }
|
||||
inline SDWORD DivScale29 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 29) / b); }
|
||||
inline SDWORD DivScale30 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 30) / b); }
|
||||
inline SDWORD DivScale31 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 31) / b); }
|
||||
inline SDWORD DivScale32 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 32) / b); }
|
||||
|
||||
MAKECONSTDivScale(1)
|
||||
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)
|
||||
MAKECONSTDivScale(32)
|
||||
#undef MAKECONSTDivScale
|
||||
|
||||
inline void clearbuf (void *buff, int count, SDWORD clear)
|
||||
__forceinline void clearbuf (void *buff, unsigned int count, SDWORD clear)
|
||||
{
|
||||
SDWORD *b2 = (SDWORD *)buff;
|
||||
while (count--)
|
||||
*b2++ = clear;
|
||||
}
|
||||
|
||||
inline void clearbufshort (void *buff, unsigned int count, WORD clear)
|
||||
{
|
||||
if (!count)
|
||||
return;
|
||||
SWORD *b2 = (SWORD *)buff;
|
||||
if ((size_t)b2 & 2)
|
||||
for (unsigned int i = 0; i != count; ++i)
|
||||
{
|
||||
*b2++ = clear;
|
||||
if (--count == 0)
|
||||
return;
|
||||
b2[i] = clear;
|
||||
}
|
||||
do
|
||||
{
|
||||
*b2++ = clear;
|
||||
} while (--count);
|
||||
}
|
||||
|
||||
inline SDWORD ksgn (SDWORD a)
|
||||
__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)
|
||||
{
|
||||
if (a < 0) return -1;
|
||||
else if (a > 0) return 1;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
__forceinline int toint (float v)
|
||||
{
|
||||
return int(v);
|
||||
}
|
||||
|
||||
__forceinline int quickertoint (float v)
|
||||
{
|
||||
return int(v);
|
||||
}
|
||||
|
|
|
@ -576,11 +576,11 @@ void C_AddNotifyString (int printlevel, const char *source)
|
|||
if (addtype == APPENDLINE && NotifyStrings[NUMNOTIFIES-1].PrintLevel == printlevel)
|
||||
{
|
||||
FString str = NotifyStrings[NUMNOTIFIES-1].Text + source;
|
||||
lines = V_BreakLines (width, str);
|
||||
lines = V_BreakLines (screen->Font, width, str);
|
||||
}
|
||||
else
|
||||
{
|
||||
lines = V_BreakLines (width, source);
|
||||
lines = V_BreakLines (screen->Font, width, source);
|
||||
addtype = (addtype == APPENDLINE) ? NEWLINE : addtype;
|
||||
}
|
||||
|
||||
|
|
|
@ -656,7 +656,7 @@ FProduction *ProdNeqStr (FStringProd *prod1, FStringProd *prod2)
|
|||
|
||||
FProduction *ProdXorDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
||||
{
|
||||
return NewDoubleProd ((double)((__int64)prod1->Value ^ (__int64)prod2->Value));
|
||||
return NewDoubleProd ((double)((SQWORD)prod1->Value ^ (SQWORD)prod2->Value));
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -667,7 +667,7 @@ FProduction *ProdXorDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
|||
|
||||
FProduction *ProdAndDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
||||
{
|
||||
return NewDoubleProd ((double)((__int64)prod1->Value & (__int64)prod2->Value));
|
||||
return NewDoubleProd ((double)((SQWORD)prod1->Value & (SQWORD)prod2->Value));
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -678,7 +678,7 @@ FProduction *ProdAndDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
|||
|
||||
FProduction *ProdOrDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
||||
{
|
||||
return NewDoubleProd ((double)((__int64)prod1->Value | (__int64)prod2->Value));
|
||||
return NewDoubleProd ((double)((SQWORD)prod1->Value | (SQWORD)prod2->Value));
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -689,7 +689,7 @@ FProduction *ProdOrDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
|||
|
||||
FProduction *ProdLAndDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
||||
{
|
||||
return NewDoubleProd ((double)((__int64)prod1->Value && (__int64)prod2->Value));
|
||||
return NewDoubleProd ((double)((SQWORD)prod1->Value && (SQWORD)prod2->Value));
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -700,7 +700,7 @@ FProduction *ProdLAndDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
|||
|
||||
FProduction *ProdLOrDbl (FDoubleProd *prod1, FDoubleProd *prod2)
|
||||
{
|
||||
return NewDoubleProd ((double)((__int64)prod1->Value || (__int64)prod2->Value));
|
||||
return NewDoubleProd ((double)((SQWORD)prod1->Value || (SQWORD)prod2->Value));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -42,8 +42,9 @@
|
|||
|
||||
// Since this file is included by everything, it seems an appropriate place
|
||||
// to check the NOASM/USEASM macros.
|
||||
#if !defined(_M_IX86) && !defined(__i386__)
|
||||
#if (!defined(_M_IX86) && !defined(__i386__)) || defined(__APPLE__)
|
||||
// The assembly code requires an x86 processor.
|
||||
// And needs to be tweaked for Mach-O before enabled on Macs.
|
||||
#define NOASM
|
||||
#endif
|
||||
|
||||
|
|
|
@ -195,7 +195,6 @@ void DHUDMessage::ScreenSizeChanged ()
|
|||
|
||||
void DHUDMessage::ResetText (const char *text)
|
||||
{
|
||||
FFont *oldfont = screen->Font;
|
||||
int width;
|
||||
|
||||
if (HUDWidth != 0)
|
||||
|
@ -212,9 +211,7 @@ void DHUDMessage::ResetText (const char *text)
|
|||
V_FreeBrokenLines (Lines);
|
||||
}
|
||||
|
||||
screen->SetFont (Font);
|
||||
|
||||
Lines = V_BreakLines (width, (BYTE *)text);
|
||||
Lines = V_BreakLines (Font, width, (BYTE *)text);
|
||||
|
||||
NumLines = 0;
|
||||
Width = 0;
|
||||
|
@ -228,8 +225,6 @@ void DHUDMessage::ResetText (const char *text)
|
|||
Width = MAX<int> (Width, Lines[NumLines].Width);
|
||||
}
|
||||
}
|
||||
|
||||
screen->SetFont (oldfont);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
|
|
@ -584,7 +584,7 @@ private:
|
|||
|
||||
if (CPlayer->LogText != NULL)
|
||||
{
|
||||
FBrokenLines *lines = V_BreakLines (272, CPlayer->LogText);
|
||||
FBrokenLines *lines = V_BreakLines (SmallFont2, 272, CPlayer->LogText);
|
||||
for (i = 0; lines[i].Width >= 0; ++i)
|
||||
{
|
||||
screen->DrawText (CR_UNTRANSLATED, left+24*xscale, top+(18+i*12)*yscale,
|
||||
|
|
|
@ -114,6 +114,8 @@ typedef void (*voidfunc_)();
|
|||
************* Non-Visual C++ macros ************
|
||||
************************************************/
|
||||
|
||||
#include "autosegs.h"
|
||||
|
||||
#define DOOMEDNUMOF(actor) actor##ActorInfo.DoomEdNum
|
||||
|
||||
extern void ApplyActorDefault (int defnum, const char *datastr);
|
||||
|
@ -125,7 +127,7 @@ extern void ApplyActorDefault (int defnum, int dataint);
|
|||
extern FActorInfo actor##ActorInfo; \
|
||||
extern FActorInfo *actor##DefaultsReg; \
|
||||
extern void actor##DefaultsConstructor(); \
|
||||
FActorInfo *actor##DefaultsReg __attribute__((section("areg"))) = &actor##ActorInfo; \
|
||||
FActorInfo *actor##DefaultsReg __attribute__((section(AREG_SECTION))) = &actor##ActorInfo; \
|
||||
FActorInfo actor##ActorInfo = {
|
||||
|
||||
#define BEGIN_DEFAULTS_POST(actor,game,ednum,id) \
|
||||
|
@ -142,14 +144,14 @@ extern void ApplyActorDefault (int defnum, int dataint);
|
|||
|
||||
#define AT_GAME_SET(ns) \
|
||||
extern void ns##_gs(); \
|
||||
voidfunc_ ns##_gsr __attribute__((section("greg"))) = ns##_gs; \
|
||||
voidfunc_ ns##_gsr __attribute__((section(GREG_SECTION))) = ns##_gs; \
|
||||
void ns##_gs ()
|
||||
|
||||
//typedef void (*speedfunc)(EGameSpeed);
|
||||
|
||||
#define AT_SPEED_SET(ns,varname) \
|
||||
extern void ns##_ss(EGameSpeed); \
|
||||
void (*ns##_gsr)(EGameSpeed) __attribute__((section("sreg"))) = ns##_ss; \
|
||||
void (*ns##_gsr)(EGameSpeed) __attribute__((section(SREG_SECTION))) = ns##_ss; \
|
||||
void ns##_ss (EGameSpeed varname)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
#include <stdlib.h>
|
||||
#include "doomtype.h"
|
||||
|
||||
#if defined(__GNUG__)
|
||||
#if defined(__GNUC__) && defined(__i386__)
|
||||
#include "gccinlines.h"
|
||||
#elif defined(_MSC_VER)
|
||||
#elif defined(_MSC_VER) && defined(_M_IX86)
|
||||
#include "mscinlines.h"
|
||||
#else
|
||||
#include "basicinlines.h"
|
||||
|
|
|
@ -983,7 +983,7 @@ static void M_ExtractSaveData (const FSaveGameNode *node)
|
|||
memcpy (comment + timelen, pcomment, commentlen);
|
||||
}
|
||||
comment[timelen+commentlen] = 0;
|
||||
SaveComment = V_BreakLines (216*screen->GetWidth()/640/CleanXfac, comment);
|
||||
SaveComment = V_BreakLines (screen->Font, 216*screen->GetWidth()/640/CleanXfac, comment);
|
||||
delete[] comment;
|
||||
delete[] time;
|
||||
delete[] pcomment;
|
||||
|
@ -2921,7 +2921,7 @@ bool M_SaveLoadResponder (event_t *ev)
|
|||
{
|
||||
V_FreeBrokenLines (SaveComment);
|
||||
}
|
||||
SaveComment = V_BreakLines (216*screen->GetWidth()/640/CleanXfac, workbuf);
|
||||
SaveComment = V_BreakLines (screen->Font, 216*screen->GetWidth()/640/CleanXfac, workbuf);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -3099,7 +3099,7 @@ void M_Drawer ()
|
|||
BorderNeedRefresh = screen->GetPageCount ();
|
||||
SB_state = screen->GetPageCount ();
|
||||
|
||||
FBrokenLines *lines = V_BreakLines (320, messageString);
|
||||
FBrokenLines *lines = V_BreakLines (screen->Font, 320, messageString);
|
||||
y = 100;
|
||||
|
||||
for (i = 0; lines[i].Width >= 0; i++)
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef _M_X64
|
||||
#include "x64inlines.h"
|
||||
#else
|
||||
|
||||
#pragma warning (disable: 4035)
|
||||
|
||||
__forceinline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
|
||||
|
@ -363,4 +359,3 @@ __forceinline int quickertoint (float v)
|
|||
}
|
||||
|
||||
#pragma warning (default: 4035)
|
||||
#endif
|
|
@ -681,7 +681,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang
|
|||
toSay = GStrings[dlgtext.GetChars()];
|
||||
if (toSay==NULL) toSay = "Go away!"; // Ok, it's lame - but it doesn't look like an error to the player. ;)
|
||||
}
|
||||
DialogueLines = V_BreakLines (screen->GetWidth()/CleanXfac-24*2, toSay);
|
||||
DialogueLines = V_BreakLines (screen->Font, screen->GetWidth()/CleanXfac-24*2, toSay);
|
||||
|
||||
// Fill out the possible choices
|
||||
ShowGold = false;
|
||||
|
@ -694,7 +694,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang
|
|||
continue;
|
||||
}
|
||||
ShowGold |= reply->NeedsGold;
|
||||
reply->ReplyLines = V_BreakLines (320-50-10, reply->Reply);
|
||||
reply->ReplyLines = V_BreakLines (screen->Font, 320-50-10, reply->Reply);
|
||||
for (j = 0; reply->ReplyLines[j].Width >= 0; ++j)
|
||||
{
|
||||
item.label = reply->ReplyLines[j].Text.LockBuffer();
|
||||
|
|
|
@ -554,12 +554,27 @@ string:
|
|||
{
|
||||
cursor++;
|
||||
}
|
||||
else if (*cursor == '\r' && *(cursor + 1) == '\n')
|
||||
{
|
||||
cursor++; // convert CR-LF to simply LF
|
||||
}
|
||||
else if (*cursor == '"')
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (*cursor == '\n')
|
||||
{
|
||||
if (CMode)
|
||||
{
|
||||
if (!Escape || sc_StringLen == 0 || sc_String[sc_StringLen - 1] != '\\')
|
||||
{
|
||||
SC_ScriptError ("Unterminated string constant");
|
||||
}
|
||||
else
|
||||
{
|
||||
sc_StringLen--; // overwrite the \ character with \n
|
||||
}
|
||||
}
|
||||
sc_Line++;
|
||||
sc_Crossed = true;
|
||||
}
|
||||
|
|
|
@ -151,12 +151,27 @@ string:
|
|||
{
|
||||
cursor++;
|
||||
}
|
||||
else if (*cursor == '\r' && *(cursor + 1) == '\n')
|
||||
{
|
||||
cursor++; // convert CR-LF to simply LF
|
||||
}
|
||||
else if (*cursor == '"')
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (*cursor == '\n')
|
||||
{
|
||||
if (CMode)
|
||||
{
|
||||
if (!Escape || sc_StringLen == 0 || sc_String[sc_StringLen - 1] != '\\')
|
||||
{
|
||||
SC_ScriptError ("Unterminated string constant");
|
||||
}
|
||||
else
|
||||
{
|
||||
sc_StringLen--; // overwrite the \ character with \n
|
||||
}
|
||||
}
|
||||
sc_Line++;
|
||||
sc_Crossed = true;
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ inline cycle_t GetClockCycle ()
|
|||
#endif
|
||||
}
|
||||
|
||||
#elif (defined __GNUG__)
|
||||
#elif defined(__GNUG__) && defined(__i386__)
|
||||
|
||||
typedef QWORD cycle_t;
|
||||
|
||||
|
|
|
@ -150,6 +150,10 @@ IndexType BinarySearchFlexible (IndexType max, const KeyType key, IndexType noIn
|
|||
// Returns the minimum of a and b.
|
||||
//==========================================================================
|
||||
|
||||
#ifdef MIN
|
||||
#undef MIN
|
||||
#endif
|
||||
|
||||
template<class T>
|
||||
inline
|
||||
const T MIN (const T a, const T b)
|
||||
|
@ -164,6 +168,10 @@ const T MIN (const T a, const T b)
|
|||
// Returns the maximum of a and b.
|
||||
//==========================================================================
|
||||
|
||||
#ifdef MAX
|
||||
#undef MAX
|
||||
#endif
|
||||
|
||||
template<class T>
|
||||
inline
|
||||
const T MAX (const T a, const T b)
|
||||
|
|
|
@ -42,6 +42,7 @@ class FTexture;
|
|||
|
||||
enum EColorRange
|
||||
{
|
||||
CR_UNDEFINED = -1,
|
||||
CR_BRICK,
|
||||
CR_TAN,
|
||||
CR_GRAY,
|
||||
|
|
|
@ -307,25 +307,18 @@ int FFont::StringWidth (const BYTE *string) const
|
|||
//
|
||||
// Break long lines of text into multiple lines no longer than maxwidth pixels
|
||||
//
|
||||
static void breakit (FBrokenLines *line, const BYTE *start, const BYTE *string, bool keepspace, FString &linecolor)
|
||||
static void breakit (FBrokenLines *line, FFont *font, const BYTE *start, const BYTE *stop, FString &linecolor)
|
||||
{
|
||||
// Leave out trailing white space
|
||||
if (!keepspace)
|
||||
{
|
||||
while (string > start && isspace (*(string - 1)))
|
||||
string--;
|
||||
}
|
||||
|
||||
if (!linecolor.IsEmpty())
|
||||
{
|
||||
line->Text = TEXTCOLOR_ESCAPE;
|
||||
line->Text += linecolor;
|
||||
}
|
||||
line->Text.AppendCStrPart ((const char *)start, string - start);
|
||||
line->Width = screen->Font->StringWidth (line->Text);
|
||||
line->Text.AppendCStrPart ((const char *)start, stop - start);
|
||||
line->Width = font->StringWidth (line->Text);
|
||||
}
|
||||
|
||||
FBrokenLines *V_BreakLines (int maxwidth, const BYTE *string, bool keepspace)
|
||||
FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const BYTE *string)
|
||||
{
|
||||
FBrokenLines lines[128]; // Support up to 128 lines (should be plenty)
|
||||
|
||||
|
@ -333,7 +326,7 @@ FBrokenLines *V_BreakLines (int maxwidth, const BYTE *string, bool keepspace)
|
|||
int i, c, w, nw;
|
||||
FString lastcolor, linecolor;
|
||||
bool lastWasSpace = false;
|
||||
int kerning = screen->Font->GetDefaultKerning ();
|
||||
int kerning = font->GetDefaultKerning ();
|
||||
|
||||
i = w = 0;
|
||||
|
||||
|
@ -377,24 +370,19 @@ FBrokenLines *V_BreakLines (int maxwidth, const BYTE *string, bool keepspace)
|
|||
lastWasSpace = false;
|
||||
}
|
||||
|
||||
nw = screen->Font->GetCharWidth (c);
|
||||
nw = font->GetCharWidth (c);
|
||||
|
||||
if ((w > 0 && w + nw > maxwidth) || c == '\n')
|
||||
{ // Time to break the line
|
||||
if (!space)
|
||||
space = string - 1;
|
||||
|
||||
lines[i].NLTerminated = (c == '\n');
|
||||
breakit (&lines[i], start, space, keepspace, linecolor);
|
||||
breakit (&lines[i], font, start, space, linecolor);
|
||||
if (c == '\n')
|
||||
{
|
||||
// Why did I do it like this? Why? Oh why?
|
||||
linecolor = lastcolor = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
linecolor = lastcolor;
|
||||
lastcolor = ""; // Why, oh why, did I do it like this?
|
||||
}
|
||||
linecolor = lastcolor;
|
||||
|
||||
i++;
|
||||
w = 0;
|
||||
|
@ -417,20 +405,19 @@ FBrokenLines *V_BreakLines (int maxwidth, const BYTE *string, bool keepspace)
|
|||
}
|
||||
}
|
||||
|
||||
if (string - start > 1)
|
||||
// String here is pointing one character after the '\0'
|
||||
if (i < 128 && --string - start > 1)
|
||||
{
|
||||
const BYTE *s = start;
|
||||
|
||||
while (s < string)
|
||||
{
|
||||
if (keepspace || !isspace (*s))
|
||||
// If there is any non-white space in the remainder of the string, add it.
|
||||
if (!isspace (*s++))
|
||||
{
|
||||
lines[i].NLTerminated = (*s == '\n');
|
||||
s++;
|
||||
breakit (&lines[i++], start, string, keepspace, linecolor);
|
||||
breakit (&lines[i++], font, start, string, linecolor);
|
||||
break;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
12
src/v_text.h
12
src/v_text.h
|
@ -39,10 +39,8 @@
|
|||
|
||||
struct FBrokenLines
|
||||
{
|
||||
short Width;
|
||||
BYTE NLTerminated;
|
||||
BYTE Pad;
|
||||
FString Text;
|
||||
int Width;
|
||||
FString Text;
|
||||
};
|
||||
|
||||
#define TEXTCOLOR_ESCAPE '\034'
|
||||
|
@ -73,9 +71,9 @@ struct FBrokenLines
|
|||
#define TEXTCOLOR_NORMAL "\034-"
|
||||
#define TEXTCOLOR_BOLD "\034+"
|
||||
|
||||
FBrokenLines *V_BreakLines (int maxwidth, const BYTE *str, bool keepspace=false);
|
||||
FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const BYTE *str);
|
||||
void V_FreeBrokenLines (FBrokenLines *lines);
|
||||
inline FBrokenLines *V_BreakLines (int maxwidth, const char *str, bool keepspace=false)
|
||||
{ return V_BreakLines (maxwidth, (const BYTE *)str, keepspace); }
|
||||
inline FBrokenLines *V_BreakLines (FFont *font, int maxwidth, const char *str)
|
||||
{ return V_BreakLines (font, maxwidth, (const BYTE *)str); }
|
||||
|
||||
#endif //__V_TEXT_H__
|
||||
|
|
|
@ -188,6 +188,11 @@ void DCanvas::Clear (int left, int top, int right, int bottom, int color) const
|
|||
int x, y;
|
||||
BYTE *dest;
|
||||
|
||||
if (left == right || top == bottom)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
assert (left < right);
|
||||
assert (top < bottom);
|
||||
|
||||
|
|
|
@ -832,7 +832,7 @@ int FWadCollection::CheckNumForName (const char *name, int space)
|
|||
|
||||
while (i != NULL_INDEX)
|
||||
{
|
||||
if (*(__int64 *)&LumpInfo[i].name == *(__int64 *)&uname)
|
||||
if (*(QWORD *)&LumpInfo[i].name == *(QWORD *)&uname)
|
||||
{
|
||||
if (LumpInfo[i].namespc == space) break;
|
||||
// If the lump is from one of the special namespaces exclusive to Zips
|
||||
|
@ -864,7 +864,7 @@ int FWadCollection::CheckNumForName (const char *name, int space, int wadnum)
|
|||
i = FirstLumpIndex[LumpNameHash (uname) % NumLumps];
|
||||
|
||||
while (i != NULL_INDEX &&
|
||||
(*(__int64 *)&LumpInfo[i].name != *(__int64 *)&uname ||
|
||||
(*(QWORD *)&LumpInfo[i].name != *(QWORD *)&uname ||
|
||||
LumpInfo[i].namespc != space ||
|
||||
LumpInfo[i].wadnum != wadnum))
|
||||
{
|
||||
|
@ -1520,7 +1520,7 @@ int FWadCollection::FindLump (const char *name, int *lastlump, bool anyns)
|
|||
while (lump_p < &LumpInfo[NumLumps])
|
||||
{
|
||||
if ((anyns || lump_p->namespc == ns_global) &&
|
||||
*(__int64 *)&lump_p->name == *(__int64 *)&name8)
|
||||
*(QWORD *)&lump_p->name == *(QWORD *)&name8)
|
||||
{
|
||||
int lump = lump_p - &LumpInfo[0];
|
||||
*lastlump = lump + 1;
|
||||
|
|
|
@ -731,7 +731,7 @@ int WI_DrawName(int y,const char * levelname, bool nomove=false)
|
|||
if (!l) return 0;
|
||||
|
||||
screen->SetFont(BigFont);
|
||||
FBrokenLines *lines = V_BreakLines(320, p);
|
||||
FBrokenLines *lines = V_BreakLines(BigFont, 320, p);
|
||||
|
||||
if (lines)
|
||||
{
|
||||
|
|
|
@ -557,10 +557,6 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE nothing, LPSTR cmdline, int n
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef REGEXEPEEK
|
||||
InitAutoSegMarkers ();
|
||||
#endif
|
||||
|
||||
MainThread = INVALID_HANDLE_VALUE;
|
||||
DuplicateHandle (GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &MainThread,
|
||||
0, FALSE, DUPLICATE_SAME_ACCESS);
|
||||
|
|
198
src/x64inlines.h
198
src/x64inlines.h
|
@ -1,198 +0,0 @@
|
|||
#if _MSC_VER
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
__forceinline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return (SDWORD)(((SQWORD)a*b)/c);
|
||||
}
|
||||
|
||||
__forceinline SDWORD MulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return (SDWORD)(((SQWORD)a*b)>>c);
|
||||
}
|
||||
|
||||
__forceinline SDWORD MulScale1 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 1); }
|
||||
__forceinline SDWORD MulScale2 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 2); }
|
||||
__forceinline SDWORD MulScale3 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 3); }
|
||||
__forceinline SDWORD MulScale4 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 4); }
|
||||
__forceinline SDWORD MulScale5 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 5); }
|
||||
__forceinline SDWORD MulScale6 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 6); }
|
||||
__forceinline SDWORD MulScale7 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 7); }
|
||||
__forceinline SDWORD MulScale8 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 8); }
|
||||
__forceinline SDWORD MulScale9 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 9); }
|
||||
__forceinline SDWORD MulScale10 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 10); }
|
||||
__forceinline SDWORD MulScale11 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 11); }
|
||||
__forceinline SDWORD MulScale12 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 12); }
|
||||
__forceinline SDWORD MulScale13 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 13); }
|
||||
__forceinline SDWORD MulScale14 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 14); }
|
||||
__forceinline SDWORD MulScale15 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 15); }
|
||||
__forceinline SDWORD MulScale16 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 16); }
|
||||
__forceinline SDWORD MulScale17 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 17); }
|
||||
__forceinline SDWORD MulScale18 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 18); }
|
||||
__forceinline SDWORD MulScale19 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 19); }
|
||||
__forceinline SDWORD MulScale20 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 20); }
|
||||
__forceinline SDWORD MulScale21 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 21); }
|
||||
__forceinline SDWORD MulScale22 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 22); }
|
||||
__forceinline SDWORD MulScale23 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 23); }
|
||||
__forceinline SDWORD MulScale24 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 24); }
|
||||
__forceinline SDWORD MulScale25 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 25); }
|
||||
__forceinline SDWORD MulScale26 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 26); }
|
||||
__forceinline SDWORD MulScale27 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 27); }
|
||||
__forceinline SDWORD MulScale28 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 28); }
|
||||
__forceinline SDWORD MulScale29 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 29); }
|
||||
__forceinline SDWORD MulScale30 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 30); }
|
||||
__forceinline SDWORD MulScale31 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 31); }
|
||||
__forceinline SDWORD MulScale32 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 32); }
|
||||
|
||||
__forceinline SDWORD DMulScale (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD s)
|
||||
{
|
||||
return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> s);
|
||||
}
|
||||
|
||||
__forceinline SDWORD DMulScale1 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 1); }
|
||||
__forceinline SDWORD DMulScale2 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 2); }
|
||||
__forceinline SDWORD DMulScale3 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 3); }
|
||||
__forceinline SDWORD DMulScale4 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 4); }
|
||||
__forceinline SDWORD DMulScale5 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 5); }
|
||||
__forceinline SDWORD DMulScale6 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 6); }
|
||||
__forceinline SDWORD DMulScale7 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 7); }
|
||||
__forceinline SDWORD DMulScale8 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 8); }
|
||||
__forceinline SDWORD DMulScale9 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 9); }
|
||||
__forceinline SDWORD DMulScale10 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 10); }
|
||||
__forceinline SDWORD DMulScale11 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 11); }
|
||||
__forceinline SDWORD DMulScale12 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 12); }
|
||||
__forceinline SDWORD DMulScale13 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 13); }
|
||||
__forceinline SDWORD DMulScale14 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 14); }
|
||||
__forceinline SDWORD DMulScale15 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 15); }
|
||||
__forceinline SDWORD DMulScale16 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 16); }
|
||||
__forceinline SDWORD DMulScale17 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 17); }
|
||||
__forceinline SDWORD DMulScale18 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 18); }
|
||||
__forceinline SDWORD DMulScale19 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 19); }
|
||||
__forceinline SDWORD DMulScale20 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 20); }
|
||||
__forceinline SDWORD DMulScale21 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 21); }
|
||||
__forceinline SDWORD DMulScale22 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 22); }
|
||||
__forceinline SDWORD DMulScale23 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 23); }
|
||||
__forceinline SDWORD DMulScale24 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 24); }
|
||||
__forceinline SDWORD DMulScale25 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 25); }
|
||||
__forceinline SDWORD DMulScale26 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 26); }
|
||||
__forceinline SDWORD DMulScale27 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 27); }
|
||||
__forceinline SDWORD DMulScale28 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 28); }
|
||||
__forceinline SDWORD DMulScale29 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 29); }
|
||||
__forceinline SDWORD DMulScale30 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 30); }
|
||||
__forceinline SDWORD DMulScale31 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 31); }
|
||||
__forceinline SDWORD DMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 32); }
|
||||
|
||||
__forceinline SDWORD TMulScale1 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 1); }
|
||||
__forceinline SDWORD TMulScale2 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 2); }
|
||||
__forceinline SDWORD TMulScale3 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 3); }
|
||||
__forceinline SDWORD TMulScale4 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 4); }
|
||||
__forceinline SDWORD TMulScale5 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 5); }
|
||||
__forceinline SDWORD TMulScale6 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 6); }
|
||||
__forceinline SDWORD TMulScale7 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 7); }
|
||||
__forceinline SDWORD TMulScale8 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 8); }
|
||||
__forceinline SDWORD TMulScale9 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 9); }
|
||||
__forceinline SDWORD TMulScale10 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 10); }
|
||||
__forceinline SDWORD TMulScale11 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 11); }
|
||||
__forceinline SDWORD TMulScale12 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 12); }
|
||||
__forceinline SDWORD TMulScale13 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 13); }
|
||||
__forceinline SDWORD TMulScale14 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 14); }
|
||||
__forceinline SDWORD TMulScale15 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 15); }
|
||||
__forceinline SDWORD TMulScale16 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 16); }
|
||||
__forceinline SDWORD TMulScale17 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 17); }
|
||||
__forceinline SDWORD TMulScale18 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 18); }
|
||||
__forceinline SDWORD TMulScale19 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 19); }
|
||||
__forceinline SDWORD TMulScale20 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 20); }
|
||||
__forceinline SDWORD TMulScale21 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 21); }
|
||||
__forceinline SDWORD TMulScale22 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 22); }
|
||||
__forceinline SDWORD TMulScale23 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 23); }
|
||||
__forceinline SDWORD TMulScale24 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 24); }
|
||||
__forceinline SDWORD TMulScale25 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 25); }
|
||||
__forceinline SDWORD TMulScale26 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 26); }
|
||||
__forceinline SDWORD TMulScale27 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 27); }
|
||||
__forceinline SDWORD TMulScale28 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 28); }
|
||||
__forceinline SDWORD TMulScale29 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 29); }
|
||||
__forceinline SDWORD TMulScale30 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 30); }
|
||||
__forceinline SDWORD TMulScale31 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 31); }
|
||||
__forceinline SDWORD TMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD e, SDWORD f) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d + (SQWORD)e*f) >> 32); }
|
||||
|
||||
__forceinline SDWORD BoundMulScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
SQWORD x = ((SQWORD)a * b) >> c;
|
||||
return x > 0x7FFFFFFFll ? 0x7FFFFFFF :
|
||||
x < -0x80000000ll ? 0x80000000 :
|
||||
(SDWORD)x;
|
||||
}
|
||||
|
||||
inline SDWORD DivScale (SDWORD a, SDWORD b, SDWORD c)
|
||||
{
|
||||
return (SDWORD)(((SQWORD)a << c) / b);
|
||||
}
|
||||
|
||||
inline SDWORD DivScale1 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 1) / b); }
|
||||
inline SDWORD DivScale2 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 2) / b); }
|
||||
inline SDWORD DivScale3 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 3) / b); }
|
||||
inline SDWORD DivScale4 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 4) / b); }
|
||||
inline SDWORD DivScale5 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 5) / b); }
|
||||
inline SDWORD DivScale6 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 6) / b); }
|
||||
inline SDWORD DivScale7 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 7) / b); }
|
||||
inline SDWORD DivScale8 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 8) / b); }
|
||||
inline SDWORD DivScale9 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 9) / b); }
|
||||
inline SDWORD DivScale10 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 10) / b); }
|
||||
inline SDWORD DivScale11 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 11) / b); }
|
||||
inline SDWORD DivScale12 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 12) / b); }
|
||||
inline SDWORD DivScale13 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 13) / b); }
|
||||
inline SDWORD DivScale14 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 14) / b); }
|
||||
inline SDWORD DivScale15 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 15) / b); }
|
||||
inline SDWORD DivScale16 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 16) / b); }
|
||||
inline SDWORD DivScale17 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 17) / b); }
|
||||
inline SDWORD DivScale18 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 18) / b); }
|
||||
inline SDWORD DivScale19 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 19) / b); }
|
||||
inline SDWORD DivScale20 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 20) / b); }
|
||||
inline SDWORD DivScale21 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 21) / b); }
|
||||
inline SDWORD DivScale22 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 22) / b); }
|
||||
inline SDWORD DivScale23 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 23) / b); }
|
||||
inline SDWORD DivScale24 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 24) / b); }
|
||||
inline SDWORD DivScale25 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 25) / b); }
|
||||
inline SDWORD DivScale26 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 26) / b); }
|
||||
inline SDWORD DivScale27 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 27) / b); }
|
||||
inline SDWORD DivScale28 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 28) / b); }
|
||||
inline SDWORD DivScale29 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 29) / b); }
|
||||
inline SDWORD DivScale30 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 30) / b); }
|
||||
inline SDWORD DivScale31 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 31) / b); }
|
||||
inline SDWORD DivScale32 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 32) / 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)
|
||||
{
|
||||
if (a < 0) return -1;
|
||||
else if (a > 0) return 1;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
__forceinline int toint (float v)
|
||||
{
|
||||
return int(v);
|
||||
}
|
||||
|
||||
__forceinline int quickertoint (float v)
|
||||
{
|
||||
return int(v);
|
||||
}
|
|
@ -157,6 +157,10 @@
|
|||
RelativePath=".\terrain.txt"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\textcolors.txt"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\x11r6rgb.txt"
|
||||
>
|
||||
|
|
|
@ -4763,10 +4763,6 @@
|
|||
RelativePath=".\src\wi_stuff.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\x64inlines.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\zstring.h"
|
||||
>
|
||||
|
|
Loading…
Reference in a new issue