2017-09-08 24 views
0

저는 C/C++에서 내장 함수를 사용하고 있습니다. 정렬되지 않은 데이터를 VMX 레지스터에로드하려면 lvd2x 명령어가 필요합니다. Power7 및 Power8 프로세서에서는 lvd2x을 사용할 수 있습니다.13.1.4 이전의 LXVD2X 용 XL C 기본 제공 장치가 있습니까?

GCC는 작업을 수행하기 위해 vec_vsx_ld을 제공합니다. IBM XL C/C++ for Linux, V13.1.5, 제 4 장에 따르면, 향상된 버전 13.1.4에 추가 :

새로운 내장 함수

다음 GCC 벡터 내장 기능이 지원됩니다

  • vec_vsx_ld
  • ...

코드 XL C에 대해 보호되어 있으므로 GCC의 내장 기능은 필요하지 않습니다. 문제는 내가 찾을 수 없다 XL C의 내장 lvd2x을 위해 :

#if defined(__xlc__) || defined(__xlC__) 
    uint8x16_p8 block = vec_vsx_ld(0, t); 
#else 
    uint64x2_p8 block = (uint64x2_p8)vec_vsx_ld(0, t); 
#endif 

GCC는이 농장은 XL C v13.1.3 (5725-C72, 5765-J07)와 AIX를 제공 컴파일합니다. 13.1.4 이전에 LXVD2X 용 XL C 내장 기능이 있습니까? 내장 된 것이 있다면 무엇입니까? 그렇지 않다면 우리는 어떻게 명령에 접근 할 수 있습니까?

(ASM 및 인라인 ASM을 피하려고합니다. 필자는 프로세서를 작성하는 데 대해 충분히 알지 못합니다. 또한 상당히 불쾌한 경험이었고, 고통을 증폭시키고 싶지 않습니다. asm을 사용하려고 시도 함).

+0

Q : 지침 (GCC 사용)에 대한 액세스 권한은 어떻게 얻습니까? A : 인라인 어셈블리는 확실한 선택입니다.) 적어도 * TRY *일까요? 추신 : 귀하의 아키텍처는 파워 PC, 맞습니까? – paulsm4

+0

@ paulsm4 - GCC가 좋습니다. IBM의 XL C 컴파일러에 필요합니다. – jww

답변

2

GCC와 XL에서 모두 구현해야하는 이식 가능한 기능은 vec_xl입니다. 그것은 PPC64-LE ABI의 일부입니다. XLC 지원

오래된 기능과 vec_xlw4 (8 바이트의 요소를 포함하는 벡터를로드하기 위해) vec_xld2 있습니다 (4 바이트 요소를 포함하는 벡터를로드하기 위해.)

주 당신은 빅 엔디안 벡터가 필요한 경우 요소 순서에 따라 vec_xl_be를 사용하거나 -qaltivec = be를 사용하여 컴파일해야합니다.

+0

고맙습니다. 'vec_xl'과'vec_xl_be'는 내가 필요한 마지막 것이어야합니다. 우리는 거의 다 왔어. – jww