mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 00:59:30 +02:00
* compilation of the powerpc compiler fixed
This commit is contained in:
parent
8a4c312509
commit
6a01a7b4a6
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user