Przeglądaj źródła

* fixed and enabled case jump table generation for ARM.

git-svn-id: trunk@5446 -
yury 18 lat temu
rodzic
commit
187c71ac18
1 zmienionych plików z 5 dodań i 7 usunięć
  1. 5 7
      compiler/arm/narmset.pas

+ 5 - 7
compiler/arm/narmset.pas

@@ -64,7 +64,7 @@ implementation
 
     function tarmcasenode.has_jumptable : boolean;
       begin
-        has_jumptable:=false;
+        has_jumptable:=true;
       end;
 
 
@@ -104,16 +104,14 @@ 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);
         { create reference }
         reference_reset_symbol(href,table,0);
         href.offset:=(-aint(min_))*4;
-        href.index:=indexreg;
-        href.scalefactor:=4;
-        targetreg:=cg.getintregister(current_asmdata.CurrAsmList,OS_ADDR);
-        cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,href,targetreg);
-        cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_ADDR,OS_ADDR,targetreg,NR_PC);
+        href.index:=targetreg;
+        cg.a_op_const_reg_reg(current_asmdata.CurrAsmList,OP_SHL,OS_ADDR,2,indexreg,targetreg);
+        cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_ADDR,OS_ADDR,href,NR_PC);
         { generate jump table }
-        new_section(current_procinfo.aktlocaldata,sec_data,current_procinfo.procdef.mangledname,sizeof(aint));
         current_procinfo.aktlocaldata.concat(Tai_label.Create(table));
         last:=min_;
         genitem(current_procinfo.aktlocaldata,hp);