[fpc-pascal] Threading in FPC DOS
Vinzent Hoefler
JeLlyFish.software at gmx.net
Wed Jul 12 14:20:05 CEST 2006
On Wednesday 12 July 2006 11:34, Andreas Berger wrote:
> save and restore the floating point unit. I will need to do this for
> FPC, so if someone knows how to save and restore the FPU, I would
> apreciate the help.
F(X)SAVE/F(X)RSTOR
The X-Versions are more efficient, but only available on newer CPUs.
> Ideally I could also discover (via an exception
> on first FPU usage?) if a thread needs to save/restore the FPU.
Well, I'd say, this is quite hard to do in an efficient way, because you
need to detect the usage of MMX instructions, too. As you may recall,
Intel decided to implement another brain damaged design and mapped the
MMX registers onto the FPU registers.
I have to dig deep in my memory now, so take the following paragraphs
with caution, I may be wrong (it's just too long ago):
In theory it is possible to do, but only if you have write access to the
EFLAGS register (where you could temporarily set a flag to raise an
exception on MMX usage). But the usual DOS-target means DPMI, which
means privilege level 3 which means: You're just not allowed to fiddle
around with those. IIRC, there's a ring0-mode DPMI-Host available
(should be CWSDPR0.EXE), but this only works in real plain DOS, so the
option to run the program inside a Windows-DOS-Box would be out
completely, I guess.
Depending on your needs this might be ok, but as a general solution for
FPC/GO32V2 this wouldn't be acceptable, I think.
Vinzent.
More information about the fpc-pascal
mailing list