I compiled this code using visual studio,
double callVariadicDoubleFunc(double * doubles, unsigned int numDoubles,double(*TestFunc)(double,...))
{
// sizeof(double) must be 8!
if (numDoubles == 0)
return 0;
double * lastDouble = doubles + (numDoubles - 1);
double res;
int temp;
__asm mov eax, numDoubles
__asm mov edx, lastDouble
__asm mov temp,esp
__asm label_loop:
__asm sub esp, 8
__asm fld qword ptr [edx]
__asm fstp qword ptr [esp]
__asm sub eax, 1
__asm sub edx, 8
__asm test eax, eax
__asm jnz label_loop
__asm call TestFunc
__asm fstp qword ptr res;
__asm mov esp, temp
return res;
}
but now I'm trying to compile it using gcc but there are some error I can't resolve! to remove all compile time errors I've changed that code a little to this shape:
double evaluationHelper(double* arguments, unsigned numDoubles, double(*mFunction)(...))
{
int temp;
double res;
arguments += numDoubles;
asm("mov eax, numDoubles" "\n"
"mov ecx, arguments" "\n"
"mov temp,esp" "\n"
"label_loop:" "\n"
"sub esp, 8" "\n"
"fld qword ptr [ecx]" "\n"
"fstp qword ptr [esp]" "\n"
"sub eax, 1" "\n"
"sub ecx, 8" "\n"
"test eax, eax" "\n"
"jnz label_loop" "\n"
"call mFunction" "\n"
"fstp qword ptr res" "\n"
"mov esp, temp" );
return res;
}
but now I'm getting linking errors:
undefined reference to `numDoubles'
undefined reference to `arguments'
undefined reference to `temp'
any idea how can I resolve them?
sidenote: I'm compiling my code with these options :"-g -masm=intel -O0 -Wall"