[meta] Uniquely number every instruction in the Rust crate;
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
use crate::cdsl::formats::FormatRegistry;
|
||||
use crate::cdsl::instructions::{
|
||||
InstructionBuilder as Inst, InstructionGroup, InstructionGroupBuilder,
|
||||
AllInstructions, InstructionBuilder as Inst, InstructionGroup, InstructionGroupBuilder,
|
||||
};
|
||||
use crate::cdsl::operands::{create_operand as operand, create_operand_doc as operand_doc};
|
||||
use crate::cdsl::type_inference::Constraint::WiderOrEq;
|
||||
@@ -11,12 +11,17 @@ use crate::cdsl::typevar::{Interval, TypeSetBuilder, TypeVar};
|
||||
use crate::shared::{types, OperandKinds};
|
||||
|
||||
pub fn define(
|
||||
all_instructions: &mut AllInstructions,
|
||||
format_registry: &FormatRegistry,
|
||||
immediates: &OperandKinds,
|
||||
entities: &OperandKinds,
|
||||
) -> InstructionGroup {
|
||||
let mut ig =
|
||||
InstructionGroupBuilder::new("base", "Shared base instruction set", format_registry);
|
||||
let mut ig = InstructionGroupBuilder::new(
|
||||
"base",
|
||||
"Shared base instruction set",
|
||||
all_instructions,
|
||||
format_registry,
|
||||
);
|
||||
|
||||
// Operand kind shorthands.
|
||||
let intcc = immediates.by_name("intcc");
|
||||
|
||||
@@ -9,13 +9,14 @@ pub mod settings;
|
||||
pub mod types;
|
||||
|
||||
use crate::cdsl::formats::FormatRegistry;
|
||||
use crate::cdsl::instructions::InstructionGroup;
|
||||
use crate::cdsl::instructions::{AllInstructions, InstructionGroup};
|
||||
use crate::cdsl::operands::OperandKind;
|
||||
use crate::cdsl::settings::SettingGroup;
|
||||
use crate::cdsl::xform::TransformGroups;
|
||||
|
||||
pub struct Definitions {
|
||||
pub settings: SettingGroup,
|
||||
pub all_instructions: AllInstructions,
|
||||
pub instructions: InstructionGroup,
|
||||
pub operand_kinds: OperandKinds,
|
||||
pub format_registry: FormatRegistry,
|
||||
@@ -50,14 +51,22 @@ impl OperandKinds {
|
||||
}
|
||||
|
||||
pub fn define() -> Definitions {
|
||||
let mut all_instructions = AllInstructions::new();
|
||||
|
||||
let immediates = OperandKinds(immediates::define());
|
||||
let entities = OperandKinds(entities::define());
|
||||
let format_registry = formats::define(&immediates, &entities);
|
||||
let instructions = instructions::define(&format_registry, &immediates, &entities);
|
||||
let instructions = instructions::define(
|
||||
&mut all_instructions,
|
||||
&format_registry,
|
||||
&immediates,
|
||||
&entities,
|
||||
);
|
||||
let transform_groups = legalize::define(&instructions, &immediates);
|
||||
|
||||
Definitions {
|
||||
settings: settings::define(),
|
||||
all_instructions,
|
||||
instructions,
|
||||
operand_kinds: immediates,
|
||||
format_registry,
|
||||
|
||||
Reference in New Issue
Block a user