2017-09-08 32 views
0

我正在使用內置的C/C++工作。我需要指令lvd2x將未對齊的數據加載到VMX寄存器中。 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編譯農場提供AIX與XL C v13.1.3(5725-C72,5765-J07)。在13.1.4之前是否有用於LXVD2X的XL C內置?如果有內置的,那麼它是什麼?如果不是,那麼我們如何獲得指令? (我試圖避免ASM和內聯ASM,我不太瞭解處理器寫它,我也有一個相當不愉快的經歷,我不想放大痛苦試圖使用asm)。

+0

問:我們如何獲得指令(使用GCC)?答:內聯彙編是一個明顯的選擇;)爲什麼不至少* TRY *它? PS:你的架構是Power PC,對嗎? – paulsm4

+0

@ paulsm4 - GCC很好。我需要它用於IBM的XL C編譯器。 – jww

回答

2

應該由GCC和XL實現的便攜式函數是vec_xl。它是PPC64-LE ABI的一部分。

是XLC支持較老的功能vec_xld2(加載包含8個字節元素的向量)和vec_xlw4(用於裝載包含4個字節的元素的向量。)

請注意,如果您需要大端矢量元素順序,你應該使用vec_xl_be,或者用-qaltivec = be編譯。

+0

非常感謝。 'vec_xl'和'vec_xl_be'應該是我需要的最後一件事。我們就快到了... – jww

相關問題