* compilation of the powerpc compiler fixed

This commit is contained in:
florian 2003-10-17 01:22:08 +00:00
parent 8a4c312509
commit 6a01a7b4a6
9 changed files with 177 additions and 96 deletions

View File

@ -136,7 +136,7 @@ interface
end;
if pushedfpu then
begin
tmpreg := rg.getregisterfpu(exprasmlist,left.location.size);
tmpreg := cg.getfpuregister(exprasmlist,left.location.size);
cg.a_loadfpu_loc_reg(exprasmlist,left.location,tmpreg);
location_reset(left.location,LOC_FPUREGISTER,left.location.size);
left.location.register := tmpreg;
@ -181,12 +181,12 @@ interface
{$ifndef cpu64bit}
if location.size in [OS_64,OS_S64] then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end
else
{$endif}
location.register := rg.getregisterint(exprasmlist,location.size);
location.register := cg.getintregister(exprasmlist,location.size);
end;
end;
@ -294,7 +294,7 @@ interface
left.location.register,location.register)
else
begin
tmpreg := rg.getregisterint(exprasmlist,location.size);
tmpreg := cg.getintregister(exprasmlist,location.size);
cg.a_load_const_reg(exprasmlist,location.size,1,tmpreg);
cg.a_op_reg_reg(exprasmlist,OP_SHL,location.size,
right.location.register,tmpreg);
@ -304,7 +304,7 @@ interface
else
cg.a_op_const_reg_reg(exprasmlist,OP_OR,location.size,
aword(left.location.value),tmpreg,location.register);
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end;
opdone := true;
end
@ -334,13 +334,13 @@ interface
begin
if left.location.loc = LOC_CONSTANT then
begin
tmpreg := rg.getregisterint(exprasmlist,location.size);
tmpreg := cg.getintregister(exprasmlist,location.size);
cg.a_load_const_reg(exprasmlist,location.size,
aword(left.location.value),tmpreg);
cg.a_op_reg_reg(exprasmlist,OP_NOT,location.size,right.location.register,right.location.register);
cg.a_op_reg_reg(exprasmlist,OP_AND,location.size,right.location.register,tmpreg);
cg.a_load_reg_reg(exprasmlist,OS_INT,location.size,tmpreg,location.register);
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end
else
begin
@ -660,12 +660,12 @@ interface
end
else
begin
tmpreg := rg.getregisterint(exprasmlist,location.size);
tmpreg := cg.getintregister(exprasmlist,location.size);
cg.a_load_const_reg(exprasmlist,location.size,
aword(left.location.value),tmpreg);
cg.a_op_reg_reg_reg(exprasmlist,OP_SUB,location.size,
right.location.register,tmpreg,location.register);
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end;
end;
@ -735,7 +735,10 @@ begin
end.
{
$Log$
Revision 1.21 2003-10-10 17:48:13 peter
Revision 1.22 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.21 2003/10/10 17:48:13 peter
* old trgobj moved to x86/rgcpu and renamed to trgx86fpu
* tregisteralloctor renamed to trgobj
* removed rgobj from a lot of units

View File

@ -466,7 +466,7 @@ implementation
{$ifdef x86}
tcgx86(cg).inc_fpu_stack;
{$else x86}
hregister := cg.getregister(exprasmlist,location.size);
hregister := cg.getfpuregister(exprasmlist,location.size);
cg.a_loadfpu_reg_reg(exprasmlist,location.size,location.register,hregister);
location.register := hregister;
{$endif x86}
@ -1104,7 +1104,10 @@ begin
end.
{
$Log$
Revision 1.130 2003-10-11 16:06:42 florian
Revision 1.131 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.130 2003/10/11 16:06:42 florian
* fixed some MMX<->SSE
* started to fix ppc, needs an overhaul
+ stabs info improve for spilling, not sure if it works correctly/completly

View File

@ -614,7 +614,7 @@ implementation
else
write(t,', resulttype = <nil>');
writeln(t,', pos = (',fileinfo.line,',',fileinfo.column,')',
// ', loc = ',tcgloc2str[location.loc],
', loc = ',tcgloc2str[location.loc],
', expectloc = ',tcgloc2str[expectloc],
', intregs = ',registers32,
', fpuregs = ',registersfpu);
@ -976,7 +976,10 @@ implementation
end.
{
$Log$
Revision 1.69 2003-10-08 19:19:45 peter
Revision 1.70 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.69 2003/10/08 19:19:45 peter
* set_varstate cleanup
Revision 1.68 2003/10/01 20:34:49 peter

View File

@ -42,16 +42,16 @@ unit cgcpu;
procedure done_register_allocators;override;
function getintregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
function getaddressregister(list:Taasmoutput):Tregister;override;
function getaddressregister(list:Taasmoutput):Tregister;
function getfpuregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
function getmmregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
procedure getexplicitregister(list:Taasmoutput;r:Tregister);override;
function getabtintregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
procedure ungetregister(list:Taasmoutput;r:Tregister);override;
procedure ungetreference(list:Taasmoutput;const r:Treference);override;
{!!!
procedure allocexplicitregisters(list:Taasmoutput;rt:Tregistertype;r:Tsuperregisterset);override;
procedure deallocexplicitregisters(list:Taasmoutput;rt:Tregistertype;r:Tsuperregisterset);override;
procedure add_move_instruction(instr:Taicpu);override;
}
{ passing parameters, per default the parameter is pushed }
{ nr gives the number of the parameter (enumerated from }
@ -195,6 +195,60 @@ const
end;
function tcgppc.getintregister(list:Taasmoutput;size:Tcgsize):Tregister;
begin
result:=rgint.getregister(list,cgsize2subreg(size));
end;
function tcgppc.getaddressregister(list:Taasmoutput):Tregister;
begin
result:=rgint.getregister(list,R_SUBWHOLE);
end;
function tcgppc.getfpuregister(list:Taasmoutput;size:Tcgsize):Tregister;
begin
result:=rgfpu.getregister(list,R_SUBWHOLE);
end;
function tcgppc.getmmregister(list:Taasmoutput;size:Tcgsize):Tregister;
begin
result:=rgmm.getregister(list,R_SUBNONE);
end;
procedure tcgppc.getexplicitregister(list:Taasmoutput;r:Tregister);
begin
case getregtype(r) of
R_INTREGISTER :
rgint.getexplicitregister(list,r);
R_MMREGISTER :
rgmm.getexplicitregister(list,r);
R_FPUREGISTER :
rgfpu.getexplicitregister(list,r);
else
internalerror(200310091);
end;
end;
procedure tcgppc.ungetregister(list:Taasmoutput;r:Tregister);
begin
case getregtype(r) of
R_INTREGISTER :
rgint.ungetregister(list,r);
R_FPUREGISTER :
rgfpu.ungetregister(list,r);
R_MMREGISTER :
rgmm.ungetregister(list,r);
else
internalerror(200310091);
end;
end;
procedure tcgppc.a_param_const(list : taasmoutput;size : tcgsize;a : aword;const locpara : tparalocation);
var
ref: treference;
@ -2387,7 +2441,10 @@ begin
end.
{
$Log$
Revision 1.129 2003-10-13 01:58:04 florian
Revision 1.130 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.129 2003/10/13 01:58:04 florian
* some ideas for mm support implemented
Revision 1.128 2003/10/11 16:06:42 florian

View File

@ -106,7 +106,7 @@ interface
secondpass(right);
if pushedfpu then
begin
tmpreg := rg.getregisterfpu(exprasmlist,left.location.size);
tmpreg := cg.getfpuregister(exprasmlist,left.location.size);
cg.a_loadfpu_loc_reg(exprasmlist,left.location,tmpreg);
location_reset(left.location,LOC_FPUREGISTER,left.location.size);
left.location.register := tmpreg;
@ -156,9 +156,9 @@ interface
if not(cmpop) and
(location.register = NR_NO) then
begin
location.register := rg.getregisterint(exprasmlist,OS_INT);
location.register := cg.getintregister(exprasmlist,OS_INT);
if is_64bit(resulttype.def) then
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end;
end;
@ -227,7 +227,7 @@ interface
else
begin
useconst := false;
tmpreg := rg.getregisterint(exprasmlist,OS_INT);
tmpreg := cg.getintregister(exprasmlist,OS_INT);
cg.a_load_const_reg(exprasmlist,OS_INT,
aword(right.location.value),tmpreg);
end
@ -255,7 +255,7 @@ interface
begin
exprasmlist.concat(taicpu.op_reg_reg(op,
left.location.register,tmpreg));
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end
else
exprasmlist.concat(taicpu.op_reg_reg(op,
@ -469,7 +469,7 @@ interface
else if right.location.loc = LOC_FPUREGISTER then
location.register := right.location.register
else
location.register := rg.getregisterfpu(exprasmlist,location.size);
location.register := cg.getfpuregister(exprasmlist,location.size);
end
else
begin
@ -526,7 +526,7 @@ interface
if not(cmpop) and
(location.register = NR_NO) then
location.register := rg.getregisterint(exprasmlist,OS_INT);
location.register := cg.getintregister(exprasmlist,OS_INT);
case nodetype of
addn :
@ -545,7 +545,7 @@ interface
left.location.register,location.register)
else
begin
tmpreg := rg.getregisterint(exprasmlist,OS_INT);
tmpreg := cg.getintregister(exprasmlist,OS_INT);
cg.a_load_const_reg(exprasmlist,OS_INT,1,tmpreg);
cg.a_op_reg_reg(exprasmlist,OP_SHL,OS_INT,
right.location.register,tmpreg);
@ -555,7 +555,7 @@ interface
else
cg.a_op_const_reg_reg(exprasmlist,OP_OR,OS_INT,
aword(left.location.value),tmpreg,location.register);
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end;
opdone := true;
end
@ -585,12 +585,12 @@ interface
begin
if left.location.loc = LOC_CONSTANT then
begin
tmpreg := rg.getregisterint(exprasmlist,OS_INT);
tmpreg := cg.getintregister(exprasmlist,OS_INT);
cg.a_load_const_reg(exprasmlist,OS_INT,
aword(left.location.value),tmpreg);
exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC,
location.register,tmpreg,right.location.register));
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end
else
exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC,
@ -612,7 +612,7 @@ interface
(nodetype = gten)) then
swapleftright;
// now we have to check whether left >= right
tmpreg := rg.getregisterint(exprasmlist,OS_INT);
tmpreg := cg.getintregister(exprasmlist,OS_INT);
if left.location.loc = LOC_CONSTANT then
begin
cg.a_op_const_reg_reg(exprasmlist,OP_AND,OS_INT,
@ -634,7 +634,7 @@ interface
exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC_,tmpreg,
right.location.register,left.location.register));
end;
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
location.resflags.cr := RS_CR0;
location.resflags.flag := F_EQ;
opdone := true;
@ -860,11 +860,11 @@ interface
else
begin
if (aword(right.location.valueqword) <> 0) then
tempreg64.reglo := rg.getregisterint(exprasmlist,OS_32)
tempreg64.reglo := cg.getintregister(exprasmlist,OS_32)
else
tempreg64.reglo := left.location.registerlow;
if ((right.location.valueqword shr 32) <> 0) then
tempreg64.reghi := rg.getregisterint(exprasmlist,OS_32)
tempreg64.reghi := cg.getintregister(exprasmlist,OS_32)
else
tempreg64.reghi := left.location.registerhigh;
end;
@ -895,8 +895,8 @@ interface
end
else
begin
tempreg64.reglo := rg.getregisterint(exprasmlist,OS_INT);
tempreg64.reghi := rg.getregisterint(exprasmlist,OS_INT);
tempreg64.reglo := cg.getintregister(exprasmlist,OS_INT);
tempreg64.reghi := cg.getintregister(exprasmlist,OS_INT);
cg64.a_op64_reg_reg_reg(exprasmlist,OP_XOR,
left.location.register64,right.location.register64,
tempreg64);
@ -907,9 +907,9 @@ interface
tempreg64.reglo,tempreg64.reghi));
cg.a_reg_dealloc(exprasmlist,NR_R0);
if (tempreg64.reglo <> left.location.registerlow) then
rg.ungetregisterint(exprasmlist,tempreg64.reglo);
cg.ungetregister(exprasmlist,tempreg64.reglo);
if (tempreg64.reghi <> left.location.registerhigh) then
rg.ungetregisterint(exprasmlist,tempreg64.reghi);
cg.ungetregister(exprasmlist,tempreg64.reghi);
location_reset(location,LOC_FLAGS,OS_NO);
location.resflags := getresflags;
@ -918,8 +918,8 @@ interface
begin
if (location.registerlow = NR_NO) then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end;
if (left.location.loc = LOC_CONSTANT) then
@ -940,8 +940,8 @@ interface
begin
if (location.registerlow = NR_NO) then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end;
if right.location.loc <> LOC_CONSTANT then
// reg64 - reg64
@ -958,8 +958,8 @@ interface
begin
if (location.registerlow = NR_NO) then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end;
if (int64(left.location.valueqword) >= low(smallint)) and
(int64(left.location.valueqword) <= high(smallint)) then
@ -986,8 +986,8 @@ interface
// (const32 shl 32) - reg64
if (location.registerlow = NR_NO) then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end;
exprasmlist.concat(taicpu.op_reg_reg_const(A_SUBFIC,
location.registerlow,right.location.registerlow,0));
@ -1006,8 +1006,8 @@ interface
location.register64 := left.location.register64
else if (location.registerlow = NR_NO) then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
end;
cg64.a_op64_reg_reg_reg(exprasmlist,OP_SUB,
right.location.register64,left.location.register64,
@ -1330,7 +1330,7 @@ interface
if (location.register = NR_NO) and
not(cmpop) then
location.register := rg.getregisterint(exprasmlist,OS_INT);
location.register := cg.getintregister(exprasmlist,OS_INT);
if not(cs_check_overflow in aktlocalswitches) or
(cmpop) or
@ -1388,12 +1388,12 @@ interface
end
else
begin
tmpreg := rg.getregisterint(exprasmlist,OS_INT);
tmpreg := cg.getintregister(exprasmlist,OS_INT);
cg.a_load_const_reg(exprasmlist,OS_INT,
aword(left.location.value),tmpreg);
cg.a_op_reg_reg_reg(exprasmlist,OP_SUB,OS_INT,
right.location.register,tmpreg,location.register);
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end;
end;
ltn,lten,gtn,gten,equaln,unequaln :
@ -1428,7 +1428,10 @@ begin
end.
{
$Log$
Revision 1.36 2003-10-01 20:34:49 peter
Revision 1.37 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.36 2003/10/01 20:34:49 peter
* procinfo unit contains tprocinfo
* cginfo renamed to cgbase
* moved cgmessage to verbose

View File

@ -188,7 +188,7 @@ implementation
leftreg := left.location.register;
if signed then
begin
valuereg := rg.getregisterint(exprasmlist,OS_INT);
valuereg := cg.getintregister(exprasmlist,OS_INT);
valuereg_is_scratch := true;
end
else
@ -196,7 +196,7 @@ implementation
end;
LOC_REFERENCE,LOC_CREFERENCE:
begin
leftreg := rg.getregisterint(exprasmlist,OS_INT);
leftreg := cg.getintregister(exprasmlist,OS_INT);
valuereg := leftreg;
valuereg_is_scratch := true;
if signed then
@ -209,10 +209,10 @@ implementation
else
internalerror(200110012);
end;
tempreg := rg.getregisterint(exprasmlist,OS_INT);
tempreg := cg.getintregister(exprasmlist,OS_INT);
exprasmlist.concat(taicpu.op_reg_const(A_LIS,tempreg,$4330));
cg.a_load_reg_ref(exprasmlist,OS_32,OS_32,tempreg,ref);
rg.ungetregisterint(exprasmlist,tempreg);
cg.ungetregister(exprasmlist,tempreg);
if signed then
exprasmlist.concat(taicpu.op_reg_reg_const(A_XORIS,valuereg,
{ xoris expects a unsigned 16 bit int (FK) }
@ -221,21 +221,21 @@ implementation
cg.a_load_reg_ref(exprasmlist,OS_32,OS_32,valuereg,ref);
dec(ref.offset,4);
if (valuereg_is_scratch) then
rg.ungetregisterint(exprasmlist,valuereg);
cg.ungetregister(exprasmlist,valuereg);
if (left.location.loc = LOC_REGISTER) or
((left.location.loc = LOC_CREGISTER) and
not signed) then
rg.ungetregisterint(exprasmlist,leftreg)
cg.ungetregister(exprasmlist,leftreg)
else
rg.ungetregisterint(exprasmlist,valuereg);
cg.ungetregister(exprasmlist,valuereg);
tmpfpureg := rg.getregisterfpu(exprasmlist,OS_F64);
tmpfpureg := cg.getfpuregister(exprasmlist,OS_F64);
cg.a_loadfpu_ref_reg(exprasmlist,OS_F64,tempconst.location.reference,
tmpfpureg);
tempconst.free;
location.register := rg.getregisterfpu(exprasmlist,OS_F64);
location.register := cg.getfpuregister(exprasmlist,OS_F64);
exprasmlist.concat(taicpu.op_reg_ref(A_LFD,location.register,
ref));
@ -243,7 +243,7 @@ implementation
exprasmlist.concat(taicpu.op_reg_reg_reg(A_FSUB,location.register,
location.register,tmpfpureg));
rg.ungetregisterfpu(exprasmlist,tmpfpureg,OS_F64);
cg.ungetregister(exprasmlist,tmpfpureg);
{ work around bug in some PowerPC processors }
if (tfloatdef(resulttype.def).typ = s32real) then
@ -301,18 +301,18 @@ implementation
if left.location.loc in [LOC_CREFERENCE,LOC_REFERENCE] then
begin
reference_release(exprasmlist,left.location.reference);
hreg2:=rg.getregisterint(exprasmlist,OS_INT);
hreg2:=cg.getintregister(exprasmlist,OS_INT);
if left.location.size in [OS_64,OS_S64] then
begin
cg.a_load_ref_reg(exprasmlist,OS_INT,OS_INT,
left.location.reference,hreg2);
hreg1:=rg.getregisterint(exprasmlist,OS_INT);
hreg1:=cg.getintregister(exprasmlist,OS_INT);
href:=left.location.reference;
inc(href.offset,4);
cg.a_load_ref_reg(exprasmlist,OS_INT,OS_INT,
href,hreg1);
cg.a_op_reg_reg_reg(exprasmlist,OP_OR,OS_32,hreg2,hreg1,hreg2);
rg.ungetregisterint(exprasmlist,hreg1);
cg.ungetregister(exprasmlist,hreg1);
end
else
cg.a_load_ref_reg(exprasmlist,opsize,opsize,
@ -322,23 +322,23 @@ implementation
begin
if left.location.size in [OS_64,OS_S64] then
begin
hreg2:=rg.getregisterint(exprasmlist,OS_32);
hreg2:=cg.getintregister(exprasmlist,OS_32);
cg.a_op_reg_reg_reg(exprasmlist,OP_OR,OS_32,left.location.registerhigh,left.location.registerlow,hreg2);
location_release(exprasmlist,left.location);
end
else
hreg2 := left.location.register;
end;
hreg1 := rg.getregisterint(exprasmlist,OS_INT);
hreg1 := cg.getintregister(exprasmlist,OS_INT);
exprasmlist.concat(taicpu.op_reg_reg_const(A_SUBIC,hreg1,
hreg2,1));
exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUBFE,hreg1,hreg1,
hreg2));
rg.ungetregisterint(exprasmlist,hreg2);
cg.ungetregister(exprasmlist,hreg2);
end;
LOC_FLAGS :
begin
hreg1:=rg.getregisterint(exprasmlist,OS_INT);
hreg1:=cg.getintregister(exprasmlist,OS_INT);
resflags:=left.location.resflags;
cg.g_flags2reg(exprasmlist,location.size,resflags,hreg1);
end;
@ -431,7 +431,10 @@ begin
end.
{
$Log$
Revision 1.43 2003-10-01 20:34:49 peter
Revision 1.44 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.43 2003/10/01 20:34:49 peter
* procinfo unit contains tprocinfo
* cginfo renamed to cgbase
* moved cgmessage to verbose

View File

@ -91,7 +91,7 @@ implementation
if (location.loc = LOC_CFPUREGISTER) then
begin
location.loc := LOC_FPUREGISTER;
location.register := rg.getregisterfpu(exprasmlist,OS_F64);
location.register := cg.getfpuregister(exprasmlist,OS_F64);
end;
end;
@ -116,7 +116,10 @@ begin
end.
{
$Log$
Revision 1.10 2003-10-01 20:34:49 peter
Revision 1.11 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.10 2003/10/01 20:34:49 peter
* procinfo unit contains tprocinfo
* cginfo renamed to cgbase
* moved cgmessage to verbose

View File

@ -93,12 +93,12 @@ implementation
if (location.loc = LOC_CREGISTER) then
begin
location.loc := LOC_REGISTER;
location.register := rg.getregisterint(exprasmlist,size);
location.register := cg.getintregister(exprasmlist,size);
resultreg := location.register;
end;
if (nodetype = modn) then
begin
resultreg := rg.getregisterint(exprasmlist,size);
resultreg := cg.getintregister(exprasmlist,size);
end;
if (nodetype = divn) and
@ -138,18 +138,18 @@ implementation
begin
exprasmlist.concat(taicpu.op_reg_reg_reg(A_MULLW,resultreg,
divider,resultreg));
rg.ungetregisterint(exprasmlist,divider);
cg.ungetregister(exprasmlist,divider);
exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,location.register,
numerator,resultreg));
rg.ungetregisterint(exprasmlist,resultreg);
cg.ungetregister(exprasmlist,resultreg);
resultreg := location.register;
end
else
rg.ungetregisterint(exprasmlist,divider);
cg.ungetregister(exprasmlist,divider);
end;
{ free used registers }
if numerator <> resultreg then
rg.ungetregisterint(exprasmlist,numerator);
cg.ungetregister(exprasmlist,numerator);
{ set result location }
location.loc:=LOC_REGISTER;
location.register:=resultreg;
@ -190,8 +190,8 @@ implementation
if (location.loc = LOC_CREGISTER) then
begin
location.loc := LOC_REGISTER;
location.registerhigh := rg.getregisterint(exprasmlist,OS_32);
location.registerlow := rg.getregisterint(exprasmlist,OS_32);
location.registerhigh := cg.getintregister(exprasmlist,OS_32);
location.registerlow := cg.getintregister(exprasmlist,OS_32);
end;
if (right.nodetype = ordconstn) then
begin
@ -261,7 +261,7 @@ implementation
location.registerlow := resultreg;
end;
rg.getexplicitregisterint(exprasmlist,NR_R0);
cg.getexplicitregister(exprasmlist,NR_R0);
exprasmlist.concat(taicpu.op_reg_reg_const(A_SUBFIC,
NR_R0,hregister1,32));
exprasmlist.concat(taicpu.op_reg_reg_reg(asmop1,
@ -278,7 +278,7 @@ implementation
location.registerhigh,location.registerhigh,NR_R0));
exprasmlist.concat(taicpu.op_reg_reg_reg(asmop1,
location.registerlow,hregisterlow,hregister1));
rg.ungetregisterint(exprasmlist,NR_R0);
cg.ungetregister(exprasmlist,NR_R0);
if nodetype = shrn then
begin
@ -287,7 +287,7 @@ implementation
location.registerlow := resultreg;
end;
rg.ungetregisterint(exprasmlist,hregister1);
cg.ungetregister(exprasmlist,hregister1);
end
end
else
@ -300,7 +300,7 @@ implementation
if (location.loc = LOC_CREGISTER) then
begin
location.loc := LOC_REGISTER;
resultreg := rg.getregisterint(exprasmlist,OS_32);
resultreg := cg.getintregister(exprasmlist,OS_32);
location.register := resultreg;
end;
@ -323,7 +323,7 @@ implementation
cg.a_op_reg_reg_reg(exprasmlist,op,OS_32,hregister2,
hregister1,resultreg);
rg.ungetregisterint(exprasmlist,hregister2);
cg.ungetregister(exprasmlist,hregister2);
end;
end;
end;
@ -347,8 +347,8 @@ implementation
location_copy(location,left.location);
if (location.loc = LOC_CREGISTER) then
begin
location.registerlow := rg.getregisterint(exprasmlist,OS_INT);
location.registerhigh := rg.getregisterint(exprasmlist,OS_INT);
location.registerlow := cg.getintregister(exprasmlist,OS_INT);
location.registerhigh := cg.getintregister(exprasmlist,OS_INT);
location.loc := LOC_REGISTER;
end;
exprasmlist.concat(taicpu.op_reg_reg_const(A_SUBFIC,
@ -374,15 +374,15 @@ implementation
begin
src1 := left.location.register;
if left.location.loc = LOC_CREGISTER then
location.register := rg.getregisterint(exprasmlist,OS_INT)
location.register := cg.getintregister(exprasmlist,OS_INT)
else
location.register := rg.getregisterfpu(exprasmlist,location.size);
location.register := cg.getfpuregister(exprasmlist,location.size);
end;
LOC_REFERENCE,LOC_CREFERENCE:
begin
if (left.resulttype.def.deftype=floatdef) then
begin
src1 := rg.getregisterfpu(exprasmlist,def_cgsize(left.resulttype.def));
src1 := cg.getfpuregister(exprasmlist,def_cgsize(left.resulttype.def));
location.register := src1;
cg.a_loadfpu_ref_reg(exprasmlist,
def_cgsize(left.resulttype.def),
@ -390,7 +390,7 @@ implementation
end
else
begin
src1 := rg.getregisterint(exprasmlist,OS_32);
src1 := cg.getintregister(exprasmlist,OS_32);
location.register:= src1;
cg.a_load_ref_reg(exprasmlist,OS_32,OS_32,
left.location.reference,src1);
@ -493,7 +493,7 @@ implementation
location_force_reg(exprasmlist,left.location,def_cgsize(left.resulttype.def),false);
location_copy(location,left.location);
if location.loc=LOC_CREGISTER then
location.register := rg.getregisterint(exprasmlist,OS_INT);
location.register := cg.getintregister(exprasmlist,OS_INT);
{ perform the NOT operation }
exprasmlist.concat(taicpu.op_reg_reg(A_NOT,location.register,
left.location.register));
@ -508,7 +508,10 @@ begin
end.
{
$Log$
Revision 1.34 2003-10-01 20:34:49 peter
Revision 1.35 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.34 2003/10/01 20:34:49 peter
* procinfo unit contains tprocinfo
* cginfo renamed to cgbase
* moved cgmessage to verbose

View File

@ -78,11 +78,11 @@ implementation
hregister,value))
else
begin
tmpreg := rg.getregisterint(exprasmlist,OS_INT);
tmpreg := cg.getintregister(exprasmlist,OS_INT);
cg.a_load_const_reg(exprasmlist,OS_INT,aword(value),tmpreg);
exprasmlist.concat(taicpu.op_reg_reg_reg(A_ADD_,hregister,
hregister,tmpreg));
rg.ungetregisterint(exprasmlist,tmpreg);
cg.ungetregister(exprasmlist,tmpreg);
end;
end;
@ -158,7 +158,10 @@ begin
end.
{
$Log$
Revision 1.11 2003-10-01 20:34:49 peter
Revision 1.12 2003-10-17 01:22:08 florian
* compilation of the powerpc compiler fixed
Revision 1.11 2003/10/01 20:34:49 peter
* procinfo unit contains tprocinfo
* cginfo renamed to cgbase
* moved cgmessage to verbose