Я получаю сообщение об ошибке
error: invalid operand for instruction
movq 8(%rbp), -48(%rbp)
При попытке скомпилировать эту функцию с помощью clang:
_bar:
movq %rdi, 0(%rbp)
addq $4, %rsp
movq %rsi, -8(%rbp)
addq $4, %rsp
movq %rdx, -16(%rbp)
addq $4, %rsp
movq %rcx, -24(%rbp)
addq $4, %rsp
movq %r8 , -32(%rbp)
addq $4, %rsp
movq %r9 , -40(%rbp)
addq $4, %rsp
movq 8(%rbp), -48(%rbp)
addq $4, %rsp
movq 16(%rbp), -56(%rbp)
addq $4, %rsp
.text
.globl _foo
Этот код, напротив, успешно компилируется:
_bar:
movq %rdi, 0(%rbp)
addq $4, %rsp
movq %rsi, -8(%rbp)
addq $4, %rsp
movq %rdx, -16(%rbp)
addq $4, %rsp
movq %rcx, -24(%rbp)
addq $4, %rsp
movq %r8 , -32(%rbp)
addq $4, %rsp
movq %r9 , -40(%rbp)
addq $4, %rsp
movq 8(%rbp), -48(%rbp)
addq $4, %rsp
movq 16(%rbp), -56(%rbp)
addq $4, %rsp
.text
.globl _foo
Есть ли что-то особенное в индексировании 6 байтов под указателем базы, что делает его запрещенным операндом?