|
@@ -338,7 +338,7 @@ unit cgcpu;
|
|
end
|
|
end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- reference_reset(hr,4);
|
|
|
|
|
|
+ reference_reset(hr,4,[]);
|
|
|
|
|
|
current_asmdata.getjumplabel(l);
|
|
current_asmdata.getjumplabel(l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
@@ -405,7 +405,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else
|
|
else
|
|
usedtmpref:=ref;
|
|
usedtmpref:=ref;
|
|
@@ -437,7 +437,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else
|
|
else
|
|
usedtmpref:=ref;
|
|
usedtmpref:=ref;
|
|
@@ -526,7 +526,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
{ offset in the wrapper needs to be adjusted for the stored
|
|
{ offset in the wrapper needs to be adjusted for the stored
|
|
return address }
|
|
return address }
|
|
- reference_reset_base(href,reference.index,reference.offset+sizeof(aint),sizeof(pint));
|
|
|
|
|
|
+ reference_reset_base(href,reference.index,reference.offset+sizeof(aint),sizeof(pint),[]);
|
|
if is_shifter_const(ioffset,shift) then
|
|
if is_shifter_const(ioffset,shift) then
|
|
a_op_const_ref(list,OP_SUB,size,ioffset,href)
|
|
a_op_const_ref(list,OP_SUB,size,ioffset,href)
|
|
else
|
|
else
|
|
@@ -554,7 +554,7 @@ unit cgcpu;
|
|
a_load_const_reg(list,size,a,paraloc.location^.register);
|
|
a_load_const_reg(list,size,a,paraloc.location^.register);
|
|
LOC_REFERENCE:
|
|
LOC_REFERENCE:
|
|
begin
|
|
begin
|
|
- reference_reset(ref,paraloc.alignment);
|
|
|
|
|
|
+ reference_reset(ref,paraloc.alignment,[]);
|
|
ref.base:=paraloc.location^.reference.index;
|
|
ref.base:=paraloc.location^.reference.index;
|
|
ref.offset:=paraloc.location^.reference.offset;
|
|
ref.offset:=paraloc.location^.reference.offset;
|
|
a_load_const_ref(list,size,a,ref);
|
|
a_load_const_ref(list,size,a,ref);
|
|
@@ -582,7 +582,7 @@ unit cgcpu;
|
|
a_load_ref_reg(list,location^.size,location^.size,tmpref,location^.register);
|
|
a_load_ref_reg(list,location^.size,location^.size,tmpref,location^.register);
|
|
LOC_REFERENCE:
|
|
LOC_REFERENCE:
|
|
begin
|
|
begin
|
|
- reference_reset_base(ref,location^.reference.index,location^.reference.offset,paraloc.alignment);
|
|
|
|
|
|
+ reference_reset_base(ref,location^.reference.index,location^.reference.offset,paraloc.alignment,[]);
|
|
{ doubles in softemu mode have a strange order of registers and references }
|
|
{ doubles in softemu mode have a strange order of registers and references }
|
|
if location^.size=OS_32 then
|
|
if location^.size=OS_32 then
|
|
g_concatcopy(list,tmpref,ref,4)
|
|
g_concatcopy(list,tmpref,ref,4)
|
|
@@ -626,7 +626,7 @@ unit cgcpu;
|
|
a_loadaddr_ref_reg(list,r,paraloc.location^.register);
|
|
a_loadaddr_ref_reg(list,r,paraloc.location^.register);
|
|
LOC_REFERENCE:
|
|
LOC_REFERENCE:
|
|
begin
|
|
begin
|
|
- reference_reset(ref,paraloc.alignment);
|
|
|
|
|
|
+ reference_reset(ref,paraloc.alignment,[]);
|
|
ref.base := paraloc.location^.reference.index;
|
|
ref.base := paraloc.location^.reference.index;
|
|
ref.offset := paraloc.location^.reference.offset;
|
|
ref.offset := paraloc.location^.reference.offset;
|
|
tmpreg := getintregister(list,OS_ADDR);
|
|
tmpreg := getintregister(list,OS_ADDR);
|
|
@@ -658,7 +658,7 @@ unit cgcpu;
|
|
sym:=current_asmdata.RefAsmSymbol(s,AT_FUNCTION)
|
|
sym:=current_asmdata.RefAsmSymbol(s,AT_FUNCTION)
|
|
else
|
|
else
|
|
sym:=current_asmdata.WeakRefAsmSymbol(s,AT_FUNCTION);
|
|
sym:=current_asmdata.WeakRefAsmSymbol(s,AT_FUNCTION);
|
|
- reference_reset_symbol(r,sym,0,sizeof(pint));
|
|
|
|
|
|
+ reference_reset_symbol(r,sym,0,sizeof(pint),[]);
|
|
|
|
|
|
if (tf_pic_uses_got in target_info.flags) and
|
|
if (tf_pic_uses_got in target_info.flags) and
|
|
(cs_create_pic in current_settings.moduleswitches) then
|
|
(cs_create_pic in current_settings.moduleswitches) then
|
|
@@ -1689,7 +1689,7 @@ unit cgcpu;
|
|
end;
|
|
end;
|
|
LOC_REFERENCE :
|
|
LOC_REFERENCE :
|
|
begin
|
|
begin
|
|
- reference_reset_base(href2,hloc^.reference.index,hloc^.reference.offset,paraloc.alignment);
|
|
|
|
|
|
+ reference_reset_base(href2,hloc^.reference.index,hloc^.reference.offset,paraloc.alignment,[]);
|
|
{ concatcopy should choose the best way to copy the data }
|
|
{ concatcopy should choose the best way to copy the data }
|
|
g_concatcopy(list,href,href2,tcgsize2size[hloc^.size]);
|
|
g_concatcopy(list,href,href2,tcgsize2size[hloc^.size]);
|
|
end;
|
|
end;
|
|
@@ -1935,7 +1935,7 @@ unit cgcpu;
|
|
if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
|
|
if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
|
|
a_reg_alloc(list,NR_FRAME_POINTER_REG);
|
|
a_reg_alloc(list,NR_FRAME_POINTER_REG);
|
|
{ save int registers }
|
|
{ save int registers }
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
|
|
regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
|
|
@@ -2070,7 +2070,7 @@ unit cgcpu;
|
|
if (mmregs<>[]) or
|
|
if (mmregs<>[]) or
|
|
(firstfloatreg<>RS_NO) then
|
|
(firstfloatreg<>RS_NO) then
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
if (tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023) or
|
|
if (tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023) or
|
|
(current_settings.fputype in [fpu_vfpv2,fpu_vfpv3,fpu_vfpv4,fpu_vfpv3_d16]) then
|
|
(current_settings.fputype in [fpu_vfpv2,fpu_vfpv3,fpu_vfpv4,fpu_vfpv3_d16]) then
|
|
begin
|
|
begin
|
|
@@ -2177,7 +2177,7 @@ unit cgcpu;
|
|
if (firstfloatreg<>RS_NO) or
|
|
if (firstfloatreg<>RS_NO) or
|
|
(mmregs<>[]) then
|
|
(mmregs<>[]) then
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
if (tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023) or
|
|
if (tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023) or
|
|
(current_settings.fputype in [fpu_vfpv2,fpu_vfpv3,fpu_vfpv4,fpu_vfpv3_d16]) then
|
|
(current_settings.fputype in [fpu_vfpv2,fpu_vfpv3,fpu_vfpv4,fpu_vfpv3_d16]) then
|
|
begin
|
|
begin
|
|
@@ -2250,7 +2250,7 @@ unit cgcpu;
|
|
saveregs:=regs*[RS_R8,RS_R10,RS_R11];
|
|
saveregs:=regs*[RS_R8,RS_R10,RS_R11];
|
|
if saveregs<>[] then
|
|
if saveregs<>[] then
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
for r:=RS_R8 to RS_R11 do
|
|
for r:=RS_R8 to RS_R11 do
|
|
@@ -2318,7 +2318,7 @@ unit cgcpu;
|
|
end
|
|
end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_FD));
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_FD));
|
|
@@ -2327,7 +2327,7 @@ unit cgcpu;
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
{ restore int registers and return }
|
|
{ restore int registers and return }
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_FRAME_POINTER_REG;
|
|
ref.index:=NR_FRAME_POINTER_REG;
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_EA));
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_EA));
|
|
end;
|
|
end;
|
|
@@ -2362,7 +2362,7 @@ unit cgcpu;
|
|
Otherwise the init code can be distorted in later stages of code generation. }
|
|
Otherwise the init code can be distorted in later stages of code generation. }
|
|
a_reg_alloc(list,NR_R12);
|
|
a_reg_alloc(list,NR_R12);
|
|
|
|
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
current_asmdata.getglobaldatalabel(l);
|
|
current_asmdata.getglobaldatalabel(l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
ref.symbol:=l;
|
|
ref.symbol:=l;
|
|
@@ -2460,7 +2460,7 @@ unit cgcpu;
|
|
if the symbol is absolute or relative there.
|
|
if the symbol is absolute or relative there.
|
|
}
|
|
}
|
|
{ create consts entry }
|
|
{ create consts entry }
|
|
- reference_reset(tmpref,4);
|
|
|
|
|
|
+ reference_reset(tmpref,4,[]);
|
|
current_asmdata.getjumplabel(l);
|
|
current_asmdata.getjumplabel(l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
tmpref.symboldata:=current_procinfo.aktlocaldata.last;
|
|
tmpref.symboldata:=current_procinfo.aktlocaldata.last;
|
|
@@ -2518,7 +2518,7 @@ unit cgcpu;
|
|
(tf_pic_uses_got in target_info.flags) and
|
|
(tf_pic_uses_got in target_info.flags) and
|
|
assigned(ref.symbol) then
|
|
assigned(ref.symbol) then
|
|
begin
|
|
begin
|
|
- reference_reset(tmpref,4);
|
|
|
|
|
|
+ reference_reset(tmpref,4,[]);
|
|
tmpref.base:=current_procinfo.got;
|
|
tmpref.base:=current_procinfo.got;
|
|
tmpref.index:=tmpreg;
|
|
tmpref.index:=tmpreg;
|
|
list.concat(taicpu.op_reg_ref(A_LDR,tmpreg,tmpref));
|
|
list.concat(taicpu.op_reg_ref(A_LDR,tmpreg,tmpref));
|
|
@@ -2802,7 +2802,7 @@ unit cgcpu;
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
a_loadaddr_ref_reg(list,source,srcreg);
|
|
a_loadaddr_ref_reg(list,source,srcreg);
|
|
- reference_reset_base(srcref,srcreg,0,source.alignment);
|
|
|
|
|
|
+ reference_reset_base(srcref,srcreg,0,source.alignment,source.volatility);
|
|
end;
|
|
end;
|
|
|
|
|
|
while (len div 4 <> 0) and (tmpregi<maxtmpreg) do
|
|
while (len div 4 <> 0) and (tmpregi<maxtmpreg) do
|
|
@@ -2816,7 +2816,7 @@ unit cgcpu;
|
|
|
|
|
|
destreg:=getintregister(list,OS_ADDR);
|
|
destreg:=getintregister(list,OS_ADDR);
|
|
a_loadaddr_ref_reg(list,dest,destreg);
|
|
a_loadaddr_ref_reg(list,dest,destreg);
|
|
- reference_reset_base(dstref,destreg,0,dest.alignment);
|
|
|
|
|
|
+ reference_reset_base(dstref,destreg,0,dest.alignment,dest.volatility);
|
|
tmpregi2:=1;
|
|
tmpregi2:=1;
|
|
while (tmpregi2<=tmpregi) do
|
|
while (tmpregi2<=tmpregi) do
|
|
begin
|
|
begin
|
|
@@ -2884,11 +2884,11 @@ unit cgcpu;
|
|
begin{unaligned & 4<len<helpsize **or** aligned/unaligned & len>helpsize}
|
|
begin{unaligned & 4<len<helpsize **or** aligned/unaligned & len>helpsize}
|
|
destreg:=getintregister(list,OS_ADDR);
|
|
destreg:=getintregister(list,OS_ADDR);
|
|
a_loadaddr_ref_reg(list,dest,destreg);
|
|
a_loadaddr_ref_reg(list,dest,destreg);
|
|
- reference_reset_base(dstref,destreg,0,dest.alignment);
|
|
|
|
|
|
+ reference_reset_base(dstref,destreg,0,dest.alignment,dest.volatility);
|
|
|
|
|
|
srcreg:=getintregister(list,OS_ADDR);
|
|
srcreg:=getintregister(list,OS_ADDR);
|
|
a_loadaddr_ref_reg(list,source,srcreg);
|
|
a_loadaddr_ref_reg(list,source,srcreg);
|
|
- reference_reset_base(srcref,srcreg,0,source.alignment);
|
|
|
|
|
|
+ reference_reset_base(srcref,srcreg,0,source.alignment,source.volatility);
|
|
|
|
|
|
countreg:=getintregister(list,OS_32);
|
|
countreg:=getintregister(list,OS_32);
|
|
|
|
|
|
@@ -3583,7 +3583,7 @@ unit cgcpu;
|
|
if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
|
|
if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
|
|
a_reg_alloc(list,NR_FRAME_POINTER_REG);
|
|
a_reg_alloc(list,NR_FRAME_POINTER_REG);
|
|
{ save int registers }
|
|
{ save int registers }
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
|
|
regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
|
|
@@ -3794,7 +3794,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else
|
|
else
|
|
usedtmpref:=ref;
|
|
usedtmpref:=ref;
|
|
@@ -3827,7 +3827,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else
|
|
else
|
|
usedtmpref:=ref;
|
|
usedtmpref:=ref;
|
|
@@ -3884,7 +3884,7 @@ unit cgcpu;
|
|
list.concat(taicpu.op_reg_const(A_MOV,reg,a))
|
|
list.concat(taicpu.op_reg_const(A_MOV,reg,a))
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- reference_reset(hr,4);
|
|
|
|
|
|
+ reference_reset(hr,4,[]);
|
|
|
|
|
|
current_asmdata.getjumplabel(l);
|
|
current_asmdata.getjumplabel(l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
@@ -3924,7 +3924,7 @@ unit cgcpu;
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
list.concat(taicpu.op_regset(A_PUSH,R_INTREGISTER,R_SUBWHOLE,[RS_R4]));
|
|
list.concat(taicpu.op_regset(A_PUSH,R_INTREGISTER,R_SUBWHOLE,[RS_R4]));
|
|
- reference_reset(tmpref,4);
|
|
|
|
|
|
+ reference_reset(tmpref,4,[]);
|
|
current_asmdata.getjumplabel(l);
|
|
current_asmdata.getjumplabel(l);
|
|
current_procinfo.aktlocaldata.Concat(tai_align.Create(4));
|
|
current_procinfo.aktlocaldata.Concat(tai_align.Create(4));
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
@@ -3941,13 +3941,13 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
{ offset in the wrapper needs to be adjusted for the stored
|
|
{ offset in the wrapper needs to be adjusted for the stored
|
|
return address }
|
|
return address }
|
|
- reference_reset_base(href,reference.index,reference.offset+sizeof(aint),sizeof(pint));
|
|
|
|
|
|
+ reference_reset_base(href,reference.index,reference.offset+sizeof(aint),sizeof(pint),[]);
|
|
if is_thumb_imm(ioffset) then
|
|
if is_thumb_imm(ioffset) then
|
|
a_op_const_ref(list,OP_SUB,size,ioffset,href)
|
|
a_op_const_ref(list,OP_SUB,size,ioffset,href)
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
list.concat(taicpu.op_regset(A_PUSH,R_INTREGISTER,R_SUBWHOLE,[RS_R4]));
|
|
list.concat(taicpu.op_regset(A_PUSH,R_INTREGISTER,R_SUBWHOLE,[RS_R4]));
|
|
- reference_reset(tmpref,4);
|
|
|
|
|
|
+ reference_reset(tmpref,4,[]);
|
|
current_asmdata.getjumplabel(l);
|
|
current_asmdata.getjumplabel(l);
|
|
current_procinfo.aktlocaldata.Concat(tai_align.Create(4));
|
|
current_procinfo.aktlocaldata.Concat(tai_align.Create(4));
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
@@ -4008,7 +4008,7 @@ unit cgcpu;
|
|
tmpreg:=getintregister(list,OS_ADDR);
|
|
tmpreg:=getintregister(list,OS_ADDR);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg);
|
|
|
|
|
|
- reference_reset_base(href,tmpreg,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(href,tmpreg,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else if (op=A_LDR) and
|
|
else if (op=A_LDR) and
|
|
(oppostfix in [PF_None]) and
|
|
(oppostfix in [PF_None]) and
|
|
@@ -4018,7 +4018,7 @@ unit cgcpu;
|
|
tmpreg:=getintregister(list,OS_ADDR);
|
|
tmpreg:=getintregister(list,OS_ADDR);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg);
|
|
|
|
|
|
- reference_reset_base(href,tmpreg,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(href,tmpreg,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else if (op=A_LDR) and
|
|
else if (op=A_LDR) and
|
|
((oppostfix in [PF_SH,PF_SB]) or
|
|
((oppostfix in [PF_SH,PF_SB]) or
|
|
@@ -4027,7 +4027,7 @@ unit cgcpu;
|
|
tmpreg:=getintregister(list,OS_ADDR);
|
|
tmpreg:=getintregister(list,OS_ADDR);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg);
|
|
|
|
|
|
- reference_reset_base(href,tmpreg,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(href,tmpreg,0,ref.alignment,ref.volatility);
|
|
end;
|
|
end;
|
|
|
|
|
|
Result:=inherited handle_load_store(list, op, oppostfix, reg, href);
|
|
Result:=inherited handle_load_store(list, op, oppostfix, reg, href);
|
|
@@ -4285,7 +4285,7 @@ unit cgcpu;
|
|
list.concat(taicpu.op_reg_const(A_MOVW,reg,a))
|
|
list.concat(taicpu.op_reg_const(A_MOVW,reg,a))
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- reference_reset(hr,4);
|
|
|
|
|
|
+ reference_reset(hr,4,[]);
|
|
|
|
|
|
current_asmdata.getjumplabel(l);
|
|
current_asmdata.getjumplabel(l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
cg.a_label(current_procinfo.aktlocaldata,l);
|
|
@@ -4345,7 +4345,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else
|
|
else
|
|
usedtmpref:=ref;
|
|
usedtmpref:=ref;
|
|
@@ -4377,7 +4377,7 @@ unit cgcpu;
|
|
begin
|
|
begin
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
tmpreg2:=getintregister(list,OS_INT);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
a_loadaddr_ref_reg(list,ref,tmpreg2);
|
|
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
|
|
|
|
|
|
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment,ref.volatility);
|
|
end
|
|
end
|
|
else
|
|
else
|
|
usedtmpref:=ref;
|
|
usedtmpref:=ref;
|
|
@@ -4799,7 +4799,7 @@ unit cgcpu;
|
|
list.concat(taicpu.op_reg_reg(A_MOV,NR_R12,NR_STACK_POINTER_REG));
|
|
list.concat(taicpu.op_reg_reg(A_MOV,NR_R12,NR_STACK_POINTER_REG));
|
|
end;
|
|
end;
|
|
{ save int registers }
|
|
{ save int registers }
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
|
|
|
|
@@ -4850,7 +4850,7 @@ unit cgcpu;
|
|
|
|
|
|
if firstfloatreg<>RS_NO then
|
|
if firstfloatreg<>RS_NO then
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
|
|
if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
|
|
begin
|
|
begin
|
|
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
|
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
|
@@ -4900,7 +4900,7 @@ unit cgcpu;
|
|
|
|
|
|
if firstfloatreg<>RS_NO then
|
|
if firstfloatreg<>RS_NO then
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
|
|
if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
|
|
begin
|
|
begin
|
|
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
|
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
|
@@ -4956,7 +4956,7 @@ unit cgcpu;
|
|
list.concat(taicpu.op_reg_reg(A_MOV,NR_R15,NR_R14))
|
|
list.concat(taicpu.op_reg_reg(A_MOV,NR_R15,NR_R14))
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- reference_reset(ref,4);
|
|
|
|
|
|
+ reference_reset(ref,4,[]);
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.index:=NR_STACK_POINTER_REG;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
ref.addressmode:=AM_PREINDEXED;
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_FD));
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_FD));
|
|
@@ -5018,7 +5018,7 @@ unit cgcpu;
|
|
)
|
|
)
|
|
) then
|
|
) then
|
|
begin
|
|
begin
|
|
- reference_reset(tmpref,4);
|
|
|
|
|
|
+ reference_reset(tmpref,4,[]);
|
|
|
|
|
|
{ load symbol }
|
|
{ load symbol }
|
|
tmpreg:=getintregister(list,OS_INT);
|
|
tmpreg:=getintregister(list,OS_INT);
|