Tomas Hajny wrote:

> Date sent:            Sun, 19 Jun 2005 22:49:44 +0200
> From:                 Florian Klaempfl <[EMAIL PROTECTED]>
> To:                   FPC-Pascal users discussions 
> <fpc-pascal@lists.freepascal.org>
> Subject:              Re: [fpc-pascal] selecting target processor
> Send reply to:        FPC-Pascal users discussions 
> <fpc-pascal@lists.freepascal.org>
>       <mailto:[EMAIL PROTECTED]>
>       <mailto:[EMAIL PROTECTED]>
> 
> 
>>>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@lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to