// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // $Id:$ // // Copyright (C) 1993-1996 by id Software, Inc. // // This source is available for distribution and/or modification // only under the terms of the DOOM Source Code License as // published by id Software. All rights reserved. // // The source is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License // for more details. // // DESCRIPTION: // Fixed point arithemtics, implementation. // //----------------------------------------------------------------------------- #ifndef __M_FIXED__ #define __M_FIXED__ #include "doomtype.h" // // Fixed point, 32bit as 16.16. // #define FRACBITS 16 #define FRACUNIT (1<> 14 >= abs(b)) return (a^b)<0 ? MININT : MAXINT; asm(" movl %0, %%edx ;" " sall $16,%%eax ;" " sarl $16,%%edx ;" " idivl %2 ;" : "=a,=a" (result) // eax is always the result : "0,0" (a), // eax is also the first operand "m,r" (b) // second operand can be mem or reg (not imm) : "%edx", "%cc" // edx and condition codes are clobbered ); return result; } #else // DJGPP #define FixedMul(a,b) FixedMul_ASM(a,b) #define FixedDiv(a,b) FixedDiv_ASM(a,b) #endif // DJGPP #else // USEASM #define FixedMul(a,b) FixedMul_C(a,b) #define FixedDiv(a,b) FixedDiv_C(a,b) #endif #endif //----------------------------------------------------------------------------- // // $Log:$ // //-----------------------------------------------------------------------------