[英]sse inline assembly with g++
我正在嘗試g ++內聯匯編和sse,並編寫了第一個程序。 段錯誤-為什么?
#include <stdio.h>
float s[128*4] __attribute__((aligned(16)));
#define r0 3
#define r1 17
#define r2 110
#define rs0 "3"
#define rs1 "17"
#define rs2 "110"
int main () {
s[r0*4+0] = 2.0; s[r0*4+1] = 3.0; s[r0*4+2] = 4.0; s[r0*4+3] = 5.0;
s[r1*4+0] = 3.5; s[r1*4+1] = 3.5; s[r1*4+2] = 3.5; s[r1*4+3] = 3.5;
asm (
"\n\t .intel_syntax noprefix"
"\n\t mov edx, s"
"\n\t movaps xmm0, [edx + " rs0 "*16]"
"\n\t movaps xmm1, [edx + " rs1 "*16]"
"\n\t mulps xmm0, xmm1"
"\n\t movaps [edx + " rs2 "*16], xmm0"
"\n\t .att_syntax"
);
printf ("%f %f %f %f\n", s[r2*4+0], s[r2*4+1], s[r2*4+2], s[r2*4+3]);
}
為什么gdb不允許我單步執行匯編指令? 我需要在每行周圍寫asm(“ ..”)嗎?
您正在將s[0]
處s[0]
數據加載到%edx
,並將其用作指針。 然后,當您嘗試訪問%edx + 0x30
,將崩潰,因為s[0] + 48
沒有映射為供您讀取的進程。 (特別是,由於s
是全局的,因此初始化為全零,因此您嘗試從地址0x30
加載)
您可以使用stepi
或si
來單機指令。 帶有-i
后綴的許多其他功能都可以使用,例如nexti
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.