@@ -2914,20 +2914,35 @@ impl Target {
2914
2914
// On Windows, `extern "system"` behaves like msvc's `__stdcall`.
2915
2915
// `__stdcall` only applies on x86 and on non-variadic functions:
2916
2916
// https://learn.microsoft.com/en-us/cpp/cpp/stdcall?view=msvc-170
2917
- System { unwind } if self . is_like_windows && self . arch == "x86" && !c_variadic => {
2918
- Stdcall { unwind }
2917
+ System { unwind } => {
2918
+ if self . is_like_windows && self . arch == "x86" && !c_variadic {
2919
+ Stdcall { unwind }
2920
+ } else {
2921
+ C { unwind }
2922
+ }
2923
+ }
2924
+
2925
+ EfiApi => {
2926
+ if self . arch == "arm" {
2927
+ Aapcs { unwind : false }
2928
+ } else if self . arch == "x86_64" {
2929
+ Win64 { unwind : false }
2930
+ } else {
2931
+ C { unwind : false }
2932
+ }
2919
2933
}
2920
- System { unwind } => C { unwind } ,
2921
- EfiApi if self . arch == "arm" => Aapcs { unwind : false } ,
2922
- EfiApi if self . arch == "x86_64" => Win64 { unwind : false } ,
2923
- EfiApi => C { unwind : false } ,
2924
2934
2925
2935
// See commentary in `is_abi_supported`.
2926
- Stdcall { .. } | Thiscall { .. } if self . arch == "x86" => abi,
2927
- Stdcall { unwind } | Thiscall { unwind } => C { unwind } ,
2928
- Fastcall { .. } if self . arch == "x86" => abi,
2929
- Vectorcall { .. } if [ "x86" , "x86_64" ] . contains ( & & self . arch [ ..] ) => abi,
2930
- Fastcall { unwind } | Vectorcall { unwind } => C { unwind } ,
2936
+ Stdcall { unwind } | Thiscall { unwind } | Fastcall { unwind } => {
2937
+ if self . arch == "x86" { abi } else { C { unwind } }
2938
+ }
2939
+ Vectorcall { unwind } => {
2940
+ if [ "x86" , "x86_64" ] . contains ( & & * self . arch ) {
2941
+ abi
2942
+ } else {
2943
+ C { unwind }
2944
+ }
2945
+ }
2931
2946
2932
2947
// The Windows x64 calling convention we use for `extern "Rust"`
2933
2948
// <https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions#register-volatility-and-preservation>
0 commit comments