[fpc-pascal] Threading in FPC DOS
Andreas Berger
Andreas at TheBergerClan.org
Wed Jul 12 15:15:54 CEST 2006
@Vincent
thanks for your detailed reply :)
@All
Vinzent Hoefler wrote:
> 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.
>
>
Now that you mention it, I have used these in the past :). BTW, The X
version is available at what CPU's? Would it be acceptable to use this
for FPC or should I use the normal FSAVE/FRSTOR functions? Does FPC have
a function that tells me what processor I'm running on? In this case I
could optimize.
>> 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.
>
You're right, better not to do this for a general library.
Ok, will be start to write the threads.
Andreas
More information about the fpc-pascal
mailing list