浏览代码

* save ESP after pusha and restore before popa for save all registers

peter 22 年之前
父节点
当前提交
c63b079d07
共有 1 个文件被更改,包括 9 次插入2 次删除
  1. 9 2
      compiler/x86/cgx86.pas

+ 9 - 2
compiler/x86/cgx86.pas

@@ -141,7 +141,7 @@ unit cgx86;
 
     uses
        globtype,globals,verbose,systems,cutils,
-       symdef,symsym,defutil,paramgr,procinfo,
+       symdef,paramgr,procinfo,
        rgobj,tgobj,rgcpu;
 
 {$ifndef NOTARGETWIN32}
@@ -1544,6 +1544,8 @@ unit cgx86;
     procedure tcgx86.g_save_all_registers(list : taasmoutput);
       begin
         list.concat(Taicpu.Op_none(A_PUSHA,S_L));
+        tg.GetTemp(list,POINTER_SIZE,tt_noreuse,current_procinfo.save_regs_ref);
+        cg.a_load_reg_ref(list,OS_ADDR,OS_ADDR,NR_ESP,current_procinfo.save_regs_ref);
       end;
 
 
@@ -1551,6 +1553,8 @@ unit cgx86;
       var
         href : treference;
       begin
+        cg.a_load_ref_reg(list,OS_ADDR,OS_ADDR,current_procinfo.save_regs_ref,NR_ESP);
+        tg.UnGetTemp(list,current_procinfo.save_regs_ref);
         if acchiused then
          begin
            reference_reset_base(href,NR_ESP,20);
@@ -1597,7 +1601,10 @@ unit cgx86;
 end.
 {
   $Log$
-  Revision 1.70  2003-10-01 20:34:51  peter
+  Revision 1.71  2003-10-03 14:45:37  peter
+    * save ESP after pusha and restore before popa for save all registers
+
+  Revision 1.70  2003/10/01 20:34:51  peter
     * procinfo unit contains tprocinfo
     * cginfo renamed to cgbase
     * moved cgmessage to verbose