[fpc-pascal] selecting target processor
Florian Klaempfl
florian at freepascal.org
Sun Jun 19 23:19:43 CEST 2005
Tomas Hajny wrote:
> Date sent: Sun, 19 Jun 2005 22:49:44 +0200
> From: Florian Klaempfl <florian at freepascal.org>
> To: FPC-Pascal users discussions <fpc-pascal at lists.freepascal.org>
> Subject: Re: [fpc-pascal] selecting target processor
> Send reply to: FPC-Pascal users discussions <fpc-pascal at lists.freepascal.org>
> <mailto:fpc-pascal-request at lists.freepascal.org?subject=unsubscribe>
> <mailto:fpc-pascal-request at lists.freepascal.org?subject=subscribe>
>
>
>>>On 19 Jun 2005, at 20:48, Marc Santhoff wrote:
>>>
>>>
>>>>how can I tell fpc to use only instructions supported on a specific
>>>>processor?
>>>>
>>>>I'm compiling on an athlon for running on a geode (restriction has
>>>>to define instruction set from x686 to x586, I think).
>>>
>>>In theory, the code generated by FPC should always run on an i386
>>>(even if you use e.g. -Op3), unless you use some special command
>>>line switches I cannot find in the help.
>>
>> -C<x> code generation options:
>> -Cc<x> set default calling convention to <x>
>> -CD create also dynamic library (not supported)
>> -Ce Compilation with emulated floating point opcodes
>> -Cf<x> Select fpu instruction set to use, see fpc -i for
>>possible values
>> -Cg Generate PIC code
>> -Ch<n> <n> bytes heap (between 1023 and 67107840)
>> -Ci IO-checking
>> -Cn omit linking stage
>> -Co check overflow of integer operations
>> -Cp<x> select instruction set, see fpc -i for possible
>> values
>>
>>That is it :)
>
>
> Nice can of worms I haven't been aware of... ;-) So what is the best -
> Cp option for my Athlon then? ;-))) And what would be correct for AMD
> K6 and all other non-Intel CPUs > 386? Looks as a lot of work for
> Michael...
PENTIUM afaik nothing new
PENTIUM2 mainly cmov and fcmov, cmov creates nice code for
length(<ansistring>) or max if max is inlined:
# [14] i:=length(s);
movl U_P$PROGRAM_S,%eax
testl %eax,%eax
cmovnel -4(%eax),%eax
movl %eax,U_P$PROGRAM_I
# [15] j:=max(j,k);
movl U_P$PROGRAM_K,%ecx
movl U_P$PROGRAM_J,%edx
cmpl %ecx,%edx
cmovgl %edx,%eax
.L29:
cmovngl %ecx,%eax
movl %eax,U_P$PROGRAM_J
PENTIUM3 sse1 for usual code possible (e.g. prefetch)
PENTIUM4 sse2 for usual code possible
K6 -> Pentium
Athlon/Duron -> Pentium2
AthlonXP/Sempron -> Pentium3
Athlon64 -> Pentium4
>
> Tomas
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list