LLVMパスにプラットフォーム固有の関数定義を追加するにはどうすればよいですか?

張漢生

システムが提供するものに関数宣言を追加しようとしていました。
ただし、関数プロトタイプはを返しますsize_t。これは、32ビットプラットフォームではint32、64ビットプラットフォームではint64です。
ターゲットプラットフォームを検出し、それに応じて宣言を追加する方法があるかどうか知りたいですか?

作曲する

少し調べてLLVM IRみると、ターゲットの中立言語はターゲット固有のタイプサイズを知ることができない可能性があります。クリス・ラトナーがこの主題についてコメントしているこの関連する議論を見てくださいまた、この関連するSOの質問で。

したがって、これはフロントエンドの仕事であり、これにより、フロントエンドがターゲットとそのABIを「知る」必要がある追加の簿記情報が発生します。したがって、たとえば、Lociプログラミング言語の場合、このようなプロジェクトが必要になる可能性があります

今、特に用size_tによると、この

[...]std::size_tは、非メンバーポインタの値を安全に格納できstd::uintptr_tます。この場合、それはと同義です。

したがって、クラスgetIntPtrTypeメソッドを使用できますDataLayout

他のデータ型については、「推測」でどこまで到達できるかわかりません(おそらく、以前の参照から判断するとそれほど遠くはありません)。

最後に、別の代替手段は、カスタム組み込み(たとえばを参照)で拡張 LLVMすることもできますmemcpy。これは、必然的にターゲットごとに特定の定義を通過します。


整数型の作成を実際に適応させるには、呼び出しで正しいビット数を提供するために sizeof 、の使用とともに演算子を 使用できます CHAR_BIT getIntNType

これにより、モジュールパスが構築されているプラ​​ットフォームで整数型に適切なサイズを使用できるようになります。

パスが実行されているプラ​​ットフォームでタイプのサイズを「動的に」検出するために、ある種の構成ファイルでその情報を提供する以外に方法はありません。

ただし、これは自動化でき、さまざまなビルドシステムの例(たとえばcmakeによっても使用されますLLVM)を使用して、コンパイルしてその生成を自動化できる単純なプログラムを作成できます。

そのために、そしてこれを可能な限りポータブルにし、車輪の再発明を回避するために、 cmake CheckTypeSize モジュールを使用でき ます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ピラミッドレストフレームワークにアプリ固有の設定を追加するにはどうすればよいですか?

分類Dev

backroundでカスタムプラットフォーム固有のコードを実行するにはどうすればよいですか?

分類Dev

関数パラメータのデフォルト値をプログラムで決定するにはどうすればよいですか?

分類Dev

JavaFX:プラットフォーム固有のSHORTCUTキーコードを表す文字を取得するにはどうすればよいですか?

分類Dev

Goでプラットフォーム固有のモジュールを処理するにはどうすればよいですか?

分類Dev

複数のプラットフォーム向けのDelphiXE7アプリでプラットフォーム固有のコードを処理するにはどうすればよいですか?

分類Dev

クロスプラットフォームの方法で環境変数を設定するにはどうすればよいですか?

分類Dev

C#アプリがnugetパッケージの適切なプラットフォーム固有のdllを使用しているかどうかを確認するにはどうすればよいですか?

分類Dev

WindowsとLinuxの両方のプラットフォームでDIRECTORY_SEPARATORを定義するにはどうすればよいですか?

分類Dev

テンプレートパラメータパックが関数の引数と一致するかどうかに基づいて、テンプレート関数の定義をゲートするにはどうすればよいですか?

分類Dev

クラス内で関数のデフォルトパラメータを設定するにはどうすればよいですか?

分類Dev

Vue.jsメソッド関数でデフォルトのパラメータ値を設定するにはどうすればよいですか?

分類Dev

LLVMのカスタムフォークを使用するようにRustコンパイラを構築するにはどうすればよいですか?

分類Dev

SAMテンプレートでラムダ関数の複数のトリガーを定義するにはどうすればよいですか?

分類Dev

Cordova:Cordovaビルド後に上書きされないプラットフォーム固有のconfig.xmlファイルを設定するにはどうすればよいですか?

分類Dev

クロスプラットフォームのCMakeプロジェクトにVulkanを追加するにはどうすればよいですか?

分類Dev

別のプラットフォームでパッケージスクリプトを使用するにはどうすればよいですか?

分類Dev

クラウドフォーメーション固有のリソースプロパティのAWSLambda関数のARNを取得するにはどうすればよいですか?

分類Dev

状況またはジョブ固有のテストプログラムフローを作成するにはどうすればよいですか?

分類Dev

Goでクロスプラットフォームのファイルパスを作成するにはどうすればよいですか?

分類Dev

関数がパラメータを記憶するJavaで関数のベクトルを定義するにはどうすればよいですか?

分類Dev

zshのカスタム完了関数へのパスにオートコンプリートを追加するにはどうすればよいですか?

分類Dev

クロスビルド用にLinuxでプラットフォーム固有のjniヘッダーを取得するにはどうすればよいですか?

分類Dev

テンプレートビューとスラッグ定義を1つのビューに追加するにはどうすればよいですか?

分類Dev

Pythonで関数をコピーしてデフォルトのパラメータを設定するにはどうすればよいですか?

分類Dev

Delphi XE8で64ビットのターゲットプラットフォームを追加するにはどうすればよいですか?

分類Dev

Pythonで、特定の名前の引数を検証する関数ラッパーを定義するにはどうすればよいですか?

分類Dev

xorgグラフィックデバイスのデフォルトオプションを定義するにはどうすればよいですか

分類Dev

typescriptの関数パラメータにデフォルト値を追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    ピラミッドレストフレームワークにアプリ固有の設定を追加するにはどうすればよいですか?

  2. 2

    backroundでカスタムプラットフォーム固有のコードを実行するにはどうすればよいですか?

  3. 3

    関数パラメータのデフォルト値をプログラムで決定するにはどうすればよいですか?

  4. 4

    JavaFX:プラットフォーム固有のSHORTCUTキーコードを表す文字を取得するにはどうすればよいですか?

  5. 5

    Goでプラットフォーム固有のモジュールを処理するにはどうすればよいですか?

  6. 6

    複数のプラットフォーム向けのDelphiXE7アプリでプラットフォーム固有のコードを処理するにはどうすればよいですか?

  7. 7

    クロスプラットフォームの方法で環境変数を設定するにはどうすればよいですか?

  8. 8

    C#アプリがnugetパッケージの適切なプラットフォーム固有のdllを使用しているかどうかを確認するにはどうすればよいですか?

  9. 9

    WindowsとLinuxの両方のプラットフォームでDIRECTORY_SEPARATORを定義するにはどうすればよいですか?

  10. 10

    テンプレートパラメータパックが関数の引数と一致するかどうかに基づいて、テンプレート関数の定義をゲートするにはどうすればよいですか?

  11. 11

    クラス内で関数のデフォルトパラメータを設定するにはどうすればよいですか?

  12. 12

    Vue.jsメソッド関数でデフォルトのパラメータ値を設定するにはどうすればよいですか?

  13. 13

    LLVMのカスタムフォークを使用するようにRustコンパイラを構築するにはどうすればよいですか?

  14. 14

    SAMテンプレートでラムダ関数の複数のトリガーを定義するにはどうすればよいですか?

  15. 15

    Cordova:Cordovaビルド後に上書きされないプラットフォーム固有のconfig.xmlファイルを設定するにはどうすればよいですか?

  16. 16

    クロスプラットフォームのCMakeプロジェクトにVulkanを追加するにはどうすればよいですか?

  17. 17

    別のプラットフォームでパッケージスクリプトを使用するにはどうすればよいですか?

  18. 18

    クラウドフォーメーション固有のリソースプロパティのAWSLambda関数のARNを取得するにはどうすればよいですか?

  19. 19

    状況またはジョブ固有のテストプログラムフローを作成するにはどうすればよいですか?

  20. 20

    Goでクロスプラットフォームのファイルパスを作成するにはどうすればよいですか?

  21. 21

    関数がパラメータを記憶するJavaで関数のベクトルを定義するにはどうすればよいですか?

  22. 22

    zshのカスタム完了関数へのパスにオートコンプリートを追加するにはどうすればよいですか?

  23. 23

    クロスビルド用にLinuxでプラットフォーム固有のjniヘッダーを取得するにはどうすればよいですか?

  24. 24

    テンプレートビューとスラッグ定義を1つのビューに追加するにはどうすればよいですか?

  25. 25

    Pythonで関数をコピーしてデフォルトのパラメータを設定するにはどうすればよいですか?

  26. 26

    Delphi XE8で64ビットのターゲットプラットフォームを追加するにはどうすればよいですか?

  27. 27

    Pythonで、特定の名前の引数を検証する関数ラッパーを定義するにはどうすればよいですか?

  28. 28

    xorgグラフィックデバイスのデフォルトオプションを定義するにはどうすればよいですか

  29. 29

    typescriptの関数パラメータにデフォルト値を追加するにはどうすればよいですか?

ホットタグ

アーカイブ