|
@@ -804,9 +804,9 @@ const
|
|
|
case target_info.abi of
|
|
|
abi_powerpc_aix,
|
|
|
abi_powerpc_darwin:
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_AIX,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_AIX,ctempposinvalid,4,[]);
|
|
|
abi_powerpc_sysv:
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_SYSV,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_SYSV,ctempposinvalid,4,[]);
|
|
|
end;
|
|
|
list.concat(taicpu.op_reg_ref(A_STW,NR_R0,href));
|
|
|
if not(cs_profile in current_settings.moduleswitches) then
|
|
@@ -820,7 +820,7 @@ const
|
|
|
begin
|
|
|
a_reg_alloc(list,NR_R0);
|
|
|
list.concat(taicpu.op_reg_reg(A_MFSPR,NR_R0,NR_CR));
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,ctempposinvalid,4,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_STW,NR_R0,href));
|
|
|
a_reg_dealloc(list,NR_R0);
|
|
|
end;
|
|
@@ -837,7 +837,7 @@ const
|
|
|
|
|
|
if usesfpr then
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_R1,-8,8,[]);
|
|
|
+ reference_reset_base(href,NR_R1,-8,ctempposinvalid,8,[]);
|
|
|
for regcounter:=firstregfpu to RS_F31 do
|
|
|
begin
|
|
|
a_loadfpu_reg_ref(list,OS_F64,OS_F64,newreg(R_FPUREGISTER,regcounter,R_SUBNONE),href);
|
|
@@ -848,7 +848,7 @@ const
|
|
|
end
|
|
|
else
|
|
|
{ compute start of gpr save area }
|
|
|
- reference_reset_base(href,NR_R1,-4,4,[]);
|
|
|
+ reference_reset_base(href,NR_R1,-4,ctempposinvalid,4,[]);
|
|
|
|
|
|
{ save gprs and fetch GOT pointer }
|
|
|
if usesgpr then
|
|
@@ -881,12 +881,12 @@ const
|
|
|
begin
|
|
|
if (localsize <= high(smallint)) then
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,-localsize,8,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,-localsize,ctempposinvalid,8,[]);
|
|
|
a_load_store(list,A_STWU,NR_STACK_POINTER_REG,href);
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,0,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,0,ctempposinvalid,4,[]);
|
|
|
{ can't use getregisterint here, the register colouring }
|
|
|
{ is already done when we get here }
|
|
|
{ R12 may hold previous stack pointer, R11 may be in }
|
|
@@ -958,7 +958,7 @@ const
|
|
|
genret:=true;
|
|
|
if usesfpr then
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_R1,-8,8,[]);
|
|
|
+ reference_reset_base(href,NR_R1,-8,ctempposinvalid,8,[]);
|
|
|
for regcounter := firstregfpu to RS_F31 do
|
|
|
begin
|
|
|
a_loadfpu_ref_reg(list,OS_F64,OS_F64,href,newreg(R_FPUREGISTER,regcounter,R_SUBNONE));
|
|
@@ -967,7 +967,7 @@ const
|
|
|
inc(href.offset,4);
|
|
|
end
|
|
|
else
|
|
|
- reference_reset_base(href,NR_R1,-4,4,[]);
|
|
|
+ reference_reset_base(href,NR_R1,-4,ctempposinvalid,4,[]);
|
|
|
|
|
|
if (usesgpr) then
|
|
|
begin
|
|
@@ -1017,9 +1017,9 @@ const
|
|
|
case target_info.abi of
|
|
|
abi_powerpc_aix,
|
|
|
abi_powerpc_darwin:
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_AIX,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_AIX,ctempposinvalid,4,[]);
|
|
|
abi_powerpc_sysv:
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_SYSV,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_LR_SYSV,ctempposinvalid,4,[]);
|
|
|
end;
|
|
|
a_reg_alloc(list,NR_R0);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,href));
|
|
@@ -1032,7 +1032,7 @@ const
|
|
|
if target_info.abi in [abi_powerpc_aix,abi_powerpc_darwin] then
|
|
|
if false then { Not needed at the moment. }
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,ctempposinvalid,4,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,href));
|
|
|
list.concat(taicpu.op_reg_reg(A_MTSPR,NR_R0,NR_CR));
|
|
|
a_reg_dealloc(list,NR_R0);
|
|
@@ -1099,7 +1099,7 @@ const
|
|
|
for regcounter := firstregfpu to RS_F31 do
|
|
|
begin
|
|
|
offset:= offset - 8;
|
|
|
- reference_reset_base(href, NR_STACK_POINTER_REG, offset, 8, []);
|
|
|
+ reference_reset_base(href, NR_STACK_POINTER_REG, offset, ctempposinvalid, 8, []);
|
|
|
list.concat(taicpu.op_reg_ref(A_STFD, tregister(regcounter), href));
|
|
|
end;
|
|
|
(* Optimiztion in the future: a_call_name(list,'_savefXX'); *)
|
|
@@ -1109,7 +1109,7 @@ const
|
|
|
if firstreggpr < RS_R30 then
|
|
|
begin
|
|
|
offset:= offset - 4 * (RS_R31 - firstreggpr + 1);
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,offset,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,offset,ctempposinvalid,4,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_STMW,tregister(firstreggpr),href));
|
|
|
{STMW stores multiple registers}
|
|
|
end
|
|
@@ -1118,7 +1118,7 @@ const
|
|
|
for regcounter := firstreggpr to RS_R31 do
|
|
|
begin
|
|
|
offset:= offset - 4;
|
|
|
- reference_reset_base(href, NR_STACK_POINTER_REG, offset, 4, []);
|
|
|
+ reference_reset_base(href, NR_STACK_POINTER_REG, offset, ctempposinvalid, 4, []);
|
|
|
list.concat(taicpu.op_reg_ref(A_STW, newreg(R_INTREGISTER,regcounter,R_SUBWHOLE), href));
|
|
|
end;
|
|
|
end;
|
|
@@ -1185,7 +1185,7 @@ const
|
|
|
for regcounter := firstregfpu to RS_F31 do
|
|
|
begin
|
|
|
offset:= offset - 8;
|
|
|
- reference_reset_base(href, NR_STACK_POINTER_REG, offset, 8, []);
|
|
|
+ reference_reset_base(href, NR_STACK_POINTER_REG, offset, ctempposinvalid, 8, []);
|
|
|
list.concat(taicpu.op_reg_ref(A_LFD, newreg(R_FPUREGISTER,regcounter,R_SUBWHOLE), href));
|
|
|
end;
|
|
|
(* Optimiztion in the future: a_call_name(list,'_restfXX'); *)
|
|
@@ -1195,7 +1195,7 @@ const
|
|
|
if firstreggpr < RS_R30 then
|
|
|
begin
|
|
|
offset:= offset - 4 * (RS_R31 - firstreggpr + 1);
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,offset,4,[]); //-220
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,offset,ctempposinvalid,4,[]); //-220
|
|
|
list.concat(taicpu.op_reg_ref(A_LMW,tregister(firstreggpr),href));
|
|
|
{LMW loads multiple registers}
|
|
|
end
|
|
@@ -1204,7 +1204,7 @@ const
|
|
|
for regcounter := firstreggpr to RS_R31 do
|
|
|
begin
|
|
|
offset:= offset - 4;
|
|
|
- reference_reset_base(href, NR_STACK_POINTER_REG, offset, 4, []);
|
|
|
+ reference_reset_base(href, NR_STACK_POINTER_REG, offset, ctempposinvalid, 4, []);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ, newreg(R_INTREGISTER,regcounter,R_SUBWHOLE), href));
|
|
|
end;
|
|
|
end;
|
|
@@ -1241,7 +1241,7 @@ const
|
|
|
{ save return address in callers frame}
|
|
|
list.concat(taicpu.op_reg_reg(A_MFSPR,NR_R0,NR_LR));
|
|
|
{ ... in caller's frame }
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,8,8,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,8,ctempposinvalid,8,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_STW,NR_R0,href));
|
|
|
a_reg_dealloc(list,NR_R0);
|
|
|
|
|
@@ -1251,7 +1251,7 @@ const
|
|
|
{ save the CR if necessary in callers frame ( !!! always done currently ) }
|
|
|
a_reg_alloc(list,NR_R0);
|
|
|
list.concat(taicpu.op_reg_reg(A_MFSPR,NR_R0,NR_CR));
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,ctempposinvalid,4,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_STW,NR_R0,href));
|
|
|
a_reg_dealloc(list,NR_R0);
|
|
|
|
|
@@ -1285,12 +1285,12 @@ const
|
|
|
begin
|
|
|
if (localsize <= high(smallint)) then
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,-localsize,8,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,-localsize,ctempposinvalid,8,[]);
|
|
|
a_load_store(list,A_STWU,NR_STACK_POINTER_REG,href);
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,0,8,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,0,ctempposinvalid,8,[]);
|
|
|
href.index := NR_R11;
|
|
|
a_reg_alloc(list,href.index);
|
|
|
a_load_const_reg(list,OS_S32,-localsize,href.index);
|
|
@@ -1309,7 +1309,7 @@ const
|
|
|
a_reg_alloc(list,NR_R0);
|
|
|
|
|
|
{ restore stack pointer }
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_SP,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_SP,ctempposinvalid,4,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ,NR_STACK_POINTER_REG,href));
|
|
|
(*
|
|
|
list.concat(taicpu.op_reg_reg_const(A_ORI,NR_STACK_POINTER_REG,R_31,0));
|
|
@@ -1317,14 +1317,14 @@ const
|
|
|
|
|
|
{ restore the CR if necessary from callers frame
|
|
|
( !!! always done currently ) }
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,4,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,LA_CR_AIX,ctempposinvalid,4,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,href));
|
|
|
list.concat(taicpu.op_reg_reg(A_MTSPR,NR_R0,NR_CR));
|
|
|
a_reg_dealloc(list,NR_R0);
|
|
|
|
|
|
(*
|
|
|
{ restore return address from callers frame }
|
|
|
- reference_reset_base(href,STACK_POINTER_REG,8,[]);
|
|
|
+ reference_reset_base(href,STACK_POINTER_REG,8,ctempposinvalid,8,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ,R_0,href));
|
|
|
*)
|
|
|
|
|
@@ -1338,7 +1338,7 @@ const
|
|
|
*)
|
|
|
|
|
|
{ restore return address from callers frame }
|
|
|
- reference_reset_base(href,NR_STACK_POINTER_REG,8,8,[]);
|
|
|
+ reference_reset_base(href,NR_STACK_POINTER_REG,8,ctempposinvalid,8,[]);
|
|
|
list.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,href));
|
|
|
|
|
|
{ return to caller }
|