Use roc_target over target_lexicon

Tailors a target class for our needs.
Replaces tons of uses across the entire compiler.
This is a base for later adding new targets like thumb.
This commit is contained in:
Brendan Hansknecht 2024-03-21 21:54:58 -07:00
parent 185262510c
commit 6dc5bfb1b7
No known key found for this signature in database
GPG key ID: 0EA784685083E75B
72 changed files with 1008 additions and 1371 deletions

View file

@ -17,7 +17,7 @@ use roc_mono::layout::{
TagIdIntType, UnionLayout,
};
use roc_mono::low_level::HigherOrder;
use roc_target::TargetInfo;
use roc_target::Target;
use std::marker::PhantomData;
pub(crate) mod aarch64;
@ -790,7 +790,7 @@ pub fn new_backend_64bit<
CC: CallConv<GeneralReg, FloatReg, ASM>,
>(
env: &'r Env<'a>,
target_info: TargetInfo,
target: Target,
interns: &'r mut Interns,
layout_interner: &'r mut STLayoutInterner<'a>,
) -> Backend64Bit<'a, 'r, GeneralReg, FloatReg, ASM, CC> {
@ -800,7 +800,7 @@ pub fn new_backend_64bit<
env,
interns,
layout_interner,
helper_proc_gen: CodeGenHelp::new(env.arena, target_info, env.module_id),
helper_proc_gen: CodeGenHelp::new(env.arena, target, env.module_id),
helper_proc_symbols: bumpalo::vec![in env.arena],
caller_procs: bumpalo::vec![in env.arena],
proc_name: None,
@ -812,7 +812,7 @@ pub fn new_backend_64bit<
free_map: MutMap::default(),
literal_map: MutMap::default(),
join_map: MutMap::default(),
storage_manager: storage::new_storage_manager(env, target_info),
storage_manager: storage::new_storage_manager(env, target),
}
}
@ -853,8 +853,8 @@ impl<
fn relocations_mut(&mut self) -> &mut Vec<'a, Relocation> {
&mut self.relocs
}
fn target_info(&self) -> TargetInfo {
self.storage_manager.target_info
fn target(&self) -> Target {
self.storage_manager.target
}
fn module_interns_helpers_mut(
&mut self,
@ -3627,7 +3627,7 @@ impl<
// mask out the tag id bits
let (unmasked_symbol, unmasked_reg) =
if union_layout.stores_tag_id_as_data(self.storage_manager.target_info) {
if union_layout.stores_tag_id_as_data(self.storage_manager.target) {
(None, ptr_reg)
} else {
let (mask_symbol, mask_reg) = self.clear_tag_id(ptr_reg);
@ -3728,7 +3728,7 @@ impl<
// mask out the tag id bits
let (unmasked_symbol, unmasked_reg) =
if union_layout.stores_tag_id_as_data(self.storage_manager.target_info) {
if union_layout.stores_tag_id_as_data(self.storage_manager.target) {
(None, ptr_reg)
} else {
let (mask_symbol, mask_reg) = self.clear_tag_id(ptr_reg);
@ -4007,8 +4007,8 @@ impl<
UnionLayout::Recursive(_) => {
let dst_reg = self.storage_manager.claim_general_reg(&mut self.buf, sym);
let target_info = self.storage_manager.target_info;
if union_layout.stores_tag_id_as_data(target_info) {
let target = self.storage_manager.target;
if union_layout.stores_tag_id_as_data(target) {
let offset = union_layout.tag_id_offset(self.interner()).unwrap() as i32;
let ptr_reg = self
@ -4173,7 +4173,7 @@ impl<
.unwrap();
let largest_variant =
if union_layout.stores_tag_id_as_data(self.storage_manager.target_info) {
if union_layout.stores_tag_id_as_data(self.storage_manager.target) {
self.layout_interner
.insert_direct_no_semantic(LayoutRepr::Struct(
self.env.arena.alloc([largest_variant_fields, Layout::U8]),
@ -4214,7 +4214,7 @@ impl<
};
// finally, we need to tag the pointer
if union_layout.stores_tag_id_as_data(self.storage_manager.target_info) {
if union_layout.stores_tag_id_as_data(self.storage_manager.target) {
// allocate space on the stack for the whole tag payload
let scratch_space = self.debug_symbol("scratch_space");
let (data_size, data_alignment) =
@ -4290,7 +4290,7 @@ impl<
let other_fields = tags[tag_id as usize];
let stores_tag_id_as_data =
union_layout.stores_tag_id_as_data(self.storage_manager.target_info);
union_layout.stores_tag_id_as_data(self.storage_manager.target);
let (largest_variant_fields, _largest_variant_size) = tags
.iter()

View file

@ -14,7 +14,7 @@ use roc_mono::{
Builtin, InLayout, Layout, LayoutInterner, LayoutRepr, STLayoutInterner, UnionLayout,
},
};
use roc_target::TargetInfo;
use roc_target::Target;
use std::cmp::max;
use std::marker::PhantomData;
use std::rc::Rc;
@ -92,7 +92,7 @@ pub struct StorageManager<
phantom_cc: PhantomData<CC>,
phantom_asm: PhantomData<ASM>,
pub(crate) env: &'r Env<'a>,
pub(crate) target_info: TargetInfo,
pub(crate) target: Target,
// Data about where each symbol is stored.
symbol_storage_map: MutMap<Symbol, Storage<GeneralReg, FloatReg>>,
@ -137,13 +137,13 @@ pub fn new_storage_manager<
CC: CallConv<GeneralReg, FloatReg, ASM>,
>(
env: &'r Env<'a>,
target_info: TargetInfo,
target: Target,
) -> StorageManager<'a, 'r, GeneralReg, FloatReg, ASM, CC> {
StorageManager {
phantom_asm: PhantomData,
phantom_cc: PhantomData,
env,
target_info,
target,
symbol_storage_map: MutMap::default(),
allocation_map: MutMap::default(),
join_param_map: MutMap::default(),