* MIPS case node: simplified code a bit.

* Moved jump tables into data segment. For disassembly-based stack unwinding to work properly, MIPS ABI expects text segment to contain instructions only.

git-svn-id: trunk@24904 -
This commit is contained in:
sergei 2013-06-15 12:36:21 +00:00
parent 5bcae5a80a
commit 121271c38f

View File

@ -104,22 +104,15 @@ begin
{ create reference }
reference_reset_symbol(href, table, 0, sizeof(aint));
href.offset := (-aint(min_)) * 4;
basereg := cg.getaddressregister(current_asmdata.CurrAsmList);
cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList, href, basereg);
href.base:=indexreg;
jmpreg := cg.getaddressregister(current_asmdata.CurrAsmList);
reference_reset(href, sizeof(aint));
href.index := indexreg;
href.base := basereg;
cg.a_load_ref_reg(current_asmdata.CurrAsmList, OS_ADDR, OS_ADDR, href, jmpreg);
current_asmdata.CurrAsmList.concat(taicpu.op_reg(A_JR, jmpreg));
{ Delay slot }
current_asmdata.CurrAsmList.concat(taicpu.op_none(A_NOP));
{ generate jump table }
if not(cs_opt_size in current_settings.optimizerswitches) then
jumpSegment.concat(Tai_Align.Create_Op(4, 0));
new_section(jumpSegment,sec_rodata,current_procinfo.procdef.mangledname,sizeof(aint));
jumpSegment.concat(Tai_label.Create(table));
last := min_;
genitem(hp);