Ver código fonte

* 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 -

sergei 12 anos atrás
pai
commit
121271c38f
1 arquivos alterados com 2 adições e 9 exclusões
  1. 2 9
      compiler/mips/ncpuset.pas

+ 2 - 9
compiler/mips/ncpuset.pas

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