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

📄 pragmas.c

📁 小型游戏引擎
💻 C
📖 第 1 页 / 共 5 页
字号:
}int tmulscale31(int i1, int i2, int i3, int i4, int i5, int i6) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"xchgl %%ebx, %%eax   \n\t"	"xchgl %%ecx, %%edx   \n\t"	"imull %%edx   \n\t"	"addl %%eax, %%ebx   \n\t"	"adcl %%edx, %%ecx   \n\t"	"movl %%esi, %%eax   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%ecx, %%edx   \n\t"	"shrdl $31, %%edx, %%eax   \n\t"   : "=a" (retval)    : "a" (i1), "d" (i2), "b" (i3), "c" (i4), "S" (i5), "D" (i6)    : "cc");  return(retval);}int tmulscale32(int i1, int i2, int i3, int i4, int i5, int i6) {  int retval = 0;  __asm__ __volatile__ (	"imull %%edx   \n\t"	"xchgl %%ebx, %%eax   \n\t"	"xchgl %%ecx, %%edx   \n\t"	"imull %%edx   \n\t"	"addl %%eax, %%ebx   \n\t"	"adcl %%edx, %%ecx   \n\t"	"movl %%esi, %%eax   \n\t"	"imull %%edi   \n\t"	"addl %%ebx, %%eax   \n\t"	"adcl %%ecx, %%edx   \n\t"   : "=d" (retval)    : "a" (i1), "d" (i2), "b" (i3), "c" (i4), "S" (i5), "D" (i6)    : "cc");  return(retval);}int boundmulscale(int i1, int i2, int i3) {  int retval = 0;  __asm__ __volatile__ (	"imull %%ebx   \n\t"	"movl %%edx, %%ebx   \n\t"	"shrdl %%cl, %%edx, %%eax   \n\t"	"sarl %%cl, %%edx   \n\t"	"xorl %%eax, %%edx   \n\t"	"js checkit   \n\t"	"xorl %%eax, %%edx   \n\t"	"jz skipboundit   \n\t"	"cmpl $0xffffffff, %%edx   \n\t"	"je skipboundit   \n\t"	"checkit:   \n\t"	"movl %%ebx, %%eax   \n\t"	"sarl $31, %%eax   \n\t"	"xorl $0x7fffffff, %%eax   \n\t"	"skipboundit:   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2), "c" (i3) : "edx", "cc");  return(retval);}int divscale(int i1, int i2, int i3) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"shll %%cl, %%eax   \n\t"	"negb  %%cl   \n\t"	"sarl %%cl, %%edx   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2), "c" (i3) : "edx", "cc");  return(retval);}int divscale1(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"addl %%eax, %%eax   \n\t"	"sbbl %%edx, %%edx   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale2(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $30, %%edx   \n\t"	"leal (, %%eax, 4), %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale3(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $29, %%edx   \n\t"	"leal (, %%eax, 8), %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale4(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $28, %%edx   \n\t"	"shll $4, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale5(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $27, %%edx   \n\t"	"shll $5, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale6(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $26, %%edx   \n\t"	"shll $6, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale7(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $25, %%edx   \n\t"	"shll $7, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale8(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $24, %%edx   \n\t"	"shll $8, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale9(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $23, %%edx   \n\t"	"shll $9, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale10(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $22, %%edx   \n\t"	"shll $10, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale11(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $21, %%edx   \n\t"	"shll $11, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale12(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $20, %%edx   \n\t"	"shll $12, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale13(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $19, %%edx   \n\t"	"shll $13, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale14(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $18, %%edx   \n\t"	"shll $14, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale15(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $17, %%edx   \n\t"	"shll $15, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale16(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $16, %%edx   \n\t"	"shll $16, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale17(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $15, %%edx   \n\t"	"shll $17, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale18(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $14, %%edx   \n\t"	"shll $18, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale19(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $13, %%edx   \n\t"	"shll $19, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale20(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $12, %%edx   \n\t"	"shll $20, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale21(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $11, %%edx   \n\t"	"shll $21, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale22(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $10, %%edx   \n\t"	"shll $22, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale23(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $9, %%edx   \n\t"	"shll $23, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale24(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $8, %%edx   \n\t"	"shll $24, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale25(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $7, %%edx   \n\t"	"shll $25, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale26(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $6, %%edx   \n\t"	"shll $26, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale27(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $5, %%edx   \n\t"	"shll $27, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale28(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $4, %%edx   \n\t"	"shll $28, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale29(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $3, %%edx   \n\t"	"shll $29, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale30(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $2, %%edx   \n\t"	"shll $30, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale31(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"movl %%eax, %%edx   \n\t"	"sarl $1, %%edx   \n\t"	"shll $31, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "a" (i1), "b" (i2) : "edx", "cc");  return(retval);}int divscale32(int i1, int i2) {  int retval = 0;  __asm__ __volatile__ (	"xorl %%eax, %%eax   \n\t"	"idivl %%ebx   \n\t"   : "=a" (retval) : "d" (i1), "b" (i2): "cc");  return(retval);}int mul3 (int i1) {  int output;  __asm__ __volatile__ (    "leal (%1, %1, 2), %1   \n\t"   : "=r" (output) : "r" (i1) : "cc");  return (output);}int mul5 (int i1) {  int output;  __asm__ __volatile__ (    "leal (%1, %1, 4), %1   \n\t"   : "=r" (output) : "r" (i1) : "cc");  return (output);}int mul9 (int i1) {  int output;  __asm__ __volatile__ (    "leal (%1, %1, 8), %1   \n\t"   : "=r" (output) : "r" (i1) : "cc");  return (output);}void clearbuf(void *buffer, int size, long fill_value) {  __asm__ __volatile__ (	"rep   \n\t"    "stosl   \n\t"   : : "D" (buffer), "c" (size), "a" (fill_value) : "cc");}void clearbufbyte(void *buffer, int size, long fill_value) {  __asm__ __volatile__ (	"cmpl $4, %%ecx   \n\t"	"jae longcopya   \n\t"	"testb $1, %%cl   \n\t"	"jz preskipa   \n\t"	"stosb   \n\t"	"preskipa: shrl $1, %%ecx   \n\t"	"rep   \n\t"    "stosw   \n\t"	"jmp endita   \n\t"	"longcopya: testl $1, %%edi   \n\t"	"jz skip1a   \n\t"	"stosb   \n\t"	"decl %%ecx   \n\t"	"skip1a: testl $2, %%edi   \n\t"	"jz skip2a   \n\t"	"stosw   \n\t"	"subl $2, %%ecx   \n\t"	"skip2a: movl %%ecx, %%ebx   \n\t"	"shrl $2, %%ecx   \n\t"    "rep   \n\t"    "stosl   \n\t"	"testb $2, %%bl   \n\t"	"jz skip3a   \n\t"	"stosw   \n\t"	"skip3a: testb $1, %%bl   \n\t"	"jz endita   \n\t"	"stosb   \n\t"	"endita:   \n\t"   : : "D" (buffer), "c" (size), "a" (fill_value) : "ebx", "cc");}void copybuf(void *source, void *dest, int size) {  __asm__ __volatile__ (	"rep   \n\t"    "movsl   \n\t"   : : "S" (source), "D" (dest), "c" (size) : "cc");}void copybufbyte(void *source, void *dest, int size) {  __asm__ __volatile__ (	"cmpl $4, %%ecx   \n\t"	"jae longcopyb   \n\t"	"testb $1, %%cl   \n\t"	"jz preskipb   \n\t"	"movsb   \n\t"	"preskipb: shrl $1, %%ecx   \n\t"	"rep   \n\t"    "movsw   \n\t"	"jmp enditb   \n\t"	"longcopyb: testl $1, %%edi   \n\t"

⌨️ 快捷键说明

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