mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 07:59:27 +02:00
Avoid float_raise call in FPC_SOFT_FPUX80 code
(cherry picked from commit 5cedecbe25
)
This commit is contained in:
parent
0b5af8a53f
commit
59ad47503b
@ -1054,6 +1054,8 @@ Implementation
|
||||
eextended: extended;
|
||||
{$else}
|
||||
{$ifdef FPC_SOFT_FPUX80}
|
||||
f32 : float32;
|
||||
f64 : float64;
|
||||
eextended: floatx80;
|
||||
{$endif}
|
||||
{$endif cpuextended}
|
||||
@ -1118,9 +1120,24 @@ Implementation
|
||||
aitrealconst_s80bit:
|
||||
begin
|
||||
if sizeof(tai_realconst(hp).value.s80val) = sizeof(double) then
|
||||
eextended:=float64_to_floatx80(float64(double(tai_realconst(hp).value.s80val)))
|
||||
begin
|
||||
f64:=float64(double(tai_realconst(hp).value.s80val));
|
||||
if float64_is_signaling_nan(f64)<>0 then
|
||||
begin
|
||||
f64.low := 0;
|
||||
f64.high := longword($fff80000);
|
||||
end;
|
||||
eextended:=float64_to_floatx80(f64);
|
||||
end
|
||||
else if sizeof(tai_realconst(hp).value.s80val) = sizeof(single) then
|
||||
eextended:=float32_to_floatx80(float32(single(tai_realconst(hp).value.s80val)))
|
||||
begin
|
||||
f32:=float32(single(tai_realconst(hp).value.s80val));
|
||||
if float32_is_signaling_nan(f32)<>0 then
|
||||
begin
|
||||
f32 := longword($ffc00000);
|
||||
end;
|
||||
eextended:=float32_to_floatx80(f32);
|
||||
end
|
||||
else
|
||||
internalerror(2017091901);
|
||||
pdata:=@eextended;
|
||||
@ -1842,6 +1859,8 @@ Implementation
|
||||
eextended : extended;
|
||||
{$else}
|
||||
{$ifdef FPC_SOFT_FPUX80}
|
||||
f32 : float32;
|
||||
f64 : float64;
|
||||
eextended : floatx80;
|
||||
{$endif}
|
||||
{$endif}
|
||||
@ -1919,16 +1938,31 @@ Implementation
|
||||
{$push}{$warn 6018 off} { Unreachable code due to compile time evaluation }
|
||||
aitrealconst_s80bit:
|
||||
begin
|
||||
if sizeof(tai_realconst(hp).value.s80val) = sizeof(double) then
|
||||
eextended:=float64_to_floatx80(float64(double(tai_realconst(hp).value.s80val)))
|
||||
else if sizeof(tai_realconst(hp).value.s80val) = sizeof(single) then
|
||||
eextended:=float32_to_floatx80(float32(single(tai_realconst(hp).value.s80val)))
|
||||
else
|
||||
internalerror(2017091901);
|
||||
if sizeof(tai_realconst(hp).value.s80val) = sizeof(double) then
|
||||
begin
|
||||
f64:=float64(double(tai_realconst(hp).value.s80val));
|
||||
if float64_is_signaling_nan(f64)<>0 then
|
||||
begin
|
||||
f64.low := 0;
|
||||
f64.high := longword($fff80000);
|
||||
end;
|
||||
eextended:=float64_to_floatx80(f64);
|
||||
end
|
||||
else if sizeof(tai_realconst(hp).value.s80val) = sizeof(single) then
|
||||
begin
|
||||
f32:=float32(single(tai_realconst(hp).value.s80val));
|
||||
if float32_is_signaling_nan(f32)<>0 then
|
||||
begin
|
||||
f32 := longword($ffc00000);
|
||||
end;
|
||||
eextended:=float32_to_floatx80(f32);
|
||||
end
|
||||
else
|
||||
internalerror(2017091903);
|
||||
pdata:=@eextended;
|
||||
end;
|
||||
{$pop}
|
||||
{$endif}
|
||||
{$endif}
|
||||
{$endif cpuextended}
|
||||
aitrealconst_s64comp:
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user