* op_reg_reg_reg don't need any more a TOpSize parameter

This commit is contained in:
mazen 2002-11-06 11:31:24 +00:00
parent fa934bd43f
commit 928e3c583b
5 changed files with 40 additions and 29 deletions

View File

@ -52,7 +52,7 @@ type
constructor op_ref_reg(op:tasmop;const _op1:treference;_op2:tregister);
{ this is only allowed if _op1 is an int value (_op1^.isintvalue=true) }
constructor op_ref_ref(op:tasmop;_size:topsize;const _op1,_op2:treference);
constructor op_reg_reg_reg(op:tasmop;_size:topsize;_op1,_op2,_op3:tregister);
constructor op_reg_reg_reg(op:tasmop;_op1,_op2,_op3:tregister);
constructor op_reg_const_reg(op:tasmop;_size:topsize;_op1:TRegister;_op2:aWord;_op3:tregister);
constructor op_reg_ref_reg(op:tasmop;_size:topsize;_op1:tregister;const _op2:treference;_op3:TRegister);
constructor op_const_ref_reg(op:tasmop;_size:topsize;_op1:aword;const _op2:treference;_op3:tregister);
@ -232,7 +232,7 @@ constructor taicpu.op_ref_ref(op:tasmop;_size:topsize;const _op1,_op2:treference
loadref(0,_op1);
loadref(1,_op2);
end;
constructor taicpu.op_reg_reg_reg(op:tasmop;_size:topsize;_op1,_op2,_op3:tregister);
constructor taicpu.op_reg_reg_reg(op:tasmop;_op1,_op2,_op3:tregister);
begin
inherited create(op);
init(_size);
@ -1138,7 +1138,10 @@ procedure InitAsm;
end.
{
$Log$
Revision 1.10 2002-11-05 16:15:00 mazen
Revision 1.11 2002-11-06 11:31:24 mazen
* op_reg_reg_reg don't need any more a TOpSize parameter
Revision 1.10 2002/11/05 16:15:00 mazen
*** empty log message ***
Revision 1.9 2002/10/28 20:59:17 mazen

View File

@ -126,7 +126,7 @@ procedure emit_const_reg_reg(i:tasmop;s:topsize;c:longint;reg1,reg2:tregister);
end;
procedure emit_reg_reg_reg(i:tasmop;s:topsize;reg1,reg2,reg3:tregister);
begin
exprasmList.concat(Taicpu.Op_reg_reg_reg(i,S_L,reg1,reg2,reg3));
exprasmList.concat(Taicpu.Op_reg_reg_reg(i,reg1,reg2,reg3));
end;
procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
begin
@ -135,7 +135,10 @@ procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
end.
{
$Log$
Revision 1.3 2002-10-22 13:43:01 mazen
Revision 1.4 2002-11-06 11:31:24 mazen
* op_reg_reg_reg don't need any more a TOpSize parameter
Revision 1.3 2002/10/22 13:43:01 mazen
- cga.pas redueced to an empty unit
Revision 1.2 2002/10/13 19:47:34 mazen

View File

@ -113,7 +113,7 @@ procedure tcgSPARC.a_param_reg(list:TAasmOutput;size:tcgsize;r:tregister;CONST L
LOC_REGISTER:
if r<>Register
then
Concat(taicpu.op_Reg_Reg_Reg(A_OR,S_SW,r,R_G0,Register));
Concat(taicpu.op_Reg_Reg_Reg(A_OR,r,R_G0,Register));
else
InternalError(2002101002);
end;
@ -214,7 +214,7 @@ procedure tcgSPARC.a_load_const_reg(list:TAasmOutput;size:TCGSize;a:aword;reg:TR
THEN{R_G0 is usually set to zero, so we use it}
Concat(taicpu.op_reg_const_reg(A_OR,TCGSize2OpSize[size],R_G0,a,reg))
ELSE{The is no A_MOV in sparc, that's why we use A_OR with help of R_G0}
Concat(taicpu.op_reg_reg_reg(A_OR,TCGSize2OpSize[size],R_G0,R_G0,reg));
Concat(taicpu.op_reg_reg_reg(A_OR,R_G0,R_G0,reg));
END;
procedure tcgSPARC.a_load_const_ref(list:TAasmOutput;size:tcgsize;a:aword;CONST ref:TReference);
BEGIN
@ -269,7 +269,7 @@ procedure tcgSPARC.a_load_reg_reg(list:TAasmOutput;fromsize,tosize:tcgsize;reg1,
OS_S16:
InternalError(2002100803);{concat(taicpu.op_reg_reg(A_EXTSH,reg2,reg1));}
OS_32,OS_S32:
concat(taicpu.op_reg_reg_reg(A_OR,S_SW,R_G0,reg1,reg2));
concat(taicpu.op_reg_reg_reg(A_OR,R_G0,reg1,reg2));
else internalerror(2002090901);
end;
end;
@ -707,7 +707,7 @@ procedure tcgSPARC.a_op_const_reg(list:TAasmOutput;Op:TOpCG;a:AWord;reg:TRegiste
{ can't do anything special for these }
inherited a_op_reg_reg_reg(list,op,size,src1,src2,dst);
OP_IMUL:
list.concat(taicpu.op_reg_reg_reg(A_SMUL,S_SW,src1,src2,dst));
list.concat(taicpu.op_reg_reg_reg(A_SMUL,src1,src2,dst));
OP_ADD:
begin
reference_reset(tmpref);
@ -1254,7 +1254,10 @@ BEGIN
END.
{
$Log$
Revision 1.21 2002-11-05 16:15:00 mazen
Revision 1.22 2002-11-06 11:31:24 mazen
* op_reg_reg_reg don't need any more a TOpSize parameter
Revision 1.21 2002/11/05 16:15:00 mazen
*** empty log message ***
Revision 1.20 2002/11/03 20:22:40 mazen

View File

@ -31,7 +31,7 @@ TYPE
FUNCTION GetResFlags(unsigned:Boolean):TResFlags;
procedure left_must_be_reg(OpSize:TOpSize;NoSwap:Boolean);
procedure emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extra_not,mboverflow:Boolean);
procedure emit_op_right_left(op:TAsmOp;OpSize:TOpsize);
procedure emit_op_right_left(op:TAsmOp);
procedure pass_left_and_right;
procedure set_result_location(cmpOp,unsigned:Boolean);
end;
@ -142,8 +142,7 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
if extra_not
then
emit_reg(A_NOT,S_L,left.location.register);
// emit_reg_reg(op,opsize,left.location.register,right.location.register);
exprasmList.concat(Taicpu.Op_reg_reg_reg(Op,S_L,right.location.register,left.location.register,right.location.register));
exprasmList.concat(Taicpu.Op_reg_reg_reg(Op,right.location.register,left.location.register,right.location.register));
{ newly swapped also set swapped flag }
location_swap(left.location,right.location);
toggleflag(nf_swaped);
@ -154,7 +153,7 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
then
emit_reg(A_NOT,S_L,right.location.register);
// emit_reg_reg(op,opsize,right.location.register,left.location.register);
exprasmList.concat(Taicpu.Op_reg_reg_reg(Op,S_L,right.location.register,left.location.register,right.location.register));
exprasmList.concat(Taicpu.Op_reg_reg_reg(Op,right.location.register,left.location.register,right.location.register));
end;
end
ELSE
@ -208,7 +207,7 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
end
ELSE
begin
emit_op_right_left(op,opsize);
emit_op_right_left(op);
end;
end;
end;
@ -234,13 +233,13 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
end;
end;
end;
procedure TSparcAddNode.emit_op_right_left(op:TAsmOp;OpSize:TOpsize);
procedure TSparcAddNode.emit_op_right_left(op:TAsmOp);
begin
{left must be a register}
with exprasmlist do
case right.location.loc of
LOC_REGISTER,LOC_CREGISTER:
concat(taicpu.op_reg_reg_reg(op,S_W,right.location.register,left.location.register,left.location.register));
concat(taicpu.op_reg_reg_reg(op,right.location.register,left.location.register,left.location.register));
LOC_REFERENCE,LOC_CREFERENCE :
concat(taicpu.op_reg_ref_reg(op,S_W,left.location.register,right.location.reference,left.location.register));
LOC_CONSTANT:
@ -262,17 +261,14 @@ procedure TSparcAddNode.set_result_location(cmpOp,unsigned:Boolean);
end;
procedure TSparcAddNode.pass_2;
{is also being used for "xor", and "mul", "sub", or and comparative operators}
VAR
var
popeax,popedx,pushedfpu,mboverflow,cmpop:Boolean;
op:TAsmOp;
power:LongInt;
OpSize:TOpSize;
unsigned:Boolean;{true, if unsigned types are compared}
{ is_in_dest if the result is put directly into }
{ the resulting refernce or varregister }
{is_in_dest : boolean;}
{ true, if for sets subtractions the extra not should generated }
extra_not:Boolean;
cgop:TOpCg;
begin
{to make it more readable, string and set (not smallset!) have their own
procedures }
@ -318,7 +314,8 @@ procedures }
extra_not:=false;
mboverflow:=false;
cmpop:=false;
unsigned:=not(is_signed(left.resulttype.def))or not(is_signed(right.resulttype.def));
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
@ -461,7 +458,7 @@ procedures }
location_release(exprasmlist,left.location);
end;
set_result_location(cmpop,unsigned);
end
end;
{ 8/16 bit enum,char,wchar types }
{ else
@ -528,7 +525,10 @@ begin
end.
{
$Log$
Revision 1.6 2002-11-05 16:15:00 mazen
Revision 1.7 2002-11-06 11:31:24 mazen
* op_reg_reg_reg don't need any more a TOpSize parameter
Revision 1.6 2002/11/05 16:15:00 mazen
*** empty log message ***
Revision 1.5 2002/10/22 13:43:01 mazen

View File

@ -267,7 +267,7 @@ implementation
tg.ungetiftemp(exprasmlist,ref);
exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,S_L,location.register,
exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,location.register,
location.register,tmpfpureg));
rg.ungetregisterfpu(exprasmlist,tmpfpureg);
@ -325,8 +325,7 @@ implementation
hreg1 := rg.getregisterint(exprasmlist);
exprasmlist.concat(taicpu.op_reg_const_reg(A_SUB,S_L,hreg1,1,
hreg2));
exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,S_L,hreg1,hreg1,
hreg2));
exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,hreg1,hreg1,hreg2));
rg.ungetregister(exprasmlist,hreg2);
end;
LOC_FLAGS :
@ -421,7 +420,10 @@ begin
end.
{
$Log$
Revision 1.5 2002-10-22 13:43:01 mazen
Revision 1.6 2002-11-06 11:31:24 mazen
* op_reg_reg_reg don't need any more a TOpSize parameter
Revision 1.5 2002/10/22 13:43:01 mazen
- cga.pas redueced to an empty unit
Revision 1.4 2002/10/10 19:57:52 mazen