@@ -2862,20 +2862,35 @@ impl Target {
2862
2862
// On Windows, `extern "system"` behaves like msvc's `__stdcall`.
2863
2863
// `__stdcall` only applies on x86 and on non-variadic functions:
2864
2864
// https://learn.microsoft.com/en-us/cpp/cpp/stdcall?view=msvc-170
2865
- System { unwind } if self . is_like_windows && self . arch == "x86" && !c_variadic => {
2866
- Stdcall { unwind }
2865
+ System { unwind } => {
2866
+ if self . is_like_windows && self . arch == "x86" && !c_variadic {
2867
+ Stdcall { unwind }
2868
+ } else {
2869
+ C { unwind }
2870
+ }
2871
+ }
2872
+
2873
+ EfiApi => {
2874
+ if self . arch == "arm" {
2875
+ Aapcs { unwind : false }
2876
+ } else if self . arch == "x86_64" {
2877
+ Win64 { unwind : false }
2878
+ } else {
2879
+ C { unwind : false }
2880
+ }
2867
2881
}
2868
- System { unwind } => C { unwind } ,
2869
- EfiApi if self . arch == "arm" => Aapcs { unwind : false } ,
2870
- EfiApi if self . arch == "x86_64" => Win64 { unwind : false } ,
2871
- EfiApi => C { unwind : false } ,
2872
2882
2873
2883
// See commentary in `is_abi_supported`.
2874
- Stdcall { .. } | Thiscall { .. } if self . arch == "x86" => abi,
2875
- Stdcall { unwind } | Thiscall { unwind } => C { unwind } ,
2876
- Fastcall { .. } if self . arch == "x86" => abi,
2877
- Vectorcall { .. } if [ "x86" , "x86_64" ] . contains ( & & self . arch [ ..] ) => abi,
2878
- Fastcall { unwind } | Vectorcall { unwind } => C { unwind } ,
2884
+ Stdcall { unwind } | Thiscall { unwind } | Fastcall { unwind } => {
2885
+ if self . arch == "x86" { abi } else { C { unwind } }
2886
+ }
2887
+ Vectorcall { unwind } => {
2888
+ if [ "x86" , "x86_64" ] . contains ( & & * self . arch ) {
2889
+ abi
2890
+ } else {
2891
+ C { unwind }
2892
+ }
2893
+ }
2879
2894
2880
2895
// The Windows x64 calling convention we use for `extern "Rust"`
2881
2896
// <https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions#register-volatility-and-preservation>
0 commit comments