2017-07-04 6 views
2

Sur le site Web Compiler Explorer de Matt Godbolt, vous pouvez compiler du code à l'aide de divers compilateurs pré-installés. Lorsque vous utilisez PowerPC gcc 4.8, les registres ne peuvent pas être distingués des appels instantanés (par exemple, addi 11,31,16). Cependant, lorsque l'option -mregnames est utilisée, tous les registres sont marqués avec %r suivi de l'index du registre. Comment omettre le signe % pour obtenir r1 au lieu de %r1?PowerPC GCC Impression enregistre dans l'assembly sans signe%

Par exemple, void nop() {} with gcc4.8 PowerPC -O0 -mregnames:

nop(): 
    stwu %r1,-16(%r1) 
    stw %r31,12(%r1) 
    mr %r31,%r1 
    addi %r11,%r31,16 
    lwz %r31,-4(%r11) 
    mr %r1,%r11 
    blr 
+2

Si vous omettez le '%', les registres peuvent être confondus avec les symboles :) Pourquoi voulez-vous le faire? Le manuel ne semble pas avoir un moyen de le faire. – Jester

+0

@Jester: Je suis habitué à lire l'assemblage sans eux – BullyWiiPlaza

+0

Si c'est pour votre lecture personnelle, il suffit de faire une recherche et de remplacer pour '% r [0-9] +' pourrait fonctionner, évidemment. – Jester

Répondre

4

Lors du ciblage PowerPC, vous avez deux options pour la syntaxe des listes de montage:

Vous pouvez utiliser la syntaxe IBM (commune sur assembleurs IBM) , où les registres n'utilisent aucun type de préfixe spécial: ils sont simplement appelés avec des nombres. Oui, cela rend difficile de les distinguer des immédiats.

Ou, vous pouvez utiliser Gnu/AT & T syntaxe, qui préfixe toujours registres avec % symboles (et un r, dans ce cas). Cela facilite non seulement la distinction entre les registres et les instantanés, mais permet également de distinguer les registres d'entiers (%r?) et les registres à virgule flottante (%f?).

Il n'y a pas d'option intermédiaire, où vous obtenez le préfixe r (ou f), mais pas de premier plan %. Si vous avez besoin de cela, vous pouvez faire comme Jester suggéré et post-traiter la sortie, en utilisant l'expression régulière %r[0-9]+ pour la correspondance.

1

Une mise à jour:
powerpc-linux-gnu-gcc la version 5.4.0 (le package par défaut avec Ubuntu 16.04)

Lorsque vous utilisez -mregnames, vous pouvez utiliser "% r0" ou "r0" ou " Format 0 "pour un nom de registre dans les fichiers de code source de l'assembly.

Pour le désassemblage, powerpc-linux-gnu-objdump utilise par défaut le format "r0" (ce qui, je le reconnais, est plus facile à lire).

Dans l'exemple de cette page Web, il semble qu'il affiche la sortie de la liste du compilateur, au lieu d'utiliser objdump. Je ne connais pas de moyen de contrôler le format de sortie de listage.