SIMD/intrinsincs questions
Walter Bright
newshound1 at digitalmars.com
Tue Nov 10 13:38:38 PST 2009
Mike Farnsworth wrote:
> Was it actually rewriting the executable code to call the alternate
> functions (e.g. a exe load time decision, patch the code in memory,
> and then run)? I thought that sort of thing would run into all sorts
> of runtime linker issues (ro code pages in memory, shared libs that
> also need the rewriting, etc.), but then again, they do that with JIT
> compiling all the time.
It's much simpler than that. Some C:
=========================================
void foo_with_FPU();
void foo_without_FPU();
void (*foo)();
void main()
{
has_fp = doesCPUhaveFPU();
if (has_fp)
foo = &foo_with_FPU();
else
foo = &foo_without_FPU();
... execute app ...
(*foo)();
... execute more app ...
}
=========================================
#if WITH_FPU
#define FOO foo_with_FPU
#else
#define FOO foo_without_FPU
#endif
void FOO()
{
... do some floating point calculations ...
}
==========================================
dmc -DWITH_FPU -c foo.c -f -ofoo_with_fpu.obj
dmc -c foo.c -ofoo_without_fpu.obj
dmc app.obj foo_with_fpu.obj foo_without_fpu.obj
===========================================
Hope that makes it clearer. No runtime linking, no runtime compiling, no
self-modifying code, etc.
A better way to do it is to put your FP code behind a class interface,
then have derived classes implement them, compiled with different
instruction set options. At runtime, decide which derived class to use.
More information about the Digitalmars-d
mailing list