|
@@ -95,19 +95,11 @@ type
|
|
|
{$endif}
|
|
|
|
|
|
{$ifndef FPUNONE}
|
|
|
-{$ifdef longdouble_is_double}
|
|
|
+{$if defined(longdouble_is_double) or not defined(FPC_HAS_CEXTENDED)}
|
|
|
clongdouble=double;
|
|
|
{$else}
|
|
|
- {$if defined(cpui386) or defined(cpux86_64)}
|
|
|
- {$define longdouble_assignment_overload_real80}
|
|
|
- clongdouble = packed record
|
|
|
- value:extended;
|
|
|
- {$ifdef defined(cpu64) or defined(darwin)}
|
|
|
- padding:array[0..5] of byte;
|
|
|
- {$else}
|
|
|
- padding:array[0..1] of byte;
|
|
|
- {$endif}
|
|
|
- end;
|
|
|
+ {$if defined(cpui386) or defined(cpux86_64) or defined(cpuavr)}
|
|
|
+ clongdouble = cextended;
|
|
|
{$else}
|
|
|
{$define longdouble_assignment_overload_real128}
|
|
|
clongdouble = packed array [0..15] of byte;
|
|
@@ -115,29 +107,6 @@ type
|
|
|
{$endif}
|
|
|
Pclongdouble=^clongdouble;
|
|
|
|
|
|
-{$ifdef longdouble_assignment_overload_real80}
|
|
|
-operator := (const v:clongdouble) r:extended;inline;
|
|
|
-operator := (const v:extended) r:clongdouble;inline;
|
|
|
-operator +(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-operator +(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-operator -(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-operator -(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-operator *(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-operator *(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-operator /(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-operator /(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-operator =(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-operator =(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-operator <(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-operator <(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-operator >(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-operator >(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-operator >=(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-operator >=(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-operator <=(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-operator <=(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-{$endif}
|
|
|
-
|
|
|
{$ifdef longdouble_assignment_overload_real128}
|
|
|
{Non-x86 typically doesn't have extended. To be fixed once this changes.}
|
|
|
operator := (const v:clongdouble) r:double;inline;
|
|
@@ -168,109 +137,6 @@ operator <=(const c:clongdouble;const e:Double) r:boolean;inline;
|
|
|
implementation
|
|
|
|
|
|
{$ifndef FPUNONE}
|
|
|
-{$ifdef longdouble_assignment_overload_real80}
|
|
|
-operator := (const v:clongdouble) r:extended;
|
|
|
-
|
|
|
-begin
|
|
|
- r:=v.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator := (const v:extended) r:clongdouble;
|
|
|
-
|
|
|
-begin
|
|
|
- r.value:=v;
|
|
|
-end;
|
|
|
-
|
|
|
-operator +(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=e+c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator +(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=c.value+e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator -(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=e-c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator -(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=c.value-e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator *(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=e*c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator *(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=c.value*e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator /(const e:Extended;const c:clongdouble) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=e/c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator /(const c:clongdouble;const e:Extended) r:extended;inline;
|
|
|
-begin
|
|
|
- r:=c.value/e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator =(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=e=c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator =(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=c.value=e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator <(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=e<c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator <(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=c.value<e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator >(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=e>c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator >(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=c.value>e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator >=(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=e>=c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator >=(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=c.value>=e;
|
|
|
-end;
|
|
|
-
|
|
|
-operator <=(const e:Extended;const c:clongdouble) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=e<=c.value;
|
|
|
-end;
|
|
|
-
|
|
|
-operator <=(const c:clongdouble;const e:Extended) r:boolean;inline;
|
|
|
-begin
|
|
|
- r:=c.value<=e;
|
|
|
-end;
|
|
|
-{$endif}
|
|
|
|
|
|
{$ifdef longdouble_assignment_overload_real128}
|
|
|
|