[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [cinvoke-svn] r54 - in trunk/cinvoke/lib: . arch,
will <=