mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 21:29:19 +02:00
m68k: also alloc FPU registers during RTL helper calls
git-svn-id: trunk@29646 -
This commit is contained in:
parent
9ebc092ade
commit
06dfa4d30c
@ -645,11 +645,15 @@ unit cgcpu;
|
|||||||
paramanager.freecgpara(list,paraloc3);
|
paramanager.freecgpara(list,paraloc3);
|
||||||
paramanager.freecgpara(list,paraloc2);
|
paramanager.freecgpara(list,paraloc2);
|
||||||
paramanager.freecgpara(list,paraloc1);
|
paramanager.freecgpara(list,paraloc1);
|
||||||
|
if current_settings.fputype in [fpu_68881] then
|
||||||
|
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
|
||||||
alloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
alloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
||||||
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||||
a_call_name(list,name,false);
|
a_call_name(list,name,false);
|
||||||
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||||
dealloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
dealloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
||||||
|
if current_settings.fputype in [fpu_68881] then
|
||||||
|
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
|
||||||
cg.a_reg_alloc(list,NR_FUNCTION_RESULT_REG);
|
cg.a_reg_alloc(list,NR_FUNCTION_RESULT_REG);
|
||||||
cg.a_load_reg_reg(list,OS_32,OS_32,NR_FUNCTION_RESULT_REG,reg);
|
cg.a_load_reg_reg(list,OS_32,OS_32,NR_FUNCTION_RESULT_REG,reg);
|
||||||
paraloc3.done;
|
paraloc3.done;
|
||||||
@ -676,11 +680,15 @@ unit cgcpu;
|
|||||||
paramanager.freecgpara(list,paraloc3);
|
paramanager.freecgpara(list,paraloc3);
|
||||||
paramanager.freecgpara(list,paraloc2);
|
paramanager.freecgpara(list,paraloc2);
|
||||||
paramanager.freecgpara(list,paraloc1);
|
paramanager.freecgpara(list,paraloc1);
|
||||||
|
if current_settings.fputype in [fpu_68881] then
|
||||||
|
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
|
||||||
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||||
alloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
alloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
||||||
a_call_name(list,name,false);
|
a_call_name(list,name,false);
|
||||||
dealloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
dealloccpuregisters(list,R_ADDRESSREGISTER,paramanager.get_volatile_registers_address(pocall_default));
|
||||||
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||||
|
if current_settings.fputype in [fpu_68881] then
|
||||||
|
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
|
||||||
cg.a_reg_alloc(list,NR_FUNCTION_RESULT_REG);
|
cg.a_reg_alloc(list,NR_FUNCTION_RESULT_REG);
|
||||||
cg.a_load_reg_reg(list,OS_32,OS_32,NR_FUNCTION_RESULT_REG,reg2);
|
cg.a_load_reg_reg(list,OS_32,OS_32,NR_FUNCTION_RESULT_REG,reg2);
|
||||||
paraloc3.done;
|
paraloc3.done;
|
||||||
|
Loading…
Reference in New Issue
Block a user