📄 pragmas.c
字号:
/* * 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 + -