Merge branch 'sync_from_rust'
This commit is contained in:
commit
faeede3881
@ -1,7 +1,7 @@
|
|||||||
use crate::path::{Dirs, RelPath};
|
use crate::path::{Dirs, RelPath};
|
||||||
use crate::prepare::GitRepo;
|
use crate::prepare::GitRepo;
|
||||||
use crate::utils::{spawn_and_wait, CargoProject, Compiler};
|
use crate::utils::{CargoProject, Compiler, spawn_and_wait};
|
||||||
use crate::{build_sysroot, CodegenBackend, SysrootKind};
|
use crate::{CodegenBackend, SysrootKind, build_sysroot};
|
||||||
|
|
||||||
static ABI_CAFE_REPO: GitRepo = GitRepo::github(
|
static ABI_CAFE_REPO: GitRepo = GitRepo::github(
|
||||||
"Gankra",
|
"Gankra",
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
use crate::path::{Dirs, RelPath};
|
use crate::path::{Dirs, RelPath};
|
||||||
use crate::prepare::GitRepo;
|
use crate::prepare::GitRepo;
|
||||||
use crate::rustc_info::get_file_name;
|
use crate::rustc_info::get_file_name;
|
||||||
use crate::utils::{spawn_and_wait, Compiler};
|
use crate::utils::{Compiler, spawn_and_wait};
|
||||||
|
|
||||||
static SIMPLE_RAYTRACER_REPO: GitRepo = GitRepo::github(
|
static SIMPLE_RAYTRACER_REPO: GitRepo = GitRepo::github(
|
||||||
"ebobby",
|
"ebobby",
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
use crate::prepare::apply_patches;
|
use crate::prepare::apply_patches;
|
||||||
use crate::rustc_info::{get_default_sysroot, get_file_name};
|
use crate::rustc_info::{get_default_sysroot, get_file_name};
|
||||||
use crate::utils::{
|
use crate::utils::{
|
||||||
ensure_empty_dir, spawn_and_wait, try_hard_link, CargoProject, Compiler, LogGroup,
|
CargoProject, Compiler, LogGroup, ensure_empty_dir, spawn_and_wait, try_hard_link,
|
||||||
};
|
};
|
||||||
use crate::{config, CodegenBackend, SysrootKind};
|
use crate::{CodegenBackend, SysrootKind, config};
|
||||||
|
|
||||||
pub(crate) fn build_sysroot(
|
pub(crate) fn build_sysroot(
|
||||||
dirs: &Dirs,
|
dirs: &Dirs,
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
use crate::path::{Dirs, RelPath};
|
use crate::path::{Dirs, RelPath};
|
||||||
use crate::prepare::{apply_patches, GitRepo};
|
use crate::prepare::{GitRepo, apply_patches};
|
||||||
use crate::rustc_info::get_default_sysroot;
|
use crate::rustc_info::get_default_sysroot;
|
||||||
use crate::shared_utils::rustflags_from_env;
|
use crate::shared_utils::rustflags_from_env;
|
||||||
use crate::utils::{spawn_and_wait, CargoProject, Compiler, LogGroup};
|
use crate::utils::{CargoProject, Compiler, LogGroup, spawn_and_wait};
|
||||||
use crate::{build_sysroot, config, CodegenBackend, SysrootKind};
|
use crate::{CodegenBackend, SysrootKind, build_sysroot, config};
|
||||||
|
|
||||||
static BUILD_EXAMPLE_OUT_DIR: RelPath = RelPath::BUILD.join("example");
|
static BUILD_EXAMPLE_OUT_DIR: RelPath = RelPath::BUILD.join("example");
|
||||||
|
|
||||||
|
@ -238,10 +238,9 @@ unsafe fn test_simd() {
|
|||||||
let (zero0, zero1) = std::mem::transmute::<_, (u64, u64)>(x);
|
let (zero0, zero1) = std::mem::transmute::<_, (u64, u64)>(x);
|
||||||
assert_eq!((zero0, zero1), (0, 0));
|
assert_eq!((zero0, zero1), (0, 0));
|
||||||
assert_eq!(std::mem::transmute::<_, [u16; 8]>(or), [7, 7, 7, 7, 7, 7, 7, 7]);
|
assert_eq!(std::mem::transmute::<_, [u16; 8]>(or), [7, 7, 7, 7, 7, 7, 7, 7]);
|
||||||
assert_eq!(
|
assert_eq!(std::mem::transmute::<_, [u16; 8]>(cmp_eq), [
|
||||||
std::mem::transmute::<_, [u16; 8]>(cmp_eq),
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
|
||||||
[0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff]
|
]);
|
||||||
);
|
|
||||||
assert_eq!(std::mem::transmute::<_, [u16; 8]>(cmp_lt), [0, 0, 0, 0, 0, 0, 0, 0]);
|
assert_eq!(std::mem::transmute::<_, [u16; 8]>(cmp_lt), [0, 0, 0, 0, 0, 0, 0, 0]);
|
||||||
|
|
||||||
test_mm_slli_si128();
|
test_mm_slli_si128();
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
use rustc_codegen_ssa::base::is_call_from_compiler_builtins_to_upstream_monomorphization;
|
use rustc_codegen_ssa::base::is_call_from_compiler_builtins_to_upstream_monomorphization;
|
||||||
use rustc_codegen_ssa::errors::CompilerBuiltinsCannotCall;
|
use rustc_codegen_ssa::errors::CompilerBuiltinsCannotCall;
|
||||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||||
|
use rustc_middle::ty::TypeVisitableExt;
|
||||||
use rustc_middle::ty::layout::FnAbiOf;
|
use rustc_middle::ty::layout::FnAbiOf;
|
||||||
use rustc_middle::ty::print::with_no_trimmed_paths;
|
use rustc_middle::ty::print::with_no_trimmed_paths;
|
||||||
use rustc_middle::ty::TypeVisitableExt;
|
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_target::abi::call::{Conv, FnAbi, PassMode};
|
use rustc_target::abi::call::{Conv, FnAbi, PassMode};
|
||||||
@ -61,6 +61,9 @@ pub(crate) fn conv_to_call_conv(sess: &Session, c: Conv, default_call_conv: Call
|
|||||||
Conv::CCmseNonSecureCall => {
|
Conv::CCmseNonSecureCall => {
|
||||||
sess.dcx().fatal("C-cmse-nonsecure-call call conv is not yet implemented");
|
sess.dcx().fatal("C-cmse-nonsecure-call call conv is not yet implemented");
|
||||||
}
|
}
|
||||||
|
Conv::CCmseNonSecureEntry => {
|
||||||
|
sess.dcx().fatal("C-cmse-nonsecure-entry call conv is not yet implemented");
|
||||||
|
}
|
||||||
|
|
||||||
Conv::Msp430Intr | Conv::PtxKernel | Conv::AvrInterrupt | Conv::AvrNonBlockingInterrupt => {
|
Conv::Msp430Intr | Conv::PtxKernel | Conv::AvrInterrupt | Conv::AvrNonBlockingInterrupt => {
|
||||||
unreachable!("tried to use {c:?} call conv which only exists on an unsupported target");
|
unreachable!("tried to use {c:?} call conv which only exists on an unsupported target");
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
use rustc_target::abi::call::{
|
use rustc_target::abi::call::{
|
||||||
ArgAbi, ArgAttributes, ArgExtension as RustcArgExtension, CastTarget, PassMode, Reg, RegKind,
|
ArgAbi, ArgAttributes, ArgExtension as RustcArgExtension, CastTarget, PassMode, Reg, RegKind,
|
||||||
};
|
};
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{SmallVec, smallvec};
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
use crate::value_and_place::assert_assignable;
|
use crate::value_and_place::assert_assignable;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Return value handling
|
//! Return value handling
|
||||||
|
|
||||||
use rustc_target::abi::call::{ArgAbi, PassMode};
|
use rustc_target::abi::call::{ArgAbi, PassMode};
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{SmallVec, smallvec};
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
// Adapted from rustc
|
// Adapted from rustc
|
||||||
|
|
||||||
use rustc_ast::expand::allocator::{
|
use rustc_ast::expand::allocator::{
|
||||||
alloc_error_handler_name, default_fn_name, global_fn_name, AllocatorKind, AllocatorTy,
|
ALLOCATOR_METHODS, AllocatorKind, AllocatorTy, NO_ALLOC_SHIM_IS_UNSTABLE,
|
||||||
ALLOCATOR_METHODS, NO_ALLOC_SHIM_IS_UNSTABLE,
|
alloc_error_handler_name, default_fn_name, global_fn_name,
|
||||||
};
|
};
|
||||||
use rustc_codegen_ssa::base::allocator_kind_for_codegen;
|
use rustc_codegen_ssa::base::allocator_kind_for_codegen;
|
||||||
use rustc_session::config::OomStrategy;
|
use rustc_session::config::OomStrategy;
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
//! Codegen of a single function
|
//! Codegen of a single function
|
||||||
|
|
||||||
use cranelift_codegen::ir::UserFuncName;
|
|
||||||
use cranelift_codegen::CodegenError;
|
use cranelift_codegen::CodegenError;
|
||||||
|
use cranelift_codegen::ir::UserFuncName;
|
||||||
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
||||||
use cranelift_module::ModuleError;
|
use cranelift_module::ModuleError;
|
||||||
use rustc_ast::InlineAsmOptions;
|
use rustc_ast::InlineAsmOptions;
|
||||||
use rustc_codegen_ssa::base::is_call_from_compiler_builtins_to_upstream_monomorphization;
|
use rustc_codegen_ssa::base::is_call_from_compiler_builtins_to_upstream_monomorphization;
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||||
|
use rustc_middle::ty::TypeVisitableExt;
|
||||||
use rustc_middle::ty::adjustment::PointerCoercion;
|
use rustc_middle::ty::adjustment::PointerCoercion;
|
||||||
use rustc_middle::ty::layout::FnAbiOf;
|
use rustc_middle::ty::layout::FnAbiOf;
|
||||||
use rustc_middle::ty::print::with_no_trimmed_paths;
|
use rustc_middle::ty::print::with_no_trimmed_paths;
|
||||||
use rustc_middle::ty::TypeVisitableExt;
|
|
||||||
|
|
||||||
use crate::constant::ConstantCx;
|
use crate::constant::ConstantCx;
|
||||||
use crate::debuginfo::{FunctionDebugContext, TypeDebugContext};
|
use crate::debuginfo::{FunctionDebugContext, TypeDebugContext};
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
use cranelift_codegen::isa::TargetFrontendConfig;
|
use cranelift_codegen::isa::TargetFrontendConfig;
|
||||||
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
|
use rustc_middle::ty::TypeFoldable;
|
||||||
use rustc_middle::ty::layout::{
|
use rustc_middle::ty::layout::{
|
||||||
self, FnAbiError, FnAbiOfHelpers, FnAbiRequest, LayoutError, LayoutOfHelpers,
|
self, FnAbiError, FnAbiOfHelpers, FnAbiRequest, LayoutError, LayoutOfHelpers,
|
||||||
};
|
};
|
||||||
use rustc_middle::ty::TypeFoldable;
|
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_target::abi::call::FnAbi;
|
use rustc_target::abi::call::FnAbi;
|
||||||
use rustc_target::abi::{Float, Integer, Primitive};
|
use rustc_target::abi::{Float, Integer, Primitive};
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
use cranelift_module::*;
|
use cranelift_module::*;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||||
use rustc_middle::mir::interpret::{read_target_uint, AllocId, GlobalAlloc, Scalar};
|
use rustc_middle::mir::interpret::{AllocId, GlobalAlloc, Scalar, read_target_uint};
|
||||||
use rustc_middle::ty::{Binder, ExistentialTraitRef, ScalarInt};
|
use rustc_middle::ty::{Binder, ExistentialTraitRef, ScalarInt};
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
use gimli::{RunTimeEndian, SectionId};
|
use gimli::{RunTimeEndian, SectionId};
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
|
|
||||||
use super::object::WriteDebugInfo;
|
|
||||||
use super::DebugContext;
|
use super::DebugContext;
|
||||||
|
use super::object::WriteDebugInfo;
|
||||||
|
|
||||||
pub(super) fn address_for_func(func_id: FuncId) -> Address {
|
pub(super) fn address_for_func(func_id: FuncId) -> Address {
|
||||||
let symbol = func_id.as_u32();
|
let symbol = func_id.as_u32();
|
||||||
|
@ -3,15 +3,15 @@
|
|||||||
use std::ffi::OsStr;
|
use std::ffi::OsStr;
|
||||||
use std::path::{Component, Path};
|
use std::path::{Component, Path};
|
||||||
|
|
||||||
use cranelift_codegen::binemit::CodeOffset;
|
|
||||||
use cranelift_codegen::MachSrcLoc;
|
use cranelift_codegen::MachSrcLoc;
|
||||||
|
use cranelift_codegen::binemit::CodeOffset;
|
||||||
use gimli::write::{AttributeValue, FileId, FileInfo, LineProgram, LineString, LineStringTable};
|
use gimli::write::{AttributeValue, FileId, FileInfo, LineProgram, LineString, LineStringTable};
|
||||||
use rustc_span::{
|
use rustc_span::{
|
||||||
hygiene, FileName, Pos, SourceFile, SourceFileAndLine, SourceFileHash, SourceFileHashAlgorithm,
|
FileName, Pos, SourceFile, SourceFileAndLine, SourceFileHash, SourceFileHashAlgorithm, hygiene,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::debuginfo::emit::address_for_func;
|
|
||||||
use crate::debuginfo::FunctionDebugContext;
|
use crate::debuginfo::FunctionDebugContext;
|
||||||
|
use crate::debuginfo::emit::address_for_func;
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
// OPTIMIZATION: It is cheaper to do this in one pass than using `.parent()` and `.file_name()`.
|
// OPTIMIZATION: It is cheaper to do this in one pass than using `.parent()` and `.file_name()`.
|
||||||
|
@ -73,19 +73,16 @@ fn add_debug_reloc(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
self.object
|
self.object
|
||||||
.add_relocation(
|
.add_relocation(from.0, Relocation {
|
||||||
from.0,
|
offset: u64::from(reloc.offset),
|
||||||
Relocation {
|
symbol,
|
||||||
offset: u64::from(reloc.offset),
|
flags: RelocationFlags::Generic {
|
||||||
symbol,
|
kind: reloc.kind,
|
||||||
flags: RelocationFlags::Generic {
|
encoding: RelocationEncoding::Generic,
|
||||||
kind: reloc.kind,
|
size: reloc.size * 8,
|
||||||
encoding: RelocationEncoding::Generic,
|
|
||||||
size: reloc.size * 8,
|
|
||||||
},
|
|
||||||
addend: i64::try_from(symbol_offset).unwrap() + reloc.addend,
|
|
||||||
},
|
},
|
||||||
)
|
addend: i64::try_from(symbol_offset).unwrap() + reloc.addend,
|
||||||
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
use rustc_middle::ty::layout::LayoutOf;
|
use rustc_middle::ty::layout::LayoutOf;
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
|
|
||||||
use crate::{has_ptr_meta, DebugContext, RevealAllLayoutCx};
|
use crate::{DebugContext, RevealAllLayoutCx, has_ptr_meta};
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub(crate) struct TypeDebugContext<'tcx> {
|
pub(crate) struct TypeDebugContext<'tcx> {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
//! Unwind info generation (`.eh_frame`)
|
//! Unwind info generation (`.eh_frame`)
|
||||||
|
|
||||||
use cranelift_codegen::ir::Endianness;
|
use cranelift_codegen::ir::Endianness;
|
||||||
use cranelift_codegen::isa::unwind::UnwindInfo;
|
|
||||||
use cranelift_codegen::isa::TargetIsa;
|
use cranelift_codegen::isa::TargetIsa;
|
||||||
|
use cranelift_codegen::isa::unwind::UnwindInfo;
|
||||||
use cranelift_object::ObjectProduct;
|
use cranelift_object::ObjectProduct;
|
||||||
use gimli::write::{CieId, EhFrame, FrameTable, Section};
|
|
||||||
use gimli::RunTimeEndian;
|
use gimli::RunTimeEndian;
|
||||||
|
use gimli::write::{CieId, EhFrame, FrameTable, Section};
|
||||||
|
|
||||||
use super::emit::address_for_func;
|
use super::emit::address_for_func;
|
||||||
use super::object::WriteDebugInfo;
|
use super::object::WriteDebugInfo;
|
||||||
|
@ -12,24 +12,24 @@
|
|||||||
use rustc_codegen_ssa::back::metadata::create_compressed_metadata_file;
|
use rustc_codegen_ssa::back::metadata::create_compressed_metadata_file;
|
||||||
use rustc_codegen_ssa::base::determine_cgu_reuse;
|
use rustc_codegen_ssa::base::determine_cgu_reuse;
|
||||||
use rustc_codegen_ssa::{
|
use rustc_codegen_ssa::{
|
||||||
errors as ssa_errors, CodegenResults, CompiledModule, CrateInfo, ModuleKind,
|
CodegenResults, CompiledModule, CrateInfo, ModuleKind, errors as ssa_errors,
|
||||||
};
|
};
|
||||||
use rustc_data_structures::profiling::SelfProfilerRef;
|
use rustc_data_structures::profiling::SelfProfilerRef;
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||||
use rustc_data_structures::sync::{par_map, IntoDynSyncSend};
|
use rustc_data_structures::sync::{IntoDynSyncSend, par_map};
|
||||||
use rustc_metadata::fs::copy_to_stdout;
|
|
||||||
use rustc_metadata::EncodedMetadata;
|
use rustc_metadata::EncodedMetadata;
|
||||||
|
use rustc_metadata::fs::copy_to_stdout;
|
||||||
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
||||||
use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
|
use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
|
||||||
use rustc_session::config::{DebugInfo, OutFileName, OutputFilenames, OutputType};
|
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
|
use rustc_session::config::{DebugInfo, OutFileName, OutputFilenames, OutputType};
|
||||||
|
|
||||||
|
use crate::BackendConfig;
|
||||||
use crate::concurrency_limiter::{ConcurrencyLimiter, ConcurrencyLimiterToken};
|
use crate::concurrency_limiter::{ConcurrencyLimiter, ConcurrencyLimiterToken};
|
||||||
use crate::debuginfo::TypeDebugContext;
|
use crate::debuginfo::TypeDebugContext;
|
||||||
use crate::global_asm::GlobalAsmConfig;
|
use crate::global_asm::GlobalAsmConfig;
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
use crate::unwind_module::UnwindModule;
|
use crate::unwind_module::UnwindModule;
|
||||||
use crate::BackendConfig;
|
|
||||||
|
|
||||||
struct ModuleCodegenResult {
|
struct ModuleCodegenResult {
|
||||||
module_regular: CompiledModule,
|
module_regular: CompiledModule,
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::os::raw::{c_char, c_int};
|
use std::os::raw::{c_char, c_int};
|
||||||
use std::sync::{mpsc, Mutex, OnceLock};
|
use std::sync::{Mutex, OnceLock, mpsc};
|
||||||
|
|
||||||
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
||||||
use cranelift_jit::{JITBuilder, JITModule};
|
use cranelift_jit::{JITBuilder, JITModule};
|
||||||
@ -359,15 +359,11 @@ fn codegen_shim<'tcx>(
|
|||||||
let instance_ptr = Box::into_raw(Box::new(inst));
|
let instance_ptr = Box::into_raw(Box::new(inst));
|
||||||
|
|
||||||
let jit_fn = module
|
let jit_fn = module
|
||||||
.declare_function(
|
.declare_function("__clif_jit_fn", Linkage::Import, &Signature {
|
||||||
"__clif_jit_fn",
|
call_conv: module.target_config().default_call_conv,
|
||||||
Linkage::Import,
|
params: vec![AbiParam::new(pointer_type), AbiParam::new(pointer_type)],
|
||||||
&Signature {
|
returns: vec![AbiParam::new(pointer_type)],
|
||||||
call_conv: module.target_config().default_call_conv,
|
})
|
||||||
params: vec![AbiParam::new(pointer_type), AbiParam::new(pointer_type)],
|
|
||||||
returns: vec![AbiParam::new(pointer_type)],
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let context = cached_context;
|
let context = cached_context;
|
||||||
|
@ -869,15 +869,11 @@ fn call_inline_asm<'tcx>(
|
|||||||
|
|
||||||
let inline_asm_func = fx
|
let inline_asm_func = fx
|
||||||
.module
|
.module
|
||||||
.declare_function(
|
.declare_function(asm_name, Linkage::Import, &Signature {
|
||||||
asm_name,
|
call_conv: CallConv::SystemV,
|
||||||
Linkage::Import,
|
params: vec![AbiParam::new(fx.pointer_type)],
|
||||||
&Signature {
|
returns: vec![],
|
||||||
call_conv: CallConv::SystemV,
|
})
|
||||||
params: vec![AbiParam::new(fx.pointer_type)],
|
|
||||||
returns: vec![],
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let inline_asm_func = fx.module.declare_func_in_func(inline_asm_func, fx.bcx.func);
|
let inline_asm_func = fx.module.declare_func_in_func(inline_asm_func, fx.bcx.func);
|
||||||
if fx.clif_comments.enabled() {
|
if fx.clif_comments.enabled() {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
|
use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
|
||||||
use rustc_target::asm::*;
|
use rustc_target::asm::*;
|
||||||
|
|
||||||
use crate::inline_asm::{codegen_inline_asm_inner, CInlineAsmOperand};
|
use crate::inline_asm::{CInlineAsmOperand, codegen_inline_asm_inner};
|
||||||
use crate::intrinsics::*;
|
use crate::intrinsics::*;
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -19,11 +19,11 @@ macro_rules! intrinsic_args {
|
|||||||
|
|
||||||
use cranelift_codegen::ir::AtomicRmwOp;
|
use cranelift_codegen::ir::AtomicRmwOp;
|
||||||
use rustc_middle::ty;
|
use rustc_middle::ty;
|
||||||
|
use rustc_middle::ty::GenericArgsRef;
|
||||||
use rustc_middle::ty::layout::{HasParamEnv, ValidityRequirement};
|
use rustc_middle::ty::layout::{HasParamEnv, ValidityRequirement};
|
||||||
use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths};
|
use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths};
|
||||||
use rustc_middle::ty::GenericArgsRef;
|
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{Symbol, sym};
|
||||||
|
|
||||||
pub(crate) use self::llvm::codegen_llvm_intrinsic_call;
|
pub(crate) use self::llvm::codegen_llvm_intrinsic_call;
|
||||||
use crate::cast::clif_intcast;
|
use crate::cast::clif_intcast;
|
||||||
|
@ -561,12 +561,9 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
|
|||||||
(sym::simd_round, types::F64) => "round",
|
(sym::simd_round, types::F64) => "round",
|
||||||
_ => unreachable!("{:?}", intrinsic),
|
_ => unreachable!("{:?}", intrinsic),
|
||||||
};
|
};
|
||||||
fx.lib_call(
|
fx.lib_call(name, vec![AbiParam::new(lane_ty)], vec![AbiParam::new(lane_ty)], &[
|
||||||
name,
|
lane,
|
||||||
vec![AbiParam::new(lane_ty)],
|
])[0]
|
||||||
vec![AbiParam::new(lane_ty)],
|
|
||||||
&[lane],
|
|
||||||
)[0]
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
src/lib.rs
14
src/lib.rs
@ -38,15 +38,15 @@
|
|||||||
|
|
||||||
use cranelift_codegen::isa::TargetIsa;
|
use cranelift_codegen::isa::TargetIsa;
|
||||||
use cranelift_codegen::settings::{self, Configurable};
|
use cranelift_codegen::settings::{self, Configurable};
|
||||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
|
||||||
use rustc_codegen_ssa::CodegenResults;
|
use rustc_codegen_ssa::CodegenResults;
|
||||||
|
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||||
use rustc_data_structures::profiling::SelfProfilerRef;
|
use rustc_data_structures::profiling::SelfProfilerRef;
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_metadata::EncodedMetadata;
|
use rustc_metadata::EncodedMetadata;
|
||||||
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
||||||
use rustc_session::config::OutputFilenames;
|
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::{sym, Symbol};
|
use rustc_session::config::OutputFilenames;
|
||||||
|
use rustc_span::{Symbol, sym};
|
||||||
|
|
||||||
pub use crate::config::*;
|
pub use crate::config::*;
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
@ -83,13 +83,13 @@
|
|||||||
mod vtable;
|
mod vtable;
|
||||||
|
|
||||||
mod prelude {
|
mod prelude {
|
||||||
|
pub(crate) use cranelift_codegen::Context;
|
||||||
pub(crate) use cranelift_codegen::ir::condcodes::{FloatCC, IntCC};
|
pub(crate) use cranelift_codegen::ir::condcodes::{FloatCC, IntCC};
|
||||||
pub(crate) use cranelift_codegen::ir::function::Function;
|
pub(crate) use cranelift_codegen::ir::function::Function;
|
||||||
pub(crate) use cranelift_codegen::ir::{
|
pub(crate) use cranelift_codegen::ir::{
|
||||||
types, AbiParam, Block, FuncRef, Inst, InstBuilder, MemFlags, Signature, SourceLoc,
|
AbiParam, Block, FuncRef, Inst, InstBuilder, MemFlags, Signature, SourceLoc, StackSlot,
|
||||||
StackSlot, StackSlotData, StackSlotKind, TrapCode, Type, Value,
|
StackSlotData, StackSlotKind, TrapCode, Type, Value, types,
|
||||||
};
|
};
|
||||||
pub(crate) use cranelift_codegen::Context;
|
|
||||||
pub(crate) use cranelift_module::{self, DataDescription, FuncId, Linkage, Module};
|
pub(crate) use cranelift_module::{self, DataDescription, FuncId, Linkage, Module};
|
||||||
pub(crate) use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
pub(crate) use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
||||||
pub(crate) use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
pub(crate) use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
||||||
@ -100,7 +100,7 @@ mod prelude {
|
|||||||
self, FloatTy, Instance, InstanceKind, IntTy, ParamEnv, Ty, TyCtxt, UintTy,
|
self, FloatTy, Instance, InstanceKind, IntTy, ParamEnv, Ty, TyCtxt, UintTy,
|
||||||
};
|
};
|
||||||
pub(crate) use rustc_span::Span;
|
pub(crate) use rustc_span::Span;
|
||||||
pub(crate) use rustc_target::abi::{Abi, FieldIdx, Scalar, Size, VariantIdx, FIRST_VARIANT};
|
pub(crate) use rustc_target::abi::{Abi, FIRST_VARIANT, FieldIdx, Scalar, Size, VariantIdx};
|
||||||
|
|
||||||
pub(crate) use crate::abi::*;
|
pub(crate) use crate::abi::*;
|
||||||
pub(crate) use crate::base::{codegen_operand, codegen_place};
|
pub(crate) use crate::base::{codegen_operand, codegen_place};
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
|
||||||
use rustc_hir::LangItem;
|
use rustc_hir::LangItem;
|
||||||
use rustc_middle::ty::{AssocKind, GenericArg};
|
use rustc_middle::ty::{AssocKind, GenericArg};
|
||||||
use rustc_session::config::{sigpipe, EntryFnType};
|
use rustc_session::config::{EntryFnType, sigpipe};
|
||||||
use rustc_span::symbol::Ident;
|
|
||||||
use rustc_span::DUMMY_SP;
|
use rustc_span::DUMMY_SP;
|
||||||
|
use rustc_span::symbol::Ident;
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
@ -16,13 +16,10 @@ pub(crate) fn maybe_create_entry_wrapper(
|
|||||||
is_primary_cgu: bool,
|
is_primary_cgu: bool,
|
||||||
) {
|
) {
|
||||||
let (main_def_id, (is_main_fn, sigpipe)) = match tcx.entry_fn(()) {
|
let (main_def_id, (is_main_fn, sigpipe)) = match tcx.entry_fn(()) {
|
||||||
Some((def_id, entry_ty)) => (
|
Some((def_id, entry_ty)) => (def_id, match entry_ty {
|
||||||
def_id,
|
EntryFnType::Main { sigpipe } => (true, sigpipe),
|
||||||
match entry_ty {
|
EntryFnType::Start => (false, sigpipe::DEFAULT),
|
||||||
EntryFnType::Main { sigpipe } => (true, sigpipe),
|
}),
|
||||||
EntryFnType::Start => (false, sigpipe::DEFAULT),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use cranelift_codegen::entity::SecondaryMap;
|
use cranelift_codegen::entity::SecondaryMap;
|
||||||
use cranelift_codegen::ir::entities::AnyEntity;
|
|
||||||
use cranelift_codegen::ir::Fact;
|
use cranelift_codegen::ir::Fact;
|
||||||
|
use cranelift_codegen::ir::entities::AnyEntity;
|
||||||
use cranelift_codegen::write::{FuncWriter, PlainWriter};
|
use cranelift_codegen::write::{FuncWriter, PlainWriter};
|
||||||
use rustc_middle::ty::layout::FnAbiOf;
|
use rustc_middle::ty::layout::FnAbiOf;
|
||||||
use rustc_middle::ty::print::with_no_trimmed_paths;
|
use rustc_middle::ty::print::with_no_trimmed_paths;
|
||||||
|
14
src/trap.rs
14
src/trap.rs
@ -5,15 +5,11 @@
|
|||||||
fn codegen_print(fx: &mut FunctionCx<'_, '_, '_>, msg: &str) {
|
fn codegen_print(fx: &mut FunctionCx<'_, '_, '_>, msg: &str) {
|
||||||
let puts = fx
|
let puts = fx
|
||||||
.module
|
.module
|
||||||
.declare_function(
|
.declare_function("puts", Linkage::Import, &Signature {
|
||||||
"puts",
|
call_conv: fx.target_config.default_call_conv,
|
||||||
Linkage::Import,
|
params: vec![AbiParam::new(fx.pointer_type)],
|
||||||
&Signature {
|
returns: vec![AbiParam::new(types::I32)],
|
||||||
call_conv: fx.target_config.default_call_conv,
|
})
|
||||||
params: vec![AbiParam::new(fx.pointer_type)],
|
|
||||||
returns: vec![AbiParam::new(types::I32)],
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let puts = fx.module.declare_func_in_func(puts, &mut fx.bcx.func);
|
let puts = fx.module.declare_func_in_func(puts, &mut fx.bcx.func);
|
||||||
if fx.clif_comments.enabled() {
|
if fx.clif_comments.enabled() {
|
||||||
|
Loading…
Reference in New Issue
Block a user