#include #include #include inline int sse_round(double x) { return(_mm_cvtsd_si32(_mm_set_sd(x))); } inline int round_int(double x) { int i; const float round_to_nearest = 0.5f; __asm__ __volatile__ ( "fadd %%st\n\t" "fadd %%st(1)\n\t" "fistpl %0\n\t" "sarl $1, %0\n" : "=m"(i) : "u"(round_to_nearest), "t"(x) : "st" ); return (i); } int main(int argc, char *argv[]) { printf("%d %d\n", round_int(atof(argv[1])), sse_round(atof(argv[1]))); }