mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 21:29:24 +02:00
+ more sparc64 support for tsparcaddnode
git-svn-id: trunk@36476 -
This commit is contained in:
parent
5e969d90cb
commit
34f595b27e
@ -38,9 +38,8 @@ interface
|
||||
procedure second_cmpfloat;override;
|
||||
procedure second_cmpboolean;override;
|
||||
procedure second_cmpsmallset;override;
|
||||
{$ifndef SPARC64}
|
||||
procedure second_cmp64bit;override;
|
||||
{$endif SPARC64}
|
||||
procedure second_add64bit;override;
|
||||
procedure second_cmpordinal;override;
|
||||
procedure second_addordinal;override;
|
||||
public
|
||||
@ -55,10 +54,10 @@ interface
|
||||
cutils,verbose,
|
||||
paramgr,procinfo,
|
||||
aasmtai,aasmdata,aasmcpu,defutil,
|
||||
cgbase,cgcpu,cgutils,
|
||||
cpupara,cgsparc,
|
||||
cgbase,cgsparc,cgcpu,cgutils,
|
||||
cpupara,
|
||||
ncon,nset,nadd,
|
||||
hlcgobj, ncgutil,cgobj;
|
||||
hlcgobj,ncgutil,cgobj;
|
||||
|
||||
{*****************************************************************************
|
||||
TSparcAddNode
|
||||
@ -308,8 +307,23 @@ interface
|
||||
end;
|
||||
end;
|
||||
|
||||
{$ifndef SPARC64}
|
||||
|
||||
procedure tsparcaddnode.second_add64bit;
|
||||
begin
|
||||
{$ifdef SPARC64}
|
||||
second_addordinal;
|
||||
{$else SPARC64}
|
||||
inherited second_add64bit;
|
||||
{$endif SPARC64}
|
||||
end;
|
||||
|
||||
|
||||
procedure tsparcaddnode.second_cmp64bit;
|
||||
{$ifdef SPARC64}
|
||||
begin
|
||||
second_cmpordinal;
|
||||
end;
|
||||
{$else SPARC64}
|
||||
var
|
||||
unsigned : boolean;
|
||||
hreg1,hreg2: tregister;
|
||||
@ -438,7 +452,6 @@ interface
|
||||
location.resflags:=getresflags(unsigned);
|
||||
end;
|
||||
|
||||
|
||||
const
|
||||
multops: array[boolean] of TAsmOp = (A_SMUL, A_UMUL);
|
||||
|
||||
@ -446,7 +459,6 @@ interface
|
||||
var
|
||||
unsigned: boolean;
|
||||
begin
|
||||
{$ifndef SPARC64}
|
||||
unsigned:=not(is_signed(left.resultdef)) or
|
||||
not(is_signed(right.resultdef));
|
||||
|
||||
@ -455,13 +467,17 @@ interface
|
||||
pass_left_right;
|
||||
force_reg_left_right(true,false);
|
||||
location_reset(location,LOC_REGISTER,def_cgsize(resultdef));
|
||||
{$ifdef SPARC64}
|
||||
location.register:=cg.getintregister(current_asmdata.CurrAsmList,location.size);
|
||||
current_asmdata.CurrAsmList.Concat(taicpu.op_reg_reg_reg(multops[unsigned],left.location.register,right.location.register,location.register));
|
||||
{$else SPARC64}
|
||||
location.register64.reglo:=cg.getintregister(current_asmdata.CurrAsmList,OS_INT);
|
||||
location.register64.reghi:=cg.getintregister(current_asmdata.CurrAsmList,OS_INT);
|
||||
current_asmdata.CurrAsmList.Concat(taicpu.op_reg_reg_reg(multops[unsigned],left.location.register,right.location.register,location.register64.reglo));
|
||||
current_asmdata.CurrAsmList.Concat(taicpu.op_reg_reg(A_MOV,NR_Y,location.register64.reghi));
|
||||
{$endif SPARC64}
|
||||
end
|
||||
else
|
||||
{$endif SPARC64}
|
||||
inherited second_addordinal;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user