소스 검색

* fixed the calling of virtual methods on i8086

git-svn-id: trunk@24646 -
nickysn 12 년 전
부모
커밋
ed92dee3fb
1개의 변경된 파일16개의 추가작업 그리고 0개의 파일을 삭제
  1. 16 0
      compiler/ncgcal.pas

+ 16 - 0
compiler/ncgcal.pas

@@ -893,6 +893,22 @@ implementation
                      freeparas;
                    end;
 
+{$ifdef i8086}
+                 if href.base<>NR_NO then
+                   begin
+                     cg.getcpuregister(current_asmdata.CurrAsmList,NR_BX);
+                     cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_16,OS_16,href.base,NR_BX);
+                     href.base:=NR_BX;
+                     cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_BX);
+                   end;
+                 if href.index<>NR_NO then
+                   begin
+                     cg.getcpuregister(current_asmdata.CurrAsmList,NR_SI);
+                     cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_16,OS_16,href.base,NR_SI);
+                     href.index:=NR_SI;
+                     cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_SI);
+                   end;
+{$endif i8086}
                  cg.alloccpuregisters(current_asmdata.CurrAsmList,R_INTREGISTER,regs_to_save_int);
                  if cg.uses_registers(R_FPUREGISTER) then
                    cg.alloccpuregisters(current_asmdata.CurrAsmList,R_FPUREGISTER,regs_to_save_fpu);