* fixed a_call_reg

+ implemented paramgr.get_volative_registers
This commit is contained in:
florian 2004-01-20 23:18:00 +00:00
parent 44368ca0e1
commit 162ff2e6d4
2 changed files with 30 additions and 6 deletions

View File

@ -233,6 +233,7 @@ unit cgcpu;
var
r : tregister;
begin
list.concat(taicpu.op_reg_reg(A_MOV,NR_R14,NR_PC));
list.concat(taicpu.op_reg_reg(A_MOV,NR_PC,reg));
if not(pi_do_call in current_procinfo.flags) then
internalerror(2003060704);
@ -775,7 +776,7 @@ unit cgcpu;
reference_reset(ref);
ref.index:=NR_STACK_POINTER_REG;
ref.addressmode:=AM_PREINDEXED;
list.concat(setoppostfix(taicpu.op_ref_regset(A_STM,ref,rg[R_INTREGISTER].used_in_proc-[RS_R0..RS_R3]+[RS_R11,RS_R12,RS_R14,RS_R15]),PF_DB));
list.concat(setoppostfix(taicpu.op_ref_regset(A_STM,ref,rg[R_INTREGISTER].used_in_proc-[RS_R0..RS_R3]+[RS_R11,RS_R12,RS_R14,RS_R15]),PF_FD));
list.concat(taicpu.op_reg_reg_const(A_SUB,NR_FRAME_POINTER_REG,NR_R12,4));
@ -807,7 +808,7 @@ unit cgcpu;
{ restore int registers and return }
reference_reset(ref);
ref.index:=NR_FRAME_POINTER_REG;
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,rg[R_INTREGISTER].used_in_proc-[RS_R0..RS_R3]+[RS_R11,RS_R13,RS_R15]),PF_DB));
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,rg[R_INTREGISTER].used_in_proc-[RS_R0..RS_R3]+[RS_R11,RS_R13,RS_R15]),PF_EA));
end;
end;
@ -1198,7 +1199,11 @@ begin
end.
{
$Log$
Revision 1.29 2003-12-26 14:02:30 peter
Revision 1.30 2004-01-20 23:18:00 florian
* fixed a_call_reg
+ implemented paramgr.get_volative_registers
Revision 1.29 2003/12/26 14:02:30 peter
* sparc updates
* use registertype in spill_register

View File

@ -30,11 +30,13 @@ unit cpupara;
uses
globtype,
aasmtai,
cpubase,
cpubase,cgbase,
symconst,symbase,symtype,symdef,paramgr;
type
tarmparamanager = class(tparamanager)
function get_volatile_registers_int(calloption : tproccalloption):tcpuregisterset;override;
function get_volatile_registers_fpu(calloption : tproccalloption):tcpuregisterset;override;
function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override;
function getintparaloc(calloption : tproccalloption; nr : longint) : tparalocation;override;
// procedure freeintparaloc(list: taasmoutput; nr : longint); override;
@ -46,10 +48,23 @@ unit cpupara;
uses
verbose,systems,
cpuinfo,cgbase,
cpuinfo,
rgobj,
defutil,symsym;
function tarmparamanager.get_volatile_registers_int(calloption : tproccalloption):tcpuregisterset;
begin
result:=VOLATILE_INTREGISTERS;
end;
function tarmparamanager.get_volatile_registers_fpu(calloption : tproccalloption):tcpuregisterset;
begin
result:=VOLATILE_FPUREGISTERS;
end;
function tarmparamanager.getintparaloc(calloption : tproccalloption; nr : longint) : tparalocation;
begin
fillchar(result,sizeof(tparalocation),0);
@ -336,7 +351,11 @@ begin
end.
{
$Log$
Revision 1.11 2003-12-18 17:06:21 florian
Revision 1.12 2004-01-20 23:18:00 florian
* fixed a_call_reg
+ implemented paramgr.get_volative_registers
Revision 1.11 2003/12/18 17:06:21 florian
* arm compiler compilation fixed
Revision 1.10 2003/12/03 17:39:05 florian