... je viens juste de me rendre compte que j'avais tout declarer en unsigned char alors que j'y accede en unsigned long ...
chuis un malade...
a moins que tout est fait pour avoir des adresse paire vu que j'ai pas eu de bug avec une bonne 50aine de test...

?
merci pour toutes vos reponses mais je comprendrais jamais rien a lasm inline gcc ...
pk on met "r" pour (donnee) et pas "toto" ?
%0 et %1 ca correspond a l'ordre dans lequel on donne les données ?
pk t'as utilisé memory et cc alors que tu ne les utilise pas dans ton code ? c'est pour dire que tu va chercher des trucs dans la ram?
et pk t'utilises esi et ecx et pas autre chose ?
et puis -1(%%esi,%%ecx) ca equivaut a *(donnee+size-1) ? non ? où est ce que tu decremente donnee ou size ?
et qu'est ce que ca donne en unsigned long ? ca ? (size est superieur a 3 forcemment)
extern __inline__ void
reverse (unsigned char *donnee,unsigned long size)
{
if((donnee & 1)==1){size--,*(donnee)=(unsigned char)~*(donnee++);} // si c impaire
unsigned long size1=(unsigned long)(size/4); // au fait qqun sait comment on fait des shifts avec dev c++ ?
__asm__ __volatile__ ("
movl %1,%%ecx
movl %0,%%esi
bloop:
notl -1(%%esi,%%ecx) // est ce que ca decrement de 4 a chaque fois ?
loop bloop"
: : "r" (donnee), "r" (size1) : "ecx", "esi", "memory", "cc");
donne+=size1;
unsigned long size2=0; // je l'initialise a 0 , on sait jamais
size2=(unsigned char)(size & 7);
__asm__ __volatile__ ("
movl %1,%%ecx
movl %0,%%esi
bloop:
notb -1(%%esi,%%ecx)
loop bloop"
: : "r" (donnee), "r" (size2) : "ecx", "esi", "memory", "cc");
}
au fait, j'ai un processeur 64 bit .... ca existe un "not double long " ?