|
@@ -30,7 +30,7 @@ interface
|
|
|
node,ninl,ncginl;
|
|
|
|
|
|
type
|
|
|
- tSparcInlineNode = class(tcgInlineNode)
|
|
|
+ tsparcinlinenode = class(tcgInlineNode)
|
|
|
function first_abs_real: tnode; override;
|
|
|
function first_sqr_real: tnode; override;
|
|
|
function first_sqrt_real: tnode; override;
|
|
@@ -55,10 +55,10 @@ implementation
|
|
|
tgobj,ncgutil,cgobj,cg64f32,rgobj,rgcpu;
|
|
|
|
|
|
{*****************************************************************************
|
|
|
- TSparcInlineNode
|
|
|
+ tsparcinlinenode
|
|
|
*****************************************************************************}
|
|
|
|
|
|
- procedure tSparcInlineNode.load_fpu_location;
|
|
|
+ procedure tsparcinlinenode.load_fpu_location;
|
|
|
begin
|
|
|
secondpass(left);
|
|
|
location_force_fpureg(exprasmlist,left.location,true);
|
|
@@ -71,7 +71,7 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
- function tSparcInlineNode.first_abs_real : tnode;
|
|
|
+ function tsparcinlinenode.first_abs_real : tnode;
|
|
|
begin
|
|
|
expectloc:=LOC_FPUREGISTER;
|
|
|
registersint:=left.registersint;
|
|
@@ -80,7 +80,7 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
- function tSparcInlineNode.first_sqr_real : tnode;
|
|
|
+ function tsparcinlinenode.first_sqr_real : tnode;
|
|
|
begin
|
|
|
expectloc:=LOC_FPUREGISTER;
|
|
|
registersint:=left.registersint;
|
|
@@ -89,7 +89,7 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
- function tSparcInlineNode.first_sqrt_real : tnode;
|
|
|
+ function tsparcinlinenode.first_sqrt_real : tnode;
|
|
|
begin
|
|
|
expectloc:=LOC_FPUREGISTER;
|
|
|
registersint:=left.registersint;
|
|
@@ -98,32 +98,62 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
- procedure tSparcInlineNode.second_abs_real;
|
|
|
+ procedure tsparcinlinenode.second_abs_real;
|
|
|
begin
|
|
|
load_fpu_location;
|
|
|
- exprasmlist.concat(taicpu.op_reg_reg(A_FABSs,left.location.register,location.register));
|
|
|
+ case tfloatdef(left.resulttype.def).typ of
|
|
|
+ s32real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_FABSs,left.location.register,location.register));
|
|
|
+ s64real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_FABSd,left.location.register,location.register));
|
|
|
+ s128real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_FABSq,left.location.register,location.register));
|
|
|
+ else
|
|
|
+ internalerror(200410031);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
|
|
|
- procedure tSparcInlineNode.second_sqr_real;
|
|
|
+ procedure tsparcinlinenode.second_sqr_real;
|
|
|
begin
|
|
|
load_fpu_location;
|
|
|
- exprasmlist.concat(taicpu.op_reg_reg_reg(A_FMULs,left.location.register,left.location.register,location.register));
|
|
|
+ case tfloatdef(left.resulttype.def).typ of
|
|
|
+ s32real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg_reg(A_FMULs,left.location.register,left.location.register,location.register));
|
|
|
+ s64real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg_reg(A_FMULd,left.location.register,left.location.register,location.register));
|
|
|
+ s128real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg_reg(A_FMULq,left.location.register,left.location.register,location.register));
|
|
|
+ else
|
|
|
+ internalerror(200410032);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
|
|
|
- procedure tSparcInlineNode.second_sqrt_real;
|
|
|
+ procedure tsparcinlinenode.second_sqrt_real;
|
|
|
begin
|
|
|
load_fpu_location;
|
|
|
- exprasmlist.concat(taicpu.op_reg_reg(A_FSQRTs,left.location.register,location.register));
|
|
|
+ case tfloatdef(left.resulttype.def).typ of
|
|
|
+ s32real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_FSQRTs,left.location.register,location.register));
|
|
|
+ s64real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_FSQRTd,left.location.register,location.register));
|
|
|
+ s128real:
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_FSQRTq,left.location.register,location.register));
|
|
|
+ else
|
|
|
+ internalerror(200410033);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
begin
|
|
|
- cInlineNode:=tSparcInlineNode;
|
|
|
+ cInlineNode:=tsparcinlinenode;
|
|
|
end.
|
|
|
{
|
|
|
$Log$
|
|
|
- Revision 1.9 2004-06-20 08:55:32 florian
|
|
|
+ Revision 1.10 2004-10-03 12:42:22 florian
|
|
|
+ * made sqrt, sqr and abs internal for the sparc
|
|
|
+
|
|
|
+ Revision 1.9 2004/06/20 08:55:32 florian
|
|
|
* logs truncated
|
|
|
|
|
|
Revision 1.8 2004/02/03 22:32:54 peter
|