Se puede convertir este asm en línea en una sola línea no?
-
21-09-2019 - |
Pregunta
Me encontré con este asm en línea. No estoy seguro de cómo debe mirar sin esta sintaxis ... Podría alguien mostrármela?
__asm__ volatile ("lock\n\tincl %0"
:"=m"(llvm_cbe_tmp__29)
:"m"(*(llvm_cbe_tmp__29))"cc");
Solución
lock
incl llvm_cbe_tmp__29
Sin embargo, ya que el operando se especifica en abstracto, el compilador generará el código necesario para hacer referencia a ella, incluso si eso significa una carga y almacenamiento. Como resultado es posible que se añadirán más de dos instrucciones o un modo de direccionamiento.
Otros consejos
El uso de gcc -S en esto:
int main()
{
int *p;
asm volatile ("lock\n\tincl %0":"=m"(p):"m"(*(p)):"cc");
}
da
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl -8(%ebp), %eax
#APP
# 4 "asm.c" 1
lock
incl -8(%ebp)
# 0 "" 2
#NO_APP
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow