Pregunta

MIPS32 ISA define el siguiente formato para la sincronización instrucción:

SYNC (stype = 0 implied)
SYNC stype

aquí, stype puede ser SYNC_WMB (SYNC 4), SYNC_MB (SYNC 16), etc. En ensamblador en línea, puedo utilizar la sincronización por defecto: __asm__ volatile ("sync" ::);.

Pero, si escribo algo así como __asm__ volatile ("sync 0x10" ::), no compila:

Error: illegal operands 'sync 0x10'

Lo mismo si la opción de pase -mips32r2 a gcc.

Entonces, la pregunta es: ¿cómo utilizar SYNC_ * (WYNC_WMB, SYNC_MB, SYNC_ACQUIRE, ...) instrucciones de montaje GCC inline

¿Fue útil?

Solución

Sospecho que su binutils son demasiado viejo - se ve como apoyo a esta era solamente añadido en la versión 2.20.

Como solución alternativa, si no se puede actualizar fácilmente sus binutils, se podría construir el código de operación con la mano.

sync es una instrucción de código de operación 0 con un código de función (bits 5..0) de 0xf, y esta forma de que codifica el tipo de sincronización en el campo de cantidad de desplazamiento (bits 10..6). Así, por ejemplo, para sync 0x10:

__asm__ volatile(".word (0x0000000f | (0x10 << 6))");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top