私はRustの小さな言語を開発しています。パフォーマンスを向上させるために、私はx86用のfastcall呼び出し規約を使用したいと考えています。 "fastcall"
ABIはARMではサポートされていません。 x86の場合マクロを使用するアーキテクチャによって、呼び出し規約が異なる関数を定義するにはどうすればよいですか?
:ARM用
fn add_primitive(&mut self, name: &str, action: extern "fastcall" fn(&mut Self)) {
...
}
extern "fastcall" fn a_primitive(&mut self) {}
:
fn add_primitive(&mut self, name: &str, action: fn(&mut Self)) {
...
}
fn a_primitive(&mut self) {}
CIを使用して、私は錆のマクロシステムを使用してこの問題を解決する方法がわからないマクロ
#ifdef x86
#define PRIMITIVE extern "fastcall" fn
#endif
#ifdef arm
#define PRIMITIVE fn
#endif
fn add_primitive(&mut self, name: &str, action: PRIMITIVE(&mut Self)) {
...
}
PRIMITIVE a_primitive(&mut self) {}
を定義することができます。
編集:
私は2つの異なるマクロが必要です。私はtarget_archを使って異なるバージョンの関数を定義する方法を知っていますが、マクロは定義していません。
[アーキテクチャが32ビットか64ビットかどうかをチェックする方法は?](https://stackoverflow.com/questions/41896462/how-to-check-in-rust-if-architecture-is-32-または64ビット)は私の問題では十分ではありません。私は2つの異なるバージョンのマクロが必要だからです。私はtarget_archを使って、マクロではなく関数の異なるバージョンを定義する方法を知っています。 –
'#[cfg]'はマクロと同じように機能します。 –