diff --git a/compiler/x86/cgx86.pas b/compiler/x86/cgx86.pas index a1a1915052..29b23f5414 100644 --- a/compiler/x86/cgx86.pas +++ b/compiler/x86/cgx86.pas @@ -2847,10 +2847,12 @@ unit cgx86; procedure push_regs; var r: longint; + usedregs: tcpuregisterset; begin regsize:=0; + usedregs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(current_procinfo.procdef.proccalloption); for r := low(saved_standard_registers) to high(saved_standard_registers) do - if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then + if saved_standard_registers[r] in usedregs then begin inc(regsize,sizeof(aint)); list.concat(Taicpu.Op_reg(A_PUSH,tcgsize2opsize[OS_ADDR],newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE))); @@ -3106,10 +3108,12 @@ unit cgx86; r: longint; hreg: tregister; href: treference; + usedregs: tcpuregisterset; begin href:=current_procinfo.save_regs_ref; + usedregs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(current_procinfo.procdef.proccalloption); for r:=high(saved_standard_registers) downto low(saved_standard_registers) do - if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then + if saved_standard_registers[r] in usedregs then begin hreg:=newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE); { Allocate register so the optimizer does not remove the load } diff --git a/compiler/x86_64/cgcpu.pas b/compiler/x86_64/cgcpu.pas index 8435440540..e4d4676ff7 100644 --- a/compiler/x86_64/cgcpu.pas +++ b/compiler/x86_64/cgcpu.pas @@ -189,9 +189,11 @@ unit cgcpu; procedure push_regs; var r: longint; + usedregs: tcpuregisterset; begin + usedregs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(current_procinfo.procdef.proccalloption); for r := low(saved_standard_registers) to high(saved_standard_registers) do - if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then + if saved_standard_registers[r] in usedregs then begin inc(stackmisalignment,sizeof(pint)); push_one_reg(newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE)); @@ -263,7 +265,7 @@ unit cgcpu; begin if target_info.stackalign>sizeof(pint) then localsize := align(localsize+stackmisalignment,target_info.stackalign)-stackmisalignment; - cg.g_stackpointer_alloc(list,localsize); + g_stackpointer_alloc(list,localsize); if current_procinfo.framepointer=NR_STACK_POINTER_REG then current_asmdata.asmcfi.cfa_def_cfa_offset(list,localsize+sizeof(pint)); current_procinfo.final_localsize:=localsize;