hello,
J'écris une librairie d'arithmétique sur des entiers à taille fixe. Rien de bien nouveau, il en existe une énorme, GMP mais elle est dynamique. J'ai déjà codé une première version de ma lib en C++, cela marche bien et j'ai des bonnes perfs (x2 plus rapide par rapport à gmp).
Comme l'assembleur propose l instruction adc, et bien je recode mes kernels en assembleur avec cette instruction. j'ai recodé addition, soustraction et j attaque maintenant la multiplication
Néanmoins j ai un petit pb avec des fonctions à 3 arguments ...
si je déclare une fonction avec 3 arguments, avec ce petit exemple :
j'ai un beau segfault ..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void test(unsigned long int const * x, unsigned long int const * y, unsigned long int* z){ asm( "movq (%%rdi) ,%%rax \n" "mulq (%%rsi) \n" "movq %%rax ,(%%rdx) \n" : : :"rax","memory" ); }
Par contre si j'écris une fonction à 2 arguments, tout marche
J'ai un peut de mal à comprendre les directives du mode asm avec gcc, mais je pensais que l'on pouvait directement attendre les arguments avec l'opérateur (). Alors où est mon pb ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void test2(unsigned long int * , unsigned long int* ){ asm( "movq (%%rdi) ,%%rax \n" "mulq (%%rsi) \n" "movq %%rax ,(%%rsi) \n" : : : "rax","memory" ); }
Merci bien
Partager