⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pragmas.c

📁 小型游戏引擎
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Inline assembly. * * Initial PLATFORM_UNIX work done by Andrew Henderson. The DOS stuff is *  Ken's original code, and was in pragmas.h * * Please do NOT harrass Ken Silverman about any code modifications *  (including this file) to BUILD. *//* * "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman * Ken Silverman's official web site: "http://www.advsys.net/ken" * See the included license file "BUILDLIC.TXT" for license info. * This file has been modified from Ken Silverman's original release */#if (defined __WATCOMC__)  #if ((defined PLATFORM_DOS) || (defined PLATFORM_WIN32))    #error Do not compile this. Just include pragmas.h instead.  #endif#endif#if (defined USE_I386_ASM)#if (!defined __GNUC__)#error This file is filled with GNU C-specific inline asm.#endifstatic long dmval;/* rcg02132001 Cygwin support. */#if (defined C_IDENTIFIERS_UNDERSCORED)#define SYM_dmval   "_dmval"#else#define SYM_dmval   "dmval"#endifstatic __inline__ void _touch_dmval_stop_compiler_whining(void){    dmval = 0;}unsigned long getkensmessagecrc(long param) {    long retval;    __asm__ __volatile__ (        "xorl %%eax, %%eax   \n\t"        "movl $32, %%ecx   \n\t"        "kensmsgbeg: movl -4(%%ebx,%%ecx,4), %%edx   \n\t"        "rorl %%cl, %%edx   \n\t"        "adcl %%edx, %%eax   \n\t"        "bswapl %%eax   \n\t"        "loop kensmsgbeg   \n\t"     : "=a" (retval) : "b" (param) : "ecx", "edx", "cc");    return(retval);}long msqrtasm(int i1){    int retval;    __asm__ __volatile__ (      "movl $0x40000000, %%eax   \n\t"          "movl $0x20000000, %%ebx   \n\t"          "msqrasm_begit: cmpl %%eax, %%ecx   \n\t"          "jl msqrasm_skip   \n\t"          "subl %%eax, %%ecx   \n\t"          "leal (%%eax, %%ebx, 4), %%eax   \n\t"          "msqrasm_skip: subl %%ebx, %%eax   \n\t"          "shrl $1, %%eax   \n\t"          "shrl $2, %%ebx   \n\t"          "jnz msqrasm_begit   \n\t"          "cmpl %%eax, %%ecx   \n\t"          "sbbl $-1, %%eax   \n\t"          "shrl $1, %%eax   \n\t"     : "=a" (retval) : "c" (i1) : "cc", "ebx");    return(retval);} /* msqrtasm */int sqr (int i1) {  int retval;  __asm__ __volatile__ (    "imull 	%%eax, %%eax   \n\t"   : "=a" (retval) : "a" (i1) : "cc");  return(retval);}int scale (int i1, int i2, int i3) {  int retval;  __asm__ __volatile__ (    "imull 	%%edx   \n\t"    "idivl 	%%ecx	   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "c" (i3) : "cc");  return(retval);}int mulscale (int i1, int i2, short i3) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl %%cl, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "c" (i3) : "cc");  return(retval);}int mulscale1 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $1, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale2 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $2, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale3 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $3, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale4 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $4, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale5 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $5, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale6 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $6, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale7 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $7, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale8 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $8, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale9 (int i1, int i2) {  int retval;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $9, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale10 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $10, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale11 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $11, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale12 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $12, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale13 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $13, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale14 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $14, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale15 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $15, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale16 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $16, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale17 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $17, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale18 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $18, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale19 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $19, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale20 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $20, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale21 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $21, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale22 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $22, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale23 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $23, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale24 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $24, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale25 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $25, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale26 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $26, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale27 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $27, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale28 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $28, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale29 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $29, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale30 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $30, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale31 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"    "shrdl $31, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int mulscale32 (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "imull %%edx   \n\t"   : "=d" (retval) : "a" (i1), "d" (i2) : "cc");  return(retval);}int divmod (int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (    "xorl %%edx, %%edx   \n\t"    "divl %%ebx   \n\t"    "movl %%edx, " SYM_dmval "  \n\t"  : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "memory", "cc");  return(retval);}int dmulscale(int i1, int i2, int i3, int i4, int i5) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl %%cl, %%edx, %%eax        \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4), "c" (i5)    : "ebx", "cc");  return(retval);}int dmulscale1(int i1, int i2, int i3, int i4) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl $1, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4)    : "ebx", "cc");  return(retval);}int dmulscale2(int i1, int i2, int i3, int i4) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl $2, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4)    : "ebx", "cc");  return(retval);}int dmulscale3(int i1, int i2, int i3, int i4) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl $3, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4)    : "ebx", "cc");  return(retval);}int dmulscale4(int i1, int i2, int i3, int i4) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl $4, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4)    : "ebx", "cc");  return(retval);}int dmulscale5(int i1, int i2, int i3, int i4) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl $5, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4)    : "ebx", "cc");  return(retval);}int dmulscale6(int i1, int i2, int i3, int i4) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"movl %%eax, %%ebx   \n\t"	"movl %%esi, %%eax   \n\t"	"movl %%edx, %%esi   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%esi, %%edx   \n\t"	"shrdl $6, %%edx, %%eax   \n\t"   : "=a" (retval) : "a" (i1), "d" (i2), "S" (i3), "D" (i4)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -