1 // "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
2 // Ken Silverman's official web site: "http://www.advsys.net/ken"
3 // See the included license file "BUILDLIC.TXT" for license info.
4 //
5 // This file is based on pragmas.h from Ken Silverman's original Build
6 // source code release but is meant for use with any compiler and does not
7 // rely on any inline assembly.
8 //
9 
10 #if _MSC_VER
11 #pragma once
12 #endif
13 
14 #if defined(__GNUC__) && !defined(__forceinline)
15 #define __forceinline __inline__ __attribute__((always_inline))
16 #endif
17 
Scale(SDWORD a,SDWORD b,SDWORD c)18 static __forceinline SDWORD Scale (SDWORD a, SDWORD b, SDWORD c)
19 {
20 	return (SDWORD)(((SQWORD)a*b)/c);
21 }
22 
MulScale(SDWORD a,SDWORD b,SDWORD c)23 static __forceinline SDWORD MulScale (SDWORD a, SDWORD b, SDWORD c)
24 {
25 	return (SDWORD)(((SQWORD)a*b)>>c);
26 }
27 
MulScale1(SDWORD a,SDWORD b)28 static __forceinline SDWORD MulScale1 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 1); }
MulScale2(SDWORD a,SDWORD b)29 static __forceinline SDWORD MulScale2 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 2); }
MulScale3(SDWORD a,SDWORD b)30 static __forceinline SDWORD MulScale3 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 3); }
MulScale4(SDWORD a,SDWORD b)31 static __forceinline SDWORD MulScale4 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 4); }
MulScale5(SDWORD a,SDWORD b)32 static __forceinline SDWORD MulScale5 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 5); }
MulScale6(SDWORD a,SDWORD b)33 static __forceinline SDWORD MulScale6 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 6); }
MulScale7(SDWORD a,SDWORD b)34 static __forceinline SDWORD MulScale7 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 7); }
MulScale8(SDWORD a,SDWORD b)35 static __forceinline SDWORD MulScale8 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 8); }
MulScale9(SDWORD a,SDWORD b)36 static __forceinline SDWORD MulScale9 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 9); }
MulScale10(SDWORD a,SDWORD b)37 static __forceinline SDWORD MulScale10 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 10); }
MulScale11(SDWORD a,SDWORD b)38 static __forceinline SDWORD MulScale11 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 11); }
MulScale12(SDWORD a,SDWORD b)39 static __forceinline SDWORD MulScale12 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 12); }
MulScale13(SDWORD a,SDWORD b)40 static __forceinline SDWORD MulScale13 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 13); }
MulScale14(SDWORD a,SDWORD b)41 static __forceinline SDWORD MulScale14 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 14); }
MulScale15(SDWORD a,SDWORD b)42 static __forceinline SDWORD MulScale15 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 15); }
MulScale16(SDWORD a,SDWORD b)43 static __forceinline SDWORD MulScale16 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 16); }
MulScale17(SDWORD a,SDWORD b)44 static __forceinline SDWORD MulScale17 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 17); }
MulScale18(SDWORD a,SDWORD b)45 static __forceinline SDWORD MulScale18 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 18); }
MulScale19(SDWORD a,SDWORD b)46 static __forceinline SDWORD MulScale19 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 19); }
MulScale20(SDWORD a,SDWORD b)47 static __forceinline SDWORD MulScale20 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 20); }
MulScale21(SDWORD a,SDWORD b)48 static __forceinline SDWORD MulScale21 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 21); }
MulScale22(SDWORD a,SDWORD b)49 static __forceinline SDWORD MulScale22 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 22); }
MulScale23(SDWORD a,SDWORD b)50 static __forceinline SDWORD MulScale23 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 23); }
MulScale24(SDWORD a,SDWORD b)51 static __forceinline SDWORD MulScale24 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 24); }
MulScale25(SDWORD a,SDWORD b)52 static __forceinline SDWORD MulScale25 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 25); }
MulScale26(SDWORD a,SDWORD b)53 static __forceinline SDWORD MulScale26 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 26); }
MulScale27(SDWORD a,SDWORD b)54 static __forceinline SDWORD MulScale27 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 27); }
MulScale28(SDWORD a,SDWORD b)55 static __forceinline SDWORD MulScale28 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 28); }
MulScale29(SDWORD a,SDWORD b)56 static __forceinline SDWORD MulScale29 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 29); }
MulScale30(SDWORD a,SDWORD b)57 static __forceinline SDWORD MulScale30 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 30); }
MulScale31(SDWORD a,SDWORD b)58 static __forceinline SDWORD MulScale31 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 31); }
MulScale32(SDWORD a,SDWORD b)59 static __forceinline SDWORD MulScale32 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a * b) >> 32); }
60 
UMulScale16(DWORD a,DWORD b)61 static __forceinline DWORD UMulScale16 (DWORD a, DWORD b) { return (DWORD)(((QWORD)a * b) >> 16); }
62 
DMulScale(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD s)63 static __forceinline SDWORD DMulScale (SDWORD a, SDWORD b, SDWORD c, SDWORD d, SDWORD s)
64 {
65 	return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> s);
66 }
67 
DMulScale1(SDWORD a,SDWORD b,SDWORD c,SDWORD d)68 static __forceinline SDWORD DMulScale1 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 1); }
DMulScale2(SDWORD a,SDWORD b,SDWORD c,SDWORD d)69 static __forceinline SDWORD DMulScale2 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 2); }
DMulScale3(SDWORD a,SDWORD b,SDWORD c,SDWORD d)70 static __forceinline SDWORD DMulScale3 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 3); }
DMulScale4(SDWORD a,SDWORD b,SDWORD c,SDWORD d)71 static __forceinline SDWORD DMulScale4 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 4); }
DMulScale5(SDWORD a,SDWORD b,SDWORD c,SDWORD d)72 static __forceinline SDWORD DMulScale5 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 5); }
DMulScale6(SDWORD a,SDWORD b,SDWORD c,SDWORD d)73 static __forceinline SDWORD DMulScale6 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 6); }
DMulScale7(SDWORD a,SDWORD b,SDWORD c,SDWORD d)74 static __forceinline SDWORD DMulScale7 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 7); }
DMulScale8(SDWORD a,SDWORD b,SDWORD c,SDWORD d)75 static __forceinline SDWORD DMulScale8 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 8); }
DMulScale9(SDWORD a,SDWORD b,SDWORD c,SDWORD d)76 static __forceinline SDWORD DMulScale9 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 9); }
DMulScale10(SDWORD a,SDWORD b,SDWORD c,SDWORD d)77 static __forceinline SDWORD DMulScale10 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 10); }
DMulScale11(SDWORD a,SDWORD b,SDWORD c,SDWORD d)78 static __forceinline SDWORD DMulScale11 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 11); }
DMulScale12(SDWORD a,SDWORD b,SDWORD c,SDWORD d)79 static __forceinline SDWORD DMulScale12 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 12); }
DMulScale13(SDWORD a,SDWORD b,SDWORD c,SDWORD d)80 static __forceinline SDWORD DMulScale13 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 13); }
DMulScale14(SDWORD a,SDWORD b,SDWORD c,SDWORD d)81 static __forceinline SDWORD DMulScale14 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 14); }
DMulScale15(SDWORD a,SDWORD b,SDWORD c,SDWORD d)82 static __forceinline SDWORD DMulScale15 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 15); }
DMulScale16(SDWORD a,SDWORD b,SDWORD c,SDWORD d)83 static __forceinline SDWORD DMulScale16 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 16); }
DMulScale17(SDWORD a,SDWORD b,SDWORD c,SDWORD d)84 static __forceinline SDWORD DMulScale17 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 17); }
DMulScale18(SDWORD a,SDWORD b,SDWORD c,SDWORD d)85 static __forceinline SDWORD DMulScale18 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 18); }
DMulScale19(SDWORD a,SDWORD b,SDWORD c,SDWORD d)86 static __forceinline SDWORD DMulScale19 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 19); }
DMulScale20(SDWORD a,SDWORD b,SDWORD c,SDWORD d)87 static __forceinline SDWORD DMulScale20 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 20); }
DMulScale21(SDWORD a,SDWORD b,SDWORD c,SDWORD d)88 static __forceinline SDWORD DMulScale21 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 21); }
DMulScale22(SDWORD a,SDWORD b,SDWORD c,SDWORD d)89 static __forceinline SDWORD DMulScale22 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 22); }
DMulScale23(SDWORD a,SDWORD b,SDWORD c,SDWORD d)90 static __forceinline SDWORD DMulScale23 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 23); }
DMulScale24(SDWORD a,SDWORD b,SDWORD c,SDWORD d)91 static __forceinline SDWORD DMulScale24 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 24); }
DMulScale25(SDWORD a,SDWORD b,SDWORD c,SDWORD d)92 static __forceinline SDWORD DMulScale25 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 25); }
DMulScale26(SDWORD a,SDWORD b,SDWORD c,SDWORD d)93 static __forceinline SDWORD DMulScale26 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 26); }
DMulScale27(SDWORD a,SDWORD b,SDWORD c,SDWORD d)94 static __forceinline SDWORD DMulScale27 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 27); }
DMulScale28(SDWORD a,SDWORD b,SDWORD c,SDWORD d)95 static __forceinline SDWORD DMulScale28 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 28); }
DMulScale29(SDWORD a,SDWORD b,SDWORD c,SDWORD d)96 static __forceinline SDWORD DMulScale29 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 29); }
DMulScale30(SDWORD a,SDWORD b,SDWORD c,SDWORD d)97 static __forceinline SDWORD DMulScale30 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 30); }
DMulScale31(SDWORD a,SDWORD b,SDWORD c,SDWORD d)98 static __forceinline SDWORD DMulScale31 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 31); }
DMulScale32(SDWORD a,SDWORD b,SDWORD c,SDWORD d)99 static __forceinline SDWORD DMulScale32 (SDWORD a, SDWORD b, SDWORD c, SDWORD d) { return (SDWORD)(((SQWORD)a*b + (SQWORD)c*d) >> 32); }
100 
TMulScale1(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)101 static __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); }
TMulScale2(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)102 static __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); }
TMulScale3(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)103 static __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); }
TMulScale4(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)104 static __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); }
TMulScale5(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)105 static __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); }
TMulScale6(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)106 static __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); }
TMulScale7(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)107 static __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); }
TMulScale8(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)108 static __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); }
TMulScale9(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)109 static __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); }
TMulScale10(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)110 static __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); }
TMulScale11(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)111 static __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); }
TMulScale12(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)112 static __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); }
TMulScale13(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)113 static __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); }
TMulScale14(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)114 static __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); }
TMulScale15(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)115 static __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); }
TMulScale16(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)116 static __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); }
TMulScale17(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)117 static __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); }
TMulScale18(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)118 static __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); }
TMulScale19(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)119 static __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); }
TMulScale20(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)120 static __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); }
TMulScale21(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)121 static __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); }
TMulScale22(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)122 static __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); }
TMulScale23(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)123 static __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); }
TMulScale24(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)124 static __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); }
TMulScale25(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)125 static __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); }
TMulScale26(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)126 static __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); }
TMulScale27(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)127 static __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); }
TMulScale28(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)128 static __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); }
TMulScale29(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)129 static __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); }
TMulScale30(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)130 static __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); }
TMulScale31(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)131 static __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); }
TMulScale32(SDWORD a,SDWORD b,SDWORD c,SDWORD d,SDWORD e,SDWORD f)132 static __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); }
133 
BoundMulScale(SDWORD a,SDWORD b,SDWORD c)134 static __forceinline SDWORD BoundMulScale (SDWORD a, SDWORD b, SDWORD c)
135 {
136 	SQWORD x = ((SQWORD)a * b) >> c;
137 	return x >  0x7FFFFFFFll ? 0x7FFFFFFF :
138 		   x < -0x80000000ll ? 0x80000000 :
139 		   (SDWORD)x;
140 }
141 
DivScale(SDWORD a,SDWORD b,SDWORD c)142 static inline SDWORD DivScale (SDWORD a, SDWORD b, SDWORD c)
143 {
144 	return (SDWORD)(((SQWORD)a << c) / b);
145 }
146 
DivScale1(SDWORD a,SDWORD b)147 static inline SDWORD DivScale1 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 1) / b); }
DivScale2(SDWORD a,SDWORD b)148 static inline SDWORD DivScale2 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 2) / b); }
DivScale3(SDWORD a,SDWORD b)149 static inline SDWORD DivScale3 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 3) / b); }
DivScale4(SDWORD a,SDWORD b)150 static inline SDWORD DivScale4 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 4) / b); }
DivScale5(SDWORD a,SDWORD b)151 static inline SDWORD DivScale5 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 5) / b); }
DivScale6(SDWORD a,SDWORD b)152 static inline SDWORD DivScale6 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 6) / b); }
DivScale7(SDWORD a,SDWORD b)153 static inline SDWORD DivScale7 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 7) / b); }
DivScale8(SDWORD a,SDWORD b)154 static inline SDWORD DivScale8 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 8) / b); }
DivScale9(SDWORD a,SDWORD b)155 static inline SDWORD DivScale9 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 9) / b); }
DivScale10(SDWORD a,SDWORD b)156 static inline SDWORD DivScale10 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 10) / b); }
DivScale11(SDWORD a,SDWORD b)157 static inline SDWORD DivScale11 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 11) / b); }
DivScale12(SDWORD a,SDWORD b)158 static inline SDWORD DivScale12 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 12) / b); }
DivScale13(SDWORD a,SDWORD b)159 static inline SDWORD DivScale13 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 13) / b); }
DivScale14(SDWORD a,SDWORD b)160 static inline SDWORD DivScale14 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 14) / b); }
DivScale15(SDWORD a,SDWORD b)161 static inline SDWORD DivScale15 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 15) / b); }
DivScale16(SDWORD a,SDWORD b)162 static inline SDWORD DivScale16 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 16) / b); }
DivScale17(SDWORD a,SDWORD b)163 static inline SDWORD DivScale17 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 17) / b); }
DivScale18(SDWORD a,SDWORD b)164 static inline SDWORD DivScale18 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 18) / b); }
DivScale19(SDWORD a,SDWORD b)165 static inline SDWORD DivScale19 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 19) / b); }
DivScale20(SDWORD a,SDWORD b)166 static inline SDWORD DivScale20 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 20) / b); }
DivScale21(SDWORD a,SDWORD b)167 static inline SDWORD DivScale21 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 21) / b); }
DivScale22(SDWORD a,SDWORD b)168 static inline SDWORD DivScale22 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 22) / b); }
DivScale23(SDWORD a,SDWORD b)169 static inline SDWORD DivScale23 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 23) / b); }
DivScale24(SDWORD a,SDWORD b)170 static inline SDWORD DivScale24 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 24) / b); }
DivScale25(SDWORD a,SDWORD b)171 static inline SDWORD DivScale25 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 25) / b); }
DivScale26(SDWORD a,SDWORD b)172 static inline SDWORD DivScale26 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 26) / b); }
DivScale27(SDWORD a,SDWORD b)173 static inline SDWORD DivScale27 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 27) / b); }
DivScale28(SDWORD a,SDWORD b)174 static inline SDWORD DivScale28 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 28) / b); }
DivScale29(SDWORD a,SDWORD b)175 static inline SDWORD DivScale29 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 29) / b); }
DivScale30(SDWORD a,SDWORD b)176 static inline SDWORD DivScale30 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 30) / b); }
DivScale31(SDWORD a,SDWORD b)177 static inline SDWORD DivScale31 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 31) / b); }
DivScale32(SDWORD a,SDWORD b)178 static inline SDWORD DivScale32 (SDWORD a, SDWORD b) { return (SDWORD)(((SQWORD)a << 32) / b); }
179 
clearbuf(void * buff,unsigned int count,SDWORD clear)180 static __forceinline void clearbuf (void *buff, unsigned int count, SDWORD clear)
181 {
182 	SDWORD *b2 = (SDWORD *)buff;
183 	for (unsigned int i = 0; i != count; ++i)
184 	{
185 		b2[i] = clear;
186 	}
187 }
188 
clearbufshort(void * buff,unsigned int count,WORD clear)189 static __forceinline void clearbufshort (void *buff, unsigned int count, WORD clear)
190 {
191 	SWORD *b2 = (SWORD *)buff;
192 	for (unsigned int i = 0; i != count; ++i)
193 	{
194 		b2[i] = clear;
195 	}
196 }
197 
ksgn(SDWORD a)198 static __forceinline SDWORD ksgn (SDWORD a)
199 {
200 	if (a < 0) return -1;
201 	else if (a > 0) return 1;
202 	else return 0;
203 }
204