我正在Rust開發一種小語言。爲了提高性能,我想爲x86使用fastcall調用約定。 ARM不支持"fastcall"
ABI。根據使用宏的體系結構,我如何使用不同的調用約定來定義函數?
對於x86:
fn add_primitive(&mut self, name: &str, action: extern "fastcall" fn(&mut Self)) {
...
}
extern "fastcall" fn a_primitive(&mut self) {}
對於ARM:
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) {}
我不知道如何解決使用鏽病的宏系統這個問題。
編輯:
我需要兩個不同的宏。我知道如何使用target_arch來定義不同版本的函數,但不是宏。
的可能的複製[?如何鏽病檢查架構是32或64比特](https://stackoverflow.com/questions/41896462/how-to-檢入防鏽如果體系結構是32位或64位) - 問題稍有不同,但答案是一樣的。 –
[如何檢查Rust如果體系結構是32位或64位?]的答案(https://stackoverflow.com/questions/41896462/how-to-check-in-rust-if-architecture-is-32-或64位)是不足以解決我的問題。因爲我需要兩個不同版本的宏。我知道如何使用target_arch來定義不同版本的函數,但不是宏。 –
'#[cfg]'在宏上工作就像它在函數上一樣。 –