私はシステムによって提供されたものに対して関数宣言を追加しようとしていました。
しかし、関数プロトタイプはsize_t
を返します。これは、32ビットプラットフォームではint32、64ビットプラットフォームではint64です。
ターゲットプラットフォームを検出し、それに応じて宣言を追加する方法があるかどうかを知りたいですか?プラットフォーム固有の関数定義をLLVMパスに追加する方法は?
答えて
少しの研究の後で、ターゲット中立言語としてLLVM IR
は、おそらくターゲット固有のタイプサイズを知ることができません。 thisを見て、Chris Lattnerがこの件に関するコメントをしてください。また、thisに関連する質問があります。
これはフロントエンドの仕事であり、フロントエンドがターゲットとそのABIを「知る」必要があるという余分な簿記情報が発生します。たとえば、Lociプログラミング言語の場合、thisのようなプロジェクトのニーズがあるかもしれません。 thisに従ってsize_t
に特に今
:
[...]
std::size_t
安全それはstd::uintptr_t
と同義である場合 における任意の非メンバポインタの値を格納することができます。
したがってDataLayout
クラスのgetIntPtrType
メソッドを使用できます。
その他のデータ型については、「推測」があなたを得ることができるかどうかはわかりません(これまでの参考文献からはあまり遠くないと思われます)。
最後に、別の代替は、必然的に、ターゲットごとの具体的な定義を通過する固有のカスタム(例えばmemcpy
を参照)、とextendingLLVM
である可能性があります。
実際にあなたが
getIntNType
コールのビットの正確な数を提供するために、
CHAR_BIT
の使用に伴い
sizeof
演算子を使用することができ、あなたの整数型の作成を適応させるため。
これにより、モジュールパスが構築されているプラットフォーム上で整数型に適切なサイズを使用できるようになります。
パスが実行されているプラットフォームでタイプのサイズを「動的に」検出するために、何らかの設定ファイルでその情報を提供する以外の方法はありません。
しかし、これは自動化され、さまざまなビルドシステムの例(も使用されています)をコンパイルし、その生成を自動化できる簡単なプログラムを作ることができます。
これをできるだけ可搬性にし、車輪を改革しないようにするには、
cmake
の
CheckTypeSize
モジュールを使用できます。
- 1. ポータブルクラスライブラリにプラットフォーム固有のコードを追加
- 2. プラットフォーム固有のパスをJavaのデータベースに挿入する方法
- 3. Bazelプラットフォーム固有のC++定義
- 4. npm:プラットフォーム固有の依存関係を追加します
- 5. エンティティフレームワークにSQLユーザ定義関数を追加する方法は?
- 6. プラットフォーム固有のアプリケーションIDをtiapp.xmlに定義しますか?
- 7. PhoneGapにプラットフォーム固有のコードを追加できますか?
- 8. コードに固有のユーザ定義関数を作成するエラー
- 9. ユーザ定義パスの引数をllvmに追加することは可能です
- 10. Apache Stormでユーザー定義関数を追加する方法
- 11. モジュールのプラットフォーム固有の実装を提供する方法は?
- 12. Tomcatでアプリケーション固有のクラスパスを定義する方法は?
- 13. Azure関数のAzure Blobストレージトリガーのパスを定義する方法
- 14. マルチプラットフォームC++プロジェクト:プラットフォーム固有のソースの追加
- 15. Googleマップのマーカーに固有のリンクを追加する方法
- 16. プラットフォーム固有のコード
- 17. Matlabパスに関数を追加する
- 18. LLVMパス中に関数をマングル化してデマングルする方法は?
- 19. 追加のコンテキスト固有のプロパティを持つ参照を定義する
- 20. 固有値ベクトルを引数とし、固有ベクトルを別のクラス/関数に返す関数を渡す方法
- 21. 一般的な固定長配列で関数を定義する方法は?
- 22. U-Bootでユーザー定義関数を追加するには?
- 23. ユーザ定義関数のパラメータも追加するには?
- 24. クロスプラットフォームホームパスまたは条件付きプラットフォーム固有パス?
- 25. Linux/POSIXのプラットフォーム固有のマクロに関するドキュメント
- 26. Phalconビューでページ固有のJavaスクリプトを追加する方法
- 27. ダウンロードスクリプトに変数ファイルのパスを追加する方法に関するアドバイス
- 28. TensorFlowで加重損失関数を定義する方法は?
- 29. .NET AnyCPUプロジェクトは、プラットフォーム固有のライブラリに
- 30. 固定値に変数を追加してオブジェクトを作成する方法は?
私は正しい答えではないかと疑います。適切な解決策には、TargetMachineなどを使用して型のサイズを調べる必要があります。 – arrowd
@arrowdそれは本当であり、私は 'llvm :: DataLayout'を含む解決策を打ち出しましたが、' '' size_t'''はLLVM IRでは知られておらず、その時点で終わります。 – compor
私はあなたがトリプルまたはポインタのサイズに基づいて推測すべきだと思います。 – arrowd