mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-16 02:30:41 +01:00
* op_reg_reg_reg don't need any more a TOpSize parameter
This commit is contained in:
parent
fa934bd43f
commit
928e3c583b
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user