unit FastcodeMinFPUnit01; //Version : 0.1. Preliminary version //Only direct calling supported interface function MinFPFastcodeP4(const A, B : Extended) : Extended; overload; function MinFPFastcodeP3(const A, B : Extended) : Extended; overload; function MinFPFastcodeXP(const A, B : Extended) : Extended; overload; function MinFPFastcodeOpteron(const A, B : Extended) : Extended; overload; function MinFPFastcodeRTL(const A, B : Extended) : Extended; overload; function MinFPFastcodePascal(const A, B : Extended) : Extended; overload; function MinFPFastcodeBlended(const A, B : Extended) : Extended; overload; function MinFPFastcodeP4(const A, B : Double) : Double; overload; function MinFPFastcodeP3(const A, B : Double) : Double; overload; function MinFPFastcodeXP(const A, B : Double) : Double; overload; function MinFPFastcodeOpteron(const A, B : Double) : Double; overload; function MinFPFastcodeRTL(const A, B : Double) : Double; overload; //function MinFPFastcodePascal(const A, B : Double) : Double; overload; function MinFPFastcodeBlended(const A, B : Double) : Double; overload; function MinFPFastcodeP4(const A, B : Single) : Single; overload; function MinFPFastcodeP3(const A, B : Single) : Single; overload; function MinFPFastcodeXP(const A, B : Single) : Single; overload; function MinFPFastcodeOpteron(const A, B : Single) : Single; overload; function MinFPFastcodeRTL(const A, B : Single) : Single; overload; //function MinFPFastcodePascal(const A, B : Single) : Single; overload; function MinFPFastcodeBlended(const A, B : Single) : Single; overload; implementation //Author: John O'Harrow //Date: N/A //Optimized for: P4 //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeP4(const A, B : Extended) : Extended; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: John O'Harrow //Date: N/A //Optimized for: P3 //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeP3(const A, B : Extended) : Extended; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: John O'Harrow //Date: N/A //Optimized for: XP //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeXP(const A, B : Extended) : Extended; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: John O'Harrow //Date: N/A //Optimized for: Opteron //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeOpteron(const A, B : Extended) : Extended; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: John O'Harrow //Date: N/A //Optimized for: RTL //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeRTL(const A, B : Extended) : Extended; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: Dennis Kjaer Christensen //Date: N/A //Optimized for: Pascal //Instructionset(s): N/A //Original Name: MinDKCPas function MinFPFastcodePascal(const A, B : Extended) : Extended; overload; begin if A <= B then Result := A else Result := B; end; //Author: John O'Harrow //Date: N/A //Optimized for: Blended //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeBlended(const A, B : Extended) : Extended; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: Dennis Kjaer Christensen //Date: N/A //Optimized for: P4 //Instructionset(s): N/A //Original Name: MinDKCSSE2_1 function MinFPFastcodeP4(const A, B : Double) : Double; overload; asm movsd xmm0,A movsd xmm1,b minsd xmm0,xmm1 movsd [esp-8],xmm0 fld qword ptr [esp-8] end; //Author: John O'Harrow //Date: N/A //Optimized for: P3 //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeP3(const A, B : Double) : Double; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: John O'Harrow //Date: N/A //Optimized for: XP //Instructionset(s): N/A //Original Name: MinJOH function MinFPFastcodeXP(const A, B : Double) : Double; overload; asm fld A fld B fcomi st(0), st(1) fcmovnb st(0), st(1) ffree st(1) end; //Author: Dennis Kjaer Christensen //Date: N/A //Optimized for: Opteron //Instructionset(s): N/A //Original Name: MinDKCSSE2_1 function MinFPFastcodeOpteron(const A, B : Double) : Double; overload; asm movsd xmm0,A movsd xmm1,b minsd xmm0,xmm1 movsd [esp-8],xmm0 fld qword ptr [esp-8] end; //Author: John O'Harrow //Date: N/A //Optimized for: RTL //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeRTL(const A, B : Double) : Double; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: John O'Harrow //Date: N/A //Optimized for: Blended //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeBlended(const A, B : Double) : Double; overload; asm fld A fld B fcom fstsw ax sahf jc @done fxch @done: ffree st(1) end; //Author: Dennis Kjaer Christensen //Date: N/A //Optimized for: P4 //Instructionset(s): N/A //Original Name: MinDKCSSE function MinFPFastcodeP4(const A, B : Single) : Single; overload; asm movss xmm0,A movss xmm1,b minss xmm0,xmm1 movss [esp-8],xmm0 fld dword ptr [esp-8] end; //Author: John O'Harrow //Date: N/A //Optimized for: P3 //Instructionset(s): N/A //Original Name: MinJOH function MinFPFastcodeP3(const A, B : Single) : Single; overload; asm fld A fld B fcomi st(0), st(1) fcmovnb st(0), st(1) ffree st(1) end; //Author: Dennis Kjaer Christensen //Date: N/A //Optimized for: XP //Instructionset(s): N/A //Original Name: MinDKCSSE function MinFPFastcodeXP(const A, B : Single) : Single; overload; asm movss xmm0,A movss xmm1,b minss xmm0,xmm1 movss [esp-8],xmm0 fld dword ptr [esp-8] end; //Author: Dennis Kjaer Christensen //Date: N/A //Optimized for: Opteron //Instructionset(s): N/A //Original Name: MinDKCSSE function MinFPFastcodeOpteron(const A, B : Single) : Single; overload; asm movss xmm0,A movss xmm1,b minss xmm0,xmm1 movss [esp-8],xmm0 fld dword ptr [esp-8] end; //Author: John O'Harrow //Date: N/A //Optimized for: RTL //Instructionset(s): N/A //Original Name: MinJOH_RTL function MinFPFastcodeRTL(const A, B : Single) : Single; overload; asm fld A fcomp B fstsw ax and eax, $100 shr eax, 6 {eax = 0 or 4} fld dword ptr [ebp+eax+8] end; //Author: John O'Harrow //Date: N/A //Optimized for: Blended //Instructionset(s): N/A //Original Name: MinJOH function MinFPFastcodeBlended(const A, B : Single) : Single; overload; asm fld A fld B fcomi st(0), st(1) fcmovnb st(0), st(1) ffree st(1) end; end.