ich habs jetzt so:
aber leider funktioniert: Fild qword ptr [&left.FBCD9]
nicht. Da muss bei Class Operatoren irgendwas anderes übergeben werden.
Auch dem Result kann man nix geben ..
Delphi-Quellcode:
//====[ * ]===================================================================
class operator FIXCOMMA64.Multiply(
const Left, Right: FIXCOMMA64): FIXCOMMA64;
const I10 : LongInt = 10;
BCD8INT : LongInt = 100000000;
var
// val: extended;
f1, f2 : int64;
begin
// Result.MaxValue
// val := (Left.FBCD9 / FBCD9EXT) * (Right.FBCD9 / FBCD9EXT);
//
// Result.FBCD9 := (Trunc(val)*FBCD9INT) + iDIV64(Round(frac(val)*FBCD10EXT), 10);
//
//exit;
f1 := left.fbcd9;
f2 := Right.fbcd9;
asm
// FILD I10
// FILD BCD8INT
Fild qword ptr [f1]
Fild qword ptr [f2]
// Fild qword ptr [&left.FBCD9]
// Fild qword ptr [&right.FBCD9]
fmulp st(1),st(0)
// FDIVR
fidiv dword ptr [&BCD8INT]
FRNDINT
// FDIVR
fidiv dword ptr [&I10]
FISTP qword [f1]
wait
end;
Result.FBCD9 := f1;
end;
so ist der definiert:
Delphi-Quellcode:
type PFIXCOMMA64 = ^FIXCOMMA64; FIXCOMMA64 = packed record
strict private
FBCD9: int64;
class function Get_MinValue: FIXCOMMA64; static;
class function Get_MaxValue: FIXCOMMA64; static;
private
function Get_DWORD: DWORD;
function Get_Int64: Int64;
....
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.