forked from koniifer/ableos
Improved assembler library
This commit is contained in:
parent
b4dac1245b
commit
bde00c13f2
|
@ -18,16 +18,16 @@ pub struct Assembler {
|
|||
impl Assembler {
|
||||
macros::impl_asm!(
|
||||
bbbb(p0: u8, p1: u8, p2: u8, p3: u8)
|
||||
=> [DIR, DIRF],
|
||||
=> [DIR, DIRF, FMAF],
|
||||
bbb(p0: u8, p1: u8, p2: u8)
|
||||
=> [ADD, SUB, MUL, AND, OR, XOR, SL, SRS, CMP, CMPU, BRC, ADDF, MULF],
|
||||
=> [ADD, SUB, MUL, AND, OR, XOR, SL, SR, SRS, CMP, CMPU, BRC, ADDF, SUBF, MULF],
|
||||
bbdh(p0: u8, p1: u8, p2: impl Imm, p3: u16)
|
||||
=> [LD, ST],
|
||||
bbd(p0: u8, p1: u8, p2: impl Imm)
|
||||
=> [ADDI, MULI, ANDI, ORI, XORI, SLI, SRI, SRSI, CMPI, CMPUI,
|
||||
JEQ, JNE, JLT, JGT, JLTU, JGTU, ADDFI, MULFI],
|
||||
BMC, JEQ, JNE, JLT, JGT, JLTU, JGTU, ADDFI, MULFI],
|
||||
bb(p0: u8, p1: u8)
|
||||
=> [NEG, NOT, CP, SWA],
|
||||
=> [NEG, NOT, CP, SWA, NEGF, ITF, FTI],
|
||||
bd(p0: u8, p1: impl Imm)
|
||||
=> [LI, JMP],
|
||||
n()
|
||||
|
@ -36,21 +36,29 @@ impl Assembler {
|
|||
}
|
||||
|
||||
pub trait Imm {
|
||||
fn insert(self, asm: &mut Assembler);
|
||||
fn insert(&self, asm: &mut Assembler);
|
||||
}
|
||||
|
||||
impl Imm for u64 {
|
||||
macro_rules! impl_imm_le_bytes {
|
||||
($($ty:ty),* $(,)?) => {
|
||||
$(
|
||||
impl Imm for $ty {
|
||||
#[inline(always)]
|
||||
fn insert(self, asm: &mut Assembler) {
|
||||
fn insert(&self, asm: &mut Assembler) {
|
||||
asm.buf.extend(self.to_le_bytes());
|
||||
}
|
||||
}
|
||||
)*
|
||||
};
|
||||
}
|
||||
|
||||
impl_imm_le_bytes!(u64, i64, f64);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
pub struct Symbol(pub u64);
|
||||
impl Imm for Symbol {
|
||||
#[inline(always)]
|
||||
fn insert(self, asm: &mut Assembler) {
|
||||
fn insert(&self, asm: &mut Assembler) {
|
||||
asm.sub.insert(asm.buf.len());
|
||||
asm.buf.extend(self.0.to_le_bytes());
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ macro_rules! gen_impl_asm_insert {
|
|||
};)*
|
||||
|
||||
($self:expr, $id:ident, $_:ty) => {
|
||||
Imm::insert($id, $self)
|
||||
Imm::insert(&$id, $self)
|
||||
};
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
|
||||
// use std::collections::HashMap;
|
||||
extern crate alloc;
|
||||
use alloc::vec::Vec;
|
||||
|
||||
|
|
Loading…
Reference in a new issue