浏览代码

* fixed SysV syscall support (MorphOS)

Károly Balogh 20 年之前
父节点
当前提交
86c111a794
共有 3 个文件被更改,包括 26 次插入14 次删除
  1. 13 3
      compiler/pdecsub.pas
  2. 7 9
      compiler/powerpc/nppccal.pas
  3. 6 2
      compiler/symconst.pas

+ 13 - 3
compiler/pdecsub.pas

@@ -1237,10 +1237,17 @@ begin
               tprocdef(pd).libsym:=sym;
               if po_syscall_legacy in tprocdef(pd).procoptions then
                 begin
-                  vs:=tparavarsym.create('$syscalllib',paranr_syscall,vs_value,tabstractvarsym(sym).vartype,[vo_is_syscall_lib,vo_is_hidden_para,vo_has_explicit_paraloc]);
+                  vs:=tparavarsym.create('$syscalllib',paranr_syscall_legacy,vs_value,tabstractvarsym(sym).vartype,[vo_is_syscall_lib,vo_is_hidden_para,vo_has_explicit_paraloc]);
                   paramanager.parseparaloc(vs,'A6');
                   pd.parast.insert(vs);
-                end;
+                end
+              else if po_syscall_sysv in tprocdef(pd).procoptions then
+                begin
+                  vs:=tparavarsym.create('$syscalllib',paranr_syscall_sysv,vs_value,tabstractvarsym(sym).vartype,[vo_is_syscall_lib,vo_is_hidden_para]);
+                  pd.parast.insert(vs);
+                end
+              else
+                internalerror(2005010501);
             end
           else
             Message(parser_e_32bitint_or_pointer_variable_expected);
@@ -2365,7 +2372,10 @@ const
 end.
 {
   $Log$
-  Revision 1.223  2005-01-04 17:40:33  karoly
+  Revision 1.224  2005-01-05 02:31:06  karoly
+    * fixed SysV syscall support (MorphOS)
+
+  Revision 1.223  2005/01/04 17:40:33  karoly
     + sysv style syscalls added for MorphOS
 
   Revision 1.222  2004/12/27 17:32:06  peter

+ 7 - 9
compiler/powerpc/nppccal.pas

@@ -79,16 +79,11 @@ implementation
                 begin
                   cg.getcpuregister(exprasmlist,NR_R0);
                   cg.getcpuregister(exprasmlist,NR_R31);
- 
+                    
+                  exprasmlist.concat(taicpu.op_reg_reg_const(A_ADDI,NR_R31,NR_R3,-tprocdef(procdefinition).extnumber));
                   reference_reset(tmpref);
-                  tmpref.symbol := objectlibrary.newasmsymbol(tglobalvarsym(tprocdef(procdefinition).libsym).mangledname,AB_EXTERNAL,AT_DATA);
-                  tmpref.refaddr := addr_hi;
-                  exprasmlist.concat(taicpu.op_reg_ref(A_LIS,NR_R31,tmpref));
                   tmpref.base := NR_R31;
-                  tmpref.refaddr := addr_lo;
-                  exprasmlist.concat(taicpu.op_reg_ref(A_LWZ,NR_R31,tmpref));
-                    
-                  exprasmlist.concat(taicpu.op_reg_reg_const(A_ADDI,NR_R0,NR_R31,-tprocdef(procdefinition).extnumber));
+                  exprasmlist.concat(taicpu.op_reg_ref(A_LWZ,NR_R0,tmpref));
                   exprasmlist.concat(taicpu.op_reg(A_MTCTR,NR_R0));
                   exprasmlist.concat(taicpu.op_none(A_BCTRL));
 
@@ -126,7 +121,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.32  2005-01-04 17:40:33  karoly
+  Revision 1.33  2005-01-05 02:31:06  karoly
+    * fixed SysV syscall support (MorphOS)
+
+  Revision 1.32  2005/01/04 17:40:33  karoly
     + sysv style syscalls added for MorphOS
 
   Revision 1.31  2004/12/06 18:06:37  jonas

+ 6 - 2
compiler/symconst.pas

@@ -106,7 +106,8 @@ const
   paranr_result = 2;
   paranr_self = 3;
   paranr_vmt = 4;
-  paranr_syscall          = high(word)-2;
+  paranr_syscall_sysv     = 9;
+  paranr_syscall_legacy   = high(word)-2;
   paranr_result_leftright = high(word)-1;
 
 type
@@ -432,7 +433,10 @@ initialization
 end.
 {
   $Log$
-  Revision 1.97  2005-01-04 17:40:33  karoly
+  Revision 1.98  2005-01-05 02:31:06  karoly
+    * fixed SysV syscall support (MorphOS)
+
+  Revision 1.97  2005/01/04 17:40:33  karoly
     + sysv style syscalls added for MorphOS
 
   Revision 1.96  2004/12/05 12:28:11  peter