C files with inline-asm into bmax?

BlitzMax Forums/BlitzMax Programming/C files with inline-asm into bmax?

Stuart Morgan(Posted 2005) [#1]
Is is possible to import C files that use inline assembly into bmax?

Here is an example of what I am trying to do, but gives the error: cpuspeed.c:12: parse error before "_emit"





Am I doing something wrong or should I put the C function in a dll instead? (this is not possible in bmax)


TartanTangerine (was Indiepath)(Posted 2005) [#2]
Stick it in a dll, oh I did it already : http://www.blitzbasic.com/toolbox/toolbox.php?tool=122


Kev(Posted 2005) [#3]
I think you need to use "AT&T syntax" assembly in inline code with mingw.


Stuart Morgan(Posted 2005) [#4]
Okay I *think* this is the correct AT&T conversion (could be wrong) but still does not compile.

cpuspeed.c:12: parse error before ':' token




BlitzSupport(Posted 2005) [#5]
I'm no assembly programmer, but see if this helps at all:

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s4

Alternatively, you could possibly create a ".a" library in Fasm directly and import/declare that... not something I can advise any further on though!


Kev(Posted 2005) [#6]
Stuart somthing like this, all though i could be wrong. but this does compile. im unsure on '_emit' convertion though.


#include <windows.h>

unsigned __int64 start, stop;
unsigned __int64 nCtr, nFreq, nCtrStop;

int CpuSpeed(void)
{
    QueryPerformanceFrequency((LARGE_INTEGER *)&nFreq);
	
//    __asm__("_emit $0x0F");
//    __asm__("_emit $0x31");

    __asm__("mov _start,%eax");
    __asm__("mov 4+(_start),%edx");
	
    QueryPerformanceCounter((LARGE_INTEGER *)&nCtrStop);
    nCtrStop += nFreq;
    do
	{
        QueryPerformanceCounter((LARGE_INTEGER *)&nCtr);
    } while (nCtr < nCtrStop);
    
//    __asm__("_emit $0x0F");
//    __asm__("_emit $0x31");

    __asm__("mov %eax,_stop");
    __asm__("mov %edx,4+(_stop)");


    return ((stop-start)/1000000);
}



kev


Stuart Morgan(Posted 2005) [#7]
Thanks guys for your help, Ive got it working now.

This is what it should have been...