forked from AbleOS/holey-bytes
maybe fixed mandelbrot
This commit is contained in:
parent
7058efe75c
commit
12be64965f
|
@ -71,7 +71,6 @@ pub mod fs;
|
|||
pub mod fuzz;
|
||||
pub mod lexer;
|
||||
pub mod parser;
|
||||
pub mod regalloc;
|
||||
pub mod son;
|
||||
|
||||
mod utils;
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
|
|
@ -926,7 +926,11 @@ impl Nodes {
|
|||
let &[_, oper] = self[target].inputs.as_slice() else { unreachable!() };
|
||||
let ty = self[target].ty;
|
||||
|
||||
if matches!(op, TokenKind::Number | TokenKind::Float) && ty == self[oper].ty {
|
||||
if matches!(op, TokenKind::Number | TokenKind::Float)
|
||||
&& tys.size_of(self[oper].ty) == tys.size_of(ty)
|
||||
&& self[oper].ty.is_integer()
|
||||
&& ty.is_integer()
|
||||
{
|
||||
return Some(oper);
|
||||
}
|
||||
|
||||
|
@ -1059,7 +1063,6 @@ impl Nodes {
|
|||
}
|
||||
K::Phi => {
|
||||
let &[ctrl, lhs, rhs] = self[target].inputs.as_slice() else { unreachable!() };
|
||||
let ty = self[target].ty;
|
||||
|
||||
if rhs == target || lhs == rhs {
|
||||
return Some(lhs);
|
||||
|
@ -1083,6 +1086,8 @@ impl Nodes {
|
|||
return Some(self.new_node(self[lhs].ty, Kind::Stre, vc, tys));
|
||||
}
|
||||
|
||||
// broken
|
||||
//let ty = self[target].ty;
|
||||
//if let Kind::BinOp { op } = self[lhs].kind
|
||||
// && self[rhs].kind == (Kind::BinOp { op })
|
||||
//{
|
||||
|
|
|
@ -15,7 +15,6 @@ use {
|
|||
};
|
||||
|
||||
mod my_regalloc;
|
||||
mod their_regalloc;
|
||||
|
||||
struct FuncDt {
|
||||
offset: Offset,
|
||||
|
@ -54,7 +53,6 @@ pub struct HbvmBackend {
|
|||
funcs: EntVec<ty::Func, FuncDt>,
|
||||
globals: EntVec<ty::Global, GlobalDt>,
|
||||
asm: Assembler,
|
||||
ralloc: their_regalloc::Regalloc,
|
||||
ralloc_my: my_regalloc::Res,
|
||||
|
||||
ret_relocs: Vec<Reloc>,
|
||||
|
@ -260,11 +258,7 @@ impl Backend for HbvmBackend {
|
|||
nodes[MEM].outputs = mems;
|
||||
}
|
||||
|
||||
let (saved, tail) = if self.use_in_house_regalloc {
|
||||
self.emit_body_code_my(nodes, sig, tys, files)
|
||||
} else {
|
||||
self.emit_body_code(nodes, sig, tys, files)
|
||||
};
|
||||
let (saved, tail) = self.emit_body_code_my(nodes, sig, tys, files);
|
||||
|
||||
if let Some(last_ret) = self.ret_relocs.last()
|
||||
&& last_ret.offset as usize == self.code.len() - 5
|
||||
|
|
|
@ -1,689 +0,0 @@
|
|||
use {
|
||||
super::{HbvmBackend, Nid, Nodes},
|
||||
crate::{
|
||||
parser, reg,
|
||||
son::{debug_assert_matches, Kind, ARG_START, MEM, NEVER, VOID},
|
||||
ty::{self, Arg, Loc},
|
||||
utils::BitSet,
|
||||
HashMap, PLoc, Sig, Types,
|
||||
},
|
||||
alloc::{borrow::ToOwned, vec::Vec},
|
||||
core::mem,
|
||||
hbbytecode::{self as instrs},
|
||||
};
|
||||
|
||||
pub struct Regalloc {
|
||||
env: regalloc2::MachineEnv,
|
||||
ctx: regalloc2::Ctx,
|
||||
}
|
||||
|
||||
impl Default for Regalloc {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
env: regalloc2::MachineEnv {
|
||||
preferred_regs_by_class: [
|
||||
(1..13).map(|i| regalloc2::PReg::new(i, regalloc2::RegClass::Int)).collect(),
|
||||
vec![],
|
||||
vec![],
|
||||
],
|
||||
non_preferred_regs_by_class: [
|
||||
(13..64).map(|i| regalloc2::PReg::new(i, regalloc2::RegClass::Int)).collect(),
|
||||
vec![],
|
||||
vec![],
|
||||
],
|
||||
scratch_by_class: Default::default(),
|
||||
fixed_stack_slots: Default::default(),
|
||||
},
|
||||
ctx: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl HbvmBackend {
|
||||
pub fn emit_body_code(
|
||||
&mut self,
|
||||
nodes: &mut Nodes,
|
||||
sig: Sig,
|
||||
tys: &Types,
|
||||
files: &[parser::Ast],
|
||||
) -> (usize, bool) {
|
||||
let mut ralloc = mem::take(&mut self.ralloc);
|
||||
|
||||
let fuc = Function::new(nodes, tys, files, sig);
|
||||
log::info!("{:?}", fuc);
|
||||
if !fuc.tail {
|
||||
mem::swap(
|
||||
&mut ralloc.env.preferred_regs_by_class,
|
||||
&mut ralloc.env.non_preferred_regs_by_class,
|
||||
);
|
||||
};
|
||||
|
||||
let options = regalloc2::RegallocOptions {
|
||||
verbose_log: false,
|
||||
validate_ssa: cfg!(debug_assertions),
|
||||
algorithm: regalloc2::Algorithm::Ion,
|
||||
};
|
||||
regalloc2::run_with_ctx(&fuc, &ralloc.env, &options, &mut ralloc.ctx).unwrap_or_else(
|
||||
|err| {
|
||||
if let regalloc2::RegAllocError::SSA(vreg, inst) = err {
|
||||
fuc.nodes[vreg.vreg() as Nid].lock_rc = Nid::MAX;
|
||||
fuc.nodes[fuc.instrs[inst.index()].nid].lock_rc = Nid::MAX - 1;
|
||||
}
|
||||
fuc.nodes.graphviz_in_browser(ty::Display::new(tys, files, ty::Id::VOID));
|
||||
panic!("{err}")
|
||||
},
|
||||
);
|
||||
|
||||
if !fuc.tail {
|
||||
mem::swap(
|
||||
&mut ralloc.env.preferred_regs_by_class,
|
||||
&mut ralloc.env.non_preferred_regs_by_class,
|
||||
);
|
||||
};
|
||||
|
||||
let mut saved_regs = HashMap::<u8, u8>::default();
|
||||
let mut atr = |allc: regalloc2::Allocation| {
|
||||
debug_assert!(allc.is_reg());
|
||||
let hvenc = regalloc2::PReg::from_index(allc.index()).hw_enc() as u8;
|
||||
if hvenc <= 12 {
|
||||
return hvenc;
|
||||
}
|
||||
let would_insert = saved_regs.len() as u8 + reg::RET_ADDR + 1;
|
||||
*saved_regs.entry(hvenc).or_insert(would_insert)
|
||||
};
|
||||
|
||||
'_open_function: {
|
||||
self.emit(instrs::addi64(reg::STACK_PTR, reg::STACK_PTR, 0));
|
||||
self.emit(instrs::st(reg::RET_ADDR + fuc.tail as u8, reg::STACK_PTR, 0, 0));
|
||||
}
|
||||
|
||||
let (retl, mut parama) = tys.parama(sig.ret);
|
||||
let mut typs = sig.args.args();
|
||||
let mut args = fuc.nodes[VOID].outputs[ARG_START..].iter();
|
||||
while let Some(aty) = typs.next(tys) {
|
||||
let Arg::Value(ty) = aty else { continue };
|
||||
let Some(loc) = parama.next(ty, tys) else { continue };
|
||||
let &arg = args.next().unwrap();
|
||||
let (rg, size) = match loc {
|
||||
PLoc::WideReg(rg, size) => (rg, size),
|
||||
PLoc::Reg(rg, size) if ty.loc(tys) == Loc::Stack => (rg, size),
|
||||
PLoc::Reg(..) | PLoc::Ref(..) => continue,
|
||||
};
|
||||
self.emit(instrs::st(rg, reg::STACK_PTR, self.offsets[arg as usize] as _, size));
|
||||
if fuc.nodes[arg].lock_rc == 0 {
|
||||
self.emit(instrs::addi64(rg, reg::STACK_PTR, self.offsets[arg as usize] as _));
|
||||
}
|
||||
}
|
||||
|
||||
let mut alloc_buf = vec![];
|
||||
for (i, block) in fuc.blocks.iter().enumerate() {
|
||||
let blk = regalloc2::Block(i as _);
|
||||
self.offsets[block.nid as usize] = self.code.len() as _;
|
||||
for instr_or_edit in ralloc.ctx.output.block_insts_and_edits(&fuc, blk) {
|
||||
let inst = match instr_or_edit {
|
||||
regalloc2::InstOrEdit::Inst(inst) => inst,
|
||||
regalloc2::InstOrEdit::Edit(®alloc2::Edit::Move { from, to }) => {
|
||||
self.emit(instrs::cp(atr(to), atr(from)));
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
let nid = fuc.instrs[inst.index()].nid;
|
||||
if nid == NEVER {
|
||||
continue;
|
||||
};
|
||||
|
||||
self.emit_instr(super::InstrCtx {
|
||||
nid,
|
||||
sig,
|
||||
is_next_block: fuc.backrefs[nid as usize] as usize == i + 1,
|
||||
is_last_block: i == fuc.blocks.len() - 1,
|
||||
retl,
|
||||
allocs: {
|
||||
alloc_buf.clear();
|
||||
alloc_buf.extend(
|
||||
ralloc.ctx.output.inst_allocs(inst).iter().copied().map(&mut atr),
|
||||
);
|
||||
alloc_buf.as_slice()
|
||||
},
|
||||
nodes: fuc.nodes,
|
||||
tys,
|
||||
files,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
self.ralloc = ralloc;
|
||||
|
||||
(saved_regs.len(), fuc.tail)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Block {
|
||||
nid: Nid,
|
||||
preds: Vec<regalloc2::Block>,
|
||||
succs: Vec<regalloc2::Block>,
|
||||
instrs: regalloc2::InstRange,
|
||||
params: Vec<regalloc2::VReg>,
|
||||
branch_blockparams: Vec<regalloc2::VReg>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Instr {
|
||||
nid: Nid,
|
||||
ops: Vec<regalloc2::Operand>,
|
||||
}
|
||||
|
||||
pub struct Function<'a> {
|
||||
sig: Sig,
|
||||
nodes: &'a mut Nodes,
|
||||
tys: &'a Types,
|
||||
files: &'a [parser::Ast],
|
||||
tail: bool,
|
||||
visited: BitSet,
|
||||
backrefs: Vec<u16>,
|
||||
blocks: Vec<Block>,
|
||||
instrs: Vec<Instr>,
|
||||
}
|
||||
|
||||
impl core::fmt::Debug for Function<'_> {
|
||||
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
|
||||
for (i, block) in self.blocks.iter().enumerate() {
|
||||
writeln!(f, "sb{i}{:?}-{:?}:", block.params, block.preds)?;
|
||||
|
||||
for inst in block.instrs.iter() {
|
||||
let instr = &self.instrs[inst.index()];
|
||||
writeln!(f, "{}: i{:?}:{:?}", inst.index(), self.nodes[instr.nid].kind, instr.ops)?;
|
||||
}
|
||||
|
||||
writeln!(f, "eb{i}{:?}-{:?}:", block.branch_blockparams, block.succs)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Function<'a> {
|
||||
fn new(nodes: &'a mut Nodes, tys: &'a Types, files: &'a [parser::Ast], sig: Sig) -> Self {
|
||||
let mut s = Self {
|
||||
tys,
|
||||
sig,
|
||||
files,
|
||||
tail: true,
|
||||
visited: Default::default(),
|
||||
backrefs: vec![u16::MAX; nodes.values.len()],
|
||||
blocks: Default::default(),
|
||||
instrs: Default::default(),
|
||||
nodes,
|
||||
};
|
||||
s.visited.clear(s.nodes.values.len());
|
||||
s.emit_node(VOID, VOID);
|
||||
s.add_block(0);
|
||||
s.blocks.pop();
|
||||
s
|
||||
}
|
||||
|
||||
fn add_block(&mut self, nid: Nid) -> u16 {
|
||||
if let Some(prev) = self.blocks.last_mut() {
|
||||
prev.instrs = regalloc2::InstRange::new(
|
||||
prev.instrs.first(),
|
||||
regalloc2::Inst::new(self.instrs.len()),
|
||||
);
|
||||
}
|
||||
|
||||
self.blocks.push(Block {
|
||||
nid,
|
||||
preds: Default::default(),
|
||||
succs: Default::default(),
|
||||
instrs: regalloc2::InstRange::new(
|
||||
regalloc2::Inst::new(self.instrs.len()),
|
||||
regalloc2::Inst::new(self.instrs.len() + 1),
|
||||
),
|
||||
params: Default::default(),
|
||||
branch_blockparams: Default::default(),
|
||||
});
|
||||
self.blocks.len() as u16 - 1
|
||||
}
|
||||
|
||||
fn add_instr(&mut self, nid: Nid, ops: Vec<regalloc2::Operand>) {
|
||||
self.instrs.push(Instr { nid, ops });
|
||||
}
|
||||
|
||||
fn urg(&mut self, nid: Nid) -> regalloc2::Operand {
|
||||
regalloc2::Operand::reg_use(self.rg(nid))
|
||||
}
|
||||
|
||||
fn drg(&mut self, nid: Nid) -> regalloc2::Operand {
|
||||
regalloc2::Operand::reg_def(self.rg(nid))
|
||||
}
|
||||
|
||||
fn rg(&mut self, nid: Nid) -> regalloc2::VReg {
|
||||
debug_assert!(
|
||||
!self.nodes.is_cfg(nid) || matches!(self.nodes[nid].kind, Kind::Call { .. }),
|
||||
"{:?}",
|
||||
self.nodes[nid]
|
||||
);
|
||||
debug_assert_eq!(
|
||||
{ self.nodes[nid].lock_rc },
|
||||
0,
|
||||
"{nid} {:?} {:?} {:?}",
|
||||
self.nodes[nid].clone(),
|
||||
nid,
|
||||
{
|
||||
self.nodes[nid].lock_rc = u16::MAX - 1;
|
||||
self.nodes.graphviz_in_browser(ty::Display::new(
|
||||
self.tys,
|
||||
self.files,
|
||||
ty::Id::VOID,
|
||||
));
|
||||
}
|
||||
);
|
||||
debug_assert!(self.nodes[nid].kind != Kind::Phi || self.nodes[nid].ty != ty::Id::VOID);
|
||||
if self.nodes.is_hard_zero(nid) {
|
||||
regalloc2::VReg::new(NEVER as _, regalloc2::RegClass::Int)
|
||||
} else {
|
||||
regalloc2::VReg::new(nid as _, regalloc2::RegClass::Int)
|
||||
}
|
||||
}
|
||||
|
||||
fn emit_node(&mut self, nid: Nid, prev: Nid) {
|
||||
if matches!(self.nodes[nid].kind, Kind::Region | Kind::Loop) {
|
||||
let prev_bref = self.backrefs[prev as usize];
|
||||
let node = self.nodes[nid].clone();
|
||||
|
||||
let idx = 1 + node.inputs.iter().position(|&i| i == prev).unwrap();
|
||||
|
||||
for ph in node.outputs {
|
||||
if self.nodes[ph].kind != Kind::Phi || self.nodes[ph].ty == ty::Id::VOID {
|
||||
continue;
|
||||
}
|
||||
|
||||
let rg = self.rg(self.nodes[ph].inputs[idx]);
|
||||
self.blocks[prev_bref as usize].branch_blockparams.push(rg);
|
||||
}
|
||||
|
||||
self.add_instr(nid, vec![]);
|
||||
|
||||
match (self.nodes[nid].kind, self.visited.set(nid)) {
|
||||
(Kind::Loop, false) => {
|
||||
for i in node.inputs {
|
||||
self.bridge(i, nid);
|
||||
}
|
||||
return;
|
||||
}
|
||||
(Kind::Region, true) => return,
|
||||
_ => {}
|
||||
}
|
||||
} else if !self.visited.set(nid) {
|
||||
return;
|
||||
}
|
||||
|
||||
if self.nodes.is_never_used(nid, self.tys) {
|
||||
self.nodes.lock(nid);
|
||||
return;
|
||||
}
|
||||
|
||||
let mut node = self.nodes[nid].clone();
|
||||
match node.kind {
|
||||
Kind::Start => {
|
||||
debug_assert_matches!(self.nodes[node.outputs[0]].kind, Kind::Entry);
|
||||
self.emit_node(node.outputs[0], VOID)
|
||||
}
|
||||
Kind::If => {
|
||||
self.backrefs[nid as usize] = self.backrefs[prev as usize];
|
||||
|
||||
let &[_, cnd] = node.inputs.as_slice() else { unreachable!() };
|
||||
let &[mut then, mut else_] = node.outputs.as_slice() else { unreachable!() };
|
||||
|
||||
if let Some((_, swapped)) = self.nodes.cond_op(cnd) {
|
||||
if swapped {
|
||||
mem::swap(&mut then, &mut else_);
|
||||
}
|
||||
let &[_, lhs, rhs] = self.nodes[cnd].inputs.as_slice() else { unreachable!() };
|
||||
let ops = vec![self.urg(lhs), self.urg(rhs)];
|
||||
self.add_instr(nid, ops);
|
||||
} else {
|
||||
mem::swap(&mut then, &mut else_);
|
||||
let ops = vec![self.urg(cnd)];
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
|
||||
self.emit_node(then, nid);
|
||||
self.emit_node(else_, nid);
|
||||
}
|
||||
Kind::Region | Kind::Loop => {
|
||||
self.backrefs[nid as usize] = self.add_block(nid);
|
||||
if node.kind == Kind::Region {
|
||||
for i in node.inputs {
|
||||
self.bridge(i, nid);
|
||||
}
|
||||
}
|
||||
let mut block = vec![];
|
||||
for ph in node.outputs.clone() {
|
||||
if self.nodes[ph].kind != Kind::Phi || self.nodes[ph].ty == ty::Id::VOID {
|
||||
continue;
|
||||
}
|
||||
block.push(self.rg(ph));
|
||||
}
|
||||
self.blocks[self.backrefs[nid as usize] as usize].params = block;
|
||||
self.nodes.reschedule_block(nid, &mut node.outputs);
|
||||
for o in node.outputs.into_iter().rev() {
|
||||
self.emit_node(o, nid);
|
||||
}
|
||||
}
|
||||
Kind::Return => {
|
||||
let ops = match self.tys.parama(self.sig.ret).0 {
|
||||
None => vec![],
|
||||
Some(PLoc::Reg(..)) if self.sig.ret.loc(self.tys) == Loc::Stack => {
|
||||
vec![self.urg(self.nodes[node.inputs[1]].inputs[1])]
|
||||
}
|
||||
Some(PLoc::Reg(r, ..)) => {
|
||||
vec![regalloc2::Operand::reg_fixed_use(
|
||||
self.rg(node.inputs[1]),
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
)]
|
||||
}
|
||||
Some(PLoc::WideReg(..)) => {
|
||||
vec![self.urg(self.nodes[node.inputs[1]].inputs[1])]
|
||||
}
|
||||
Some(PLoc::Ref(..)) => {
|
||||
vec![self.urg(self.nodes[node.inputs[1]].inputs[1]), self.urg(MEM)]
|
||||
}
|
||||
};
|
||||
|
||||
self.add_instr(nid, ops);
|
||||
self.emit_node(node.outputs[0], nid);
|
||||
}
|
||||
Kind::Die => {
|
||||
self.add_instr(nid, vec![]);
|
||||
self.emit_node(node.outputs[0], nid);
|
||||
}
|
||||
Kind::CInt { value: 0 } if self.nodes.is_hard_zero(nid) => {}
|
||||
Kind::CInt { .. } => {
|
||||
let ops = vec![self.drg(nid)];
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
Kind::Entry => {
|
||||
self.backrefs[nid as usize] = self.add_block(nid);
|
||||
|
||||
self.add_instr(NEVER, vec![regalloc2::Operand::reg_fixed_def(
|
||||
regalloc2::VReg::new(NEVER as _, regalloc2::RegClass::Int),
|
||||
regalloc2::PReg::new(0, regalloc2::RegClass::Int),
|
||||
)]);
|
||||
|
||||
let (ret, mut parama) = self.tys.parama(self.sig.ret);
|
||||
let mut typs = self.sig.args.args();
|
||||
#[expect(clippy::unnecessary_to_owned)]
|
||||
let mut args = self.nodes[VOID].outputs[ARG_START..].to_owned().into_iter();
|
||||
while let Some(ty) = typs.next_value(self.tys) {
|
||||
let arg = args.next().unwrap();
|
||||
debug_assert_eq!(self.nodes[arg].kind, Kind::Arg);
|
||||
match parama.next(ty, self.tys) {
|
||||
None => {}
|
||||
Some(PLoc::Reg(r, _) | PLoc::WideReg(r, _) | PLoc::Ref(r, _)) => {
|
||||
let a = self.rg(arg);
|
||||
self.add_instr(NEVER, vec![regalloc2::Operand::reg_fixed_def(
|
||||
a,
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(PLoc::Ref(r, ..)) = ret {
|
||||
let m = self.rg(MEM);
|
||||
self.add_instr(NEVER, vec![regalloc2::Operand::reg_fixed_def(
|
||||
m,
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
)]);
|
||||
}
|
||||
|
||||
self.nodes.reschedule_block(nid, &mut node.outputs);
|
||||
for o in node.outputs.into_iter().rev() {
|
||||
self.emit_node(o, nid);
|
||||
}
|
||||
}
|
||||
Kind::Then | Kind::Else => {
|
||||
self.backrefs[nid as usize] = self.add_block(nid);
|
||||
self.bridge(prev, nid);
|
||||
self.nodes.reschedule_block(nid, &mut node.outputs);
|
||||
for o in node.outputs.into_iter().rev() {
|
||||
self.emit_node(o, nid);
|
||||
}
|
||||
}
|
||||
Kind::BinOp { .. } => {
|
||||
let &[_, lhs, rhs] = node.inputs.as_slice() else { unreachable!() };
|
||||
|
||||
let ops = if let Kind::CInt { .. } = self.nodes[rhs].kind
|
||||
&& self.nodes[rhs].lock_rc != 0
|
||||
{
|
||||
vec![self.drg(nid), self.urg(lhs)]
|
||||
} else {
|
||||
vec![self.drg(nid), self.urg(lhs), self.urg(rhs)]
|
||||
};
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
Kind::UnOp { .. } => {
|
||||
let ops = vec![self.drg(nid), self.urg(node.inputs[1])];
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
Kind::Call { args, func } => {
|
||||
self.tail &= func == ty::Func::ECA;
|
||||
self.backrefs[nid as usize] = self.backrefs[prev as usize];
|
||||
let mut ops = vec![];
|
||||
|
||||
let (ret, mut parama) = self.tys.parama(node.ty);
|
||||
if ret.is_some() {
|
||||
ops.push(regalloc2::Operand::reg_fixed_def(
|
||||
self.rg(nid),
|
||||
regalloc2::PReg::new(1, regalloc2::RegClass::Int),
|
||||
));
|
||||
}
|
||||
|
||||
let mut tys = args.args();
|
||||
let mut args = node.inputs[1..].iter();
|
||||
while let Some(ty) = tys.next_value(self.tys) {
|
||||
let mut i = *args.next().unwrap();
|
||||
let Some(loc) = parama.next(ty, self.tys) else { continue };
|
||||
|
||||
match loc {
|
||||
PLoc::Reg(r, _) if ty.loc(self.tys) == Loc::Reg => {
|
||||
ops.push(regalloc2::Operand::reg_fixed_use(
|
||||
self.rg(i),
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
));
|
||||
}
|
||||
PLoc::WideReg(r, size) | PLoc::Reg(r, size) => {
|
||||
loop {
|
||||
match self.nodes[i].kind {
|
||||
Kind::Stre { .. } => i = self.nodes[i].inputs[2],
|
||||
Kind::Load { .. } => i = self.nodes[i].inputs[1],
|
||||
_ => break,
|
||||
}
|
||||
debug_assert_ne!(i, 0);
|
||||
}
|
||||
debug_assert!(i != 0);
|
||||
ops.push(regalloc2::Operand::reg_fixed_use(
|
||||
self.rg(i),
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
));
|
||||
if size > 8 {
|
||||
ops.push(regalloc2::Operand::reg_fixed_use(
|
||||
self.rg(i),
|
||||
regalloc2::PReg::new((r + 1) as _, regalloc2::RegClass::Int),
|
||||
));
|
||||
}
|
||||
}
|
||||
PLoc::Ref(r, _) => {
|
||||
loop {
|
||||
match self.nodes[i].kind {
|
||||
Kind::Stre { .. } => i = self.nodes[i].inputs[2],
|
||||
Kind::Load { .. } => i = self.nodes[i].inputs[1],
|
||||
_ => break,
|
||||
}
|
||||
debug_assert_ne!(i, 0);
|
||||
}
|
||||
debug_assert!(i != 0);
|
||||
ops.push(regalloc2::Operand::reg_fixed_use(
|
||||
self.rg(i),
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(PLoc::Ref(r, _)) = ret {
|
||||
ops.push(regalloc2::Operand::reg_fixed_use(
|
||||
self.rg(*node.inputs.last().unwrap()),
|
||||
regalloc2::PReg::new(r as _, regalloc2::RegClass::Int),
|
||||
));
|
||||
} else if node.ty.loc(self.tys) == Loc::Stack {
|
||||
ops.push(self.urg(*node.inputs.last().unwrap()));
|
||||
}
|
||||
|
||||
self.add_instr(nid, ops);
|
||||
|
||||
self.nodes.reschedule_block(nid, &mut node.outputs);
|
||||
for o in node.outputs.into_iter().rev() {
|
||||
if self.nodes[o].inputs[0] == nid
|
||||
|| (matches!(self.nodes[o].kind, Kind::Loop | Kind::Region)
|
||||
&& self.nodes[o].inputs[1] == nid)
|
||||
{
|
||||
self.emit_node(o, nid);
|
||||
}
|
||||
}
|
||||
}
|
||||
Kind::Global { .. } => {
|
||||
let ops = vec![self.drg(nid)];
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
Kind::Stck => {
|
||||
let ops = vec![self.drg(nid)];
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
Kind::Assert { .. } => unreachable!(),
|
||||
Kind::End | Kind::Phi | Kind::Arg | Kind::Mem | Kind::Loops | Kind::Join => {}
|
||||
Kind::Load { .. } => {
|
||||
let (region, _) = self.nodes.strip_offset(node.inputs[1], node.ty, self.tys);
|
||||
let ops = match self.nodes[region].kind {
|
||||
Kind::Stck => vec![self.drg(nid)],
|
||||
_ => vec![self.drg(nid), self.urg(region)],
|
||||
};
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
Kind::Stre => {
|
||||
debug_assert_ne!(self.tys.size_of(node.ty), 0);
|
||||
let (region, _) = self.nodes.strip_offset(node.inputs[2], node.ty, self.tys);
|
||||
let ops = match self.nodes[region].kind {
|
||||
_ if node.ty.loc(self.tys) == Loc::Stack => {
|
||||
if self.nodes[node.inputs[1]].kind == Kind::Arg {
|
||||
vec![self.urg(region), self.urg(node.inputs[1])]
|
||||
} else {
|
||||
vec![self.urg(region), self.urg(self.nodes[node.inputs[1]].inputs[1])]
|
||||
}
|
||||
}
|
||||
Kind::Stck => vec![self.urg(node.inputs[1])],
|
||||
_ => vec![self.urg(region), self.urg(node.inputs[1])],
|
||||
};
|
||||
self.add_instr(nid, ops);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn bridge(&mut self, pred: u16, succ: u16) {
|
||||
if self.backrefs[pred as usize] == u16::MAX || self.backrefs[succ as usize] == u16::MAX {
|
||||
return;
|
||||
}
|
||||
self.blocks[self.backrefs[pred as usize] as usize]
|
||||
.succs
|
||||
.push(regalloc2::Block::new(self.backrefs[succ as usize] as usize));
|
||||
self.blocks[self.backrefs[succ as usize] as usize]
|
||||
.preds
|
||||
.push(regalloc2::Block::new(self.backrefs[pred as usize] as usize));
|
||||
}
|
||||
}
|
||||
|
||||
impl regalloc2::Function for Function<'_> {
|
||||
fn num_insts(&self) -> usize {
|
||||
self.instrs.len()
|
||||
}
|
||||
|
||||
fn num_blocks(&self) -> usize {
|
||||
self.blocks.len()
|
||||
}
|
||||
|
||||
fn entry_block(&self) -> regalloc2::Block {
|
||||
regalloc2::Block(0)
|
||||
}
|
||||
|
||||
fn block_insns(&self, block: regalloc2::Block) -> regalloc2::InstRange {
|
||||
self.blocks[block.index()].instrs
|
||||
}
|
||||
|
||||
fn block_succs(&self, block: regalloc2::Block) -> &[regalloc2::Block] {
|
||||
&self.blocks[block.index()].succs
|
||||
}
|
||||
|
||||
fn block_preds(&self, block: regalloc2::Block) -> &[regalloc2::Block] {
|
||||
&self.blocks[block.index()].preds
|
||||
}
|
||||
|
||||
fn block_params(&self, block: regalloc2::Block) -> &[regalloc2::VReg] {
|
||||
&self.blocks[block.index()].params
|
||||
}
|
||||
|
||||
fn is_ret(&self, insn: regalloc2::Inst) -> bool {
|
||||
matches!(self.nodes[self.instrs[insn.index()].nid].kind, Kind::Return | Kind::Die)
|
||||
}
|
||||
|
||||
fn is_branch(&self, insn: regalloc2::Inst) -> bool {
|
||||
matches!(
|
||||
self.nodes[self.instrs[insn.index()].nid].kind,
|
||||
Kind::If | Kind::Then | Kind::Else | Kind::Entry | Kind::Loop | Kind::Region
|
||||
)
|
||||
}
|
||||
|
||||
fn branch_blockparams(
|
||||
&self,
|
||||
block: regalloc2::Block,
|
||||
_insn: regalloc2::Inst,
|
||||
_succ_idx: usize,
|
||||
) -> &[regalloc2::VReg] {
|
||||
debug_assert!(
|
||||
self.blocks[block.index()].succs.len() == 1
|
||||
|| self.blocks[block.index()].branch_blockparams.is_empty()
|
||||
);
|
||||
|
||||
&self.blocks[block.index()].branch_blockparams
|
||||
}
|
||||
|
||||
fn inst_operands(&self, insn: regalloc2::Inst) -> &[regalloc2::Operand] {
|
||||
&self.instrs[insn.index()].ops
|
||||
}
|
||||
|
||||
fn inst_clobbers(&self, insn: regalloc2::Inst) -> regalloc2::PRegSet {
|
||||
let node = &self.nodes[self.instrs[insn.index()].nid];
|
||||
if matches!(node.kind, Kind::Call { .. }) {
|
||||
let mut set = regalloc2::PRegSet::default();
|
||||
let returns = self.tys.parama(node.ty).0.is_some();
|
||||
for i in 1 + returns as usize..13 {
|
||||
set.add(regalloc2::PReg::new(i, regalloc2::RegClass::Int));
|
||||
}
|
||||
set
|
||||
} else {
|
||||
regalloc2::PRegSet::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn num_vregs(&self) -> usize {
|
||||
self.nodes.values.len()
|
||||
}
|
||||
|
||||
fn spillslot_size(&self, regclass: regalloc2::RegClass) -> usize {
|
||||
match regclass {
|
||||
regalloc2::RegClass::Int => 1,
|
||||
regalloc2::RegClass::Float => unreachable!(),
|
||||
regalloc2::RegClass::Vector => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,44 +1,52 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
LI32 r32, 1148846080w
|
||||
CP r2, r32
|
||||
JAL r31, r0, :sin
|
||||
FMUL32 r33, r1, r32
|
||||
FTI32 r1, r33, 1b
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
CP r33, r1
|
||||
FMUL32 r32, r33, r32
|
||||
FTI32 r32, r32, 1b
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
sin:
|
||||
LI32 r6, 1124073472w
|
||||
LI32 r7, 1078530011w
|
||||
FMUL32 r9, r2, r6
|
||||
FDIV32 r11, r9, r7
|
||||
FTI32 r1, r11, 1b
|
||||
ANDI r12, r1, 255d
|
||||
ITF64 r6, r1
|
||||
MULI64 r5, r12, 4d
|
||||
LRA r4, r0, :SIN_TABLE
|
||||
LI32 r9, 1086918619w
|
||||
FC64T32 r11, r6, 1b
|
||||
ADDI64 r6, r1, 64d
|
||||
ADD64 r10, r4, r5
|
||||
LI32 r3, 1132462080w
|
||||
FMUL32 r8, r11, r9
|
||||
ANDI r9, r6, 255d
|
||||
LI32 r7, 1056964608w
|
||||
LD r5, r10, 0a, 4h
|
||||
FDIV32 r10, r8, r3
|
||||
MULI64 r8, r9, 4d
|
||||
FMUL32 r12, r5, r7
|
||||
FSUB32 r1, r2, r10
|
||||
ADD64 r11, r4, r8
|
||||
FMUL32 r4, r1, r12
|
||||
LD r2, r11, 0a, 4h
|
||||
FSUB32 r7, r2, r4
|
||||
FMUL32 r9, r7, r1
|
||||
FADD32 r1, r5, r9
|
||||
ADDI64 r254, r254, -56d
|
||||
ST r32, r254, 0a, 56h
|
||||
CP r13, r2
|
||||
LI32 r14, 1124073472w
|
||||
LI32 r15, 1078530011w
|
||||
FMUL32 r14, r13, r14
|
||||
FDIV32 r14, r14, r15
|
||||
FTI32 r14, r14, 1b
|
||||
ANDI r15, r14, 255d
|
||||
ITF64 r16, r14
|
||||
MULI64 r15, r15, 4d
|
||||
LRA r17, r0, :SIN_TABLE
|
||||
LI32 r18, 1086918619w
|
||||
FC64T32 r16, r16, 1b
|
||||
ADDI64 r14, r14, 64d
|
||||
ADD64 r15, r17, r15
|
||||
LI32 r19, 1132462080w
|
||||
FMUL32 r16, r16, r18
|
||||
ANDI r14, r14, 255d
|
||||
LI32 r18, 1056964608w
|
||||
LD r15, r15, 0a, 4h
|
||||
FDIV32 r16, r16, r19
|
||||
MULI64 r14, r14, 4d
|
||||
FMUL32 r18, r15, r18
|
||||
FSUB32 r13, r13, r16
|
||||
ADD64 r14, r17, r14
|
||||
FMUL32 r16, r13, r18
|
||||
LD r14, r14, 0a, 4h
|
||||
FSUB32 r14, r14, r16
|
||||
FMUL32 r13, r14, r13
|
||||
FADD32 r13, r15, r13
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 56h
|
||||
ADDI64 r254, r254, 56d
|
||||
JALA r0, r31, 0a
|
||||
code size: 1303
|
||||
code size: 1363
|
||||
ret: 826
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,27 +1,36 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -56d
|
||||
ST r31, r254, 24a, 32h
|
||||
ADDI64 r254, r254, -64d
|
||||
ST r31, r254, 24a, 40h
|
||||
LI64 r32, 1d
|
||||
ADDI64 r2, r254, 0d
|
||||
ADDI64 r33, r254, 0d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r33, 2d
|
||||
ST r33, r254, 8a, 8h
|
||||
LI64 r34, 2d
|
||||
ST r34, r254, 8a, 8h
|
||||
LI64 r34, 4d
|
||||
ST r34, r254, 16a, 8h
|
||||
CP r2, r33
|
||||
JAL r31, r0, :pass
|
||||
ADD64 r1, r1, r32
|
||||
LD r31, r254, 24a, 32h
|
||||
ADDI64 r254, r254, 56d
|
||||
CP r33, r1
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 24a, 40h
|
||||
ADDI64 r254, r254, 64d
|
||||
JALA r0, r31, 0a
|
||||
pass:
|
||||
LD r6, r2, 8a, 8h
|
||||
MULI64 r9, r6, 8d
|
||||
LD r7, r2, 0a, 8h
|
||||
ADD64 r12, r9, r2
|
||||
ADD64 r11, r6, r7
|
||||
LD r3, r12, 0a, 8h
|
||||
ADD64 r1, r3, r11
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 0a, 32h
|
||||
CP r13, r2
|
||||
LD r14, r13, 8a, 8h
|
||||
MULI64 r15, r14, 8d
|
||||
LD r16, r13, 0a, 8h
|
||||
ADD64 r13, r15, r13
|
||||
ADD64 r14, r14, r16
|
||||
LD r13, r13, 0a, 8h
|
||||
ADD64 r13, r13, r14
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 231
|
||||
code size: 294
|
||||
ret: 8
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
main:
|
||||
LRA r3, r0, :SIN_TABLE
|
||||
LD r1, r3, 80a, 8h
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LRA r13, r0, :SIN_TABLE
|
||||
LD r13, r13, 80a, 8h
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 767
|
||||
code size: 818
|
||||
ret: 1736
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
main:
|
||||
LI64 r1, 1d
|
||||
JNE r2, r1, :0
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r14, r2
|
||||
LI64 r13, 1d
|
||||
JNE r14, r13, :0
|
||||
JMP :1
|
||||
0: JNE r2, r0, :2
|
||||
LI64 r1, 2d
|
||||
0: JNE r14, r0, :2
|
||||
LI64 r13, 2d
|
||||
JMP :1
|
||||
2: LI64 r1, 3d
|
||||
1: JALA r0, r31, 0a
|
||||
code size: 69
|
||||
2: LI64 r13, 3d
|
||||
1: CP r1, r13
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 123
|
||||
ret: 2
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,26 +1,36 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r31, r254, 0a, 16h
|
||||
LRA r2, r0, :"abඞ\n\r\t56789\0"
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
LRA r32, r0, :"abඞ\n\r\t56789\0"
|
||||
CP r2, r32
|
||||
JAL r31, r0, :str_len
|
||||
CP r32, r1
|
||||
LRA r2, r0, :"fff\0"
|
||||
LRA r33, r0, :"fff\0"
|
||||
CP r2, r33
|
||||
JAL r31, r0, :str_len
|
||||
ADD64 r1, r1, r32
|
||||
LD r31, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
CP r33, r1
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
str_len:
|
||||
CP r5, r0
|
||||
CP r1, r5
|
||||
2: LD r9, r2, 0a, 1h
|
||||
ANDI r11, r9, 255d
|
||||
JNE r11, r5, :0
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 0a, 32h
|
||||
CP r15, r2
|
||||
CP r14, r0
|
||||
CP r13, r14
|
||||
2: LD r16, r15, 0a, 1h
|
||||
ANDI r16, r16, 255d
|
||||
JNE r16, r14, :0
|
||||
CP r1, r13
|
||||
JMP :1
|
||||
0: ADDI64 r2, r2, 1d
|
||||
ADDI64 r1, r1, 1d
|
||||
0: ADDI64 r15, r15, 1d
|
||||
ADDI64 r13, r13, 1d
|
||||
JMP :2
|
||||
1: JALA r0, r31, 0a
|
||||
code size: 198
|
||||
1: LD r32, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 264
|
||||
ret: 16
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
foo:
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r31, r254, 0a, 16h
|
||||
JAL r31, r0, :foo
|
||||
CP r1, r0
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
LD r31, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 88
|
||||
ret: 0
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
main:
|
||||
LRA r3, r0, :a
|
||||
LD r1, r3, 0a, 8h
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LRA r13, r0, :a
|
||||
LD r13, r13, 0a, 8h
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 47
|
||||
code size: 98
|
||||
ret: 50
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
main:
|
||||
LRA r3, r0, :a
|
||||
LD r1, r3, 0a, 8h
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LRA r13, r0, :a
|
||||
LD r13, r13, 0a, 8h
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 47
|
||||
code size: 98
|
||||
ret: 50
|
||||
status: Ok(())
|
||||
|
|
|
@ -2,19 +2,18 @@ cond:
|
|||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
JAL r31, r0, :cond
|
||||
CP r33, r1
|
||||
CP r32, r0
|
||||
CP r33, r32
|
||||
JNE r1, r33, :0
|
||||
CP r32, r33
|
||||
CP r1, r32
|
||||
JNE r33, r32, :0
|
||||
JMP :1
|
||||
0: LI64 r1, 2d
|
||||
1: LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
0: LI64 r32, 2d
|
||||
1: CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 120
|
||||
code size: 117
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
main:
|
||||
CP r0, r2
|
||||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
code size: 22
|
||||
code size: 25
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
main:
|
||||
LI32 r1, 69w
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI32 r13, 69w
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 25
|
||||
code size: 76
|
||||
ret: 69
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
main:
|
||||
UN
|
||||
code size: 9
|
||||
UN
|
||||
code size: 10
|
||||
ret: 0
|
||||
status: Err(Unreachable)
|
||||
|
|
|
@ -1,82 +1,88 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -208d
|
||||
ST r31, r254, 80a, 128h
|
||||
ADDI64 r254, r254, -160d
|
||||
ST r31, r254, 80a, 80h
|
||||
LRA r32, r0, :glob_stru
|
||||
CP r1, r32
|
||||
JAL r31, r0, :new_stru
|
||||
ST r1, r32, 0a, 16h
|
||||
CP r1, r0
|
||||
LD r33, r32, 0a, 8h
|
||||
JEQ r33, r1, :0
|
||||
LI64 r1, 300d
|
||||
CP r33, r0
|
||||
LD r34, r32, 0a, 8h
|
||||
JEQ r34, r33, :0
|
||||
LI64 r32, 300d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: LI64 r34, 1d
|
||||
ST r34, r32, 0a, 8h
|
||||
ST r34, r32, 8a, 8h
|
||||
ST r1, r32, 0a, 8h
|
||||
LD r35, r32, 0a, 8h
|
||||
JEQ r35, r1, :2
|
||||
LI64 r1, 200d
|
||||
0: LI64 r35, 1d
|
||||
ST r35, r32, 0a, 8h
|
||||
ST r35, r32, 8a, 8h
|
||||
ST r33, r32, 0a, 8h
|
||||
LD r34, r32, 0a, 8h
|
||||
JEQ r34, r33, :2
|
||||
LI64 r32, 200d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
2: CP r36, r1
|
||||
LI64 r37, 3d
|
||||
ST r34, r32, 0a, 8h
|
||||
ST r34, r32, 8a, 8h
|
||||
ADDI64 r38, r254, 16d
|
||||
ST r34, r254, 16a, 8h
|
||||
ST r34, r254, 24a, 8h
|
||||
ST r34, r254, 32a, 8h
|
||||
ST r34, r254, 40a, 8h
|
||||
ST r34, r254, 48a, 8h
|
||||
ST r34, r254, 56a, 8h
|
||||
CP r39, r36
|
||||
8: JNE r39, r37, :3
|
||||
LD r40, r254, 48a, 8h
|
||||
CP r1, r36
|
||||
JEQ r40, r1, :4
|
||||
LI64 r1, 100d
|
||||
2: LI64 r36, 3d
|
||||
ST r35, r32, 0a, 8h
|
||||
ST r35, r32, 8a, 8h
|
||||
ADDI64 r37, r254, 16d
|
||||
ST r35, r254, 16a, 8h
|
||||
ST r35, r254, 24a, 8h
|
||||
ST r35, r254, 32a, 8h
|
||||
ST r35, r254, 40a, 8h
|
||||
ST r35, r254, 48a, 8h
|
||||
ST r35, r254, 56a, 8h
|
||||
CP r32, r33
|
||||
8: JNE r32, r36, :3
|
||||
LD r32, r254, 48a, 8h
|
||||
JEQ r32, r33, :4
|
||||
LI64 r32, 100d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
4: ST r1, r254, 0a, 8h
|
||||
ST r1, r254, 8a, 8h
|
||||
ST r1, r254, 64a, 8h
|
||||
ST r1, r254, 72a, 8h
|
||||
ST r34, r254, 16a, 8h
|
||||
ST r34, r254, 24a, 8h
|
||||
ST r34, r254, 32a, 8h
|
||||
ST r34, r254, 40a, 8h
|
||||
ST r34, r254, 48a, 8h
|
||||
ST r34, r254, 56a, 8h
|
||||
CP r41, r1
|
||||
7: LD r42, r254, 48a, 8h
|
||||
JNE r41, r37, :5
|
||||
JEQ r42, r1, :6
|
||||
LI64 r1, 10d
|
||||
4: ST r33, r254, 0a, 8h
|
||||
ST r33, r254, 8a, 8h
|
||||
ST r33, r254, 64a, 8h
|
||||
ST r33, r254, 72a, 8h
|
||||
ST r35, r254, 16a, 8h
|
||||
ST r35, r254, 24a, 8h
|
||||
ST r35, r254, 32a, 8h
|
||||
ST r35, r254, 40a, 8h
|
||||
ST r35, r254, 48a, 8h
|
||||
ST r35, r254, 56a, 8h
|
||||
CP r32, r33
|
||||
7: LD r38, r254, 48a, 8h
|
||||
JNE r32, r36, :5
|
||||
JEQ r38, r33, :6
|
||||
LI64 r32, 10d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
6: JMP :1
|
||||
5: ADD64 r43, r41, r34
|
||||
MULI64 r44, r41, 16d
|
||||
ADD64 r45, r38, r44
|
||||
ST r1, r45, 0a, 8h
|
||||
ST r1, r45, 8a, 8h
|
||||
CP r36, r1
|
||||
CP r41, r43
|
||||
6: CP r1, r33
|
||||
JMP :1
|
||||
5: ADD64 r34, r32, r35
|
||||
MULI64 r32, r32, 16d
|
||||
ADD64 r32, r37, r32
|
||||
ST r33, r32, 0a, 8h
|
||||
ST r33, r32, 8a, 8h
|
||||
CP r32, r34
|
||||
JMP :7
|
||||
3: MULI64 r46, r39, 16d
|
||||
ADD64 r43, r38, r46
|
||||
3: MULI64 r39, r32, 16d
|
||||
ADD64 r39, r37, r39
|
||||
CP r1, r39
|
||||
JAL r31, r0, :new_stru
|
||||
ST r1, r43, 0a, 16h
|
||||
ADD64 r39, r39, r34
|
||||
ST r1, r39, 0a, 16h
|
||||
ADD64 r32, r32, r35
|
||||
JMP :8
|
||||
1: LD r31, r254, 80a, 128h
|
||||
ADDI64 r254, r254, 208d
|
||||
1: LD r31, r254, 80a, 80h
|
||||
ADDI64 r254, r254, 160d
|
||||
JALA r0, r31, 0a
|
||||
new_stru:
|
||||
ADDI64 r254, r254, -16d
|
||||
ADDI64 r3, r254, 0d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 16a, 8h
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r0, r254, 0a, 8h
|
||||
ST r0, r254, 8a, 8h
|
||||
LD r1, r3, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
LD r1, r13, 0a, 16h
|
||||
LD r32, r254, 16a, 8h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
code size: 759
|
||||
code size: 797
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,28 +1,31 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -12d
|
||||
LI8 r3, 255b
|
||||
ST r3, r254, 0a, 1h
|
||||
ADDI64 r254, r254, -36d
|
||||
ST r32, r254, 12a, 24h
|
||||
LI8 r13, 255b
|
||||
ST r13, r254, 0a, 1h
|
||||
ST r0, r254, 1a, 1h
|
||||
ST r0, r254, 2a, 1h
|
||||
ST r3, r254, 3a, 1h
|
||||
ST r13, r254, 3a, 1h
|
||||
ST r0, r254, 4a, 4h
|
||||
LD r4, r254, 4a, 4h
|
||||
LI32 r11, 2w
|
||||
ST r11, r254, 8a, 4h
|
||||
LD r2, r254, 8a, 4h
|
||||
LI64 r5, 2d
|
||||
ANDI r6, r2, 4294967295d
|
||||
JEQ r6, r5, :0
|
||||
LD r13, r254, 4a, 4h
|
||||
LI32 r14, 2w
|
||||
ST r14, r254, 8a, 4h
|
||||
LD r14, r254, 8a, 4h
|
||||
LI64 r15, 2d
|
||||
ANDI r14, r14, 4294967295d
|
||||
JEQ r14, r15, :0
|
||||
CP r1, r0
|
||||
JMP :1
|
||||
0: CP r1, r0
|
||||
ANDI r10, r4, 4294967295d
|
||||
JEQ r10, r1, :2
|
||||
LI64 r1, 64d
|
||||
0: ANDI r13, r13, 4294967295d
|
||||
JEQ r13, r0, :2
|
||||
LI64 r13, 64d
|
||||
CP r1, r13
|
||||
JMP :1
|
||||
2: LI64 r1, 512d
|
||||
1: ADDI64 r254, r254, 12d
|
||||
2: LI64 r13, 512d
|
||||
CP r1, r13
|
||||
1: LD r32, r254, 12a, 24h
|
||||
ADDI64 r254, r254, 36d
|
||||
JALA r0, r31, 0a
|
||||
code size: 232
|
||||
code size: 261
|
||||
ret: 512
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,20 +1,25 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -16d
|
||||
LI64 r3, 10d
|
||||
ADDI64 r4, r254, 0d
|
||||
ST r3, r254, 0a, 8h
|
||||
LI64 r9, 20d
|
||||
ST r9, r254, 8a, 8h
|
||||
LI64 r6, 6d
|
||||
LI64 r5, 5d
|
||||
LI64 r2, 1d
|
||||
CP r3, r4
|
||||
LD r3, r3, 0a, 16h
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r32, r254, 16a, 32h
|
||||
LI64 r13, 10d
|
||||
ADDI64 r14, r254, 0d
|
||||
ST r13, r254, 0a, 8h
|
||||
LI64 r13, 20d
|
||||
ST r13, r254, 8a, 8h
|
||||
LI64 r13, 6d
|
||||
LI64 r15, 5d
|
||||
LI64 r16, 1d
|
||||
CP r2, r16
|
||||
CP r5, r15
|
||||
CP r6, r13
|
||||
LD r3, r14, 0a, 16h
|
||||
ECA
|
||||
CP r0, r1
|
||||
CP r1, r0
|
||||
ADDI64 r254, r254, 16d
|
||||
LD r32, r254, 16a, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
ev: Ecall
|
||||
code size: 148
|
||||
code size: 183
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,33 +1,40 @@
|
|||
continue_and_state_change:
|
||||
CP r1, r0
|
||||
LI64 r10, 3d
|
||||
LI64 r11, 4d
|
||||
LI64 r12, 2d
|
||||
LI64 r3, 10d
|
||||
6: JLTU r2, r3, :0
|
||||
CP r1, r2
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r32, r254, 0a, 48h
|
||||
CP r13, r2
|
||||
CP r15, r0
|
||||
LI64 r16, 3d
|
||||
LI64 r14, 4d
|
||||
LI64 r17, 2d
|
||||
LI64 r18, 10d
|
||||
6: JLTU r13, r18, :0
|
||||
JMP :1
|
||||
0: JNE r2, r12, :2
|
||||
CP r2, r11
|
||||
0: JNE r13, r17, :2
|
||||
CP r13, r14
|
||||
JMP :3
|
||||
2: JNE r2, r10, :4
|
||||
1: JMP :5
|
||||
4: ADDI64 r2, r2, 1d
|
||||
2: JNE r13, r16, :4
|
||||
CP r13, r15
|
||||
1: CP r1, r13
|
||||
JMP :5
|
||||
4: ADDI64 r13, r13, 1d
|
||||
3: JMP :6
|
||||
5: JALA r0, r31, 0a
|
||||
5: LD r32, r254, 0a, 48h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
infinite_loop:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI64 r32, 1d
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 0a, 40h
|
||||
LI64 r34, 1d
|
||||
CP r33, r0
|
||||
CP r1, r33
|
||||
1: JNE r1, r32, :0
|
||||
CP r32, r33
|
||||
1: JNE r32, r34, :0
|
||||
JMP :0
|
||||
0: CP r2, r33
|
||||
JAL r31, r0, :continue_and_state_change
|
||||
CP r32, r1
|
||||
JMP :1
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
LD r31, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -48d
|
||||
|
@ -35,38 +42,45 @@ main:
|
|||
CP r2, r0
|
||||
JAL r31, r0, :multiple_breaks
|
||||
CP r32, r1
|
||||
LI64 r1, 3d
|
||||
JEQ r32, r1, :0
|
||||
LI64 r1, 1d
|
||||
LI64 r33, 3d
|
||||
JEQ r32, r33, :0
|
||||
LI64 r32, 1d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: CP r33, r1
|
||||
LI64 r34, 4d
|
||||
CP r2, r34
|
||||
0: LI64 r32, 4d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :multiple_breaks
|
||||
CP r35, r34
|
||||
LI64 r36, 10d
|
||||
JEQ r1, r36, :2
|
||||
LI64 r1, 2d
|
||||
CP r34, r1
|
||||
LI64 r35, 10d
|
||||
JEQ r34, r35, :2
|
||||
LI64 r32, 2d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
2: CP r2, r0
|
||||
JAL r31, r0, :state_change_in_break
|
||||
JEQ r1, r0, :3
|
||||
CP r34, r1
|
||||
JEQ r34, r0, :3
|
||||
CP r1, r33
|
||||
JMP :1
|
||||
3: CP r2, r35
|
||||
3: CP r2, r32
|
||||
JAL r31, r0, :state_change_in_break
|
||||
JEQ r1, r36, :4
|
||||
CP r1, r35
|
||||
CP r34, r1
|
||||
JEQ r34, r35, :4
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
4: CP r2, r36
|
||||
4: CP r2, r35
|
||||
JAL r31, r0, :continue_and_state_change
|
||||
JEQ r1, r36, :5
|
||||
LI64 r1, 5d
|
||||
CP r32, r1
|
||||
JEQ r32, r35, :5
|
||||
LI64 r32, 5d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
5: CP r2, r33
|
||||
JAL r31, r0, :continue_and_state_change
|
||||
JEQ r1, r0, :6
|
||||
LI64 r1, 6d
|
||||
CP r32, r1
|
||||
JEQ r32, r0, :6
|
||||
LI64 r32, 6d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
6: JAL r31, r0, :infinite_loop
|
||||
CP r1, r0
|
||||
|
@ -74,30 +88,39 @@ main:
|
|||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
multiple_breaks:
|
||||
LI64 r8, 3d
|
||||
LI64 r7, 10d
|
||||
4: JLTU r2, r7, :0
|
||||
CP r1, r2
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 0a, 24h
|
||||
CP r13, r2
|
||||
LI64 r14, 3d
|
||||
LI64 r15, 10d
|
||||
4: JLTU r13, r15, :0
|
||||
JMP :1
|
||||
0: ADDI64 r1, r2, 1d
|
||||
JNE r1, r8, :2
|
||||
1: JMP :3
|
||||
2: CP r2, r1
|
||||
JMP :4
|
||||
3: JALA r0, r31, 0a
|
||||
0: ADDI64 r13, r13, 1d
|
||||
JNE r13, r14, :2
|
||||
1: CP r1, r13
|
||||
JMP :3
|
||||
2: JMP :4
|
||||
3: LD r32, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
state_change_in_break:
|
||||
LI64 r7, 3d
|
||||
LI64 r8, 10d
|
||||
4: JLTU r2, r8, :0
|
||||
CP r1, r2
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 0a, 24h
|
||||
CP r13, r2
|
||||
LI64 r14, 3d
|
||||
LI64 r15, 10d
|
||||
4: JLTU r13, r15, :0
|
||||
JMP :1
|
||||
0: JNE r2, r7, :2
|
||||
CP r1, r0
|
||||
1: JMP :3
|
||||
2: ADDI64 r2, r2, 1d
|
||||
0: JNE r13, r14, :2
|
||||
CP r13, r0
|
||||
1: CP r1, r13
|
||||
JMP :3
|
||||
2: ADDI64 r13, r13, 1d
|
||||
JMP :4
|
||||
3: JALA r0, r31, 0a
|
||||
3: LD r32, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
timed out
|
||||
code size: 634
|
||||
code size: 811
|
||||
ret: 10
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,53 +1,64 @@
|
|||
check_platform:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
JAL r31, r0, :x86_fb_ptr
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -64d
|
||||
ST r31, r254, 0a, 64h
|
||||
JAL r31, r0, :check_platform
|
||||
CP r32, r0
|
||||
LI64 r33, 30d
|
||||
LI64 r34, 100d
|
||||
CP r35, r32
|
||||
CP r36, r32
|
||||
CP r37, r32
|
||||
5: JLTU r35, r33, :0
|
||||
ADDI64 r36, r36, 1d
|
||||
CP r2, r32
|
||||
CP r3, r36
|
||||
CP r4, r33
|
||||
CP r0, r1
|
||||
CP r33, r0
|
||||
LI64 r36, 30d
|
||||
LI64 r37, 100d
|
||||
CP r35, r33
|
||||
CP r34, r33
|
||||
CP r32, r33
|
||||
5: JLTU r32, r36, :0
|
||||
ADDI64 r34, r34, 1d
|
||||
CP r2, r33
|
||||
CP r3, r34
|
||||
CP r4, r36
|
||||
JAL r31, r0, :set_pixel
|
||||
JEQ r1, r37, :1
|
||||
CP r1, r32
|
||||
CP r32, r1
|
||||
JEQ r32, r35, :1
|
||||
CP r1, r33
|
||||
JMP :2
|
||||
1: CP r38, r32
|
||||
JNE r36, r34, :3
|
||||
CP r1, r37
|
||||
1: JNE r34, r37, :3
|
||||
CP r1, r35
|
||||
JMP :2
|
||||
3: CP r1, r37
|
||||
CP r35, r38
|
||||
3: CP r32, r33
|
||||
JMP :4
|
||||
0: CP r1, r37
|
||||
CP r38, r32
|
||||
ADDI64 r1, r1, 1d
|
||||
ADDI64 r35, r35, 1d
|
||||
4: CP r32, r38
|
||||
CP r37, r1
|
||||
JMP :5
|
||||
0: ADDI64 r35, r35, 1d
|
||||
ADDI64 r32, r32, 1d
|
||||
4: JMP :5
|
||||
2: LD r31, r254, 0a, 64h
|
||||
ADDI64 r254, r254, 64d
|
||||
JALA r0, r31, 0a
|
||||
set_pixel:
|
||||
MUL64 r9, r3, r4
|
||||
ADD64 r1, r9, r2
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 0a, 24h
|
||||
CP r13, r2
|
||||
CP r14, r3
|
||||
CP r15, r4
|
||||
MUL64 r14, r14, r15
|
||||
ADD64 r13, r14, r13
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
x86_fb_ptr:
|
||||
LI64 r1, 100d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r13, 100d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 323
|
||||
code size: 428
|
||||
ret: 3000
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
main:
|
||||
LI32 r1, 3212836864w
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI32 r13, 3212836864w
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 25
|
||||
code size: 76
|
||||
ret: 3212836864
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,21 +1,37 @@
|
|||
add_one:
|
||||
ADDI64 r1, r2, 1d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r2
|
||||
ADDI64 r13, r13, 1d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
add_two:
|
||||
ADDI64 r1, r2, 2d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r2
|
||||
ADDI64 r13, r13, 2d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r31, r254, 0a, 16h
|
||||
LI64 r2, 10d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
LI64 r32, 10d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :add_one
|
||||
CP r32, r1
|
||||
LI64 r2, 20d
|
||||
LI64 r33, 20d
|
||||
CP r2, r33
|
||||
JAL r31, r0, :add_two
|
||||
ADD64 r1, r1, r32
|
||||
LD r31, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
CP r33, r1
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 152
|
||||
code size: 272
|
||||
ret: 33
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,24 +1,43 @@
|
|||
add:
|
||||
ADD64 r1, r2, r3
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r13, r2
|
||||
CP r14, r3
|
||||
ADD64 r13, r13, r14
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
add:
|
||||
ADD32 r1, r2, r3
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r13, r2
|
||||
CP r14, r3
|
||||
ADD32 r13, r13, r14
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI32 r3, 2w
|
||||
CP r2, r3
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 0a, 40h
|
||||
LI32 r32, 2w
|
||||
CP r2, r32
|
||||
CP r3, r32
|
||||
JAL r31, r0, :add
|
||||
CP r32, r1
|
||||
LI64 r3, 3d
|
||||
LI64 r2, 1d
|
||||
LI64 r33, 3d
|
||||
LI64 r34, 1d
|
||||
CP r2, r34
|
||||
CP r3, r33
|
||||
JAL r31, r0, :add
|
||||
ANDI r33, r32, 4294967295d
|
||||
SUB64 r1, r33, r1
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
CP r33, r1
|
||||
ANDI r32, r32, 4294967295d
|
||||
SUB64 r32, r32, r33
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
code size: 158
|
||||
code size: 287
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r31, r254, 0a, 16h
|
||||
JAL r31, r0, :process
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
LD r31, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
opaque:
|
||||
CP r0, r2
|
||||
JALA r0, r31, 0a
|
||||
process:
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, -64d
|
||||
ST r31, r254, 16a, 48h
|
||||
LI64 r32, 1000d
|
||||
ADDI64 r33, r254, 0d
|
||||
ST r0, r254, 0a, 1h
|
||||
|
@ -17,17 +18,17 @@ process:
|
|||
JMP :1
|
||||
0: CP r2, r33
|
||||
JAL r31, r0, :opaque
|
||||
LD r34, r254, 0a, 1h
|
||||
ANDI r34, r34, 255d
|
||||
LD r35, r254, 0a, 1h
|
||||
ANDI r35, r35, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JEQ r34, r0, :2
|
||||
JEQ r35, r0, :2
|
||||
JMP :3
|
||||
2: ADDI64 r32, r32, -1d
|
||||
1: JMP :4
|
||||
3: LD r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
3: LD r31, r254, 16a, 48h
|
||||
ADDI64 r254, r254, 64d
|
||||
JALA r0, r31, 0a
|
||||
timed out
|
||||
code size: 259
|
||||
code size: 262
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,122 +1,140 @@
|
|||
deinit:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 0a, 48h
|
||||
CP r32, r2
|
||||
LD r33, r2, 16a, 8h
|
||||
LI64 r4, 8d
|
||||
MUL64 r3, r33, r4
|
||||
CP r34, r32
|
||||
LD r2, r34, 0a, 8h
|
||||
LD r33, r32, 16a, 8h
|
||||
LI64 r34, 8d
|
||||
MUL64 r33, r33, r34
|
||||
LD r35, r32, 0a, 8h
|
||||
CP r2, r35
|
||||
CP r3, r33
|
||||
CP r4, r34
|
||||
JAL r31, r0, :free
|
||||
CP r1, r32
|
||||
JAL r31, r0, :new
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
LD r31, r254, 0a, 48h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
free:
|
||||
CP r11, r2
|
||||
LRA r9, r0, :FREE_SYS_CALL
|
||||
LD r2, r9, 0a, 8h
|
||||
CP r5, r4
|
||||
CP r4, r3
|
||||
CP r3, r11
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 0a, 32h
|
||||
CP r13, r2
|
||||
CP r14, r3
|
||||
CP r15, r4
|
||||
LRA r16, r0, :FREE_SYS_CALL
|
||||
LD r16, r16, 0a, 8h
|
||||
CP r2, r16
|
||||
CP r3, r13
|
||||
CP r4, r14
|
||||
CP r5, r15
|
||||
ECA
|
||||
LD r32, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -56d
|
||||
ST r31, r254, 24a, 32h
|
||||
ADDI64 r254, r254, -64d
|
||||
ST r31, r254, 24a, 40h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :new
|
||||
LI64 r3, 69d
|
||||
LI64 r33, 69d
|
||||
CP r2, r32
|
||||
CP r3, r33
|
||||
JAL r31, r0, :push
|
||||
LD r33, r254, 0a, 8h
|
||||
LD r34, r33, 0a, 8h
|
||||
CP r33, r1
|
||||
LD r34, r254, 0a, 8h
|
||||
LD r33, r34, 0a, 8h
|
||||
CP r2, r32
|
||||
JAL r31, r0, :deinit
|
||||
CP r1, r34
|
||||
LD r31, r254, 24a, 32h
|
||||
ADDI64 r254, r254, 56d
|
||||
CP r1, r33
|
||||
LD r31, r254, 24a, 40h
|
||||
ADDI64 r254, r254, 64d
|
||||
JALA r0, r31, 0a
|
||||
malloc:
|
||||
CP r10, r2
|
||||
LRA r7, r0, :MALLOC_SYS_CALL
|
||||
LD r2, r7, 0a, 8h
|
||||
CP r4, r3
|
||||
CP r3, r10
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 0a, 24h
|
||||
CP r13, r2
|
||||
CP r14, r3
|
||||
LRA r15, r0, :MALLOC_SYS_CALL
|
||||
LD r15, r15, 0a, 8h
|
||||
CP r2, r15
|
||||
CP r3, r13
|
||||
CP r4, r14
|
||||
ECA
|
||||
CP r13, r1
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
new:
|
||||
ADDI64 r254, r254, -24d
|
||||
ADDI64 r5, r254, 0d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 24a, 8h
|
||||
CP r14, r1
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r0, r254, 0a, 8h
|
||||
ST r0, r254, 8a, 8h
|
||||
ST r0, r254, 16a, 8h
|
||||
BMC r5, r1, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
BMC r13, r14, 24h
|
||||
LD r32, r254, 24a, 8h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
push:
|
||||
ADDI64 r254, r254, -168d
|
||||
ST r31, r254, 0a, 168h
|
||||
CP r32, r3
|
||||
LI64 r33, 1d
|
||||
LD r34, r2, 8a, 8h
|
||||
LD r35, r2, 16a, 8h
|
||||
CP r36, r2
|
||||
JNE r35, r34, :0
|
||||
JNE r35, r0, :1
|
||||
CP r37, r33
|
||||
ADDI64 r254, r254, -112d
|
||||
ST r31, r254, 0a, 112h
|
||||
CP r38, r2
|
||||
CP r39, r3
|
||||
LI64 r37, 1d
|
||||
LD r33, r38, 8a, 8h
|
||||
LD r32, r38, 16a, 8h
|
||||
JNE r32, r33, :0
|
||||
JNE r32, r0, :1
|
||||
CP r32, r37
|
||||
JMP :2
|
||||
1: MULI64 r37, r35, 2d
|
||||
2: LI64 r38, 8d
|
||||
MUL64 r2, r37, r38
|
||||
CP r3, r38
|
||||
1: MULI64 r32, r32, 2d
|
||||
2: LI64 r40, 8d
|
||||
MUL64 r34, r32, r40
|
||||
CP r2, r34
|
||||
CP r3, r40
|
||||
JAL r31, r0, :malloc
|
||||
CP r39, r36
|
||||
ST r37, r39, 16a, 8h
|
||||
JNE r1, r0, :3
|
||||
CP r35, r1
|
||||
ST r32, r38, 16a, 8h
|
||||
JNE r35, r0, :3
|
||||
CP r1, r0
|
||||
JMP :4
|
||||
3: CP r40, r1
|
||||
CP r1, r0
|
||||
MULI64 r41, r34, 8d
|
||||
LD r42, r39, 0a, 8h
|
||||
ADD64 r43, r42, r41
|
||||
CP r44, r40
|
||||
9: LD r2, r39, 0a, 8h
|
||||
LD r45, r39, 8a, 8h
|
||||
JNE r43, r42, :5
|
||||
JEQ r45, r1, :6
|
||||
CP r4, r38
|
||||
MUL64 r3, r45, r4
|
||||
JAL r31, r0, :free
|
||||
CP r46, r40
|
||||
JMP :7
|
||||
6: CP r46, r40
|
||||
7: ST r46, r39, 0a, 8h
|
||||
JMP :8
|
||||
5: CP r4, r38
|
||||
CP r46, r40
|
||||
ADDI64 r47, r44, 8d
|
||||
ADDI64 r48, r42, 8d
|
||||
LD r49, r42, 0a, 8h
|
||||
ST r49, r44, 0a, 8h
|
||||
CP r42, r48
|
||||
CP r44, r47
|
||||
JMP :9
|
||||
0: CP r39, r36
|
||||
8: LD r35, r39, 8a, 8h
|
||||
MULI64 r50, r35, 8d
|
||||
LD r46, r39, 0a, 8h
|
||||
ADD64 r1, r46, r50
|
||||
3: MULI64 r33, r33, 8d
|
||||
LD r32, r38, 0a, 8h
|
||||
ADD64 r41, r32, r33
|
||||
CP r34, r35
|
||||
7: LD r42, r38, 0a, 8h
|
||||
LD r43, r38, 8a, 8h
|
||||
JNE r41, r32, :5
|
||||
JEQ r43, r0, :6
|
||||
MUL64 r32, r43, r40
|
||||
CP r2, r42
|
||||
CP r3, r32
|
||||
ST r3, r1, 0a, 8h
|
||||
ADD64 r51, r35, r33
|
||||
ST r51, r39, 8a, 8h
|
||||
4: LD r31, r254, 0a, 168h
|
||||
ADDI64 r254, r254, 168d
|
||||
CP r4, r40
|
||||
JAL r31, r0, :free
|
||||
JMP :6
|
||||
6: ST r35, r38, 0a, 8h
|
||||
JMP :0
|
||||
5: ADDI64 r36, r34, 8d
|
||||
ADDI64 r33, r32, 8d
|
||||
LD r32, r32, 0a, 8h
|
||||
ST r32, r34, 0a, 8h
|
||||
CP r34, r36
|
||||
CP r32, r33
|
||||
JMP :7
|
||||
0: LD r32, r38, 8a, 8h
|
||||
MULI64 r33, r32, 8d
|
||||
LD r34, r38, 0a, 8h
|
||||
ADD64 r33, r34, r33
|
||||
ST r39, r33, 0a, 8h
|
||||
ADD64 r32, r32, r37
|
||||
ST r32, r38, 8a, 8h
|
||||
CP r1, r33
|
||||
4: LD r31, r254, 0a, 112h
|
||||
ADDI64 r254, r254, 112d
|
||||
JALA r0, r31, 0a
|
||||
code size: 899
|
||||
code size: 1045
|
||||
ret: 69
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,18 +1,23 @@
|
|||
clobber:
|
||||
LRA r3, r0, :var
|
||||
ST r0, r3, 0a, 8h
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LRA r13, r0, :var
|
||||
ST r0, r13, 0a, 8h
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
LRA r32, r0, :var
|
||||
LI64 r33, 2d
|
||||
ST r33, r32, 0a, 8h
|
||||
JAL r31, r0, :clobber
|
||||
LD r1, r32, 0a, 8h
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
LD r32, r32, 0a, 8h
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 156
|
||||
code size: 207
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -2,21 +2,22 @@ inb:
|
|||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 0a, 40h
|
||||
LRA r32, r0, :ports
|
||||
LD r33, r32, 0a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
JNE r33, r0, :0
|
||||
JMP :1
|
||||
0: JAL r31, r0, :inb
|
||||
CMPU r34, r1, r0
|
||||
CP r33, r1
|
||||
CMPU r34, r33, r0
|
||||
CMPUI r34, r34, 0d
|
||||
NOT r34, r34
|
||||
ST r34, r32, 0a, 1h
|
||||
1: LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
1: LD r31, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
code size: 161
|
||||
code size: 164
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
main:
|
||||
LRA r3, r0, :complex_global_var
|
||||
LD r5, r3, 0a, 8h
|
||||
ADDI64 r1, r5, 5d
|
||||
ST r1, r3, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
LRA r13, r0, :complex_global_var
|
||||
LD r14, r13, 0a, 8h
|
||||
ADDI64 r14, r14, 5d
|
||||
ST r14, r13, 0a, 8h
|
||||
CP r1, r14
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 71
|
||||
code size: 122
|
||||
ret: 55
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -128d
|
||||
LI8 r8, 69b
|
||||
LI64 r7, 128d
|
||||
CP r9, r0
|
||||
ADDI64 r6, r254, 0d
|
||||
2: LD r3, r254, 42a, 1h
|
||||
JLTU r9, r7, :0
|
||||
ANDI r1, r3, 255d
|
||||
ADDI64 r254, r254, -176d
|
||||
ST r32, r254, 128a, 48h
|
||||
LI8 r15, 69b
|
||||
LI64 r16, 128d
|
||||
CP r13, r0
|
||||
ADDI64 r17, r254, 0d
|
||||
2: LD r18, r254, 42a, 1h
|
||||
JLTU r13, r16, :0
|
||||
ANDI r13, r18, 255d
|
||||
CP r1, r13
|
||||
JMP :1
|
||||
0: ADDI64 r10, r9, 1d
|
||||
ADD64 r5, r6, r9
|
||||
ST r8, r5, 0a, 1h
|
||||
CP r9, r10
|
||||
0: ADDI64 r14, r13, 1d
|
||||
ADD64 r13, r17, r13
|
||||
ST r15, r13, 0a, 1h
|
||||
CP r13, r14
|
||||
JMP :2
|
||||
1: ADDI64 r254, r254, 128d
|
||||
1: LD r32, r254, 128a, 48h
|
||||
ADDI64 r254, r254, 176d
|
||||
JALA r0, r31, 0a
|
||||
code size: 138
|
||||
code size: 167
|
||||
ret: 69
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,30 +1,36 @@
|
|||
fib:
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 0a, 40h
|
||||
LI64 r1, 1d
|
||||
LI64 r32, 2d
|
||||
JGTU r2, r32, :0
|
||||
CP r32, r2
|
||||
LI64 r33, 1d
|
||||
LI64 r34, 2d
|
||||
JGTU r32, r34, :0
|
||||
CP r1, r33
|
||||
JMP :1
|
||||
0: CP r33, r2
|
||||
SUB64 r2, r33, r1
|
||||
CP r34, r33
|
||||
0: SUB64 r33, r32, r33
|
||||
CP r2, r33
|
||||
JAL r31, r0, :fib
|
||||
CP r2, r34
|
||||
CP r35, r1
|
||||
SUB64 r2, r2, r32
|
||||
CP r33, r1
|
||||
SUB64 r32, r32, r34
|
||||
CP r2, r32
|
||||
JAL r31, r0, :fib
|
||||
ADD64 r1, r1, r35
|
||||
CP r32, r1
|
||||
ADD64 r32, r32, r33
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
LI64 r2, 10d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI64 r32, 10d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :fib
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
code size: 211
|
||||
code size: 229
|
||||
ret: 55
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
main:
|
||||
CP r4, r0
|
||||
0: ADDI64 r4, r4, 1d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r0
|
||||
0: ADDI64 r13, r13, 1d
|
||||
JMP :0
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
timed out
|
||||
code size: 38
|
||||
code size: 86
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,19 +1,25 @@
|
|||
main:
|
||||
LI64 r2, 8d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 0a, 24h
|
||||
LI64 r13, 8d
|
||||
CP r2, r13
|
||||
ECA
|
||||
LI64 r11, 6d
|
||||
LRA r8, r0, :gb
|
||||
LD r10, r8, 0a, 8h
|
||||
CMPU r12, r10, r0
|
||||
CMPUI r12, r12, 0d
|
||||
OR r2, r12, r0
|
||||
ANDI r2, r2, 255d
|
||||
JNE r2, r0, :0
|
||||
CP r7, r11
|
||||
LI64 r14, 6d
|
||||
LRA r15, r0, :gb
|
||||
LD r13, r15, 0a, 8h
|
||||
CMPU r13, r13, r0
|
||||
CMPUI r13, r13, 0d
|
||||
OR r13, r13, r0
|
||||
ANDI r13, r13, 255d
|
||||
JNE r13, r0, :0
|
||||
CP r13, r14
|
||||
JMP :1
|
||||
0: LI64 r7, 1d
|
||||
1: SUB64 r1, r7, r11
|
||||
0: LI64 r13, 1d
|
||||
1: SUB64 r13, r13, r14
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
code size: 125
|
||||
code size: 179
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
JAL r31, r0, :scalar_values
|
||||
JEQ r1, r0, :0
|
||||
LI64 r1, 1d
|
||||
CP r32, r1
|
||||
JEQ r32, r0, :0
|
||||
LI64 r32, 1d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: JAL r31, r0, :structs
|
||||
JEQ r1, r0, :2
|
||||
CP r32, r1
|
||||
JEQ r32, r0, :2
|
||||
JAL r31, r0, :structs
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
2: CP r1, r0
|
||||
1: LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
1: LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
scalar_values:
|
||||
CP r1, r0
|
||||
|
@ -19,6 +24,6 @@ scalar_values:
|
|||
structs:
|
||||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
code size: 149
|
||||
code size: 164
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
main:
|
||||
LI64 r1, 10d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r13, 10d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 29
|
||||
code size: 80
|
||||
ret: 10
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,108 +1,106 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -90d
|
||||
ST r31, r254, 58a, 32h
|
||||
ADDI64 r254, r254, -130d
|
||||
ST r31, r254, 58a, 72h
|
||||
ADDI64 r32, r254, 33d
|
||||
ADDI64 r2, r254, 34d
|
||||
ADDI64 r6, r254, 1d
|
||||
ADDI64 r4, r254, 17d
|
||||
ADDI64 r33, r254, 34d
|
||||
ADDI64 r34, r254, 1d
|
||||
ADDI64 r35, r254, 17d
|
||||
ST r32, r254, 34a, 8h
|
||||
LI64 r33, 100d
|
||||
ADDI64 r7, r254, 0d
|
||||
LI8 r34, 1b
|
||||
LI64 r36, 100d
|
||||
ADDI64 r37, r254, 0d
|
||||
LI8 r38, 1b
|
||||
ST r0, r254, 1a, 8h
|
||||
ST r0, r254, 17a, 8h
|
||||
ST r33, r254, 42a, 8h
|
||||
ST r34, r254, 0a, 1h
|
||||
ST r36, r254, 42a, 8h
|
||||
ST r38, r254, 0a, 1h
|
||||
ST r0, r254, 9a, 8h
|
||||
ST r0, r254, 25a, 8h
|
||||
ST r33, r254, 50a, 8h
|
||||
ST r36, r254, 50a, 8h
|
||||
ST r0, r254, 33a, 1h
|
||||
CP r3, r4
|
||||
CP r5, r6
|
||||
LD r3, r3, 0a, 16h
|
||||
LD r5, r5, 0a, 16h
|
||||
LD r7, r7, 0a, 1h
|
||||
CP r2, r33
|
||||
LD r3, r35, 0a, 16h
|
||||
LD r5, r34, 0a, 16h
|
||||
LD r7, r37, 0a, 1h
|
||||
JAL r31, r0, :put_filled_rect
|
||||
LD r31, r254, 58a, 32h
|
||||
ADDI64 r254, r254, 90d
|
||||
LD r31, r254, 58a, 72h
|
||||
ADDI64 r254, r254, 130d
|
||||
JALA r0, r31, 0a
|
||||
put_filled_rect:
|
||||
ADDI64 r254, r254, -220d
|
||||
ST r32, r254, 108a, 112h
|
||||
ADDI64 r254, r254, -236d
|
||||
ST r32, r254, 108a, 128h
|
||||
CP r14, r2
|
||||
ST r3, r254, 92a, 16h
|
||||
ADDI64 r3, r254, 92d
|
||||
CP r15, r3
|
||||
ST r5, r254, 76a, 16h
|
||||
ADDI64 r5, r254, 76d
|
||||
CP r13, r5
|
||||
ST r7, r254, 75a, 1h
|
||||
ADDI64 r7, r254, 75d
|
||||
LI64 r8, 25d
|
||||
LI64 r32, 2d
|
||||
LI64 r6, 8d
|
||||
ADDI64 r33, r254, 25d
|
||||
ADDI64 r34, r254, 50d
|
||||
LI8 r35, 5b
|
||||
ST r35, r254, 25a, 1h
|
||||
LD r36, r5, 0a, 8h
|
||||
ST r36, r254, 26a, 4h
|
||||
LI64 r37, 1d
|
||||
ST r37, r254, 30a, 4h
|
||||
ST r7, r254, 34a, 8h
|
||||
ST r35, r254, 50a, 1h
|
||||
ST r36, r254, 51a, 4h
|
||||
ST r37, r254, 55a, 4h
|
||||
ST r7, r254, 59a, 8h
|
||||
CP r38, r7
|
||||
LD r7, r3, 8a, 8h
|
||||
LD r39, r5, 8a, 8h
|
||||
ADD64 r11, r39, r7
|
||||
SUB64 r4, r11, r37
|
||||
LD r40, r2, 8a, 8h
|
||||
MUL64 r5, r40, r4
|
||||
LD r10, r2, 0a, 8h
|
||||
ADD64 r9, r10, r5
|
||||
LD r41, r3, 0a, 8h
|
||||
ADD64 r42, r41, r9
|
||||
MUL64 r43, r40, r7
|
||||
3: ADD64 r43, r43, r10
|
||||
ADD64 r9, r43, r41
|
||||
JGTU r39, r37, :0
|
||||
JNE r39, r37, :1
|
||||
ADDI64 r4, r254, 0d
|
||||
ST r35, r254, 0a, 1h
|
||||
ST r36, r254, 1a, 4h
|
||||
ST r37, r254, 5a, 4h
|
||||
ST r38, r254, 9a, 8h
|
||||
ST r9, r254, 17a, 8h
|
||||
CP r2, r6
|
||||
CP r3, r32
|
||||
CP r5, r8
|
||||
CP r16, r7
|
||||
LI64 r17, 25d
|
||||
LI64 r18, 2d
|
||||
LI64 r19, 8d
|
||||
ADDI64 r20, r254, 25d
|
||||
ADDI64 r21, r254, 50d
|
||||
LI8 r22, 5b
|
||||
ST r22, r254, 25a, 1h
|
||||
LD r23, r13, 0a, 8h
|
||||
ST r23, r254, 26a, 4h
|
||||
LI64 r24, 1d
|
||||
ST r24, r254, 30a, 4h
|
||||
ST r16, r254, 34a, 8h
|
||||
ST r22, r254, 50a, 1h
|
||||
ST r23, r254, 51a, 4h
|
||||
ST r24, r254, 55a, 4h
|
||||
ST r16, r254, 59a, 8h
|
||||
LD r25, r15, 8a, 8h
|
||||
LD r13, r13, 8a, 8h
|
||||
ADD64 r26, r13, r25
|
||||
SUB64 r26, r26, r24
|
||||
LD r27, r14, 8a, 8h
|
||||
MUL64 r26, r27, r26
|
||||
LD r14, r14, 0a, 8h
|
||||
ADD64 r26, r14, r26
|
||||
LD r28, r15, 0a, 8h
|
||||
ADD64 r15, r28, r26
|
||||
MUL64 r25, r27, r25
|
||||
ADD64 r14, r14, r25
|
||||
ADD64 r14, r28, r14
|
||||
3: JGTU r13, r24, :0
|
||||
JNE r13, r24, :1
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r22, r254, 0a, 1h
|
||||
ST r23, r254, 1a, 4h
|
||||
ST r24, r254, 5a, 4h
|
||||
ST r16, r254, 9a, 8h
|
||||
ST r14, r254, 17a, 8h
|
||||
CP r2, r19
|
||||
CP r3, r18
|
||||
CP r4, r13
|
||||
CP r5, r17
|
||||
ECA
|
||||
JMP :1
|
||||
1: JMP :2
|
||||
0: CP r3, r32
|
||||
CP r44, r6
|
||||
CP r45, r8
|
||||
ST r9, r254, 67a, 8h
|
||||
CP r2, r44
|
||||
CP r4, r34
|
||||
CP r5, r45
|
||||
0: ST r14, r254, 67a, 8h
|
||||
CP r2, r19
|
||||
CP r3, r18
|
||||
CP r4, r21
|
||||
CP r5, r17
|
||||
ECA
|
||||
ST r42, r254, 42a, 8h
|
||||
CP r2, r44
|
||||
CP r3, r32
|
||||
CP r4, r33
|
||||
CP r5, r45
|
||||
ST r15, r254, 42a, 8h
|
||||
CP r2, r19
|
||||
CP r3, r18
|
||||
CP r4, r20
|
||||
CP r5, r17
|
||||
ECA
|
||||
SUB64 r42, r42, r40
|
||||
SUB64 r39, r39, r32
|
||||
CP r10, r41
|
||||
CP r41, r40
|
||||
CP r8, r45
|
||||
CP r6, r44
|
||||
SUB64 r15, r15, r27
|
||||
ADD64 r14, r27, r14
|
||||
SUB64 r13, r13, r18
|
||||
JMP :3
|
||||
2: LD r32, r254, 108a, 112h
|
||||
ADDI64 r254, r254, 220d
|
||||
2: LD r32, r254, 108a, 128h
|
||||
ADDI64 r254, r254, 236d
|
||||
JALA r0, r31, 0a
|
||||
code size: 906
|
||||
code size: 901
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,19 +1,31 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 16a, 8h
|
||||
ADDI64 r3, r254, 0d
|
||||
ADDI64 r2, r254, 8d
|
||||
ADDI64 r254, r254, -72d
|
||||
ST r31, r254, 16a, 56h
|
||||
ADDI64 r32, r254, 0d
|
||||
ADDI64 r33, r254, 8d
|
||||
ST r0, r254, 0a, 8h
|
||||
ST r0, r254, 8a, 8h
|
||||
LI64 r4, 1024d
|
||||
LI64 r36, 1024d
|
||||
CP r2, r33
|
||||
CP r3, r32
|
||||
CP r4, r36
|
||||
JAL r31, r0, :set
|
||||
ANDI r1, r1, 4294967295d
|
||||
LD r31, r254, 16a, 8h
|
||||
ADDI64 r254, r254, 24d
|
||||
CP r32, r1
|
||||
ANDI r32, r32, 4294967295d
|
||||
CP r1, r32
|
||||
LD r31, r254, 16a, 56h
|
||||
ADDI64 r254, r254, 72d
|
||||
JALA r0, r31, 0a
|
||||
set:
|
||||
CP r1, r4
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r0, r2
|
||||
CP r0, r3
|
||||
CP r13, r4
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 157
|
||||
code size: 229
|
||||
ret: 1024
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,29 +1,33 @@
|
|||
integer_range:
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r32, r2
|
||||
CP r33, r3
|
||||
LI64 r3, 4d
|
||||
LI64 r2, 3d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 0a, 32h
|
||||
CP r13, r2
|
||||
CP r14, r3
|
||||
LI64 r15, 4d
|
||||
LI64 r16, 3d
|
||||
CP r2, r16
|
||||
CP r3, r15
|
||||
ECA
|
||||
CP r2, r32
|
||||
CP r3, r33
|
||||
SUB64 r3, r3, r2
|
||||
ADDI64 r3, r3, 1d
|
||||
DIRU64 r0, r5, r1, r3
|
||||
ADD64 r1, r5, r2
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
CP r15, r1
|
||||
SUB64 r14, r14, r13
|
||||
ADDI64 r14, r14, 1d
|
||||
DIRU64 r0, r14, r15, r14
|
||||
ADD64 r13, r14, r13
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
LI64 r3, 1000d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI64 r32, 1000d
|
||||
CP r2, r0
|
||||
CP r3, r32
|
||||
JAL r31, r0, :integer_range
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
CP r0, r1
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
code size: 203
|
||||
code size: 215
|
||||
ret: 42
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
LI64 r3, 10d
|
||||
ST r3, r254, 0a, 8h
|
||||
2: LD r1, r254, 0a, 8h
|
||||
JNE r1, r0, :0
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 8a, 8h
|
||||
LI64 r13, 10d
|
||||
ST r13, r254, 0a, 8h
|
||||
2: LD r13, r254, 0a, 8h
|
||||
JNE r13, r0, :0
|
||||
CP r1, r13
|
||||
JMP :1
|
||||
0: ADDI64 r11, r1, -1d
|
||||
ST r11, r254, 0a, 8h
|
||||
0: ADDI64 r13, r13, -1d
|
||||
ST r13, r254, 0a, 8h
|
||||
JMP :2
|
||||
1: ADDI64 r254, r254, 8d
|
||||
1: LD r32, r254, 8a, 8h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 116
|
||||
code size: 145
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,24 +1,32 @@
|
|||
fib:
|
||||
LI64 r6, 1d
|
||||
CP r7, r0
|
||||
CP r1, r7
|
||||
CP r12, r6
|
||||
2: JNE r2, r7, :0
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 0a, 40h
|
||||
CP r13, r2
|
||||
LI64 r17, 1d
|
||||
CP r15, r0
|
||||
CP r16, r17
|
||||
CP r14, r15
|
||||
2: JNE r13, r15, :0
|
||||
CP r1, r14
|
||||
JMP :1
|
||||
0: ADD64 r3, r12, r1
|
||||
SUB64 r2, r2, r6
|
||||
CP r1, r12
|
||||
CP r12, r3
|
||||
0: ADD64 r14, r16, r14
|
||||
SUB64 r13, r13, r17
|
||||
SWA r14, r16
|
||||
JMP :2
|
||||
1: JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
LI64 r2, 10d
|
||||
JAL r31, r0, :fib
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
1: LD r32, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
code size: 143
|
||||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI64 r32, 10d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :fib
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
code size: 203
|
||||
ret: 55
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
main:
|
||||
LI64 r1, 1d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r13, 1d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 29
|
||||
code size: 80
|
||||
ret: 1
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,31 +1,38 @@
|
|||
decide:
|
||||
ADDI64 r254, r254, -24d
|
||||
ADDI64 r7, r254, 0d
|
||||
ST r2, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 24a, 16h
|
||||
CP r14, r2
|
||||
CP r15, r1
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r14, r254, 0a, 8h
|
||||
ST r0, r254, 8a, 8h
|
||||
ST r0, r254, 16a, 8h
|
||||
BMC r7, r1, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
BMC r13, r15, 24h
|
||||
LD r32, r254, 24a, 16h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -112d
|
||||
ST r31, r254, 72a, 40h
|
||||
ADDI64 r254, r254, -128d
|
||||
ST r31, r254, 72a, 56h
|
||||
ADDI64 r32, r254, 48d
|
||||
CP r2, r0
|
||||
CP r1, r32
|
||||
JAL r31, r0, :decide
|
||||
ADDI64 r1, r254, 24d
|
||||
BMC r32, r1, 24h
|
||||
LI64 r2, 1d
|
||||
ADDI64 r34, r254, 24d
|
||||
BMC r32, r34, 24h
|
||||
LI64 r36, 1d
|
||||
CP r2, r36
|
||||
CP r1, r34
|
||||
JAL r31, r0, :decide
|
||||
ADDI64 r33, r254, 0d
|
||||
BMC r32, r33, 24h
|
||||
LD r34, r254, 24a, 8h
|
||||
LD r35, r254, 0a, 8h
|
||||
ADD64 r1, r35, r34
|
||||
LD r31, r254, 72a, 40h
|
||||
ADDI64 r254, r254, 112d
|
||||
ADDI64 r36, r254, 0d
|
||||
BMC r32, r36, 24h
|
||||
LD r32, r254, 24a, 8h
|
||||
LD r33, r254, 0a, 8h
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 72a, 56h
|
||||
ADDI64 r254, r254, 128d
|
||||
JALA r0, r31, 0a
|
||||
code size: 258
|
||||
code size: 299
|
||||
ret: 1
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,26 +1,24 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
JAL r31, r0, :opaque
|
||||
CP r32, r1
|
||||
CP r33, r1
|
||||
JAL r31, r0, :opaque
|
||||
CP r1, r32
|
||||
JNE r1, r0, :0
|
||||
CP r32, r1
|
||||
CP r1, r0
|
||||
CP r33, r32
|
||||
CP r0, r1
|
||||
JNE r33, r0, :0
|
||||
CP r32, r0
|
||||
JMP :1
|
||||
0: CP r33, r1
|
||||
LD r1, r33, 0a, 8h
|
||||
0: LD r32, r33, 0a, 8h
|
||||
1: JEQ r33, r0, :2
|
||||
LD r1, r33, 0a, 8h
|
||||
LD r32, r33, 0a, 8h
|
||||
JMP :2
|
||||
2: LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
2: CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
opaque:
|
||||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
code size: 159
|
||||
code size: 153
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,32 +1,36 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -30d
|
||||
ST r31, r254, 6a, 24h
|
||||
ADDI64 r254, r254, -38d
|
||||
ST r31, r254, 6a, 32h
|
||||
ADDI64 r32, r254, 0d
|
||||
2: JAL r31, r0, :return_fn
|
||||
2: CP r1, r32
|
||||
JAL r31, r0, :return_fn
|
||||
ST r1, r32, 0a, 6h
|
||||
LD r33, r254, 0a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JEQ r33, r0, :0
|
||||
LI64 r1, 1d
|
||||
LI64 r32, 1d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: JMP :2
|
||||
1: LD r31, r254, 6a, 24h
|
||||
ADDI64 r254, r254, 30d
|
||||
1: LD r31, r254, 6a, 32h
|
||||
ADDI64 r254, r254, 38d
|
||||
JALA r0, r31, 0a
|
||||
return_fn:
|
||||
ADDI64 r254, r254, -6d
|
||||
LI8 r5, 1b
|
||||
ADDI64 r4, r254, 0d
|
||||
ST r5, r254, 0a, 1h
|
||||
ADDI64 r254, r254, -22d
|
||||
ST r32, r254, 6a, 16h
|
||||
LI8 r13, 1b
|
||||
ADDI64 r14, r254, 0d
|
||||
ST r13, r254, 0a, 1h
|
||||
ST r0, r254, 1a, 1h
|
||||
ST r0, r254, 2a, 1h
|
||||
ST r0, r254, 3a, 1h
|
||||
ST r0, r254, 4a, 1h
|
||||
ST r0, r254, 5a, 1h
|
||||
LD r1, r4, 0a, 6h
|
||||
ADDI64 r254, r254, 6d
|
||||
LD r1, r14, 0a, 6h
|
||||
LD r32, r254, 6a, 16h
|
||||
ADDI64 r254, r254, 22d
|
||||
JALA r0, r31, 0a
|
||||
code size: 296
|
||||
code size: 328
|
||||
ret: 1
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,76 +1,84 @@
|
|||
foo:
|
||||
ADDI64 r254, r254, -176d
|
||||
ST r31, r254, 80a, 96h
|
||||
ADDI64 r254, r254, -120d
|
||||
ST r31, r254, 80a, 40h
|
||||
ADDI64 r32, r254, 64d
|
||||
LRA r3, r0, :some_file
|
||||
LRA r33, r0, :some_file
|
||||
CP r3, r33
|
||||
CP r1, r32
|
||||
JAL r31, r0, :get
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r33, r254, 64a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JNE r33, r0, :0
|
||||
ADDI64 r34, r254, 48d
|
||||
ADDI64 r32, r254, 48d
|
||||
ST r0, r254, 48a, 1h
|
||||
LD r1, r34, 0a, 16h
|
||||
LD r1, r32, 0a, 16h
|
||||
JMP :1
|
||||
0: LI8 r35, 1b
|
||||
LI64 r36, 4d
|
||||
LD r37, r254, 72a, 8h
|
||||
JNE r37, r36, :2
|
||||
ADDI64 r37, r254, 32d
|
||||
ST r35, r254, 32a, 1h
|
||||
LI64 r38, 2d
|
||||
ST r38, r254, 40a, 8h
|
||||
LD r1, r37, 0a, 16h
|
||||
0: LI8 r33, 1b
|
||||
LI64 r34, 4d
|
||||
LD r32, r254, 72a, 8h
|
||||
JNE r32, r34, :2
|
||||
ADDI64 r32, r254, 32d
|
||||
ST r33, r254, 32a, 1h
|
||||
LI64 r33, 2d
|
||||
ST r33, r254, 40a, 8h
|
||||
LD r1, r32, 0a, 16h
|
||||
JMP :1
|
||||
2: LRA r39, r0, :MAGIC
|
||||
LD r40, r39, 0a, 8h
|
||||
JNE r40, r37, :3
|
||||
ADDI64 r41, r254, 16d
|
||||
ST r35, r254, 16a, 1h
|
||||
2: LRA r34, r0, :MAGIC
|
||||
LD r34, r34, 0a, 8h
|
||||
JNE r34, r32, :3
|
||||
ADDI64 r32, r254, 16d
|
||||
ST r33, r254, 16a, 1h
|
||||
ST r0, r254, 24a, 8h
|
||||
LD r1, r41, 0a, 16h
|
||||
LD r1, r32, 0a, 16h
|
||||
JMP :1
|
||||
3: ADDI64 r42, r254, 0d
|
||||
3: ADDI64 r32, r254, 0d
|
||||
ST r0, r254, 0a, 1h
|
||||
LD r1, r42, 0a, 16h
|
||||
1: LD r31, r254, 80a, 96h
|
||||
ADDI64 r254, r254, 176d
|
||||
LD r1, r32, 0a, 16h
|
||||
1: LD r31, r254, 80a, 40h
|
||||
ADDI64 r254, r254, 120d
|
||||
JALA r0, r31, 0a
|
||||
get:
|
||||
ADDI64 r254, r254, -32d
|
||||
LD r5, r3, 0a, 1h
|
||||
LRA r7, r0, :MAGIC
|
||||
ANDI r11, r5, 255d
|
||||
LD r10, r7, 0a, 8h
|
||||
JNE r10, r11, :0
|
||||
LI8 r4, 1b
|
||||
ADDI64 r3, r254, 16d
|
||||
ST r4, r254, 16a, 1h
|
||||
ST r10, r254, 24a, 8h
|
||||
LD r1, r3, 0a, 16h
|
||||
ADDI64 r254, r254, -56d
|
||||
ST r32, r254, 32a, 24h
|
||||
CP r13, r3
|
||||
LD r13, r13, 0a, 1h
|
||||
LRA r14, r0, :MAGIC
|
||||
ANDI r13, r13, 255d
|
||||
LD r14, r14, 0a, 8h
|
||||
JNE r14, r13, :0
|
||||
LI8 r13, 1b
|
||||
ADDI64 r15, r254, 16d
|
||||
ST r13, r254, 16a, 1h
|
||||
ST r14, r254, 24a, 8h
|
||||
LD r1, r15, 0a, 16h
|
||||
JMP :1
|
||||
0: ADDI64 r9, r254, 0d
|
||||
0: ADDI64 r13, r254, 0d
|
||||
ST r0, r254, 0a, 1h
|
||||
LD r1, r9, 0a, 16h
|
||||
1: ADDI64 r254, r254, 32d
|
||||
LD r1, r13, 0a, 16h
|
||||
1: LD r32, r254, 32a, 24h
|
||||
ADDI64 r254, r254, 56d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 16a, 24h
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 16a, 32h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :foo
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r33, r254, 0a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JNE r33, r0, :0
|
||||
LI64 r1, 100d
|
||||
LI64 r32, 100d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: LD r1, r254, 8a, 8h
|
||||
1: LD r31, r254, 16a, 24h
|
||||
ADDI64 r254, r254, 40d
|
||||
0: LD r32, r254, 8a, 8h
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
code size: 749
|
||||
code size: 793
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -2,22 +2,23 @@ get_ptr:
|
|||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 0a, 40h
|
||||
JAL r31, r0, :get_ptr
|
||||
JNE r1, r0, :0
|
||||
CP r32, r1
|
||||
JNE r32, r0, :0
|
||||
CP r1, r0
|
||||
JMP :1
|
||||
0: LI64 r32, 10d
|
||||
CP r33, r1
|
||||
2: LD r1, r33, 0a, 8h
|
||||
JEQ r1, r32, :1
|
||||
ADDI64 r34, r1, 1d
|
||||
ST r34, r33, 0a, 8h
|
||||
JMP :2
|
||||
1: LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
0: LI64 r33, 10d
|
||||
3: LD r34, r32, 0a, 8h
|
||||
JEQ r34, r33, :2
|
||||
ADDI64 r34, r34, 1d
|
||||
ST r34, r32, 0a, 8h
|
||||
JMP :3
|
||||
2: CP r1, r34
|
||||
1: LD r31, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
code size: 161
|
||||
code size: 164
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,55 +1,67 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -98d
|
||||
ST r31, r254, 26a, 72h
|
||||
ADDI64 r254, r254, -74d
|
||||
ST r31, r254, 26a, 48h
|
||||
JAL r31, r0, :returner_fn
|
||||
CP r32, r1
|
||||
ADDI64 r1, r254, 2d
|
||||
ADDI64 r33, r254, 2d
|
||||
CP r1, r33
|
||||
JAL r31, r0, :returner_bn
|
||||
ADDI64 r33, r254, 0d
|
||||
ADDI64 r34, r254, 0d
|
||||
CP r1, r34
|
||||
JAL r31, r0, :returner_cn
|
||||
ST r1, r33, 0a, 2h
|
||||
LD r34, r254, 2a, 1h
|
||||
CP r1, r32
|
||||
CMPU r35, r1, r0
|
||||
CMPUI r35, r35, 0d
|
||||
CMPU r32, r34, r0
|
||||
ST r1, r34, 0a, 2h
|
||||
LD r33, r254, 2a, 1h
|
||||
CMPU r32, r32, r0
|
||||
CMPUI r32, r32, 0d
|
||||
LD r36, r254, 0a, 1h
|
||||
AND r37, r32, r35
|
||||
CMPU r38, r36, r0
|
||||
CMPUI r38, r38, 0d
|
||||
AND r39, r38, r37
|
||||
ANDI r39, r39, 255d
|
||||
JNE r39, r0, :0
|
||||
CMPU r33, r33, r0
|
||||
CMPUI r33, r33, 0d
|
||||
LD r34, r254, 0a, 1h
|
||||
AND r32, r33, r32
|
||||
CMPU r33, r34, r0
|
||||
CMPUI r33, r33, 0d
|
||||
AND r32, r33, r32
|
||||
ANDI r32, r32, 255d
|
||||
JNE r32, r0, :0
|
||||
CP r1, r0
|
||||
JMP :1
|
||||
0: LI64 r1, 1d
|
||||
1: LD r31, r254, 26a, 72h
|
||||
ADDI64 r254, r254, 98d
|
||||
0: LI64 r32, 1d
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 26a, 48h
|
||||
ADDI64 r254, r254, 74d
|
||||
JALA r0, r31, 0a
|
||||
returner_bn:
|
||||
ADDI64 r254, r254, -24d
|
||||
LI8 r7, 1b
|
||||
ADDI64 r6, r254, 0d
|
||||
ST r7, r254, 0a, 1h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 24a, 16h
|
||||
CP r15, r1
|
||||
LI8 r14, 1b
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r14, r254, 0a, 1h
|
||||
ST r0, r254, 8a, 8h
|
||||
ST r0, r254, 16a, 8h
|
||||
BMC r6, r1, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
BMC r13, r15, 24h
|
||||
LD r32, r254, 24a, 16h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
returner_cn:
|
||||
ADDI64 r254, r254, -2d
|
||||
LI8 r5, 1b
|
||||
ADDI64 r4, r254, 0d
|
||||
ST r5, r254, 0a, 1h
|
||||
ADDI64 r254, r254, -18d
|
||||
ST r32, r254, 2a, 16h
|
||||
LI8 r13, 1b
|
||||
ADDI64 r14, r254, 0d
|
||||
ST r13, r254, 0a, 1h
|
||||
ST r0, r254, 1a, 1h
|
||||
LD r1, r4, 0a, 2h
|
||||
ADDI64 r254, r254, 2d
|
||||
LD r1, r14, 0a, 2h
|
||||
LD r32, r254, 2a, 16h
|
||||
ADDI64 r254, r254, 18d
|
||||
JALA r0, r31, 0a
|
||||
returner_fn:
|
||||
LD r3, r254, 0a, 0h
|
||||
ORI r1, r3, 128d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LD r13, r254, 0a, 0h
|
||||
ORI r13, r13, 128d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 454
|
||||
code size: 566
|
||||
ret: 1
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,130 +1,157 @@
|
|||
decide:
|
||||
LI8 r1, 1b
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI8 r13, 1b
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -224d
|
||||
ST r31, r254, 80a, 144h
|
||||
ADDI64 r254, r254, -144d
|
||||
ST r31, r254, 80a, 64h
|
||||
JAL r31, r0, :decide
|
||||
CP r32, r0
|
||||
ADDI64 r2, r254, 72d
|
||||
CP r33, r2
|
||||
ANDI r1, r1, 255d
|
||||
JNE r1, r0, :0
|
||||
CP r34, r32
|
||||
CP r32, r1
|
||||
CP r33, r0
|
||||
ADDI64 r34, r254, 72d
|
||||
ANDI r32, r32, 255d
|
||||
JNE r32, r0, :0
|
||||
CP r32, r33
|
||||
JMP :1
|
||||
0: CP r34, r33
|
||||
0: CP r32, r34
|
||||
1: LI64 r35, 1d
|
||||
ST r35, r254, 72a, 8h
|
||||
JNE r34, r32, :2
|
||||
LI64 r1, 9001d
|
||||
JNE r32, r33, :2
|
||||
LI64 r32, 9001d
|
||||
CP r1, r32
|
||||
JMP :3
|
||||
2: JAL r31, r0, :decide
|
||||
ANDI r1, r1, 255d
|
||||
JNE r1, r0, :4
|
||||
LI8 r36, 1b
|
||||
ST r36, r254, 56a, 1h
|
||||
LD r37, r34, 0a, 8h
|
||||
ST r37, r254, 64a, 8h
|
||||
CP r33, r1
|
||||
ANDI r33, r33, 255d
|
||||
JNE r33, r0, :4
|
||||
LI8 r33, 1b
|
||||
ST r33, r254, 56a, 1h
|
||||
LD r32, r32, 0a, 8h
|
||||
ST r32, r254, 64a, 8h
|
||||
JMP :5
|
||||
4: ST r0, r254, 56a, 1h
|
||||
5: LD r38, r254, 56a, 1h
|
||||
ANDI r38, r38, 255d
|
||||
5: LD r32, r254, 56a, 1h
|
||||
ANDI r32, r32, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JEQ r38, r0, :6
|
||||
LI64 r1, 42d
|
||||
JEQ r32, r0, :6
|
||||
LI64 r32, 42d
|
||||
CP r1, r32
|
||||
JMP :3
|
||||
6: JAL r31, r0, :decide
|
||||
CP r39, r0
|
||||
ANDI r1, r1, 255d
|
||||
JNE r1, r0, :7
|
||||
CP r40, r39
|
||||
CP r32, r1
|
||||
CP r33, r0
|
||||
ANDI r32, r32, 255d
|
||||
JNE r32, r0, :7
|
||||
CP r32, r33
|
||||
JMP :8
|
||||
7: LI32 r40, 2147483649w
|
||||
8: ANDI r40, r40, 4294967295d
|
||||
ANDI r39, r39, 4294967295d
|
||||
JNE r40, r39, :9
|
||||
LI64 r1, 69d
|
||||
7: LI32 r32, 2147483649w
|
||||
8: ANDI r32, r32, 4294967295d
|
||||
ANDI r33, r33, 4294967295d
|
||||
JNE r32, r33, :9
|
||||
LI64 r32, 69d
|
||||
CP r1, r32
|
||||
JMP :3
|
||||
9: ADDI64 r41, r254, 40d
|
||||
9: ADDI64 r33, r254, 40d
|
||||
CP r1, r33
|
||||
JAL r31, r0, :new_foo
|
||||
ST r1, r41, 0a, 16h
|
||||
CP r3, r41
|
||||
LD r42, r254, 40a, 8h
|
||||
JNE r42, r0, :10
|
||||
LI64 r1, 999d
|
||||
ST r1, r33, 0a, 16h
|
||||
LD r37, r254, 40a, 8h
|
||||
JNE r37, r0, :10
|
||||
LI64 r32, 999d
|
||||
CP r1, r32
|
||||
JMP :3
|
||||
10: LRA r4, r0, :"foo\0"
|
||||
CP r2, r3
|
||||
LD r2, r2, 0a, 16h
|
||||
10: LRA r37, r0, :"foo\0"
|
||||
CP r4, r37
|
||||
LD r2, r33, 0a, 16h
|
||||
JAL r31, r0, :use_foo
|
||||
ADDI64 r43, r254, 0d
|
||||
ADDI64 r33, r254, 0d
|
||||
CP r1, r33
|
||||
JAL r31, r0, :no_foo
|
||||
ST r1, r43, 0a, 16h
|
||||
ST r1, r33, 0a, 16h
|
||||
JAL r31, r0, :decide
|
||||
ANDI r1, r1, 255d
|
||||
JNE r1, r0, :11
|
||||
CP r2, r33
|
||||
CP r37, r1
|
||||
ANDI r37, r37, 255d
|
||||
JNE r37, r0, :11
|
||||
JMP :12
|
||||
11: CP r2, r33
|
||||
ST r2, r254, 0a, 8h
|
||||
11: ST r34, r254, 0a, 8h
|
||||
ST r35, r254, 8a, 8h
|
||||
12: LD r44, r254, 0a, 8h
|
||||
JNE r44, r0, :13
|
||||
LI64 r1, 34d
|
||||
12: LD r35, r254, 0a, 8h
|
||||
JNE r35, r0, :13
|
||||
LI64 r32, 34d
|
||||
CP r1, r32
|
||||
JMP :3
|
||||
13: ADDI64 r1, r254, 16d
|
||||
13: ADDI64 r35, r254, 16d
|
||||
CP r2, r34
|
||||
CP r1, r35
|
||||
JAL r31, r0, :new_bar
|
||||
JAL r31, r0, :decide
|
||||
ANDI r1, r1, 255d
|
||||
JNE r1, r0, :14
|
||||
CP r34, r1
|
||||
ANDI r34, r34, 255d
|
||||
JNE r34, r0, :14
|
||||
JMP :15
|
||||
14: ST r0, r254, 16a, 1h
|
||||
15: LD r45, r254, 16a, 1h
|
||||
ANDI r45, r45, 255d
|
||||
15: LD r34, r254, 16a, 1h
|
||||
ANDI r34, r34, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JEQ r45, r0, :16
|
||||
LI64 r1, 420d
|
||||
JEQ r34, r0, :16
|
||||
LI64 r32, 420d
|
||||
CP r1, r32
|
||||
JMP :3
|
||||
16: LD r46, r254, 0a, 8h
|
||||
LD r47, r46, 0a, 8h
|
||||
ANDI r48, r40, 65535d
|
||||
SUB64 r1, r48, r47
|
||||
3: LD r31, r254, 80a, 144h
|
||||
ADDI64 r254, r254, 224d
|
||||
16: LD r33, r254, 0a, 8h
|
||||
LD r33, r33, 0a, 8h
|
||||
ANDI r32, r32, 65535d
|
||||
SUB64 r32, r32, r33
|
||||
CP r1, r32
|
||||
3: LD r31, r254, 80a, 64h
|
||||
ADDI64 r254, r254, 144d
|
||||
JALA r0, r31, 0a
|
||||
new_bar:
|
||||
ADDI64 r254, r254, -24d
|
||||
LI8 r10, 1b
|
||||
ADDI64 r9, r254, 0d
|
||||
ST r10, r254, 0a, 1h
|
||||
ST r2, r254, 8a, 8h
|
||||
LI64 r11, 1d
|
||||
ST r11, r254, 16a, 8h
|
||||
BMC r9, r1, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r32, r254, 24a, 24h
|
||||
CP r14, r2
|
||||
CP r16, r1
|
||||
LI8 r15, 1b
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r15, r254, 0a, 1h
|
||||
ST r14, r254, 8a, 8h
|
||||
LI64 r14, 1d
|
||||
ST r14, r254, 16a, 8h
|
||||
BMC r13, r16, 24h
|
||||
LD r32, r254, 24a, 24h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
new_foo:
|
||||
ADDI64 r254, r254, -24d
|
||||
ADDI64 r5, r254, 0d
|
||||
ADDI64 r4, r254, 8d
|
||||
ST r5, r254, 8a, 8h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 24a, 16h
|
||||
ADDI64 r13, r254, 0d
|
||||
ADDI64 r14, r254, 8d
|
||||
ST r13, r254, 8a, 8h
|
||||
ST r0, r254, 16a, 8h
|
||||
LD r1, r4, 0a, 16h
|
||||
ADDI64 r254, r254, 24d
|
||||
LD r1, r14, 0a, 16h
|
||||
LD r32, r254, 24a, 16h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
no_foo:
|
||||
ADDI64 r254, r254, -16d
|
||||
ADDI64 r3, r254, 0d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 16a, 8h
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r0, r254, 0a, 8h
|
||||
LD r1, r3, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
LD r1, r13, 0a, 16h
|
||||
LD r32, r254, 16a, 8h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
use_foo:
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r2, r254, 0a, 16h
|
||||
ADDI64 r2, r254, 0d
|
||||
CP r0, r2
|
||||
CP r0, r4
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 1097
|
||||
code size: 1274
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,29 +1,40 @@
|
|||
inb:
|
||||
CP r1, r2
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r2
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
LI64 r32, 100d
|
||||
4: CP r2, r32
|
||||
JAL r31, r0, :inb
|
||||
ANDI r33, r1, 2d
|
||||
CP r33, r1
|
||||
ANDI r33, r33, 2d
|
||||
JNE r33, r0, :0
|
||||
LI64 r2, 96d
|
||||
LI64 r33, 96d
|
||||
CP r2, r33
|
||||
CP r3, r0
|
||||
JAL r31, r0, :outb
|
||||
3: CP r2, r32
|
||||
JAL r31, r0, :inb
|
||||
JEQ r1, r0, :1
|
||||
LI64 r1, 1d
|
||||
CP r33, r1
|
||||
JEQ r33, r0, :1
|
||||
LI64 r32, 1d
|
||||
CP r1, r32
|
||||
JMP :2
|
||||
1: JMP :3
|
||||
0: JMP :4
|
||||
2: LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
2: LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
outb:
|
||||
CP r0, r2
|
||||
CP r0, r3
|
||||
JALA r0, r31, 0a
|
||||
code size: 188
|
||||
code size: 257
|
||||
ret: 1
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,21 +1,26 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -16d
|
||||
ADDI64 r7, r254, 0d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 16a, 16h
|
||||
ADDI64 r13, r254, 0d
|
||||
CP r3, r0
|
||||
CP r4, r0
|
||||
CP r5, r0
|
||||
CP r6, r0
|
||||
CP r1, r13
|
||||
ECA
|
||||
ST r1, r7, 0a, 16h
|
||||
LD r7, r254, 0a, 1h
|
||||
ANDI r7, r7, 255d
|
||||
ST r1, r13, 0a, 16h
|
||||
LD r14, r254, 0a, 1h
|
||||
ANDI r14, r14, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JNE r7, r0, :0
|
||||
JNE r14, r0, :0
|
||||
UN
|
||||
0: LD r1, r254, 8a, 8h
|
||||
ADDI64 r254, r254, 16d
|
||||
UN
|
||||
0: LD r13, r254, 8a, 8h
|
||||
CP r1, r13
|
||||
LD r32, r254, 16a, 16h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
unknown ecall: 0
|
||||
code size: 132
|
||||
code size: 165
|
||||
ret: 0
|
||||
status: Err(Unreachable)
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,32 +1,36 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -88d
|
||||
ST r31, r254, 24a, 64h
|
||||
ADDI64 r254, r254, -72d
|
||||
ST r31, r254, 24a, 48h
|
||||
ADDI64 r32, r254, 0d
|
||||
LI64 r33, 1d
|
||||
ST r33, r254, 16a, 8h
|
||||
LI64 r34, 4d
|
||||
ST r34, r254, 0a, 8h
|
||||
ST r33, r254, 8a, 8h
|
||||
CP r1, r32
|
||||
JAL r31, r0, :opaque
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r35, r254, 8a, 8h
|
||||
LD r36, r254, 16a, 8h
|
||||
ADD64 r37, r36, r35
|
||||
LD r38, r254, 0a, 8h
|
||||
SUB64 r1, r38, r37
|
||||
LD r31, r254, 24a, 64h
|
||||
ADDI64 r254, r254, 88d
|
||||
LD r34, r254, 8a, 8h
|
||||
LD r35, r254, 16a, 8h
|
||||
ADD64 r34, r35, r34
|
||||
LD r32, r254, 0a, 8h
|
||||
SUB64 r32, r32, r34
|
||||
CP r1, r32
|
||||
LD r31, r254, 24a, 48h
|
||||
ADDI64 r254, r254, 72d
|
||||
JALA r0, r31, 0a
|
||||
opaque:
|
||||
ADDI64 r254, r254, -16d
|
||||
LI64 r5, 3d
|
||||
ADDI64 r4, r254, 0d
|
||||
ST r5, r254, 0a, 8h
|
||||
LI64 r8, 2d
|
||||
ST r8, r254, 8a, 8h
|
||||
LD r1, r4, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 16a, 16h
|
||||
LI64 r13, 3d
|
||||
ADDI64 r14, r254, 0d
|
||||
ST r13, r254, 0a, 8h
|
||||
LI64 r13, 2d
|
||||
ST r13, r254, 8a, 8h
|
||||
LD r1, r14, 0a, 16h
|
||||
LD r32, r254, 16a, 16h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 307
|
||||
code size: 339
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,20 +1,27 @@
|
|||
clobber:
|
||||
LI64 r5, 4d
|
||||
ST r5, r2, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r13, r2
|
||||
LI64 r14, 4d
|
||||
ST r14, r13, 0a, 8h
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 8a, 32h
|
||||
ADDI64 r2, r254, 0d
|
||||
LI64 r32, 2d
|
||||
ST r32, r254, 0a, 8h
|
||||
ADDI64 r32, r254, 0d
|
||||
LI64 r33, 2d
|
||||
ST r33, r254, 0a, 8h
|
||||
CP r2, r32
|
||||
JAL r31, r0, :clobber
|
||||
LD r33, r254, 0a, 8h
|
||||
LI64 r34, 4d
|
||||
SUB64 r1, r34, r33
|
||||
LD r32, r254, 0a, 8h
|
||||
LI64 r33, 4d
|
||||
SUB64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 8a, 32h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
code size: 169
|
||||
code size: 226
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,23 +1,31 @@
|
|||
drop:
|
||||
CP r0, r2
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 8a, 24h
|
||||
ADDI64 r2, r254, 0d
|
||||
LI64 r32, 1d
|
||||
ST r32, r254, 0a, 8h
|
||||
JAL r31, r0, :modify
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 8a, 40h
|
||||
ADDI64 r32, r254, 0d
|
||||
LI64 r33, 1d
|
||||
ST r33, r254, 0a, 8h
|
||||
CP r2, r32
|
||||
JAL r31, r0, :modify
|
||||
CP r2, r33
|
||||
JAL r31, r0, :drop
|
||||
LD r33, r254, 0a, 8h
|
||||
ADDI64 r1, r33, -2d
|
||||
LD r31, r254, 8a, 24h
|
||||
ADDI64 r254, r254, 32d
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r32, r32, -2d
|
||||
CP r1, r32
|
||||
LD r31, r254, 8a, 40h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
modify:
|
||||
LI64 r5, 2d
|
||||
ST r5, r2, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r13, r2
|
||||
LI64 r14, 2d
|
||||
ST r14, r13, 0a, 8h
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 187
|
||||
code size: 247
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,46 +1,64 @@
|
|||
create_back_buffer:
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 0a, 48h
|
||||
LI64 r32, 255d
|
||||
JGTS r2, r32, :0
|
||||
CP r32, r2
|
||||
LI64 r33, 255d
|
||||
JGTS r32, r33, :0
|
||||
CP r2, r32
|
||||
JAL r31, r0, :request_page
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: CP r33, r2
|
||||
LI8 r34, 255b
|
||||
0: LI8 r34, 255b
|
||||
CP r2, r34
|
||||
JAL r31, r0, :request_page
|
||||
CP r35, r33
|
||||
5: SUB64 r35, r35, r32
|
||||
JGTS r35, r0, :2
|
||||
CP r35, r1
|
||||
SUB64 r32, r32, r33
|
||||
5: JGTS r32, r0, :2
|
||||
CP r1, r35
|
||||
JMP :1
|
||||
2: CP r36, r1
|
||||
JLTS r35, r32, :3
|
||||
2: JLTS r32, r33, :3
|
||||
CP r2, r34
|
||||
JAL r31, r0, :request_page
|
||||
CP r0, r1
|
||||
JMP :4
|
||||
3: CP r2, r35
|
||||
3: CP r2, r32
|
||||
JAL r31, r0, :request_page
|
||||
4: CP r1, r36
|
||||
CP r0, r1
|
||||
4: SUB64 r32, r32, r33
|
||||
JMP :5
|
||||
1: LD r31, r254, 0a, 48h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
LI64 r2, 400d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI64 r32, 400d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :create_back_buffer
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
CP r0, r1
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
request_page:
|
||||
LRA r4, r0, :"\0\u{1}xxxxxxxx\0"
|
||||
ST r2, r4, 1a, 1h
|
||||
LI64 r5, 12d
|
||||
LI64 r3, 2d
|
||||
LI64 r2, 3d
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 0a, 40h
|
||||
CP r13, r2
|
||||
LRA r14, r0, :"\0\u{1}xxxxxxxx\0"
|
||||
ST r13, r14, 1a, 1h
|
||||
LI64 r15, 12d
|
||||
LI64 r16, 2d
|
||||
LI64 r17, 3d
|
||||
CP r2, r17
|
||||
CP r3, r16
|
||||
CP r4, r14
|
||||
CP r5, r15
|
||||
ECA
|
||||
CP r13, r1
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
code size: 317
|
||||
code size: 408
|
||||
ret: 42
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,27 +1,33 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -100d
|
||||
ST r31, r254, 4a, 96h
|
||||
ADDI64 r254, r254, -60d
|
||||
ST r31, r254, 4a, 56h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :random_color
|
||||
ST r1, r32, 0a, 4h
|
||||
LD r33, r254, 0a, 1h
|
||||
LD r34, r254, 1a, 1h
|
||||
LD r35, r254, 2a, 1h
|
||||
ANDI r36, r33, 255d
|
||||
ANDI r37, r34, 255d
|
||||
LD r38, r254, 3a, 1h
|
||||
ANDI r39, r35, 255d
|
||||
ADD64 r40, r37, r36
|
||||
ANDI r41, r38, 255d
|
||||
ADD64 r42, r40, r39
|
||||
ADD64 r1, r42, r41
|
||||
LD r31, r254, 4a, 96h
|
||||
ADDI64 r254, r254, 100d
|
||||
LD r34, r254, 0a, 1h
|
||||
LD r35, r254, 1a, 1h
|
||||
LD r36, r254, 2a, 1h
|
||||
ANDI r34, r34, 255d
|
||||
ANDI r35, r35, 255d
|
||||
LD r32, r254, 3a, 1h
|
||||
ANDI r33, r36, 255d
|
||||
ADD64 r34, r35, r34
|
||||
ANDI r32, r32, 255d
|
||||
ADD64 r33, r34, r33
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 4a, 56h
|
||||
ADDI64 r254, r254, 60d
|
||||
JALA r0, r31, 0a
|
||||
random_color:
|
||||
LRA r3, r0, :white
|
||||
LD r1, r3, 0a, 4h
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LRA r13, r0, :white
|
||||
LD r1, r13, 0a, 4h
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 241
|
||||
code size: 295
|
||||
ret: 1020
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,30 +1,35 @@
|
|||
get_format:
|
||||
ADDI64 r254, r254, -16d
|
||||
LI8 r7, 1b
|
||||
ADDI64 r6, r254, 0d
|
||||
LRA r5, r0, :BMP
|
||||
ST r7, r254, 0a, 1h
|
||||
LD r8, r5, 0a, 8h
|
||||
ST r8, r254, 8a, 8h
|
||||
LD r1, r6, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 16a, 24h
|
||||
LI8 r13, 1b
|
||||
ADDI64 r14, r254, 0d
|
||||
LRA r15, r0, :BMP
|
||||
ST r13, r254, 0a, 1h
|
||||
LD r13, r15, 0a, 8h
|
||||
ST r13, r254, 8a, 8h
|
||||
LD r1, r14, 0a, 16h
|
||||
LD r32, r254, 16a, 24h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 16a, 24h
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 16a, 32h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :get_format
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r33, r254, 0a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JNE r33, r0, :0
|
||||
LI64 r1, 1d
|
||||
LI64 r32, 1d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: LD r1, r254, 8a, 8h
|
||||
1: LD r31, r254, 16a, 24h
|
||||
ADDI64 r254, r254, 40d
|
||||
0: LD r32, r254, 8a, 8h
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
code size: 280
|
||||
code size: 315
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,31 +1,40 @@
|
|||
constructor:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 16a, 16h
|
||||
CP r2, r3
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 16a, 32h
|
||||
CP r32, r3
|
||||
CP r2, r32
|
||||
JAL r31, r0, :opaque
|
||||
ADDI64 r32, r254, 0d
|
||||
ST r1, r254, 0a, 8h
|
||||
ST r1, r254, 8a, 8h
|
||||
LD r1, r32, 0a, 16h
|
||||
LD r31, r254, 16a, 16h
|
||||
ADDI64 r254, r254, 32d
|
||||
CP r32, r1
|
||||
ADDI64 r33, r254, 0d
|
||||
ST r32, r254, 0a, 8h
|
||||
ST r32, r254, 8a, 8h
|
||||
LD r1, r33, 0a, 16h
|
||||
LD r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 16a, 16h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 16a, 24h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r3, r0
|
||||
CP r1, r32
|
||||
JAL r31, r0, :constructor
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r31, r254, 16a, 16h
|
||||
ADDI64 r254, r254, 32d
|
||||
LD r31, r254, 16a, 24h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
opaque:
|
||||
LRA r5, r0, :file
|
||||
ADD64 r7, r5, r2
|
||||
LD r9, r7, 0a, 1h
|
||||
ANDI r1, r9, 255d
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r32, r254, 0a, 16h
|
||||
CP r13, r2
|
||||
LRA r14, r0, :file
|
||||
ADD64 r13, r14, r13
|
||||
LD r13, r13, 0a, 1h
|
||||
ANDI r13, r13, 255d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
code size: 267
|
||||
code size: 330
|
||||
ret: 255
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
main:
|
||||
LI64 r1, 1d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r13, 1d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 29
|
||||
code size: 80
|
||||
ret: 1
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -4d
|
||||
LRA r4, r0, :white
|
||||
ADDI64 r5, r254, 0d
|
||||
BMC r4, r5, 4h
|
||||
LD r8, r254, 3a, 1h
|
||||
ANDI r1, r8, 255d
|
||||
ADDI64 r254, r254, 4d
|
||||
ADDI64 r254, r254, -20d
|
||||
ST r32, r254, 4a, 16h
|
||||
LRA r13, r0, :white
|
||||
ADDI64 r14, r254, 0d
|
||||
BMC r13, r14, 4h
|
||||
LD r13, r254, 3a, 1h
|
||||
ANDI r13, r13, 255d
|
||||
CP r1, r13
|
||||
LD r32, r254, 4a, 16h
|
||||
ADDI64 r254, r254, 20d
|
||||
JALA r0, r31, 0a
|
||||
code size: 92
|
||||
code size: 121
|
||||
ret: 255
|
||||
status: Ok(())
|
||||
|
|
|
@ -3,27 +3,38 @@ main:
|
|||
ST r31, r254, 4a, 32h
|
||||
LRA r32, r0, :white
|
||||
ADDI64 r33, r254, 0d
|
||||
LD r2, r32, 0a, 4h
|
||||
LD r32, r32, 0a, 4h
|
||||
CP r2, r32
|
||||
CP r1, r33
|
||||
JAL r31, r0, :u32_to_color
|
||||
ST r1, r33, 0a, 4h
|
||||
LD r34, r254, 0a, 1h
|
||||
ANDI r1, r34, 255d
|
||||
LD r32, r254, 0a, 1h
|
||||
ANDI r32, r32, 255d
|
||||
CP r1, r32
|
||||
LD r31, r254, 4a, 32h
|
||||
ADDI64 r254, r254, 36d
|
||||
JALA r0, r31, 0a
|
||||
u32_to_color:
|
||||
ADDI64 r254, r254, -20d
|
||||
ST r31, r254, 4a, 16h
|
||||
ADDI64 r254, r254, -36d
|
||||
ST r31, r254, 4a, 32h
|
||||
CP r32, r2
|
||||
CP r2, r32
|
||||
JAL r31, r0, :u32_to_u32
|
||||
ADDI64 r32, r254, 0d
|
||||
ST r1, r254, 0a, 4h
|
||||
LD r1, r32, 0a, 4h
|
||||
LD r31, r254, 4a, 16h
|
||||
ADDI64 r254, r254, 20d
|
||||
CP r32, r1
|
||||
ADDI64 r33, r254, 0d
|
||||
ST r32, r254, 0a, 4h
|
||||
LD r1, r33, 0a, 4h
|
||||
LD r31, r254, 4a, 32h
|
||||
ADDI64 r254, r254, 36d
|
||||
JALA r0, r31, 0a
|
||||
u32_to_u32:
|
||||
CP r1, r2
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r2
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 263
|
||||
code size: 332
|
||||
ret: 255
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r31, r254, 0a, 16h
|
||||
JAL r31, r0, :some_func
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
LD r31, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
some_func:
|
||||
JALA r0, r31, 0a
|
||||
|
|
|
@ -1,29 +1,38 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
LI64 r2, 100d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LI64 r32, 100d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :sqrt
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
sqrt:
|
||||
LI64 r9, 15d
|
||||
LI64 r10, 32768d
|
||||
CP r7, r0
|
||||
CP r1, r7
|
||||
3: JNE r10, r7, :0
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r32, r254, 0a, 48h
|
||||
CP r13, r2
|
||||
LI64 r16, 15d
|
||||
LI64 r15, 32768d
|
||||
CP r17, r0
|
||||
CP r14, r17
|
||||
3: JNE r15, r17, :0
|
||||
CP r1, r14
|
||||
JMP :1
|
||||
0: SLUI64 r6, r1, 1b
|
||||
ADDI64 r9, r9, -1d
|
||||
ADD64 r11, r6, r10
|
||||
SLU64 r11, r11, r9
|
||||
JLTU r2, r11, :2
|
||||
ADD64 r1, r10, r1
|
||||
SUB64 r2, r2, r11
|
||||
0: SLUI64 r18, r14, 1b
|
||||
ADDI64 r16, r16, -1d
|
||||
ADD64 r18, r18, r15
|
||||
SLU64 r18, r18, r16
|
||||
JLTU r13, r18, :2
|
||||
ADD64 r14, r15, r14
|
||||
SUB64 r13, r13, r18
|
||||
JMP :2
|
||||
2: SRUI64 r10, r10, 1b
|
||||
2: SRUI64 r15, r15, 1b
|
||||
JMP :3
|
||||
1: JALA r0, r31, 0a
|
||||
code size: 181
|
||||
1: LD r32, r254, 0a, 48h
|
||||
ADDI64 r254, r254, 48d
|
||||
JALA r0, r31, 0a
|
||||
code size: 244
|
||||
ret: 14
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,64 +1,82 @@
|
|||
do_stuff:
|
||||
CP r1, r2
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r2
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
just_read:
|
||||
CP r0, r2
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -96d
|
||||
ST r31, r254, 48a, 48h
|
||||
ADDI64 r254, r254, -88d
|
||||
ST r31, r254, 48a, 40h
|
||||
ADDI64 r32, r254, 16d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :optionala
|
||||
CP r2, r32
|
||||
LD r33, r254, 16a, 8h
|
||||
JNE r33, r0, :0
|
||||
LI64 r1, 10d
|
||||
LI64 r32, 10d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: ST r0, r254, 24a, 8h
|
||||
CP r2, r32
|
||||
JAL r31, r0, :just_read
|
||||
LD r2, r254, 24a, 8h
|
||||
LD r32, r254, 24a, 8h
|
||||
CP r2, r32
|
||||
JAL r31, r0, :do_stuff
|
||||
CP r34, r1
|
||||
ADDI64 r35, r254, 0d
|
||||
CP r32, r1
|
||||
ADDI64 r33, r254, 0d
|
||||
CP r1, r33
|
||||
JAL r31, r0, :optional
|
||||
ST r1, r35, 0a, 16h
|
||||
LD r36, r254, 0a, 1h
|
||||
ANDI r36, r36, 255d
|
||||
ST r1, r33, 0a, 16h
|
||||
LD r33, r254, 0a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
ANDI r0, r0, 255d
|
||||
JNE r36, r0, :2
|
||||
LI64 r1, 20d
|
||||
JNE r33, r0, :2
|
||||
LI64 r32, 20d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
2: LI64 r2, 100d
|
||||
2: LI64 r33, 100d
|
||||
CP r2, r33
|
||||
JAL r31, r0, :do_stuff
|
||||
ADD64 r1, r1, r34
|
||||
1: LD r31, r254, 48a, 48h
|
||||
ADDI64 r254, r254, 96d
|
||||
CP r33, r1
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 48a, 40h
|
||||
ADDI64 r254, r254, 88d
|
||||
JALA r0, r31, 0a
|
||||
optional:
|
||||
ADDI64 r254, r254, -16d
|
||||
LI8 r6, 1b
|
||||
ADDI64 r5, r254, 0d
|
||||
ST r6, r254, 0a, 1h
|
||||
LI64 r6, 10d
|
||||
ST r6, r254, 8a, 8h
|
||||
LD r1, r5, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 16a, 16h
|
||||
LI8 r13, 1b
|
||||
ADDI64 r14, r254, 0d
|
||||
ST r13, r254, 0a, 1h
|
||||
LI64 r13, 10d
|
||||
ST r13, r254, 8a, 8h
|
||||
LD r1, r14, 0a, 16h
|
||||
LD r32, r254, 16a, 16h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
optionala:
|
||||
ADDI64 r254, r254, -48d
|
||||
ADDI64 r7, r254, 8d
|
||||
ADDI64 r6, r254, 16d
|
||||
ST r7, r254, 16a, 8h
|
||||
LI64 r10, 1d
|
||||
ST r10, r254, 24a, 8h
|
||||
ADDI64 r2, r254, 0d
|
||||
ST r2, r254, 32a, 8h
|
||||
ADDI64 r254, r254, -80d
|
||||
ST r32, r254, 48a, 32h
|
||||
CP r17, r1
|
||||
ADDI64 r14, r254, 8d
|
||||
ADDI64 r15, r254, 16d
|
||||
ST r14, r254, 16a, 8h
|
||||
LI64 r16, 1d
|
||||
ST r16, r254, 24a, 8h
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r13, r254, 32a, 8h
|
||||
ST r0, r254, 0a, 8h
|
||||
ST r0, r254, 8a, 8h
|
||||
ST r0, r254, 40a, 8h
|
||||
BMC r6, r1, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
BMC r15, r17, 32h
|
||||
LD r32, r254, 48a, 32h
|
||||
ADDI64 r254, r254, 80d
|
||||
JALA r0, r31, 0a
|
||||
code size: 554
|
||||
code size: 684
|
||||
ret: 100
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,44 +1,48 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -40d
|
||||
LI64 r9, 1d
|
||||
LI64 r8, 4d
|
||||
CP r6, r0
|
||||
ADDI64 r7, r254, 0d
|
||||
CP r10, r6
|
||||
6: JNE r10, r8, :0
|
||||
LI64 r8, 2d
|
||||
ADDI64 r5, r254, 32d
|
||||
CP r10, r6
|
||||
4: LD r1, r254, 16a, 8h
|
||||
JNE r10, r9, :1
|
||||
ADDI64 r254, r254, -128d
|
||||
ST r32, r254, 40a, 88h
|
||||
LI64 r17, 1d
|
||||
LI64 r16, 4d
|
||||
CP r14, r0
|
||||
ADDI64 r18, r254, 0d
|
||||
CP r13, r14
|
||||
6: JNE r13, r16, :0
|
||||
LI64 r19, 2d
|
||||
ADDI64 r20, r254, 32d
|
||||
CP r13, r14
|
||||
4: LD r15, r254, 16a, 8h
|
||||
JNE r13, r17, :1
|
||||
CP r1, r15
|
||||
JMP :2
|
||||
1: MUL64 r2, r10, r8
|
||||
ADD64 r10, r10, r9
|
||||
SUB64 r11, r8, r10
|
||||
MUL64 r11, r11, r8
|
||||
CP r1, r6
|
||||
5: JNE r1, r8, :3
|
||||
1: MUL64 r21, r13, r19
|
||||
ADD64 r16, r13, r17
|
||||
SUB64 r13, r19, r16
|
||||
MUL64 r22, r13, r19
|
||||
CP r13, r14
|
||||
5: JNE r13, r19, :3
|
||||
CP r13, r16
|
||||
JMP :4
|
||||
3: ADD64 r12, r1, r9
|
||||
ADD64 r3, r2, r1
|
||||
ADD64 r4, r11, r1
|
||||
MULI64 r3, r3, 8d
|
||||
MULI64 r1, r4, 8d
|
||||
ADD64 r3, r7, r3
|
||||
ADD64 r1, r7, r1
|
||||
BMC r3, r5, 8h
|
||||
BMC r1, r3, 8h
|
||||
BMC r5, r1, 8h
|
||||
CP r1, r12
|
||||
3: ADD64 r15, r13, r17
|
||||
ADD64 r23, r21, r13
|
||||
ADD64 r13, r22, r13
|
||||
MULI64 r23, r23, 8d
|
||||
MULI64 r13, r13, 8d
|
||||
ADD64 r23, r18, r23
|
||||
ADD64 r13, r18, r13
|
||||
BMC r23, r20, 8h
|
||||
BMC r13, r23, 8h
|
||||
BMC r20, r13, 8h
|
||||
CP r13, r15
|
||||
JMP :5
|
||||
0: ADD64 r4, r10, r9
|
||||
MULI64 r2, r10, 8d
|
||||
ADD64 r5, r7, r2
|
||||
ST r10, r5, 0a, 8h
|
||||
CP r10, r4
|
||||
0: ADD64 r15, r13, r17
|
||||
MULI64 r19, r13, 8d
|
||||
ADD64 r19, r18, r19
|
||||
ST r13, r19, 0a, 8h
|
||||
CP r13, r15
|
||||
JMP :6
|
||||
2: ADDI64 r254, r254, 40d
|
||||
2: LD r32, r254, 40a, 88h
|
||||
ADDI64 r254, r254, 128d
|
||||
JALA r0, r31, 0a
|
||||
code size: 264
|
||||
code size: 296
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -4d
|
||||
LRA r3, r0, :MAGENTA
|
||||
ADDI64 r5, r254, 0d
|
||||
BMC r3, r5, 4h
|
||||
LD r8, r254, 2a, 1h
|
||||
ANDI r1, r8, 255d
|
||||
ADDI64 r254, r254, 4d
|
||||
ADDI64 r254, r254, -20d
|
||||
ST r32, r254, 4a, 16h
|
||||
LRA r13, r0, :MAGENTA
|
||||
ADDI64 r14, r254, 0d
|
||||
BMC r13, r14, 4h
|
||||
LD r13, r254, 2a, 1h
|
||||
ANDI r13, r13, 255d
|
||||
CP r1, r13
|
||||
LD r32, r254, 4a, 16h
|
||||
ADDI64 r254, r254, 20d
|
||||
JALA r0, r31, 0a
|
||||
code size: 92
|
||||
code size: 121
|
||||
ret: 205
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
main:
|
||||
LI64 r1, 10d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r13, 10d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 29
|
||||
code size: 80
|
||||
ret: 10
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,48 +1,57 @@
|
|||
fib:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 0a, 40h
|
||||
CP r32, r2
|
||||
LI64 r33, 2d
|
||||
JLTU r2, r33, :0
|
||||
CP r34, r32
|
||||
ADDI64 r2, r34, -1d
|
||||
JLTU r32, r33, :0
|
||||
ADDI64 r34, r32, -1d
|
||||
CP r2, r34
|
||||
JAL r31, r0, :fib
|
||||
CP r2, r32
|
||||
CP r34, r1
|
||||
SUB64 r2, r2, r33
|
||||
SUB64 r32, r32, r33
|
||||
CP r2, r32
|
||||
JAL r31, r0, :fib
|
||||
ADD64 r1, r1, r34
|
||||
CP r32, r1
|
||||
ADD64 r32, r32, r34
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: CP r1, r32
|
||||
1: LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
1: LD r31, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
fib_iter:
|
||||
LI64 r6, 1d
|
||||
CP r7, r0
|
||||
CP r1, r7
|
||||
CP r12, r6
|
||||
2: JNE r2, r7, :0
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r32, r254, 0a, 40h
|
||||
CP r13, r2
|
||||
LI64 r17, 1d
|
||||
CP r15, r0
|
||||
CP r16, r17
|
||||
CP r14, r15
|
||||
2: JNE r13, r15, :0
|
||||
CP r1, r14
|
||||
JMP :1
|
||||
0: ADD64 r3, r12, r1
|
||||
SUB64 r2, r2, r6
|
||||
CP r1, r12
|
||||
CP r12, r3
|
||||
0: ADD64 r14, r16, r14
|
||||
SUB64 r13, r13, r17
|
||||
SWA r14, r16
|
||||
JMP :2
|
||||
1: JALA r0, r31, 0a
|
||||
1: LD r32, r254, 0a, 40h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
LI64 r32, 10d
|
||||
CP r2, r32
|
||||
JAL r31, r0, :fib
|
||||
CP r2, r32
|
||||
CP r33, r1
|
||||
CP r2, r32
|
||||
JAL r31, r0, :fib_iter
|
||||
SUB64 r1, r33, r1
|
||||
LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
CP r32, r1
|
||||
SUB64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
code size: 290
|
||||
code size: 353
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,38 +1,44 @@
|
|||
foo:
|
||||
ADDI64 r254, r254, -16d
|
||||
LI64 r5, 3d
|
||||
ADDI64 r4, r254, 0d
|
||||
ST r5, r254, 0a, 8h
|
||||
LI32 r8, 2w
|
||||
ST r8, r254, 8a, 4h
|
||||
ST r8, r254, 12a, 4h
|
||||
LD r1, r4, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r32, r254, 16a, 16h
|
||||
LI64 r13, 3d
|
||||
ADDI64 r14, r254, 0d
|
||||
ST r13, r254, 0a, 8h
|
||||
LI32 r13, 2w
|
||||
ST r13, r254, 8a, 4h
|
||||
ST r13, r254, 12a, 4h
|
||||
LD r1, r14, 0a, 16h
|
||||
LD r32, r254, 16a, 16h
|
||||
ADDI64 r254, r254, 32d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -128d
|
||||
ST r31, r254, 48a, 80h
|
||||
ADDI64 r254, r254, -96d
|
||||
ST r31, r254, 48a, 48h
|
||||
ADDI64 r32, r254, 32d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :foo
|
||||
ST r1, r32, 0a, 16h
|
||||
ADDI64 r33, r254, 16d
|
||||
CP r1, r33
|
||||
JAL r31, r0, :foo
|
||||
ST r1, r33, 0a, 16h
|
||||
ADDI64 r34, r254, 0d
|
||||
CP r1, r34
|
||||
JAL r31, r0, :foo
|
||||
ST r1, r34, 0a, 16h
|
||||
LD r35, r254, 24a, 4h
|
||||
LD r36, r254, 12a, 4h
|
||||
ANDI r37, r35, 4294967295d
|
||||
LD r35, r254, 32a, 8h
|
||||
ANDI r38, r36, 4294967295d
|
||||
ADD64 r39, r35, r37
|
||||
ADD64 r40, r39, r38
|
||||
LI64 r34, 7d
|
||||
SUB64 r1, r34, r40
|
||||
LD r31, r254, 48a, 80h
|
||||
ADDI64 r254, r254, 128d
|
||||
LD r33, r254, 24a, 4h
|
||||
LD r34, r254, 12a, 4h
|
||||
ANDI r33, r33, 4294967295d
|
||||
LD r32, r254, 32a, 8h
|
||||
ANDI r34, r34, 4294967295d
|
||||
ADD64 r32, r32, r33
|
||||
ADD64 r32, r32, r34
|
||||
LI64 r33, 7d
|
||||
SUB64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 48a, 48h
|
||||
ADDI64 r254, r254, 96d
|
||||
JALA r0, r31, 0a
|
||||
code size: 355
|
||||
code size: 393
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
|
@ -2,34 +2,45 @@ main:
|
|||
ADDI64 r254, r254, -72d
|
||||
ST r31, r254, 32a, 40h
|
||||
LI64 r32, 4d
|
||||
ADDI64 r4, r254, 16d
|
||||
ADDI64 r33, r254, 16d
|
||||
ST r32, r254, 16a, 8h
|
||||
LI64 r33, 3d
|
||||
ST r33, r254, 24a, 8h
|
||||
LI64 r32, 3d
|
||||
ST r32, r254, 24a, 8h
|
||||
ADDI64 r34, r254, 0d
|
||||
CP r3, r4
|
||||
LD r3, r3, 0a, 16h
|
||||
CP r1, r34
|
||||
LD r3, r33, 0a, 16h
|
||||
JAL r31, r0, :odher_pass
|
||||
ST r1, r34, 0a, 16h
|
||||
LD r35, r254, 8a, 8h
|
||||
JNE r35, r33, :0
|
||||
LD r33, r254, 8a, 8h
|
||||
JNE r33, r32, :0
|
||||
CP r2, r34
|
||||
JAL r31, r0, :pass
|
||||
CP r32, r1
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: CP r1, r0
|
||||
1: LD r31, r254, 32a, 40h
|
||||
ADDI64 r254, r254, 72d
|
||||
JALA r0, r31, 0a
|
||||
odher_pass:
|
||||
ADDI64 r254, r254, -16d
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r32, r254, 16a, 8h
|
||||
ST r3, r254, 0a, 16h
|
||||
ADDI64 r3, r254, 0d
|
||||
LD r1, r3, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
CP r13, r3
|
||||
LD r1, r13, 0a, 16h
|
||||
LD r32, r254, 16a, 8h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
pass:
|
||||
LD r1, r2, 0a, 8h
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
CP r13, r2
|
||||
LD r13, r13, 0a, 8h
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
code size: 301
|
||||
code size: 390
|
||||
ret: 4
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,30 +1,33 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -10240d
|
||||
LI64 r9, 1d
|
||||
LI8 r10, 64b
|
||||
LI64 r8, 1024d
|
||||
CP r11, r0
|
||||
ADDI64 r7, r254, 0d
|
||||
4: JLTU r11, r8, :0
|
||||
LI64 r8, 10d
|
||||
CP r10, r9
|
||||
3: LD r1, r254, 2048a, 1h
|
||||
JLTU r10, r8, :1
|
||||
ANDI r1, r1, 255d
|
||||
ADDI64 r254, r254, -10288d
|
||||
ST r32, r254, 10240a, 48h
|
||||
LI64 r14, 1d
|
||||
LI8 r16, 64b
|
||||
LI64 r17, 1024d
|
||||
CP r13, r0
|
||||
ADDI64 r18, r254, 0d
|
||||
4: JLTU r13, r17, :0
|
||||
LI64 r16, 10d
|
||||
CP r13, r14
|
||||
3: LD r17, r254, 2048a, 1h
|
||||
JLTU r13, r16, :1
|
||||
ANDI r13, r17, 255d
|
||||
CP r1, r13
|
||||
JMP :2
|
||||
1: ADD64 r4, r10, r9
|
||||
MULI64 r3, r10, 1024d
|
||||
ADD64 r5, r7, r3
|
||||
BMC r7, r5, 1024h
|
||||
CP r10, r4
|
||||
1: ADD64 r15, r13, r14
|
||||
MULI64 r13, r13, 1024d
|
||||
ADD64 r13, r18, r13
|
||||
BMC r18, r13, 1024h
|
||||
CP r13, r15
|
||||
JMP :3
|
||||
0: ADD64 r4, r11, r9
|
||||
ADD64 r2, r7, r11
|
||||
ST r10, r2, 0a, 1h
|
||||
CP r11, r4
|
||||
0: ADD64 r15, r13, r14
|
||||
ADD64 r13, r18, r13
|
||||
ST r16, r13, 0a, 1h
|
||||
CP r13, r15
|
||||
JMP :4
|
||||
2: ADDI64 r254, r254, 10240d
|
||||
2: LD r32, r254, 10240a, 48h
|
||||
ADDI64 r254, r254, 10288d
|
||||
JALA r0, r31, 0a
|
||||
code size: 191
|
||||
code size: 220
|
||||
ret: 64
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,35 +1,42 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -72d
|
||||
ST r31, r254, 0a, 72h
|
||||
CP r32, r0
|
||||
LI64 r33, 65536d
|
||||
LI8 r34, 1b
|
||||
CP r35, r0
|
||||
CP r36, r35
|
||||
CP r34, r0
|
||||
LI64 r37, 65536d
|
||||
LI8 r35, 1b
|
||||
CP r36, r0
|
||||
CP r32, r36
|
||||
7: JAL r31, r0, :opaque
|
||||
JLTU r36, r1, :0
|
||||
CP r33, r1
|
||||
JLTU r32, r33, :0
|
||||
JMP :1
|
||||
0: CP r37, r35
|
||||
0: CP r33, r36
|
||||
8: JAL r31, r0, :opaque
|
||||
JLTU r37, r1, :2
|
||||
CP r38, r34
|
||||
CP r38, r1
|
||||
JLTU r33, r38, :2
|
||||
CP r33, r35
|
||||
JMP :3
|
||||
2: JNE r37, r33, :4
|
||||
CP r38, r32
|
||||
3: ANDI r39, r38, 255d
|
||||
JNE r39, r35, :5
|
||||
2: JNE r33, r37, :4
|
||||
CP r33, r34
|
||||
3: ANDI r33, r33, 255d
|
||||
JNE r33, r36, :5
|
||||
JMP :6
|
||||
5: ADDI64 r36, r36, 1d
|
||||
5: ADDI64 r32, r32, 1d
|
||||
6: JMP :7
|
||||
4: ADDI64 r37, r37, 1d
|
||||
4: ADDI64 r33, r33, 1d
|
||||
JMP :8
|
||||
1: LD r31, r254, 0a, 72h
|
||||
ADDI64 r254, r254, 72d
|
||||
JALA r0, r31, 0a
|
||||
opaque:
|
||||
LI64 r1, 2147483648d
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r32, r254, 0a, 8h
|
||||
LI64 r13, 2147483648d
|
||||
CP r1, r13
|
||||
LD r32, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
JALA r0, r31, 0a
|
||||
timed out
|
||||
code size: 211
|
||||
code size: 268
|
||||
ret: 2147483648
|
||||
status: Ok(())
|
||||
|
|
|
@ -2,21 +2,26 @@ main:
|
|||
ADDI64 r254, r254, -56d
|
||||
ST r31, r254, 16a, 40h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r3, r0
|
||||
CP r4, r0
|
||||
CP r3, r4
|
||||
CP r1, r32
|
||||
JAL r31, r0, :maina
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r33, r254, 12a, 1h
|
||||
LD r34, r254, 3a, 1h
|
||||
SUB8 r35, r34, r33
|
||||
ANDI r1, r35, 255d
|
||||
LD r34, r254, 12a, 1h
|
||||
LD r32, r254, 3a, 1h
|
||||
SUB8 r32, r32, r34
|
||||
ANDI r32, r32, 255d
|
||||
CP r1, r32
|
||||
LD r31, r254, 16a, 40h
|
||||
ADDI64 r254, r254, 56d
|
||||
JALA r0, r31, 0a
|
||||
maina:
|
||||
ADDI64 r254, r254, -60d
|
||||
ST r31, r254, 20a, 40h
|
||||
ADDI64 r254, r254, -68d
|
||||
ST r31, r254, 20a, 48h
|
||||
CP r0, r3
|
||||
CP r0, r4
|
||||
ADDI64 r32, r254, 16d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :small_struct
|
||||
ST r1, r32, 0a, 4h
|
||||
ADDI64 r33, r254, 0d
|
||||
|
@ -39,17 +44,19 @@ maina:
|
|||
ST r0, r254, 14a, 1h
|
||||
ST r0, r254, 15a, 1h
|
||||
LD r1, r33, 0a, 16h
|
||||
LD r31, r254, 20a, 40h
|
||||
ADDI64 r254, r254, 60d
|
||||
LD r31, r254, 20a, 48h
|
||||
ADDI64 r254, r254, 68d
|
||||
JALA r0, r31, 0a
|
||||
small_struct:
|
||||
ADDI64 r254, r254, -4d
|
||||
ADDI64 r3, r254, 0d
|
||||
ADDI64 r254, r254, -12d
|
||||
ST r32, r254, 4a, 8h
|
||||
ADDI64 r13, r254, 0d
|
||||
ST r0, r254, 0a, 2h
|
||||
ST r0, r254, 2a, 2h
|
||||
LD r1, r3, 0a, 4h
|
||||
ADDI64 r254, r254, 4d
|
||||
LD r1, r13, 0a, 4h
|
||||
LD r32, r254, 4a, 8h
|
||||
ADDI64 r254, r254, 12d
|
||||
JALA r0, r31, 0a
|
||||
code size: 556
|
||||
code size: 597
|
||||
ret: 2
|
||||
status: Ok(())
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
inl:
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -8d
|
||||
ST r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, -16d
|
||||
ST r31, r254, 0a, 16h
|
||||
JAL r31, r0, :outl
|
||||
JAL r31, r0, :inl
|
||||
LD r31, r254, 0a, 8h
|
||||
ADDI64 r254, r254, 8d
|
||||
LD r31, r254, 0a, 16h
|
||||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
outl:
|
||||
JALA r0, r31, 0a
|
||||
|
|
|
@ -1,27 +1,29 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -1d
|
||||
LI64 r6, 255d
|
||||
LI8 r1, 1b
|
||||
ADDI64 r254, r254, -41d
|
||||
ST r32, r254, 1a, 40h
|
||||
LI64 r14, 255d
|
||||
LI8 r13, 1b
|
||||
ST r0, r254, 0a, 1h
|
||||
2: LD r8, r254, 0a, 1h
|
||||
ANDI r10, r8, 255d
|
||||
CMPU r2, r10, r6
|
||||
CMPUI r2, r2, 0d
|
||||
NOT r2, r2
|
||||
CMPU r3, r10, r0
|
||||
CMPUI r3, r3, 0d
|
||||
NOT r3, r3
|
||||
OR r5, r3, r2
|
||||
ANDI r5, r5, 255d
|
||||
JNE r5, r0, :0
|
||||
2: LD r15, r254, 0a, 1h
|
||||
ANDI r16, r15, 255d
|
||||
CMPU r17, r16, r14
|
||||
CMPUI r17, r17, 0d
|
||||
NOT r17, r17
|
||||
CMPU r16, r16, r0
|
||||
CMPUI r16, r16, 0d
|
||||
NOT r16, r16
|
||||
OR r16, r16, r17
|
||||
ANDI r16, r16, 255d
|
||||
JNE r16, r0, :0
|
||||
JMP :1
|
||||
0: SUB8 r1, r0, r1
|
||||
1: ADD8 r2, r8, r1
|
||||
ST r2, r254, 0a, 1h
|
||||
0: SUB8 r13, r0, r13
|
||||
1: ADD8 r15, r15, r13
|
||||
ST r15, r254, 0a, 1h
|
||||
JMP :2
|
||||
ADDI64 r254, r254, 1d
|
||||
LD r32, r254, 1a, 40h
|
||||
ADDI64 r254, r254, 41d
|
||||
JALA r0, r31, 0a
|
||||
timed out
|
||||
code size: 178
|
||||
ret: 1
|
||||
code size: 204
|
||||
ret: 0
|
||||
status: Ok(())
|
||||
|
|
Loading…
Reference in a new issue