* adding unequaln node support to sparc compiler

This commit is contained in:
mazen 2003-01-07 22:03:40 +00:00
parent 250db0c29a
commit c20be82919
2 changed files with 24 additions and 14 deletions

View File

@ -887,12 +887,12 @@ procedure TCgSparc.g_flags2reg(list:TAasmOutput;Size:TCgSize;CONST f:tresflags;r
hreg:tregister;
BEGIN
hreg := rg.makeregsize(reg,OS_8);
// ai:=Taicpu.Op_reg(A_Setcc,S_B,hreg);
ai:=Taicpu.Op_reg_reg(A_RDPSR,R_PSR,hreg);
ai.SetCondition(flags_to_cond(f));
list.concat(ai);
IF hreg<>reg
THEN
a_load_reg_reg(list,OS_8,OS_8,hreg,reg);
a_load_reg_reg(list,OS_32,OS_32,hreg,reg);
END;
procedure TCgSparc.g_overflowCheck(List:TAasmOutput;const p:TNode);
var
@ -1377,7 +1377,10 @@ BEGIN
END.
{
$Log$
Revision 1.32 2003-01-06 22:51:47 mazen
Revision 1.33 2003-01-07 22:03:40 mazen
* adding unequaln node support to sparc compiler
Revision 1.32 2003/01/06 22:51:47 mazen
* fixing bugs related to load_reg_ref
Revision 1.31 2003/01/05 21:32:35 mazen

View File

@ -462,19 +462,23 @@ procedures }
{defaults}
extra_not:=false;
mboverflow:=false;
cmpop:=false;
cmpop:=nodetype in [ltn,lten,gtn,gten,equaln,unequaln];
unsigned:=not(is_signed(left.resulttype.def))or
not(is_signed(right.resulttype.def));
opsize:=def_opsize(left.resulttype.def);
pass_left_and_right;
if(left.resulttype.def.deftype=pointerdef)or
(right.resulttype.def.deftype=pointerdef)or
(is_class_or_interface(right.resulttype.def)and is_class_or_interface(left.resulttype.def)) or
(left.resulttype.def.deftype=classrefdef) or
(left.resulttype.def.deftype=procvardef) or
((left.resulttype.def.deftype=enumdef)and(left.resulttype.def.size=4))or
((left.resulttype.def.deftype=orddef)and(torddef(left.resulttype.def).typ in [s32bit,u32bit]))or
((right.resulttype.def.deftype=orddef)and(torddef(right.resulttype.def).typ in [s32bit,u32bit]))
{ set result location }
if not cmpop
then
location_reset(location,LOC_REGISTER,def_cgsize(resulttype.def))
else
location_reset(location,LOC_FLAGS,OS_NO);
//load_left_right(cmpop, (cs_check_overflow in aktlocalswitches) and
//(nodetype in [addn,subn,muln]));
if(location.register = R_NO)and not(cmpop)
then
location.register := rg.getregisterint(exprasmlist);
if not(cs_check_overflow in aktlocalswitches)or cmpop or (nodetype in [orn,andn,xorn])
then
begin
case NodeType of
@ -530,8 +534,8 @@ procedures }
location_freetemp(exprasmlist,left.location);
location_release(exprasmlist,left.location);
end;
set_result_location(cmpop,unsigned);
end;
//clear_left_right(cmpop);
end;
procedure TSparcAddNode.pass_left_and_right;
var
@ -569,7 +573,10 @@ begin
end.
{
$Log$
Revision 1.4 2002-12-30 21:17:22 mazen
Revision 1.5 2003-01-07 22:03:40 mazen
* adding unequaln node support to sparc compiler
Revision 1.4 2002/12/30 21:17:22 mazen
- unit cga no more used in sparc compiler.
Revision 1.3 2002/12/25 20:59:49 mazen