확실하지 ICC를 사용하지만 고유 SSE의 주소를 취할 수 연타를 사용할 때이 를 사용하여 같은 일을하려고 불행하게도 때, 많은 문제없이, SSE 내장 함수에 연결하는 방법<strong>GCC</strong>에 대해 OS X에
sse.h :
#include <immintrin.h>
static __m128i (*load)(const __m128i *) = &_mm_load_si128;
012,351,641 OS X에 ICC, 그것은 예를 들면
... 잘 링커 기본 함수를 찾을 수없는 정확하게는 실패
을 main.c :
#include <stdio.h>
#include "sse.h"
int main(void) {
char buffer[sizeof(__m128i)] __attribute__((aligned(sizeof(__m128i))));
__m128i b = load((void *)buffer);
printf("%i\n", _mm_extract_epi16(b, 0));
return 0;
}
이 명확하게하기 위해 나는 은하지 내가 이런 짓을 했을까 이유에 호기심이 사람들을 위해 매크로를 사용하려면, 내 주요 목표는 바람직하게는, 디스패처를 작성하는 것입니다 컴파일러가 얼마나 공격적인지에 따라 컴파일 시간이 달라 지지만 다른 이야기가 있습니다.
$ gcc main.c -O0
$
$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
$
$ icc main.c -O0
Undefined symbols for architecture x86_64:
"__mm_load_si128", referenced from:
_load in icckt7T6c.o
ld: symbol(s) not found for architecture x86_64
$ icc --version
icc (ICC) 13.0.0 20120731
Copyright (C) 1985-2012 Intel Corporation. All rights reserved.
$
$ uname -a
Darwin *****-MacBook-Pro.local 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64
intrinsics에 자신의 래퍼를 작성 하시겠습니까? gcc/clang은 내장 함수를 내장 함수로 구현합니다 (하나의 인수가 상수 일 때만 유효한 내장 함수는 -O0에 몇 가지 예외가 있습니다). –
@MarcGlisse 나쁜 생각이 아니라면 컴파일러는 현존하는 명령어가 있다면 체인을 붕괴시킬만큼 똑똑 할 것입니다. –
@MarcGlisse '하나의 인수가 상수 일 때만 유효합니다.' 일부 컴파일러는'짜증나게하는'정적 const'를 사용하는 것에 대해 불평하기 때문에 ** 즉각적인 **을 의미합니다. 그렇습니다. 여러분의 권리, 정말 이상합니다. 나는 일관성이 있었으면합니다. –