Browse Source

* fixed the calling of virtual methods on i8086

git-svn-id: trunk@24646 -
nickysn 12 years ago
parent
commit
ed92dee3fb
1 changed files with 16 additions and 0 deletions
  1. 16 0
      compiler/ncgcal.pas

+ 16 - 0
compiler/ncgcal.pas

@@ -893,6 +893,22 @@ implementation
                      freeparas;
                      freeparas;
                    end;
                    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);
                  cg.alloccpuregisters(current_asmdata.CurrAsmList,R_INTREGISTER,regs_to_save_int);
                  if cg.uses_registers(R_FPUREGISTER) then
                  if cg.uses_registers(R_FPUREGISTER) then
                    cg.alloccpuregisters(current_asmdata.CurrAsmList,R_FPUREGISTER,regs_to_save_fpu);
                    cg.alloccpuregisters(current_asmdata.CurrAsmList,R_FPUREGISTER,regs_to_save_fpu);