Re: vcomp: better stub for _vcomp_fork
Dan Kegel <dank(a)kegel.com> writes:
@@ -41,6 +42,80 @@ double CDECL omp_get_wtime(void) return GetTickCount() / 1000.0; }
+/* Call helper with the ncount args after ncount */ +extern void WINAPIV _vcomp_fork(DWORD parallel, int ncount, void *helper, ...); +#ifdef __i386__ +__ASM_GLOBAL_FUNC( _vcomp_fork, + "push %ebp\n\t" + "movl %esp,%ebp\n\t" + + /* Push varargs */ + "movl 12(%ebp),%ecx\n\t" /* if (nargs > 0) */ + "test %ecx,%ecx\n\t" + "jz copyend\n\t" + "leal 20(%ebp),%edx\n\t" /* dx -> first vararg */ + "leal (%edx,%ecx,4),%edx\n\t" /* dx += nargs * sizeof arg */ + "copyloop:\n\t" /* while (nargs-- > 0) */ + "sub $4,%edx\n\t" + "pushl (%edx)\n\t" /* push next vararg */ + "dec %ecx\n\t" + "jnz copyloop\n\t" + "copyend:\n\t" + + /* Call helper and return */ + "call *16(%ebp)\n\t" + "movl %ebp,%esp\n\t" + "pop %ebp\n\t" + "ret\n\t" + ) +#endif
There are several places that already implement that sort of thing the right way, you should copy one of them instead of reinventing the wheel. -- Alexandre Julliard julliard(a)winehq.org
participants (1)
-
Alexandre Julliard