diff dyncall/dyncall_callvm_ppc64.c @ 7:7ca57dbefed4

- ppc64 update from Masanori
author cslag
date Sun, 19 Jul 2015 13:05:34 +0200
parents 3e629dc19168
children 54930a037e8a
line wrap: on
line diff
--- a/dyncall/dyncall_callvm_ppc64.c	Thu Jul 09 20:51:11 2015 +0200
+++ b/dyncall/dyncall_callvm_ppc64.c	Sun Jul 19 13:05:34 2015 +0200
@@ -29,8 +29,10 @@
 
   SUPPORTED CALLING CONVENTIONS
   ppc64/linux
+  ppc64/syscall
 
   REVISION
+  2015/07/08 added syscall
   2014/08/07 initial support
 
 */
@@ -209,6 +211,12 @@
   dcCall_ppc64( target, &self->mRegData, dcVecSize(&self->mVecHead) , dcVecData(&self->mVecHead));
 }
 
+void dc_callvm_call_ppc64_syscall(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*) in_self;
+  dcCall_ppc64_syscall( target, &self->mRegData, dcVecSize(&self->mVecHead) , dcVecData(&self->mVecHead));
+}
+
 void dc_callvm_mode_ppc64(DCCallVM* in_self, DCint mode);
 
 DCCallVM_vt gVT_ppc64 =
@@ -269,6 +277,34 @@
 };
 #endif
 
+DCCallVM_vt gVT_ppc64_syscall =
+{
+  &dc_callvm_free_ppc64
+, &dc_callvm_reset_ppc64
+, &dc_callvm_mode_ppc64
+, &dc_callvm_argBool_ppc64
+, &dc_callvm_argChar_ppc64
+, &dc_callvm_argShort_ppc64
+, &dc_callvm_argInt_ppc64
+, &dc_callvm_argLong_ppc64
+, &dc_callvm_argLongLong_ppc64
+, &dc_callvm_argFloat_ppc64
+, &dc_callvm_argDouble_ppc64
+, &dc_callvm_argPointer_ppc64
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_ppc64_syscall
+, (DCboolvmfunc*)       &dc_callvm_call_ppc64_syscall
+, (DCcharvmfunc*)       &dc_callvm_call_ppc64_syscall
+, (DCshortvmfunc*)      &dc_callvm_call_ppc64_syscall
+, (DCintvmfunc*)        &dc_callvm_call_ppc64_syscall
+, (DClongvmfunc*)       &dc_callvm_call_ppc64_syscall
+, (DClonglongvmfunc*)   &dc_callvm_call_ppc64_syscall
+, (DCfloatvmfunc*)      &dc_callvm_call_ppc64_syscall
+, (DCdoublevmfunc*)     &dc_callvm_call_ppc64_syscall
+, (DCpointervmfunc*)    &dc_callvm_call_ppc64_syscall
+, NULL /* callStruct */
+};
+
 void dc_callvm_mode_ppc64(DCCallVM* in_self, DCint mode)
 {
   DCCallVM_ppc64* self = (DCCallVM_ppc64*) in_self;
@@ -290,6 +326,11 @@
       break;
 #endif
 
+    case DC_CALL_SYS_DEFAULT:
+    case DC_CALL_SYS_PPC64:
+      vt = &gVT_ppc64_syscall;
+      break;
+
     default: 
       self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; 
       return;