SIMD 내장 함수와 비슷한 매크로를 만들려고합니다. 그리고이 매크로를 만들고 싶은 이유는 SIMD를 지원하지 않는 "Gem5"라는 시뮬레이터로 작업하고 있기 때문입니다.SIMD 명령어와 비슷한 매크로
#define __M128_MM_ADD_PS(dest, a,b) \
{ \
(dest)->vec1 = (a)->vec1 + (b)->vec1; \
(dest)->vec2 = (a)->vec2 + (b)->vec2; \
(dest)->vec3 = (a)->vec3 + (b)->vec3; \
(dest)->vec4 = (a)->vec4 + (b)->vec4; \
}
: 그때는 ADD 매크로를 만든
typedef struct
{
float vec1;
float vec2;
float vec3;
float vec4;
} __m128 __attribute__((aligned(16)));
:
음, 우선, 나는 4의 벡터 그래서 같은 점 요소를 단 정밀도 부동 포장 정의하는 구조를 만들어
및 float 배열의 결과를 저장하기위한 다른 매크로
#define __M128_MM_MOVA_PS(dest, a) \
{ \
dest[0] = a->vec1; \
dest[1] = a->vec2; \
dest[2] = a->vec3; \
dest[3] = a->vec4; \
}
및 행 그들에게 나는 __m128으로 변수와 결과를 저장하는 float 배열, 이런 식으로 (약간의 예) 선언했습니다
void foo(){
__m128 bfly0_rv, x_n2_vec, x_N2_vec;
float *x;
__M128_MM_ADD_PS(bfly0_rv,x_n2_vec,x_N2_vec);
__M128_MM_MOVA_PS(&x[n2],bfly0_rv);
}
을 나는 오류 메시지의 이러한 종류 받고 있어요 :
을 ADM 매크로 오류 : '->'('__m128'을 (를) 가지고 있음)의 유형 인수가 올바르지 않습니다. (dest) -> vec4 = (a) -> vec4 + (b) -> vec4; 수납 매크로 오류
: 잘못된 형식 인수 '->'('__m128'를 가지고) 최종 도착 [3] = A-> vec4;
누구나 그에 대한 아이디어가 있습니까?
저장 매크로를 제외하고 모든 오류가 사라졌습니다. ** 오류 : 첨자 값은 배열도 포인터도 벡터도 아닙니다. dest [0] = a.vec1 ** 그리고 dest [0 ]. –
@ A.nechi'dest '에 중괄호를 추가 했습니까? 그것들이 없으면 그것은 당신이 원하는 것이 아닌'& x [n2] [0]'로 확장됩니다. – Sergio
너 정말 대단해. :) –