diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2022-02-23 11:38:28 +0100 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2022-02-23 11:38:28 +0100 |
| commit | ca1f3e752ea8a1d59ef69de49deb68905afb2aef (patch) | |
| tree | 92bfde4585c0ad9aedbe86a79434ff9b07e3b723 /src | |
| parent | dc973aef2af4db8ddfc4e8e30f93b4e94560062c (diff) | |
| parent | a063e138b6db9cd8dee2b6573d089fd4c843be7f (diff) | |
| download | rust-ca1f3e752ea8a1d59ef69de49deb68905afb2aef.tar.gz rust-ca1f3e752ea8a1d59ef69de49deb68905afb2aef.zip | |
Sync from rust bafe8d06e015eb00724d3d497516191d6681943f
Diffstat (limited to 'src')
| -rw-r--r-- | src/inline_asm.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/inline_asm.rs b/src/inline_asm.rs index c242c75ed18..deac5dfd3ec 100644 --- a/src/inline_asm.rs +++ b/src/inline_asm.rs @@ -106,6 +106,7 @@ pub(crate) fn codegen_inline_asm<'tcx>( let mut asm_gen = InlineAssemblyGenerator { tcx: fx.tcx, arch: fx.tcx.sess.asm_arch.unwrap(), + enclosing_def_id: fx.instance.def_id(), template, operands, options, @@ -169,6 +170,7 @@ pub(crate) fn codegen_inline_asm<'tcx>( struct InlineAssemblyGenerator<'a, 'tcx> { tcx: TyCtxt<'tcx>, arch: InlineAsmArch, + enclosing_def_id: DefId, template: &'a [InlineAsmTemplatePiece], operands: &'a [InlineAsmOperand<'tcx>], options: InlineAsmOptions, @@ -182,7 +184,12 @@ struct InlineAssemblyGenerator<'a, 'tcx> { impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> { fn allocate_registers(&mut self) { let sess = self.tcx.sess; - let map = allocatable_registers(self.arch, &sess.target_features, &sess.target); + let map = allocatable_registers( + self.arch, + sess.relocation_model(), + self.tcx.asm_target_features(self.enclosing_def_id), + &sess.target, + ); let mut allocated = FxHashMap::<_, (bool, bool)>::default(); let mut regs = vec![None; self.operands.len()]; @@ -313,14 +320,9 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> { let mut new_slot = |x| new_slot_fn(&mut slot_size, x); // Allocate stack slots for saving clobbered registers - let abi_clobber = InlineAsmClobberAbi::parse( - self.arch, - &self.tcx.sess.target_features, - &self.tcx.sess.target, - sym::C, - ) - .unwrap() - .clobbered_regs(); + let abi_clobber = InlineAsmClobberAbi::parse(self.arch, &self.tcx.sess.target, sym::C) + .unwrap() + .clobbered_regs(); for (i, reg) in self.registers.iter().enumerate().filter_map(|(i, r)| r.map(|r| (i, r))) { let mut need_save = true; // If the register overlaps with a register clobbered by function call, then |
