|
@@ -175,7 +175,7 @@ unit cgcpu;
|
|
|
|
|
|
|
|
|
uses
|
|
|
- globals,verbose,systems,cutils,
|
|
|
+ globals,verbose,systems,cutils,sysutils,
|
|
|
aopt,aoptcpu,
|
|
|
fmodule,
|
|
|
symconst,symsym,
|
|
@@ -384,19 +384,26 @@ unit cgcpu;
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
+ tmpreg2:=getintregister(list,OS_INT);
|
|
|
if target_info.endian=endian_big then
|
|
|
inc(usedtmpref.offset,3);
|
|
|
a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
|
|
|
+
|
|
|
inc(usedtmpref.offset,dir);
|
|
|
a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
|
|
|
+
|
|
|
+ inc(usedtmpref.offset,dir);
|
|
|
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg2);
|
|
|
+
|
|
|
so.shiftimm:=8;
|
|
|
list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
|
|
|
+
|
|
|
inc(usedtmpref.offset,dir);
|
|
|
a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
|
|
|
+
|
|
|
so.shiftimm:=16;
|
|
|
- list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
|
|
|
- inc(usedtmpref.offset,dir);
|
|
|
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
|
|
|
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg2,so));
|
|
|
+
|
|
|
so.shiftimm:=24;
|
|
|
list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
|
|
|
end;
|
|
@@ -703,7 +710,7 @@ unit cgcpu;
|
|
|
OP_SAR:
|
|
|
begin
|
|
|
if a>32 then
|
|
|
- internalerror(200308295);
|
|
|
+ internalerror(200308298);
|
|
|
if a<>0 then
|
|
|
begin
|
|
|
shifterop_reset(so);
|
|
@@ -1066,7 +1073,7 @@ unit cgcpu;
|
|
|
OS_F32:
|
|
|
oppostfix:=PF_None;
|
|
|
else
|
|
|
- InternalError(200308295);
|
|
|
+ InternalError(200308299);
|
|
|
end;
|
|
|
if (ref.alignment in [1,2]) and (ref.alignment<tcgsize2size[tosize]) then
|
|
|
begin
|
|
@@ -1676,7 +1683,7 @@ unit cgcpu;
|
|
|
|
|
|
if regs=[] then
|
|
|
begin
|
|
|
- if (current_settings.cputype<cpu_armv6) then
|
|
|
+ if (current_settings.cputype<cpu_armv5) then
|
|
|
list.concat(taicpu.op_reg_reg(A_MOV,NR_PC,NR_R14))
|
|
|
else
|
|
|
list.concat(taicpu.op_reg(A_BX,NR_R14))
|
|
@@ -1697,7 +1704,7 @@ unit cgcpu;
|
|
|
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_EA));
|
|
|
end;
|
|
|
end
|
|
|
- else if (current_settings.cputype<cpu_armv6) then
|
|
|
+ else if (current_settings.cputype<cpu_armv5) then
|
|
|
list.concat(taicpu.op_reg_reg(A_MOV,NR_PC,NR_R14))
|
|
|
else
|
|
|
list.concat(taicpu.op_reg(A_BX,NR_R14))
|