?? kreciptest.c
字號:
#include <stdlib.h>#include <stdio.h>#include "sar.h"/*extern int _asm_krecipasm (int);*/int reciptable[2048], fpuasm;void init (void){ int i; for(i=0;i<2048;i++) reciptable[i] = i;/* divscale30(2048L,i+2048);*/}static int krecipasm(int i1){ int retval; __asm__ __volatile__ (" call _asm_krecipasm " : "=a" (retval) : "a" (i1) : "cc", "ebx", "ecx", "memory"); return(retval);} // krecipasmstatic int ansi_c_krecip (int x){ float xf; int z; int not; if (x & 0x80000000) /* If the highest bit is set... */ not = 0x0FFFFFFFF; else not = 0; xf = (float)x;/* convert the int to a float */ /* Pretend the float is an int so we can extract bits */ x = *((int*)(&xf)); z = x; x = x & 0x007FF000;/* Mask out: 11 << 13 */ x = x >> 10; /* Divide x by 1024 */ /* X now contains: 13 high order bits of the mantissa, followed by two 0 bits */ /* Now we perform an elaborate extraction of the exponent from the floating point numer? WTF is the subtraction for? */ z = z - 0x03F800000;/* Subtract (127<<23) */ z = z >> 23; /* z now contains the exponent divided by two? */ x = shift_algebraic_right(reciptable[(x>>2)], z) ^ not; return x;}static int mykrecipasm(int i1){ int retval; retval = ansi_c_krecip(i1); return retval;}int main (int argc, char** argv){ int u; init(); printf("sizeof(long) = %u, sizeof(int) = %u\n", sizeof(long int), sizeof(int)); u = 0; while(scanf("%d", &u) >= 1){ printf("Original: %d \tMine: %d\n", krecipasm(u),mykrecipasm(u)); u = 0; } return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -