Browse Source

* optimized case jump table generation for ARM.

git-svn-id: trunk@5458 -
yury 19 năm trước cách đây
mục cha
commit
70b5d41d5c
1 tập tin đã thay đổi với 8 bổ sung8 xóa
  1. 8 8
      compiler/arm/narmset.pas

+ 8 - 8
compiler/arm/narmset.pas

@@ -72,7 +72,6 @@ implementation
       var
         table : tasmlabel;
         last : TConstExprInt;
-        targetreg,
         indexreg : tregister;
         href : treference;
 
@@ -104,17 +103,18 @@ implementation
         { make it a 32bit register }
         indexreg:=cg.makeregsize(current_asmdata.CurrAsmList,hregister,OS_INT);
         cg.a_load_reg_reg(current_asmdata.CurrAsmList,opsize,OS_INT,hregister,indexreg);
-        targetreg:=cg.getintregister(current_asmdata.CurrAsmList,OS_ADDR);
+        cg.a_op_const_reg_reg(current_asmdata.CurrAsmList,OP_SUB,OS_ADDR,min_+1,indexreg,indexreg);
         { create reference }
-        reference_reset_symbol(href,table,0);
-        href.offset:=(-aint(min_))*4;
-        href.index:=targetreg;
-        cg.a_op_const_reg_reg(current_asmdata.CurrAsmList,OP_SHL,OS_ADDR,2,indexreg,targetreg);
+        reference_reset(href);
+        href.base:=NR_PC;
+        href.index:=indexreg;
+        href.shiftmode:=SM_LSL;
+        href.shiftimm:=2;
         cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_ADDR,OS_ADDR,href,NR_PC);
         { generate jump table }
-        current_procinfo.aktlocaldata.concat(Tai_label.Create(table));
+        current_asmdata.CurrAsmList.concat(Tai_label.Create(table));
         last:=min_;
-        genitem(current_procinfo.aktlocaldata,hp);
+        genitem(current_asmdata.CurrAsmList,hp);
       end;