Power8 vsldoi 内置或替换

Posted

技术标签:

【中文标题】Power8 vsldoi 内置或替换【英文标题】:Power8 vsldoi built-in or replacement 【发布时间】:2017-09-15 09:34:03 【问题描述】:

我正在尝试使用内置函数将一些 ASM 代码移植到 C/C++ 中。 ASM code 有:

+  # Unpack a-h data from the packed vector to a vector register each
+  
+  vsldoi 10, 9, 9, 12
+  vsldoi 11, 9, 9, 8
+  vsldoi 12, 9, 9, 4

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

我的第一个问题是,vec_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 ASM 是否正确,还是我们应该做其他事情?

【问题讨论】:

【参考方案1】:

vec_sld 是否满足您的需求? https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcpx01/bif_vec_sld.htm(诚然不是“POWER”参考,但仍然相关)。

$ 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

【讨论】:

请注意,内置 vec_sld 可以在 openpowerfoundation.org/… 的“64-bit ELF V2 ABI Specification: Power Architecture”文档中找到 谢谢保罗,我想就是这样。我很快就会回到这个问题上(AES/GCM 实施。我有 AES;我正在研究 GCM)。

以上是关于Power8 vsldoi 内置或替换的主要内容,如果未能解决你的问题,请参考以下文章

计算两个集合的差集——第六期 Power8 算法挑战赛

转帖处理器史话 | 当Power架构的发展之路遭遇“滑铁卢”

PowerPC 上有屏蔽混合指令吗?

未声明“std::_debug_memset”

CentOS-7.4(1708)release notes发行注记

培训动态 | 第3期PGCA-浪潮K1 Power培训认证圆满结束