PDA

View Full Version : [C] Inline assembly e Salti


Bluedeep85
02-02-2009, 13:11
Ciao ragazzi,

qualcuno mi da una mano a costruire un salto in inline assembly?

Sono un bel po' confuso.

Grazie ;)

cionci
02-02-2009, 14:53
Compilatore e sistema operativo ?

Bluedeep85
02-02-2009, 15:01
Compilatore e sistema operativo ?

gcc (ANSI C) e *nix...

Devo fare un mirobench di una istruzione di salto


#include <time.h>

int main(int argv, char **argc)
{
double a;
double b;
int count;
int i;
clock_t time1,time2;

time1 = clock();
b=1.01;
a=1.01;
count=1000000000;
__asm__ (".innerloop:\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"sub $1, %2\n\t"
"jne .innerloop\n\t"
:
: "f" ((double)a), "f" ((double)b), "r" (count));
time2 = clock();
printf("%d, %d, %f\n",time1,time2,(double)(time2-time1)/CLOCKS_PER_SEC);
exit(0);
}


Semplicemente invece degli "nop\n\t", una bella istruzione di salto

if (VARIABILE=TRUE)

10 nop

else

20 nop.

Devo studiare la latenza nella condizione di salto o no

Grazie

cionci
02-02-2009, 15:21
Sinceramente non ho mai usato jmp nell'inline assembly. A cosa ti servono quegli \n e \t ?
Non credo che tu ce la faccia a misurare quella differenza. Supponendo un throughput di una istruzione ALU per ciclo di clock si tratta di misurare un tempo dell'ordine dei nanosecondi, ovviamente la risoluzione di clock() non è sufficiente (microsecondi).

Bluedeep85
02-02-2009, 16:29
Sinceramente non ho mai usato jmp nell'inline assembly. A cosa ti servono quegli \n e \t ?
Non credo che tu ce la faccia a misurare quella differenza. Supponendo un throughput di una istruzione ALU per ciclo di clock si tratta di misurare un tempo dell'ordine dei nanosecondi, ovviamente la risoluzione di clock() non è sufficiente (microsecondi).

\n e \t sono nell'esempio non saprei...

Per la questione della misurazione, ovviamente viene fatto un loop per poter rendere tangibili questi dati...

cionci
02-02-2009, 16:31
\n e \t sono nell'esempio non saprei
In tutto l'altro inline assembler che ho visto non c'erano :boh:

cionci
02-02-2009, 16:35
http://asm.sourceforge.net/articles/linasm.html#InlineASM
http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt

Qui fa un esempio con loop, con jmp dovrebbe essere la stessa cosa:
http://www.ibm.com/developerworks/linux/library/l-ia.html?dwzone=linux

Bluedeep85
02-02-2009, 17:01
http://asm.sourceforge.net/articles/linasm.html#InlineASM
http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt

Qui fa un esempio con loop, con jmp dovrebbe essere la stessa cosa:
http://www.ibm.com/developerworks/linux/library/l-ia.html?dwzone=linux

Sinceramente sto trovando difficoltà :cry: