mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-02 11:09:33 +01:00
- many emitXXX removed from cga.pas in order to remove that file.
This commit is contained in:
parent
5c55264be0
commit
33b405859b
@ -23,22 +23,9 @@ interface
|
||||
uses
|
||||
cpuinfo,cpubase,cginfo,
|
||||
symconst,symtype,symdef,aasmbase,aasmtai,aasmcpu;
|
||||
{$define TESTGETTEMP to store const that are written into temps for later release PM }
|
||||
function def_opsize(p1:tdef):topsize;
|
||||
function def_getreg(p1:tdef):tregister;
|
||||
procedure emitjmp(c:tasmcond;var l:tasmlabel);
|
||||
procedure emit_none(i:tasmop;s:topsize);
|
||||
procedure emit_const(i:tasmop;s:topsize;c:longint);
|
||||
procedure emit_reg(i:tasmop;s:topsize;reg:tregister);
|
||||
procedure emit_ref(i:tasmop;s:topsize;const ref:treference);
|
||||
procedure emit_const_reg(i:tasmop;s:topsize;c:longint;reg:tregister);
|
||||
procedure emit_const_ref(i:tasmop;s:topsize;c:longint;const ref:treference);
|
||||
procedure emit_ref_reg(i:tasmop;s:topsize;const ref:treference;reg:tregister);
|
||||
procedure emit_reg_ref(i:tasmop;s:topsize;reg:tregister;const ref:treference);
|
||||
procedure emit_reg_reg(i:tasmop;s:topsize;reg1,reg2:tregister);
|
||||
procedure emit_const_reg_reg(i:tasmop;s:topsize;c:longint;reg1,reg2:tregister);
|
||||
procedure emit_reg_reg_reg(i:tasmop;s:topsize;reg1,reg2,reg3:tregister);
|
||||
procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
|
||||
implementation
|
||||
uses
|
||||
cutils,
|
||||
@ -81,61 +68,13 @@ procedure emitjmp(c:tasmcond;var l:tasmlabel);
|
||||
ai.is_jmp:=true;
|
||||
exprasmList.concat(ai);
|
||||
end;
|
||||
procedure emit_none(i:tasmop;s:topsize);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_none(i));
|
||||
end;
|
||||
procedure emit_reg(i:tasmop;s:topsize;reg:tregister);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_reg(i,reg));
|
||||
end;
|
||||
procedure emit_ref(i:tasmop;s:topsize;const ref:treference);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_ref(i,ref));
|
||||
end;
|
||||
procedure emit_const(i:tasmop;s:topsize;c:longint);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_const(i,aword(c)));
|
||||
end;
|
||||
procedure emit_const_reg(i:tasmop;s:topsize;c:longint;reg:tregister);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_const_reg(i,aword(c),reg));
|
||||
end;
|
||||
procedure emit_const_ref(i:tasmop;s:topsize;c:longint;const ref:treference);
|
||||
begin
|
||||
//exprasmList.concat(Taicpu.Op_const_ref(i,s,aword(c),ref));
|
||||
InternalError(2002102102);
|
||||
end;
|
||||
procedure emit_ref_reg(i:tasmop;s:topsize;const ref:treference;reg:tregister);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_ref_reg(i,ref,reg));
|
||||
end;
|
||||
procedure emit_reg_ref(i:tasmop;s:topsize;reg:tregister;const ref:treference);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_reg_ref(i,reg,ref));
|
||||
end;
|
||||
procedure emit_reg_reg(i:tasmop;s:topsize;reg1,reg2:tregister);
|
||||
begin
|
||||
if reg1<>reg2
|
||||
then
|
||||
exprasmList.concat(Taicpu.Op_reg_reg(i,reg1,reg2));
|
||||
end;
|
||||
procedure emit_const_reg_reg(i:tasmop;s:topsize;c:longint;reg1,reg2:tregister);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_reg_const_reg(i,reg1,c,reg2));
|
||||
end;
|
||||
procedure emit_reg_reg_reg(i:tasmop;s:topsize;reg1,reg2,reg3:tregister);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_reg_reg_reg(i,reg1,reg2,reg3));
|
||||
end;
|
||||
procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_sym(i,s,op));
|
||||
end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.5 2002-11-10 19:07:46 mazen
|
||||
Revision 1.6 2002-12-25 20:59:49 mazen
|
||||
- many emitXXX removed from cga.pas in order to remove that file.
|
||||
|
||||
Revision 1.5 2002/11/10 19:07:46 mazen
|
||||
* SPARC calling mechanism almost OK (as in GCC./mppcsparc )
|
||||
|
||||
Revision 1.4 2002/11/06 11:31:24 mazen
|
||||
|
||||
@ -108,20 +108,20 @@ USES
|
||||
rgobj,tgobj,rgcpu,cpupi;
|
||||
{ we implement the following routines because otherwise we can't }
|
||||
{ instantiate the class since it's abstract }
|
||||
procedure tcgSPARC.a_param_reg(list:TAasmOutput;size:tcgsize;r:tregister;CONST LocPara:TParaLocation);
|
||||
BEGIN
|
||||
IF(Size<>OS_32)AND(Size<>OS_S32)
|
||||
THEN
|
||||
procedure tcgSPARC.a_param_reg(list:TAasmOutput;size:tcgsize;r:tregister;const LocPara:TParaLocation);
|
||||
begin
|
||||
if(Size<>OS_32)and(Size<>OS_S32)
|
||||
then
|
||||
InternalError(2002032212);
|
||||
with list,LocPara do
|
||||
case Loc of
|
||||
LOC_REGISTER:
|
||||
if r<>Register
|
||||
then
|
||||
Concat(taicpu.op_Reg_Reg_Reg(A_OR,r,R_G0,Register));
|
||||
else
|
||||
InternalError(2002101002);
|
||||
end;
|
||||
with list,LocPara do
|
||||
case Loc of
|
||||
LOC_REGISTER:
|
||||
if r<>Register
|
||||
then
|
||||
Concat(taicpu.op_Reg_Reg_Reg(A_OR,r,R_G0,Register));
|
||||
else
|
||||
InternalError(2002101002);
|
||||
end;
|
||||
end;
|
||||
procedure tcgSPARC.a_param_const(list:TAasmOutput;size:tcgsize;a:aword;CONST LocPara:TParaLocation);
|
||||
var
|
||||
@ -1334,7 +1334,10 @@ BEGIN
|
||||
END.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.28 2002-12-22 19:26:31 mazen
|
||||
Revision 1.29 2002-12-25 20:59:49 mazen
|
||||
- many emitXXX removed from cga.pas in order to remove that file.
|
||||
|
||||
Revision 1.28 2002/12/22 19:26:31 mazen
|
||||
* many internal errors related to unimplemented nodes are fixed
|
||||
|
||||
Revision 1.27 2002/12/21 23:21:47 mazen
|
||||
|
||||
@ -291,7 +291,7 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
|
||||
begin
|
||||
if extra_not
|
||||
then
|
||||
emit_reg(A_NOT,S_L,left.location.register);
|
||||
exprasmList.concat(Taicpu.Op_reg(A_NOT,left.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);
|
||||
@ -301,7 +301,7 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
|
||||
begin
|
||||
if extra_not
|
||||
then
|
||||
emit_reg(A_NOT,S_L,right.location.register);
|
||||
exprasmList.concat(Taicpu.Op_reg(A_NOT,right.location.register));
|
||||
// emit_reg_reg(op,opsize,right.location.register,left.location.register);
|
||||
exprasmList.concat(Taicpu.Op_reg_reg_reg(Op,right.location.register,left.location.register,right.location.register));
|
||||
end;
|
||||
@ -314,7 +314,7 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
|
||||
begin
|
||||
IF extra_not
|
||||
THEN
|
||||
emit_reg(A_NOT,opsize,left.location.register);
|
||||
exprasmList.concat(Taicpu.Op_reg(A_NOT,left.location.register));
|
||||
// rg.getexplicitregisterint(exprasmlist,R_EDI);
|
||||
// cg.a_load_loc_reg(exprasmlist,right.location,R_EDI);
|
||||
// emit_reg_reg(op,opsize,left.location.register,R_EDI);
|
||||
@ -338,12 +338,12 @@ procedure TSparcAddNode.emit_generic_code(op:TAsmOp;OpSize:TOpSize;unsigned,extr
|
||||
ELSE IF(op=A_SUB)AND(right.location.loc=LOC_CONSTANT)AND(right.location.value=1)AND NOT(cs_check_overflow in aktlocalswitches)
|
||||
THEN
|
||||
begin
|
||||
emit_reg(A_DEC,opsize,left.location.register);
|
||||
exprasmList.concat(Taicpu.Op_reg(A_DEC,left.location.register));
|
||||
end
|
||||
ELSE IF(op=A_SMUL)AND(right.location.loc=LOC_CONSTANT)AND(ispowerof2(right.location.value,power))AND NOT(cs_check_overflow in aktlocalswitches)
|
||||
THEN
|
||||
begin
|
||||
emit_const_reg(A_SLL,opsize,power,left.location.register);
|
||||
exprasmList.concat(Taicpu.Op_const_reg(A_SLL,power,left.location.register));
|
||||
end
|
||||
ELSE
|
||||
begin
|
||||
@ -558,7 +558,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2002-12-22 19:26:32 mazen
|
||||
Revision 1.3 2002-12-25 20:59:49 mazen
|
||||
- many emitXXX removed from cga.pas in order to remove that file.
|
||||
|
||||
Revision 1.2 2002/12/22 19:26:32 mazen
|
||||
* many internal errors related to unimplemented nodes are fixed
|
||||
|
||||
Revision 1.1 2002/12/21 23:21:47 mazen
|
||||
|
||||
Loading…
Reference in New Issue
Block a user