diff options
| author | bors <bors@rust-lang.org> | 2024-10-14 16:38:40 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-10-14 16:38:40 +0000 |
| commit | 9322d183f45e0fd5a509820874cc5ff27744a479 (patch) | |
| tree | 1a426b7f4794666ac3e1b2e9739c812b3b3fd211 /compiler/rustc_codegen_llvm/src/asm.rs | |
| parent | 17a19e684cdf3ca088af8b4da6a6209d128913f4 (diff) | |
| parent | ac9b21281e7f133c9a92a6a5d6ef7c8f3d61f0b9 (diff) | |
| download | rust-9322d183f45e0fd5a509820874cc5ff27744a479.tar.gz rust-9322d183f45e0fd5a509820874cc5ff27744a479.zip | |
Auto merge of #131690 - matthiaskrgr:rollup-mcau4ol, r=matthiaskrgr
Rollup of 8 pull requests Successful merges: - #129424 (Stabilize `Pin::as_deref_mut()`) - #131332 (Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly) - #131384 (Update precondition tests (especially for zero-size access to null)) - #131430 (Special treatment empty tuple when suggest adding a string literal in format macro.) - #131550 (Make some tweaks to extern block diagnostics) - #131667 (Fix AArch64InlineAsmReg::emit) - #131679 (compiletest: Document various parts of compiletest's `lib.rs`) - #131682 (Tag PRs affecting compiletest with `A-compiletest`) Failed merges: - #131496 (Stabilise `const_make_ascii`.) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/asm.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/asm.rs | 51 |
1 files changed, 5 insertions, 46 deletions
diff --git a/compiler/rustc_codegen_llvm/src/asm.rs b/compiler/rustc_codegen_llvm/src/asm.rs index 298cac2fd6e..d1d7d0cf4ce 100644 --- a/compiler/rustc_codegen_llvm/src/asm.rs +++ b/compiler/rustc_codegen_llvm/src/asm.rs @@ -542,57 +542,16 @@ fn xmm_reg_index(reg: InlineAsmReg) -> Option<u32> { /// If the register is an AArch64 integer register then return its index. fn a64_reg_index(reg: InlineAsmReg) -> Option<u32> { - use AArch64InlineAsmReg::*; - // Unlike `a64_vreg_index`, we can't subtract `x0` to get the u32 because - // `x19` and `x29` are missing and the integer constants for the - // `x0`..`x30` enum variants don't all match the register number. E.g. the - // integer constant for `x18` is 18, but the constant for `x20` is 19. - Some(match reg { - InlineAsmReg::AArch64(r) => match r { - x0 => 0, - x1 => 1, - x2 => 2, - x3 => 3, - x4 => 4, - x5 => 5, - x6 => 6, - x7 => 7, - x8 => 8, - x9 => 9, - x10 => 10, - x11 => 11, - x12 => 12, - x13 => 13, - x14 => 14, - x15 => 15, - x16 => 16, - x17 => 17, - x18 => 18, - // x19 is reserved - x20 => 20, - x21 => 21, - x22 => 22, - x23 => 23, - x24 => 24, - x25 => 25, - x26 => 26, - x27 => 27, - x28 => 28, - // x29 is reserved - x30 => 30, - _ => return None, - }, - _ => return None, - }) + match reg { + InlineAsmReg::AArch64(r) => r.reg_index(), + _ => None, + } } /// If the register is an AArch64 vector register then return its index. fn a64_vreg_index(reg: InlineAsmReg) -> Option<u32> { - use AArch64InlineAsmReg::*; match reg { - InlineAsmReg::AArch64(reg) if reg as u32 >= v0 as u32 && reg as u32 <= v31 as u32 => { - Some(reg as u32 - v0 as u32) - } + InlineAsmReg::AArch64(reg) => reg.vreg_index(), _ => None, } } |
