فهرست منبع

m68k-palmos: sketched up some entirely untested syscall support, but it's probably close to what we need

git-svn-id: trunk@36891 -
Károly Balogh 8 سال پیش
والد
کامیت
8a71a70d3c
3فایلهای تغییر یافته به همراه22 افزوده شده و 2 حذف شده
  1. 10 0
      compiler/m68k/n68kcal.pas
  2. 9 0
      compiler/pdecsub.pas
  3. 3 2
      compiler/syscinfo.pas

+ 10 - 0
compiler/m68k/n68kcal.pas

@@ -98,6 +98,16 @@ implementation
               else
               else
                 internalerror(2005010403);
                 internalerror(2005010403);
             end;
             end;
+          system_m68k_palmos:
+            begin
+              if po_syscall in tprocdef(procdefinition).procoptions then
+                begin
+                  current_asmdata.CurrAsmList.concat(taicpu.op_const_reg(A_MOVE,S_W,tprocdef(procdefinition).import_nr,NR_D0));
+                  current_asmdata.CurrAsmList.concat(taicpu.op_const(A_TRAP,S_NO,tprocdef(procdefinition).extnumber));
+                end
+              else
+                internalerror(2017081201);
+            end;
           else
           else
             internalerror(2004042901);
             internalerror(2004042901);
         end;
         end;

+ 9 - 0
compiler/pdecsub.pas

@@ -2103,6 +2103,7 @@ procedure pd_syscall(pd:tabstractprocdef);
         syscall: psyscallinfo;
         syscall: psyscallinfo;
       begin
       begin
         case target_info.system of
         case target_info.system of
+          system_m68k_palmos,
           system_m68k_atari,
           system_m68k_atari,
           system_m68k_amiga,
           system_m68k_amiga,
           system_powerpc_amiga:
           system_powerpc_amiga:
@@ -2179,6 +2180,14 @@ begin
 {$if defined(powerpc) or defined(m68k) or defined(i386) or defined(x86_64) or defined(arm)}
 {$if defined(powerpc) or defined(m68k) or defined(i386) or defined(x86_64) or defined(arm)}
   include_po_syscall;
   include_po_syscall;
 
 
+  if target_info.system = system_m68k_palmos then
+    begin
+      v:=get_intconst;
+      tprocdef(pd).import_nr:=longint(v.svalue);
+      tprocdef(pd).extnumber:=15;
+      exit;
+    end;
+
   if target_info.system = system_m68k_atari then
   if target_info.system = system_m68k_atari then
     begin
     begin
       v:=get_intconst;
       v:=get_intconst;

+ 3 - 2
compiler/syscinfo.pas

@@ -38,7 +38,7 @@ type
 
 
 const
 const
   syscall_conventions: array[1..10] of tsyscallinfo = (
   syscall_conventions: array[1..10] of tsyscallinfo = (
-      ( token: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari] ),
+      ( token: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari,system_m68k_palmos] ),
       ( token: _LEGACY;    procoption: po_syscall_legacy;    validon: [system_powerpc_morphos,system_m68k_amiga] ),
       ( token: _LEGACY;    procoption: po_syscall_legacy;    validon: [system_powerpc_morphos,system_m68k_amiga] ),
       // old sysv naming, for compatibility only (on MorphOS/OS4)
       // old sysv naming, for compatibility only (on MorphOS/OS4)
       ( token: _SYSV;      procoption: po_syscall_basenone;  validon: [system_powerpc_morphos] ),
       ( token: _SYSV;      procoption: po_syscall_basenone;  validon: [system_powerpc_morphos] ),
@@ -72,7 +72,8 @@ type
   end;
   end;
 
 
 const
 const
-  default_syscall_conventions: array[0..6] of tsyscalldefaultinfo = (
+  default_syscall_conventions: array[0..7] of tsyscalldefaultinfo = (
+      ( system: system_m68k_palmos;     procoption: po_syscall ),
       ( system: system_m68k_atari;      procoption: po_syscall ),
       ( system: system_m68k_atari;      procoption: po_syscall ),
       ( system: system_m68k_amiga;      procoption: po_syscall_legacy ),
       ( system: system_m68k_amiga;      procoption: po_syscall_legacy ),
       ( system: system_powerpc_amiga;   procoption: po_syscall_basefirst ),
       ( system: system_powerpc_amiga;   procoption: po_syscall_basefirst ),