cinvoke-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cinvoke-svn] r54 - in trunk/cinvoke/lib: . arch


From: will
Subject: [cinvoke-svn] r54 - in trunk/cinvoke/lib: . arch
Date: 28 Jun 2006 22:23:53 -0400

Author: will
Date: 2006-06-28 22:23:48 -0400 (Wed, 28 Jun 2006)
New Revision: 54

Modified:
   trunk/cinvoke/lib/arch/gcc_x64_unix.h
   trunk/cinvoke/lib/cinvoke.c
Log:
removed old (?) XXX, added parameter macros for amd64


Modified: trunk/cinvoke/lib/arch/gcc_x64_unix.h
===================================================================
--- trunk/cinvoke/lib/arch/gcc_x64_unix.h       2006-06-28 03:42:43 UTC (rev 53)
+++ trunk/cinvoke/lib/arch/gcc_x64_unix.h       2006-06-29 02:23:48 UTC (rev 54)
@@ -39,7 +39,22 @@
        long dval;
 } ArchRetValue;
 
-typedef struct _ArchRegParms {} ArchRegParms; // XXX
+typedef struct _ArchRegParms {
+       long rdi;
+       long rsi;
+       long rdx;
+       long rcx;
+       long r8;
+       long r9;
+       long xmm0;
+       long xmm1;
+       long xmm2;
+       long xmm3;
+       long xmm4;
+       long xmm5;
+       long xmm6;
+       long xmm7;
+} ArchRegParms;
 
 typedef char cinv_int8_t;
 typedef short cinv_int16_t;
@@ -61,13 +76,75 @@
 /////////////////////////////////////
 // macros
 /////////////////////////////////////
-#define ARCH_SAVE_REGPARMS(regparms) // XXX
+#define ARCH_SAVE_REGPARMS(regparms) \
+       __asm__("movq %%rdi, %0; \
+               movq %%rsi, %1; \
+               movq %%rdx, %2; \
+               movq %%rcx, %3; \
+               movq %%r8, %4; \
+               movq %%r9, %5; \
+               movsd %%xmm0, %5; \
+               movsd %%xmm1, %7; \
+               movsd %%xmm2, %8; \
+               movsd %%xmm3, %9; \
+               movsd %%xmm4, %10; \
+               movsd %%xmm5, %11; \
+               movsd %%xmm6, %12; \
+               movsd %%xmm7, %13" : \
+                       "=m" ((regparms).rdi), \
+                       "=m" ((regparms).rsi), \
+                       "=m" ((regparms).rdx), \
+                       "=m" ((regparms).rcx), \
+                       "=m" ((regparms).r8), \
+                       "=m" ((regparms).r9), \
+                       "=m" ((regparms).xmm0), \
+                       "=m" ((regparms).xmm1), \
+                       "=m" ((regparms).xmm2), \
+                       "=m" ((regparms).xmm3), \
+                       "=m" ((regparms).xmm4), \
+                       "=m" ((regparms).xmm5), \
+                       "=m" ((regparms).xmm6), \
+                       "=m" ((regparms).xmm7));
 
-#define ARCH_CALL(regparms, ep) ((void (*)())ep)(); // XXX
+#define ARCH_CALL(regparms, ep) \
+       __asm__("movq %0, %%rdi; \
+               movq %1, %%rsi; \
+               movq %2, %%rdx; \
+               movq %3, %%rcx; \
+               movq %4, %%r8; \
+               movq %5, %%r9; \
+               movsd %6, %%xmm0; \
+               movsd %7, %%xmm1; \
+               movsd %8, %%xmm2; \
+               movsd %9, %%xmm3; \
+               movsd %10, %%xmm4; \
+               movsd %11, %%xmm5; \
+               movsd %12, %%xmm6; \
+               movsd %13, %%xmm7; \
+               call *%14" :: \
+                       "m" ((regparms).rdi), \
+                       "m" ((regparms).rsi), \
+                       "m" ((regparms).rdx), \
+                       "m" ((regparms).rcx), \
+                       "m" ((regparms).r8), \
+                       "m" ((regparms).r9), \
+                       "m" ((regparms).xmm0), \
+                       "m" ((regparms).xmm1), \
+                       "m" ((regparms).xmm2), \
+                       "m" ((regparms).xmm3), \
+                       "m" ((regparms).xmm4), \
+                       "m" ((regparms).xmm5), \
+                       "m" ((regparms).xmm6), \
+                       "m" ((regparms).xmm7), \
+                       "m" (ep) : \
+                       "%rdi", "%rsi", "%rdx", "%rcx", \
+                       "%r8", "%r9", "%xmm0", "%xmm1", \
+                       "%xmm2", "%xmm3", "%xmm4", "%xmm5", \
+                       "%xmm6", "%xmm7");
 
 #define ARCH_SAVE_RETURN(archvalue) \
        __asm__("movq %%rax, %0; \
-               movsd %xmm0, %1" : \
+               movsd %%xmm0, %1" : \
                        "=m" ((archvalue).ival), \
                        "=m" ((archvalue).dval));
 

Modified: trunk/cinvoke/lib/cinvoke.c
===================================================================
--- trunk/cinvoke/lib/cinvoke.c 2006-06-28 03:42:43 UTC (rev 53)
+++ trunk/cinvoke/lib/cinvoke.c 2006-06-29 02:23:48 UTC (rev 54)
@@ -382,7 +382,7 @@
        return CINV_SUCCESS;
 }
 
-void CDECL cinv_cbthunk(CInvCallback *cb) { // XXX fastcall
+void CDECL cinv_cbthunk(CInvCallback *cb) {
        long long int returnptr;
        ArchRetValue retval;
        void **parameters;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]