macro_rules! def_regq {
($name1:ident, $name2:ident) => {
pub const $name1: reg::RegQ = reg::RegQ::$name2;
};
}
macro_rules! def_regl {
($name1:ident, $name2:ident) => {
pub const $name1: reg::RegL = reg::RegL::$name2;
};
}
macro_rules! def_regw {
($name1:ident, $name2:ident) => {
pub const $name1: reg::RegW = reg::RegW::$name2;
};
}
macro_rules! def_regb {
($name1:ident, $name2:ident) => {
pub const $name1: reg::RegB = reg::RegB::$name2;
};
}
macro_rules! build_instr_op_op {
($op:ident, $nameb:ident, $namew:ident, $namel:ident, $nameq:ident) => {
pub fn $nameb(reg1: reg::Operand<reg::RegB>, reg2: reg::Operand<reg::RegB>) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg2),
}))
}
build_instr_op_op!($op, $namew, $namel, $nameq);
};
($op:ident, $namew:ident, $namel:ident, $nameq:ident) => {
pub fn $namew(reg1: reg::Operand<reg::RegW>, reg2: reg::Operand<reg::RegW>) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg2),
}))
}
build_instr_op_op!($op, $namel, $nameq);
};
($op:ident, $namel:ident, $nameq:ident) => {
pub fn $namel(reg1: reg::Operand<reg::RegL>, reg2: reg::Operand<reg::RegL>) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg2),
}))
}
build_instr_op_op!($op, $nameq);
};
($op:ident, $nameq:ident) => {
pub fn $nameq(reg1: reg::Operand<reg::RegQ>, reg2: reg::Operand<reg::RegQ>) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg2),
}))
}
};
}
macro_rules! build_instr_op_reg {
($op:ident, $nameb:ident, $namew:ident, $namel:ident, $nameq:ident) => {
pub fn $nameb(reg1: reg::Operand<reg::RegB>, reg2: reg::RegB) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg!(reg2)),
}))
}
build_instr_op_reg!($op, $namew, $namel, $nameq);
};
($op:ident, $namew:ident, $namel:ident, $nameq:ident) => {
pub fn $namew(reg1: reg::Operand<reg::RegW>, reg2: reg::RegW) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg!(reg2)),
}))
}
build_instr_op_reg!($op, $namel, $nameq);
};
($op:ident, $namel:ident, $nameq:ident) => {
pub fn $namel(reg1: reg::Operand<reg::RegL>, reg2: reg::RegL) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg!(reg2)),
}))
}
build_instr_op_reg!($op, $nameq);
};
($op:ident, $nameq:ident) => {
pub fn $nameq(reg1: reg::Operand<reg::RegQ>, reg2: reg::RegQ) -> Text {
Text::new(Box::new(instr::Instruction {
instr: instr::InstrName::$op,
reg1: Some(reg1),
reg2: Some(reg!(reg2)),
}))
}
};
}
macro_rules! build_instr_op {
($op:ident, $nameb:ident, $namew:ident, $namel:ident, $nameq:ident) => {
pub fn $nameb(reg: reg::Operand<reg::RegB>) -> Text {
Text::new(Box::new(instr::Instruction::<_, reg::RegInv> {
instr: instr::InstrName::$op,
reg1: Some(reg),
reg2: None,
}))
}
build_instr_op!($op, $namew, $namel, $nameq);
};
($op:ident, $namew:ident, $namel:ident, $nameq:ident) => {
pub fn $namew(reg: reg::Operand<reg::RegW>) -> Text {
Text::new(Box::new(instr::Instruction::<_, reg::RegInv> {
instr: instr::InstrName::$op,
reg1: Some(reg),
reg2: None,
}))
}
build_instr_op!($op, $namel, $nameq);
};
($op:ident, $namel:ident, $nameq:ident) => {
pub fn $namel(reg: reg::Operand<reg::RegL>) -> Text {
Text::new(Box::new(instr::Instruction::<_, reg::RegInv> {
instr: instr::InstrName::$op,
reg1: Some(reg),
reg2: None,
}))
}
build_instr_op!($op, $nameq);
};
($op:ident, $nameq:ident) => {
pub fn $nameq(reg: reg::Operand<reg::RegQ>) -> Text {
Text::new(Box::new(instr::Instruction::<_, reg::RegInv> {
instr: instr::InstrName::$op,
reg1: Some(reg),
reg2: None,
}))
}
};
}