1

Bonjour,

J'ai un problème assez bizarre ! Le code suivant a été testé sur deux ordis différents, avec TIGCC 0.96 beta 6. Sur l'un des deux tout marche, alors que sur le deuxième, ceci est compilé :

void *ptr;
asm volatile ("move.l %0,%%a1;" :: "p" (ptr) : "a1");

et pas cela :

short x;
void *ptr = (&x);
asm volatile ("move.l %0,%%a1;" :: "p" (ptr) : "a1");

(invalid asm : invalid expression as operand)

Quelqu'un saurait-il pourquoi ?

@+
CBSoft
avatar
Time is on our side.

THE EXPERT 4 : topics/74978-the-expert-4
THE EXPERT 5 : topics/101326-the-expert-5
DUNE 2 : topics/111247-dune-2

2

Tu es vraiment sûr que sur les deux systèmes tu utilisais bien la même version de TIGCC ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Un pote arrive à compiler le projet (contenant seulement le code que j'ai donné) avec la même version de TIGCC que la mienne, la TIGCC 0.96 beta 6. En fait j'aimerais surtout savoir pourquoi chez moi ça ne marche pas. sad
avatar
Time is on our side.

THE EXPERT 4 : topics/74978-the-expert-4
THE EXPERT 5 : topics/101326-the-expert-5
DUNE 2 : topics/111247-dune-2

4

Chez moi non plus ça ne passe pas, c'est le "p" qu'il n'aime pas, "a" passe par exemple. J'aimerais bien comprendre pourquoi.

5

short x; 
void *ptr = (&x); 

void **test = &ptr;
asm volatile ("" :: "g" (test));

asm volatile ("move.l %0,%%a1;" :: "p" (ptr) : "a1");
Est-ce que ça ça passe ?
short x; 
void *ptr = (&x); 

asm volatile ("" :: "m" (ptr));

asm volatile ("move.l %0,%%a1;" :: "p" (ptr) : "a1");
Et ça ?
short x; 
volatile void *ptr = (&x); 
asm volatile ("move.l %0,%%a1;" :: "p" (ptr) : "a1");
Et ça ?



Mais de toutes façons, je ne comprends pas pourquoi tu utilises "p" dans ton exemple, au lieu de "g" qui marcherait très bien et laisserait au compilateur plus de marge de manoeuvre pour optimiser.