[pypy-dev] Floating point computation

Armin Rigo arigo at tunes.org
Fri Jul 1 14:54:25 CEST 2011


Hi,

On Fri, Jul 1, 2011 at 2:41 PM, Zariko Taba <zariko.taba at gmail.com> wrote:
> // compute a sqrt using intrinsics
> __builtin_ia32_sqrtss(...);
> // get status register of sse2 fpu
> int mxcsr = __builtin_ia32_stmxcsr();
> // extract overflow bit :
> overflow = (mxcsr & 0x8);
> // extract ...

There is a third solution: do exactly the same kind of code, but in
RPython instead of in C.  This means using the rffi module.  For
example:

builtin_ia32_sqrtss = rffi.llexternal("__builtin_ia32_sqrtss", [argtypes...],
    restype, _nowrapper=True, _callable=emulate_ia32_sqrtss)

def f(..):
    ...
    builtin_ia32_sqrtss(..)
    ...

with emulate_ia32_sqrtss() being a pure Python function that is going
to be called only during tests.  After translation to C, it will just
turn into the C code that you posted above.  For more examples, grep
for "llexternal" in pypy/rlib/.


A bientôt,

Armin.


More information about the pypy-dev mailing list