MIPS32 ISA définit le format suivant pour la synchronisation instruction:Assembleur GNU pour MIPS: comment émettre des instructions sync_ *?
SYNC (stype = 0 implied)
SYNC stype
ici, sType peut être SYNC_WMB (SYNC 4), SYNC_MB (SYNC 16), etc. En assembleur en ligne, je peux utiliser par défaut synchronisation: __asm__ volatile ("sync" ::);
.
Mais, si j'écris quelque chose comme __asm__ volatile ("sync 0x10" ::)
, il ne compile pas:
Error: illegal operands 'sync 0x10'
Même si l'option passe -mips32r2
à gcc. Donc, la question est: comment utiliser les instructions SYNC_ * (WYNC_WMB, SYNC_MB, SYNC_ACQUIRE, ...) de l'assemblage en ligne GCC?
Eh bien, je crains que ce n'est pas facile, mon CCG est tout à fait nouveau: 'mips-linux-gnu-gcc (Sourcery G ++ Lite 4,2 à 85) 4.2.1' Btw, j'utilise aussi le codage manuel d'instruction pour l'instant: '#define EMIT_SYNC (stype) __asm__ volatile (" .int (% 0 << 6) | 0x0f "::" n "(stype):" mémoire ") ; ' Mais c'est juste une solution de contournement laide. – Andy
C'est la version de l'assembleur qui compte ici, pas la version de GCC. (Si vous savez où l'assembleur est installé, et comment il s'appelle, vous pouvez trouver la version avec par exemple 'mips-linux-gnu-as -version', sinon utilisez l'option' -v' pour compiler quelque chose avec GCC , et chercher une ligne dans la sortie qui dit quelque chose comme «GNU assembleur version N.NN».) –
On dirait que vous aviez raison, ma version de l'assembleur est 2.18.50.20070820. Merci, je vais essayer de passer à 2.20. – Andy