2017-09-08 6 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 *それはなぜですか? PS:あなたのアーキテクチャはPower 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

関連する問題