mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-27 10:13:35 +02:00
- cga.pas redueced to an empty unit
This commit is contained in:
parent
db9dcd1bc3
commit
351c11d2a8
@ -40,18 +40,16 @@ type
|
||||
function getfillbuf:pchar;override;
|
||||
end;
|
||||
taicpu = class(taicpu_abstract)
|
||||
opsize:topsize;
|
||||
constructor op_none(op:tasmop;_size:topsize);
|
||||
constructor op_reg(op:tasmop;_size:topsize;_op1:tregister);
|
||||
constructor op_const(op:tasmop;_size:topsize;_op1:aword);
|
||||
constructor op_ref(op:tasmop;_size:topsize;const _op1:treference);
|
||||
constructor op_reg_reg(op:tasmop;_size:topsize;_op1,_op2:tregister);
|
||||
constructor op_reg_ref(op:tasmop;_size:topsize;_op1:tregister;const _op2:treference);
|
||||
constructor op_reg_const(op:tasmop; _size:topsize; _op1:tregister; _op2:aword);
|
||||
constructor op_const_reg(op:tasmop;_size:topsize;_op1:aword;_op2:tregister);
|
||||
constructor op_const_const(op:tasmop;_size:topsize;_op1,_op2:aword);
|
||||
constructor op_const_ref(op:tasmop;_size:topsize;_op1:aword;const _op2:treference);
|
||||
constructor op_ref_reg(op:tasmop;_size:topsize;const _op1:treference;_op2:tregister);
|
||||
opsize:topsize;
|
||||
constructor op_none(op:tasmop);
|
||||
constructor op_reg(op:tasmop;reg:tregister);
|
||||
constructor op_const(op:tasmop;_op1:aword);
|
||||
constructor op_ref(op:tasmop;const _op1:treference);
|
||||
constructor op_reg_reg(op:tasmop;_op1,_op2:tregister);
|
||||
constructor op_reg_ref(op:tasmop;_op1:tregister;const _op2:treference);
|
||||
constructor op_reg_const(op:tasmop;_op1:tregister;_op2:aword);
|
||||
constructor op_const_reg(op:tasmop;_op1:aword;_op2:tregister);
|
||||
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);
|
||||
@ -102,6 +100,8 @@ implementation
|
||||
uses
|
||||
cutils,
|
||||
CpuGas;
|
||||
const
|
||||
_size=S_L;{To be removed soon}
|
||||
{****************************************************************************
|
||||
TAI_ALIGN
|
||||
****************************************************************************}
|
||||
@ -158,33 +158,33 @@ procedure taicpu.init(_size:topsize);
|
||||
{segprefix:=R_NONE;}{This may be only for I386 architecture!}
|
||||
opsize:=_size;
|
||||
end;
|
||||
constructor taicpu.op_none(op:tasmop;_size:topsize);
|
||||
constructor taicpu.op_none(op:tasmop);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
end;
|
||||
constructor taicpu.op_reg(op:tasmop;_size:topsize;_op1:tregister);
|
||||
constructor taicpu.op_reg(op:tasmop;reg:tregister);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
ops:=1;
|
||||
loadreg(0,_op1);
|
||||
loadreg(0,reg);
|
||||
end;
|
||||
constructor taicpu.op_const(op:tasmop;_size:topsize;_op1:aword);
|
||||
constructor taicpu.op_const(op:tasmop;_op1:aword);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
ops:=1;
|
||||
loadconst(0,_op1);
|
||||
end;
|
||||
constructor taicpu.op_ref(op:tasmop;_size:topsize;const _op1:treference);
|
||||
constructor taicpu.op_ref(op:tasmop;const _op1:treference);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
ops:=1;
|
||||
loadref(0,_op1);
|
||||
end;
|
||||
constructor taicpu.op_reg_reg(op:tasmop;_size:topsize;_op1,_op2:tregister);
|
||||
constructor taicpu.op_reg_reg(op:tasmop;_op1,_op2:tregister);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
@ -192,7 +192,7 @@ constructor taicpu.op_reg_reg(op:tasmop;_size:topsize;_op1,_op2:tregister);
|
||||
loadreg(0,_op1);
|
||||
loadreg(1,_op2);
|
||||
end;
|
||||
constructor taicpu.op_reg_const(op:tasmop; _size:topsize; _op1:tregister; _op2:aword);
|
||||
constructor taicpu.op_reg_const(op:tasmop;_op1:tregister; _op2:aword);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
@ -200,7 +200,7 @@ constructor taicpu.op_reg_const(op:tasmop; _size:topsize; _op1:tregister; _op2:a
|
||||
loadreg(0,_op1);
|
||||
loadconst(1,_op2);
|
||||
end;
|
||||
constructor taicpu.op_reg_ref(op:tasmop;_size:topsize;_op1:tregister;const _op2:treference);
|
||||
constructor taicpu.op_reg_ref(op:tasmop;_op1:tregister;const _op2:treference);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
@ -208,7 +208,7 @@ constructor taicpu.op_reg_ref(op:tasmop;_size:topsize;_op1:tregister;const _op2:
|
||||
loadreg(0,_op1);
|
||||
loadref(1,_op2);
|
||||
end;
|
||||
constructor taicpu.op_const_reg(op:tasmop;_size:topsize;_op1:aword;_op2:tregister);
|
||||
constructor taicpu.op_const_reg(op:tasmop;_op1:aword;_op2:tregister);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
@ -216,26 +216,10 @@ constructor taicpu.op_const_reg(op:tasmop;_size:topsize;_op1:aword;_op2:tregiste
|
||||
loadconst(0,_op1);
|
||||
loadreg(1,_op2);
|
||||
end;
|
||||
constructor taicpu.op_const_const(op:tasmop;_size:topsize;_op1,_op2:aword);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
ops:=2;
|
||||
loadconst(0,_op1);
|
||||
loadconst(1,_op2);
|
||||
end;
|
||||
constructor taicpu.op_const_ref(op:tasmop;_size:topsize;_op1:aword;const _op2:treference);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
ops:=2;
|
||||
loadconst(0,_op1);
|
||||
loadref(1,_op2);
|
||||
end;
|
||||
constructor taicpu.op_ref_reg(op:tasmop;_size:topsize;const _op1:treference;_op2:tregister);
|
||||
constructor taicpu.op_ref_reg(op:tasmop;const _op1:treference;_op2:tregister);
|
||||
begin
|
||||
inherited create(op);
|
||||
init(_size);
|
||||
init(S_L);
|
||||
ops:=2;
|
||||
loadref(0,_op1);
|
||||
loadreg(1,_op2);
|
||||
@ -1154,7 +1138,10 @@ procedure InitAsm;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.7 2002-10-20 19:01:38 mazen
|
||||
Revision 1.8 2002-10-22 13:43:01 mazen
|
||||
- cga.pas redueced to an empty unit
|
||||
|
||||
Revision 1.7 2002/10/20 19:01:38 mazen
|
||||
+ op_raddr_reg and op_caddr_reg added to fix functions prologue
|
||||
|
||||
Revision 1.6 2002/10/19 20:35:07 mazen
|
||||
|
@ -83,49 +83,50 @@ procedure emitjmp(c:tasmcond;var l:tasmlabel);
|
||||
end;
|
||||
procedure emit_none(i:tasmop;s:topsize);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_none(i,s));
|
||||
exprasmList.concat(Taicpu.Op_none(i));
|
||||
end;
|
||||
procedure emit_reg(i:tasmop;s:topsize;reg:tregister);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_reg(i,s,reg));
|
||||
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,s,ref));
|
||||
exprasmList.concat(Taicpu.Op_ref(i,ref));
|
||||
end;
|
||||
procedure emit_const(i:tasmop;s:topsize;c:longint);
|
||||
begin
|
||||
exprasmList.concat(Taicpu.Op_const(i,s,aword(c)));
|
||||
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,s,aword(c),reg));
|
||||
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));
|
||||
//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,s,ref,reg));
|
||||
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,s,reg,ref));
|
||||
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,s,reg1,reg2));
|
||||
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,s,reg1,c,reg2));
|
||||
exprasmList.concat(Taicpu.Op_reg_const_reg(i,S_L,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,s,reg1,reg2,reg3));
|
||||
exprasmList.concat(Taicpu.Op_reg_reg_reg(i,S_L,reg1,reg2,reg3));
|
||||
end;
|
||||
procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
|
||||
begin
|
||||
@ -134,7 +135,10 @@ procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2002-10-13 19:47:34 mazen
|
||||
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
|
||||
- logs removed
|
||||
|
||||
Revision 1.1 2002/08/22 08:30:50 mazen
|
||||
|
@ -128,10 +128,15 @@ procedure tcgSPARC.a_param_reg(list:TAasmOutput;size:tcgsize;r:tregister;CONST L
|
||||
end;
|
||||
procedure tcgSPARC.a_param_const(list:TAasmOutput;size:tcgsize;a:aword;CONST LocPara:TParaLocation);
|
||||
BEGIN
|
||||
IF(Size<>OS_32)AND(Size<>OS_S32)
|
||||
THEN
|
||||
InternalError(2002032213);
|
||||
List.Concat(taicpu.op_const(A_LD,S_L,a));
|
||||
with List do
|
||||
case Size of
|
||||
OS_32,OS_S32:
|
||||
Concat(taicpu.op_const(A_LD,a));
|
||||
OS_64,OS_S64:
|
||||
Concat(taicpu.op_const(A_LDD,a));
|
||||
else
|
||||
InternalError(2002032213);
|
||||
end;
|
||||
END;
|
||||
procedure tcgSPARC.a_param_ref(list:TAasmOutput;size:tcgsize;const r:TReference;const LocPara:TParaLocation);
|
||||
var
|
||||
@ -183,16 +188,16 @@ procedure tcgSPARC.a_paramaddr_ref(list:TAasmOutput;CONST r:TReference;CONST Loc
|
||||
ELSE IF(r.base=R_NO)AND(r.index<>R_NO)AND
|
||||
(r.offset=0)AND(r.scalefactor=0)AND(r.symbol=nil)
|
||||
THEN
|
||||
list.concat(Taicpu.Op_reg(A_LD,S_L,r.index))
|
||||
list.concat(Taicpu.Op_reg(A_LD,r.index))
|
||||
ELSE IF(r.base<>R_NO)AND(r.index=R_NO)AND
|
||||
(r.offset=0)AND(r.symbol=nil)
|
||||
THEN
|
||||
list.concat(Taicpu.Op_reg(A_LD,S_L,r.base))
|
||||
list.concat(Taicpu.Op_reg(A_LD,r.base))
|
||||
ELSE
|
||||
BEGIN
|
||||
tmpreg:=get_scratch_reg_address(list);
|
||||
a_loadaddr_ref_reg(list,r,tmpreg);
|
||||
list.concat(taicpu.op_reg(A_LD,S_L,tmpreg));
|
||||
list.concat(taicpu.op_reg(A_LD,tmpreg));
|
||||
free_scratch_reg(list,tmpreg);
|
||||
END;
|
||||
END;
|
||||
@ -200,14 +205,14 @@ procedure tcgSPARC.a_call_name(list:TAasmOutput;CONST s:string);
|
||||
BEGIN
|
||||
WITH List,objectlibrary DO
|
||||
BEGIN
|
||||
concat(taicpu.op_sym(A_CALL,S_NO,newasmsymbol(s)));
|
||||
concat(taicpu.op_none(A_NOP,S_NO));
|
||||
concat(taicpu.op_sym(A_CALL,S_L,newasmsymbol(s)));
|
||||
concat(taicpu.op_none(A_NOP));
|
||||
END;
|
||||
END;
|
||||
procedure tcgSPARC.a_call_ref(list:TAasmOutput;CONST ref:TReference);
|
||||
BEGIN
|
||||
list.concat(taicpu.op_ref(A_CALL,S_NO,ref));
|
||||
list.concat(taicpu.op_none(A_NOP,S_NO));
|
||||
list.concat(taicpu.op_ref(A_CALL,ref));
|
||||
list.concat(taicpu.op_none(A_NOP));
|
||||
END;
|
||||
{********************** load instructions ********************}
|
||||
procedure tcgSPARC.a_load_const_reg(list:TAasmOutput;size:TCGSize;a:aword;reg:TRegister);
|
||||
@ -224,16 +229,23 @@ procedure tcgSPARC.a_load_const_ref(list:TAasmOutput;size:tcgsize;a:aword;CONST
|
||||
WITH List DO
|
||||
IF a=0
|
||||
THEN
|
||||
Concat(taicpu.op_reg_ref(A_ST,TCGSize2OpSize[size],R_G0,ref))
|
||||
Concat(taicpu.op_reg_ref(A_ST,R_G0,ref))
|
||||
ELSE
|
||||
BEGIN
|
||||
a_load_const_reg(list,size,a,R_G1);
|
||||
list.concat(taicpu.op_reg_ref(A_ST,TCGSize2OpSize[size],R_G1,ref));
|
||||
case size of
|
||||
OS_32,OS_S32:
|
||||
Concat(taicpu.op_reg_ref(A_ST,R_G1,ref));
|
||||
OS_64,OS_S64:
|
||||
Concat(taicpu.op_reg_ref(A_STD,R_G1,ref));
|
||||
else
|
||||
InternalError(2002102100);
|
||||
end;
|
||||
END;
|
||||
END;
|
||||
procedure tcgSPARC.a_load_reg_ref(list:TAasmOutput;size:TCGSize;reg:tregister;CONST ref:TReference);
|
||||
BEGIN
|
||||
list.concat(taicpu.op_reg_ref(A_LD,TCGSize2OpSize[size],reg,ref));
|
||||
list.concat(taicpu.op_reg_ref(A_LD,reg,ref));
|
||||
END;
|
||||
procedure tcgSPARC.a_load_ref_reg(list:TAasmOutput;size:tcgsize;const ref:TReference;reg:tregister);
|
||||
var
|
||||
@ -241,7 +253,7 @@ procedure tcgSPARC.a_load_ref_reg(list:TAasmOutput;size:tcgsize;const ref:TRefer
|
||||
s:topsize;
|
||||
begin
|
||||
sizes2load(size,S_L,op,s);
|
||||
list.concat(taicpu.op_ref_reg(op,s,ref,reg));
|
||||
list.concat(taicpu.op_ref_reg(op,ref,reg));
|
||||
end;
|
||||
procedure tcgSPARC.a_load_reg_reg(list:TAasmOutput;fromsize,tosize:tcgsize;reg1,reg2:tregister);
|
||||
var
|
||||
@ -676,7 +688,7 @@ procedure tcgSPARC.a_op_const_reg(list:TAasmOutput;Op:TOpCG;a:AWord;reg:TRegiste
|
||||
tmpref.offset := LongInt(a);
|
||||
if op = OP_SUB then
|
||||
tmpref.offset := -tmpref.offset;
|
||||
list.concat(taicpu.op_ref_reg(A_NONE,S_L,tmpref,dst));
|
||||
list.concat(taicpu.op_ref_reg(A_NONE,tmpref,dst));
|
||||
end
|
||||
else internalerror(200112302);
|
||||
end;
|
||||
@ -710,7 +722,7 @@ procedure tcgSPARC.a_op_const_reg(list:TAasmOutput;Op:TOpCG;a:AWord;reg:TRegiste
|
||||
tmpref.base := src1;
|
||||
tmpref.index := src2;
|
||||
tmpref.scalefactor := 1;
|
||||
list.concat(taicpu.op_ref_reg(A_NONE,S_L,tmpref,dst));
|
||||
list.concat(taicpu.op_ref_reg(A_NONE,tmpref,dst));
|
||||
end
|
||||
else internalerror(200112303);
|
||||
end;
|
||||
@ -723,19 +735,21 @@ procedure tcgSPARC.a_op_const_reg(list:TAasmOutput;Op:TOpCG;a:AWord;reg:TRegiste
|
||||
|
||||
begin
|
||||
if (a = 0) then
|
||||
list.concat(taicpu.op_reg_reg(A_CMP,S_L,reg,reg))
|
||||
list.concat(taicpu.op_reg_reg(A_CMP,reg,reg))
|
||||
else
|
||||
list.concat(taicpu.op_const_reg(A_CMP,S_L,a,reg));
|
||||
list.concat(taicpu.op_const_reg(A_CMP,a,reg));
|
||||
a_jmp_cond(list,cmp_op,l);
|
||||
end;
|
||||
|
||||
procedure tcgSPARC.a_cmp_const_ref_label(list:TAasmOutput;size:tcgsize;cmp_op:topcmp;a:aword;CONST ref:TReference;
|
||||
l:tasmlabel);
|
||||
|
||||
begin
|
||||
list.concat(taicpu.op_const_ref(A_CMP,TCgSize2OpSize[size],a,ref));
|
||||
a_jmp_cond(list,cmp_op,l);
|
||||
end;
|
||||
procedure tcgSPARC.a_cmp_const_ref_label(list:TAasmOutput;size:tcgsize;cmp_op:topcmp;a:aword;const ref:TReference;l:tasmlabel);
|
||||
begin
|
||||
with List do
|
||||
begin
|
||||
Concat(taicpu.op_const(A_LD,a));
|
||||
Concat(taicpu.op_ref(A_CMP,ref));
|
||||
end;
|
||||
a_jmp_cond(list,cmp_op,l);
|
||||
end;
|
||||
|
||||
procedure tcgSPARC.a_cmp_reg_reg_label(list:TAasmOutput;size:tcgsize;cmp_op:topcmp;
|
||||
reg1,reg2:tregister;l:tasmlabel);
|
||||
@ -754,7 +768,7 @@ procedure tcgSPARC.a_op_const_reg(list:TAasmOutput;Op:TOpCG;a:AWord;reg:TRegiste
|
||||
|
||||
begin
|
||||
opsize := S_Q{makeregsize(reg,size)};
|
||||
list.concat(taicpu.op_ref_reg(A_CMP,opsize,ref,reg));
|
||||
list.concat(taicpu.op_ref_reg(A_CMP,ref,reg));
|
||||
a_jmp_cond(list,cmp_op,l);
|
||||
end;
|
||||
|
||||
@ -902,10 +916,10 @@ procedure tcgSPARC.a_loadaddr_ref_reg(list:TAasmOutput;CONST ref:TReference;r:tr
|
||||
tempref:TReference;
|
||||
begin
|
||||
get_64bit_ops(op,op1,op2);
|
||||
list.concat(taicpu.op_ref_reg(op1,S_L,ref,reg.reglo));
|
||||
list.concat(taicpu.op_ref_reg(op1,ref,reg.reglo));
|
||||
tempref:=ref;
|
||||
inc(tempref.offset,4);
|
||||
list.concat(taicpu.op_ref_reg(op2,S_L,tempref,reg.reghi));
|
||||
list.concat(taicpu.op_ref_reg(op2,tempref,reg.reghi));
|
||||
end;
|
||||
|
||||
|
||||
@ -914,8 +928,8 @@ procedure tcgSPARC.a_loadaddr_ref_reg(list:TAasmOutput;CONST ref:TReference;r:tr
|
||||
op1,op2:TAsmOp;
|
||||
begin
|
||||
get_64bit_ops(op,op1,op2);
|
||||
list.concat(taicpu.op_reg_reg(op1,S_L,regsrc.reglo,regdst.reglo));
|
||||
list.concat(taicpu.op_reg_reg(op2,S_L,regsrc.reghi,regdst.reghi));
|
||||
list.concat(taicpu.op_reg_reg(op1,regsrc.reglo,regdst.reglo));
|
||||
list.concat(taicpu.op_reg_reg(op2,regsrc.reghi,regdst.reghi));
|
||||
end;
|
||||
|
||||
|
||||
@ -934,8 +948,8 @@ procedure tcgSPARC.a_loadaddr_ref_reg(list:TAasmOutput;CONST ref:TReference;r:tr
|
||||
begin
|
||||
// can't use a_op_const_ref because this may use dec/inc
|
||||
get_64bit_ops(op,op1,op2);
|
||||
list.concat(taicpu.op_const_reg(op1,S_L,Lo(Value),regdst.reglo));
|
||||
list.concat(taicpu.op_const_reg(op2,S_L,Hi(Value),regdst.reghi));
|
||||
list.concat(taicpu.op_const_reg(op1,Lo(Value),regdst.reglo));
|
||||
list.concat(taicpu.op_const_reg(op2,Hi(Value),regdst.reghi));
|
||||
end;
|
||||
else
|
||||
internalerror(200204021);
|
||||
@ -943,28 +957,29 @@ procedure tcgSPARC.a_loadaddr_ref_reg(list:TAasmOutput;CONST ref:TReference;r:tr
|
||||
end;
|
||||
|
||||
|
||||
procedure TCg64fSPARC.a_op64_const_ref(list:TAasmOutput;op:TOpCG;value:qWord;CONST ref:TReference);
|
||||
var
|
||||
op1,op2:TAsmOp;
|
||||
tempref:TReference;
|
||||
begin
|
||||
case op of
|
||||
OP_AND,OP_OR,OP_XOR:
|
||||
WITH cg DO
|
||||
begin
|
||||
a_op_const_ref(list,op,OS_32,Lo(Value),ref);
|
||||
tempref:=ref;
|
||||
inc(tempref.offset,4);
|
||||
a_op_const_ref(list,op,OS_32,Hi(Value),tempref);
|
||||
end;
|
||||
OP_ADD, OP_SUB:
|
||||
procedure TCg64fSPARC.a_op64_const_ref(list:TAasmOutput;op:TOpCG;value:qWord;const ref:TReference);
|
||||
var
|
||||
op1,op2:TAsmOp;
|
||||
tempref:TReference;
|
||||
begin
|
||||
case op of
|
||||
OP_AND,OP_OR,OP_XOR:
|
||||
with cg do
|
||||
begin
|
||||
a_op_const_ref(list,op,OS_32,Lo(Value),ref);
|
||||
tempref:=ref;
|
||||
inc(tempref.offset,4);
|
||||
a_op_const_ref(list,op,OS_32,Hi(Value),tempref);
|
||||
end;
|
||||
OP_ADD, OP_SUB:
|
||||
begin
|
||||
get_64bit_ops(op,op1,op2);
|
||||
// can't use a_op_const_ref because this may use dec/inc
|
||||
list.concat(taicpu.op_const_ref(op1,S_L,Lo(Value),ref));
|
||||
{ list.concat(taicpu.op_const_ref(op1,Lo(Value),ref));
|
||||
tempref:=ref;
|
||||
inc(tempref.offset,4);
|
||||
list.concat(taicpu.op_const_ref(op2,S_L,Hi(Value),tempref));
|
||||
list.concat(taicpu.op_const_ref(op2,S_L,Hi(Value),tempref));}
|
||||
InternalError(2002102101);
|
||||
end;
|
||||
else
|
||||
internalerror(200204022);
|
||||
@ -1068,8 +1083,8 @@ procedure TCgSparc.g_concatcopy(list:taasmoutput;const source,dest:treference;le
|
||||
objectlibrary.getlabel(lab);
|
||||
a_label(list, lab);
|
||||
list.concat(taicpu.op_reg_const_reg(A_SUB,S_L,countreg,1,countreg));
|
||||
list.concat(taicpu.op_reg_ref(A_LDF,S_L,R_F0,src));
|
||||
list.concat(taicpu.op_reg_ref(A_STD,S_L,R_F0,dst));
|
||||
list.concat(taicpu.op_reg_ref(A_LDF,R_F0,src));
|
||||
list.concat(taicpu.op_reg_ref(A_STD,R_F0,dst));
|
||||
//a_jmp(list,A_BC,C_NE,0,lab);
|
||||
free_scratch_reg(list,countreg);
|
||||
a_reg_dealloc(list,R_F0);
|
||||
@ -1221,7 +1236,7 @@ procedure tcgSPARC.floatload(list:TAasmOutput;t:tcgsize;CONST ref:TReference);
|
||||
s:topsize;
|
||||
BEGIN
|
||||
floatloadops(t,op,s);
|
||||
list.concat(Taicpu.Op_ref(op,s,ref));
|
||||
list.concat(Taicpu.Op_ref(op,ref));
|
||||
{ inc(trgcpu(rg).fpuvaroffset);}
|
||||
END;
|
||||
procedure tcgSPARC.floatstoreops(t:tcgsize;var op:tasmop;var s:topsize);
|
||||
@ -1253,7 +1268,7 @@ procedure tcgSPARC.floatstore(list:TAasmOutput;t:tcgsize;CONST ref:TReference);
|
||||
s:topsize;
|
||||
BEGIN
|
||||
floatstoreops(t,op,s);
|
||||
list.concat(Taicpu.Op_ref(op,s,ref));
|
||||
list.concat(Taicpu.Op_ref(op,ref));
|
||||
{ dec(trgcpu(rg).fpuvaroffset);}
|
||||
END;
|
||||
BEGIN
|
||||
@ -1261,7 +1276,10 @@ BEGIN
|
||||
END.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.17 2002-10-20 19:01:38 mazen
|
||||
Revision 1.18 2002-10-22 13:43:01 mazen
|
||||
- cga.pas redueced to an empty unit
|
||||
|
||||
Revision 1.17 2002/10/20 19:01:38 mazen
|
||||
+ op_raddr_reg and op_caddr_reg added to fix functions prologue
|
||||
|
||||
Revision 1.16 2002/10/13 21:46:07 mazen
|
||||
|
@ -238,11 +238,11 @@ procedure TSparcAddNode.emit_op_right_left(op:TAsmOp;OpSize:TOpsize);
|
||||
with exprasmlist do
|
||||
case right.location.loc of
|
||||
LOC_REGISTER,LOC_CREGISTER:
|
||||
concat(taicpu.op_reg_reg(op,opsize,right.location.register,left.location.register));
|
||||
concat(taicpu.op_reg_reg(op,right.location.register,left.location.register));
|
||||
LOC_REFERENCE,LOC_CREFERENCE :
|
||||
concat(taicpu.op_ref_reg(op,opsize,right.location.reference,left.location.register));
|
||||
concat(taicpu.op_ref_reg(op,right.location.reference,left.location.register));
|
||||
LOC_CONSTANT:
|
||||
concat(taicpu.op_const_reg(op,opsize,right.location.value,left.location.register));
|
||||
concat(taicpu.op_const_reg(op,right.location.value,left.location.register));
|
||||
else
|
||||
InternalError(200203232);
|
||||
end;
|
||||
@ -526,7 +526,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2002-10-10 20:23:57 mazen
|
||||
Revision 1.5 2002-10-22 13:43:01 mazen
|
||||
- cga.pas redueced to an empty unit
|
||||
|
||||
Revision 1.4 2002/10/10 20:23:57 mazen
|
||||
* tabs replaces by spaces
|
||||
|
||||
}
|
||||
|
@ -263,7 +263,7 @@ implementation
|
||||
|
||||
location.register := rg.getregisterfpu(exprasmlist);
|
||||
{$WARNING FIXME what reallty should be done?}
|
||||
exprasmlist.concat(taicpu.op_reg_ref(A_LD,S_L,location.register,ref));
|
||||
exprasmlist.concat(taicpu.op_reg_ref(A_LD,location.register,ref));
|
||||
|
||||
tg.ungetiftemp(exprasmlist,ref);
|
||||
|
||||
@ -274,8 +274,7 @@ implementation
|
||||
{ work around bug in some PowerPC processors }
|
||||
if (tfloatdef(resulttype.def).typ = s32real) then
|
||||
{$WARNING FIXME what reallty should be done?}
|
||||
exprasmlist.concat(taicpu.op_reg_reg(A_ADD,S_L,location.register,
|
||||
location.register));
|
||||
exprasmlist.concat(taicpu.op_reg_reg(A_ADD,location.register,location.register));
|
||||
end;
|
||||
|
||||
|
||||
@ -287,7 +286,7 @@ implementation
|
||||
if (tfloatdef(left.resulttype.def).typ = s64real) and
|
||||
(tfloatdef(resulttype.def).typ = s32real) then
|
||||
{$WARNING FIXME what reallty should be done?}
|
||||
exprasmlist.concat(taicpu.op_reg_reg(A_ADD,S_L,location.register,location.register));
|
||||
exprasmlist.concat(taicpu.op_reg_reg(A_ADD,location.register,location.register));
|
||||
end;
|
||||
|
||||
|
||||
@ -422,7 +421,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2002-10-10 19:57:52 mazen
|
||||
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
|
||||
* Just to update repsitory
|
||||
|
||||
Revision 1.3 2002/09/07 15:25:14 peter
|
||||
|
Loading…
Reference in New Issue
Block a user