Gcc Power8 vsldoi内置或替换

Gcc Power8 vsldoi内置或替换,gcc,inline-assembly,powerpc,altivec,Gcc,Inline Assembly,Powerpc,Altivec,我正在尝试使用内置程序将一些ASM代码移植到C/C++中。政府有: 我找不到内置的。当我搜索IBM的网站时,我得到了。我认为很接近,但它需要3个参数,而不是4个参数 我的第一个问题是,vec\u vsldoi有内置的吗?如果没有,我们是使用vec_sldw还是其他什么 除了XL C/C++之外,我们还支持GCC 4.8。GCC似乎缺少这两个内在因素。我想我有一个替代者,但我有我的预约。测试程序显示汇编程序可以汇编vsldoi // GCC 4.8 is missing vec_sldw and

我正在尝试使用内置程序将一些ASM代码移植到C/C++中。政府有:

我找不到内置的。当我搜索IBM的网站时,我得到了。我认为很接近,但它需要3个参数,而不是4个参数

我的第一个问题是,
vec\u vsldoi
有内置的吗?如果没有,我们是使用vec_sldw还是其他什么

除了XL C/C++之外,我们还支持GCC 4.8。GCC似乎缺少这两个内在因素。我想我有一个替代者,但我有我的预约。测试程序显示汇编程序可以汇编
vsldoi

// GCC 4.8 is missing vec_sldw and vec_vsldoi
#if defined(XLC_VERSION)
# define VEC_VSLDOI(a,b,c) vec_vsldoi(a,b,c)
#elif defined(GCC_VERSION)
# define VEC_VSLDOI(a,b,c) VEC_VSLDOI_TEMPLATE<c>(a,b)
template<unsigned int C>
uint8x16_p8 VEC_VSLDOI_TEMPLATE(uint8x16_p8 a, const uint8x16_p8& b)
{
    uint8x16_p8 r;
    __asm
    (
        "vsldoi %0, %1, %2, %3    \t\n"
        : "=v" (t) : "v" (a), "v" (b), "I" (C) : "cc"
    );
    return r;
}
#endif
//GCC 4.8缺少vec_sldw和vec_vsldoi
#如果已定义(XLC\U版本)
#定义VEC_VSLDOI(a,b,c)VEC_VSLDOI(a,b,c)
#定义的elif(GCC_版本)
#定义向量VSLDOI(a、b、c)向量VSLDOI模板(a、b)
模板
uint8x16_p8矢量VSLDOI_模板(uint8x16_p8 a、常数uint8x16_p8和b)
{
uint8x16_p8 r;
__asm
(
vsldoi%0、%1、%2、%3\t\n
“=v”(t):“v”(a),“v”(b),“I”(C):“cc”
);
返回r;
}
#恩迪夫

我的第二个问题是,扩展的GCC ASM是正确的,还是我们应该做其他事情?

vec\u sld是否满足您的需求?(无可否认,这不是一个“权力”的提法,但仍然相关)


请注意,内置的vec_sld可以在“64位ELF V2 ABI规范:电源体系结构”文档中找到,我想就是它了。我很快就会回到问题上来(AES/GCM实现。我有AES;我正在处理GCM)。
// GCC 4.8 is missing vec_sldw and vec_vsldoi
#if defined(XLC_VERSION)
# define VEC_VSLDOI(a,b,c) vec_vsldoi(a,b,c)
#elif defined(GCC_VERSION)
# define VEC_VSLDOI(a,b,c) VEC_VSLDOI_TEMPLATE<c>(a,b)
template<unsigned int C>
uint8x16_p8 VEC_VSLDOI_TEMPLATE(uint8x16_p8 a, const uint8x16_p8& b)
{
    uint8x16_p8 r;
    __asm
    (
        "vsldoi %0, %1, %2, %3    \t\n"
        : "=v" (t) : "v" (a), "v" (b), "I" (C) : "cc"
    );
    return r;
}
#endif
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc -c vec_sld.c
$ objdump -d vec_sld.o | grep vsl
  4c:   2c 09 00 10     vsldoi  v0,v0,v1,4