Browse Source

* removed some unneeded parts of do_syscall

Károly Balogh 21 năm trước cách đây
mục cha
commit
5345dccb1b
1 tập tin đã thay đổi với 12 bổ sung28 xóa
  1. 12 28
      compiler/powerpc/nppccal.pas

+ 12 - 28
compiler/powerpc/nppccal.pas

@@ -75,39 +75,20 @@ implementation
         case target_info.system of
           system_powerpc_morphos:
             begin
-              cg.a_reg_alloc(exprasmlist,NR_STACK_POINTER_REG);
-              cg.a_reg_alloc(exprasmlist,NR_R0);
-              cg.a_reg_alloc(exprasmlist,NR_R3);
-
-              { save link register }
-              exprasmlist.concat(taicpu.op_reg(A_MFLR,NR_R0));
-              reference_reset_base(tmpref,NR_STACK_POINTER_REG,LA_LR_SYSV);
-              exprasmlist.concat(taicpu.op_reg_ref(A_STW,NR_R0,tmpref));
-              
-              { adjust stack ptr }
-              reference_reset_base(tmpref,NR_STACK_POINTER_REG,-8); { ??? }
-              exprasmlist.concat(taicpu.op_reg_ref(A_STWU,NR_STACK_POINTER_REG,tmpref));
-                            
+              cg.getexplicitregister(exprasmlist,NR_R0);
+              cg.getexplicitregister(exprasmlist,NR_R3);
+                                       
               { store call offset into R3 }
-              exprasmlist.concat(taicpu.op_reg_const(A_LI,NR_R3,tprocdef(procdefinition).extnumber));
+              exprasmlist.concat(taicpu.op_reg_const(A_LI,NR_R3,-tprocdef(procdefinition).extnumber));
               
               { prepare LR, and call function }
               reference_reset_base(tmpref,NR_R2,100); { 100 ($64) is EmulDirectCallOS offset } 
               exprasmlist.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,tmpref));
               exprasmlist.concat(taicpu.op_reg(A_MTLR,NR_R0));
-              exprasmlist.concat(taicpu.op_none(A_BLRL));
-              
-              { adjust back stack ptr }
-              exprasmlist.concat(taicpu.op_reg_reg_const(A_ADDI,NR_R1,NR_R1,8)); { ??? }
-              
-              { restore link register }
-              reference_reset_base(tmpref,NR_STACK_POINTER_REG,LA_LR_SYSV);
-              exprasmlist.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,tmpref));
-              exprasmlist.concat(taicpu.op_reg(A_MTLR,NR_R0));
-              
-              cg.a_reg_dealloc(exprasmlist,NR_STACK_POINTER_REG);
-              cg.a_reg_dealloc(exprasmlist,NR_R0);
-              cg.a_reg_dealloc(exprasmlist,NR_R3);
+              exprasmlist.concat(taicpu.op_none(A_BLRL));            
+
+              cg.ungetregister(exprasmlist,NR_R0);
+              cg.ungetregister(exprasmlist,NR_R3);
             end;
           else
             internalerror(2004042901);
@@ -119,7 +100,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.25  2004-04-29 14:36:42  karoly
+  Revision 1.26  2004-04-29 22:18:37  karoly
+    * removed some unneeded parts of do_syscall
+
+  Revision 1.25  2004/04/29 14:36:42  karoly
     * little cleanup of the previous commit
 
   Revision 1.24  2004/04/29 14:01:23  karoly