En utilisant GCC
et inline assembly
, je veux charger immédiatement dans un registre spécifique r0
. Cependant, je n'obtiens pas les bons résultats.PowerPC Inline Assembly: Charger la valeur C dans le registre
unsigned short value = 0x1337;
asm volatile
(
"li 0, %0\n\t"
"sc\n\t"
"blr"
: /* Output registers */
:"r"(value) /* Input registers */
: /* No clobbered registers */
);
Lors de la compilation, cela donne
li r0, 9
sc
blr
Où le 9
vient? Je voulais plutôt la valeur spécifiée 0x1337
. Here est un tutoriel que j'ai regardé.
Oui, sans surprise qui était une solution simple – BullyWiiPlaza
@BullyWiiPlaza: Utilisez gcc -mregnames' pour obtenir les noms de registre qui ne sont pas simples chiffres, de sorte que vous ne pouvez pas mélanger les registres et immediates. Aussi, assurez-vous de dire au compilateur à propos des registres que vous cloberez, et utilisez 'asm goto' pour lui dire que vous sautez. Bien que je ne sois pas sûr qu'il existe un moyen sûr de dire au compilateur que votre asm a besoin de l'adresse de retour dans 'lr' et qu'elle retourne. Vous devriez probablement écrire toute votre fonction dans asm, parce que je ne vois pas comment cela peut fonctionner s'il est en ligne. –
@PeterCordes: Oui, c'est toute la fonction. :) – BullyWiiPlaza