use crate::emulator::constants::operand_indices;
use crate::emulator::instructions::functions::*;
use crate::emulator::instructions::*;
use gpcas_base::instruction_type;
use gpcas_isa::instruction_flags;
pub const FORMAT_2_5_INSTRUCTIONS: [SimpleIsaInstruction; 56] = [
SimpleIsaInstruction {
function: move_instruction,
inputs: 1,
instr_type: instruction_type::MOVE,
instruction_flags: instruction_flags::MEM_IN | instruction_flags::MEM_OUT,
..SimpleIsaInstruction::DEFAULT
},
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
];
pub const FORMAT_2_6_INSTRUCTIONS: [SimpleIsaInstruction; 64] = [
NOT_YET_IMPLEMENTED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
SimpleIsaInstruction {
function: replace,
inputs: 2,
instr_type: instruction_type::INT_SHIFT,
..SimpleIsaInstruction::DEFAULT
},
NOT_YET_IMPLEMENTED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
NOT_YET_IMPLEMENTED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
];
pub const FORMAT_2_9_INSTRUCTIONS: [SimpleIsaInstruction; 64] = [
SimpleIsaInstruction {
function: shift_before::<MOVE, 32>,
inputs: 1,
instr_type: instruction_type::MOVE,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: insert_hi,
inputs: 2,
instr_type: instruction_type::SIMPLE,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: truncate::<ADD, 32>,
inputs: 2,
instr_type: instruction_type::INT_ADD,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: truncate::<SUB, 32>,
inputs: 2,
instr_type: instruction_type::INT_ADD,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: shift_before::<ADD, 32>,
inputs: 2,
instr_type: instruction_type::INT_ADD,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: shift_before::<AND, 32>,
inputs: 2,
instr_type: instruction_type::INT_ADD,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: shift_before::<OR, 32>,
inputs: 2,
instr_type: instruction_type::INT_ADD,
..SimpleIsaInstruction::DEFAULT
},
SimpleIsaInstruction {
function: shift_before::<XOR, 32>,
inputs: 2,
instr_type: instruction_type::INT_ADD,
..SimpleIsaInstruction::DEFAULT
},
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
SimpleIsaInstruction {
function: |emulator, _, _| {
emulator.operands.set_u64(
operand_indices::OUTPUT,
emulator
.operands
.get_u64(operand_indices::INPUT1)
.wrapping_add(emulator.operands.get_u64(operand_indices::INPUT3)),
);
},
inputs: 3,
instr_type: instruction_type::INT_ADD,
operand_type_override: Some(OperandType::I64),
register_type_override: Some((1, Operand::SpecialRegister(0))),
..SimpleIsaInstruction::DEFAULT
},
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
UNSPECIFIED_INSTRUCTION,
];