"B. James Phillippe" <bryan@terran.org> writes:
> unsigned long foo = some_other_ulong * 1.234;
It's actually possible to compile this to code that doesn't use FP
instructions. To do the trick with three instructions on x86:
unsigned long t, junk;
/* Do res = x * 1.234; */
asm("mull %2"
: "=d" (t), "=a" (junk)
: "r" (x), "1" ((unsigned long)((1ULL << 32) * 0.234)));
res = x + t;
The assembly is needed to get an explicit MUL instruction, which gives
a full 64-bit result in edx:eax. (A similar thing can be done without
asm using long long, but the generated code is far worse.)
However, I don't know of any version of gcc/egcs which performs this
optimization, so you get the problems with FPU use in the kernel.
David Wragg
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sun May 07 2000 - 21:00:13 EST