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 ;)
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
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...
\n e \t sono nell'esempio non saprei
In tutto l'altro inline assembler che ho visto non c'erano :boh:
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:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.