|
1 | 1 | use crate::spec::Target; |
2 | | -use crate::{abi::Size, spec::RelocModel}; |
| 2 | +use crate::{abi::Endian, abi::Size, spec::RelocModel}; |
3 | 3 | use rustc_data_structures::fx::{FxHashMap, FxIndexSet}; |
4 | 4 | use rustc_macros::HashStable_Generic; |
5 | 5 | use rustc_span::Symbol; |
@@ -878,6 +878,7 @@ pub enum InlineAsmClobberAbi { |
878 | 878 | AArch64NoX18, |
879 | 879 | RiscV, |
880 | 880 | LoongArch, |
| 881 | + PowerPC64ElfV2, |
881 | 882 | } |
882 | 883 |
|
883 | 884 | impl InlineAsmClobberAbi { |
@@ -927,6 +928,12 @@ impl InlineAsmClobberAbi { |
927 | 928 | "C" | "system" => Ok(InlineAsmClobberAbi::LoongArch), |
928 | 929 | _ => Err(&["C", "system"]), |
929 | 930 | }, |
| 931 | + InlineAsmArch::PowerPC64 => match name { |
| 932 | + "C" | "system" if target.endian == Endian::Little => { |
| 933 | + Ok(InlineAsmClobberAbi::PowerPC64ElfV2) |
| 934 | + } |
| 935 | + _ => Err(&["C", "system"]), |
| 936 | + }, |
930 | 937 | _ => Err(&[]), |
931 | 938 | } |
932 | 939 | } |
@@ -1084,6 +1091,13 @@ impl InlineAsmClobberAbi { |
1084 | 1091 | f16, f17, f18, f19, f20, f21, f22, f23, |
1085 | 1092 | } |
1086 | 1093 | }, |
| 1094 | + InlineAsmClobberAbi::PowerPC64ElfV2 => clobbered_regs! { |
| 1095 | + PowerPC PowerPCInlineAsmReg { |
| 1096 | + r0, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, |
| 1097 | + xer, cr0, cr1, cr5, cr6, cr7, |
| 1098 | + f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, |
| 1099 | + } |
| 1100 | + }, |
1087 | 1101 | } |
1088 | 1102 | } |
1089 | 1103 | } |
0 commit comments