Browse Source

* handle interrupt function correctly

pierre 25 years ago
parent
commit
d380bdfec1
1 changed files with 13 additions and 2 deletions
  1. 13 2
      compiler/cgai386.pas

+ 13 - 2
compiler/cgai386.pas

@@ -3779,7 +3779,15 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 
       if not inlined then
       if (po_interrupt in aktprocsym^.definition^.procoptions) then
-          generate_interrupt_stackframe_exit
+          begin
+             if uses_esi then
+               exprasmlist^.concat(new(paicpu,op_reg_ref(A_MOV,S_L,R_ESI,new_reference(R_ESP,16))));
+             if uses_edx then
+               exprasmlist^.concat(new(paicpu,op_reg_ref(A_MOV,S_L,R_EDX,new_reference(R_ESP,12))));
+             if uses_eax then
+               exprasmlist^.concat(new(paicpu,op_reg_ref(A_MOV,S_L,R_EAX,new_reference(R_ESP,0))));
+             generate_interrupt_stackframe_exit;
+          end
       else
        begin
        {Routines with the poclearstack flag set use only a ret.}
@@ -3938,7 +3946,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 end.
 {
   $Log$
-  Revision 1.100  2000-05-04 09:29:31  pierre
+  Revision 1.101  2000-05-09 14:17:33  pierre
+   * handle interrupt function correctly
+
+  Revision 1.100  2000/05/04 09:29:31  pierre
    * saveregisters now does not overwrite registers used as return value for functions
 
   Revision 1.99  2000/04/28 08:53:47  pierre