|
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