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