zmeykas
@zmeykas
Developer at SoftCommerce Ukraine

Как исправить ASM Sigmentation fault при вызове макроса?

Я разрабатываю приложение Qt С++. Некоторые методы вызывают функции написанные на ассемблере в отдельном файле. Приложение компилирую под 64-битный процессор, поэтому в асме используются 64-битные регистры. Ошибка сегментации вываливается при попытке запустить простой макрос из функции.
.macro my_asm_macro src, so, dest, do
    movl    \so+60(\src), %r8d
    movl    \so+44(\src), %r9d
    movl    \so+28(\src), %r10d
    movl    \so+12(\src), %r11d
    movl    %r8d, \do+12(\dest)
    movl    %r9d, \do+28(\dest)
    movl    %r10d, \do+44(\dest)
    movl    %r11d, \do+60(\dest)
    movl    \so+40(\src), %r8d
    movl    \so+8(\src), %r9d
    movl    \so+48(\src), %r10d
    movl    \so+16(\src), %r11d
    movl    %r8d, \do+8(\dest)
    movl    %r9d, \do+40(\dest)
    movl    %r10d, \do+16(\dest)
    movl    %r11d, \do+48(\dest)
    movl    \so+20(\src), %r8d
    movl    \so+4(\src), %r9d
    movl    \so+52(\src), %r10d
    movl    \so+36(\src), %r11d
    movl    %r8d, \do+4(\dest)
    movl    %r9d, \do+20(\dest)
    movl    %r10d, \do+36(\dest)
    movl    %r11d, \do+52(\dest)
    movl    \so+0(\src), %r8d
    movl    \so+24(\src), %r9d
    movl    \so+32(\src), %r10d
    movl    \so+56(\src), %r11d
    movl    %r8d, \do+0(\dest)
    movl    %r9d, \do+24(\dest)
    movl    %r10d, \do+32(\dest)
    movl    %r11d, \do+56(\dest)
.endm

my_asm_function:
    my_asm_macro %rdi, 0, %rsp, 0           # sigfault here
    my_asm_macro %rdi, 64, %rsp, 64
    my_asm_macro %rdi, 128, %rsp, 128
    my_asm_macro %rdi, 192, %rsp, 192
    movdqa  64(%rsp), %xmm0
    movdqa  80(%rsp), %xmm1
    movdqa  96(%rsp), %xmm2
    movdqa  112(%rsp), %xmm3
    movdqa  128+64(%rsp), %xmm8
    movdqa  128+80(%rsp), %xmm9
    movdqa  128+96(%rsp), %xmm10
    movdqa  128+112(%rsp), %xmm11
    movdqa  256+64(%rsp), %xmm12
    movdqa  256+80(%rsp), %xmm13
    movdqa  256+96(%rsp), %xmm14
    movdqa  256+112(%rsp), %xmm15

    movq    %rsi, %rbx
    leaq    3*131072(%rsi), %rax
  • Вопрос задан
  • 2649 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как выглядят объявление и вызов этой функции из С++? Что за платформа (linux/...)?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы