|
@@ -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);
|