forked from AbleOS/holey-bytes
making the Call node less special
return value is now a separate node pinned to the call Signed-off-by: Jakub Doka <jakub.doka2@gmail.com>
This commit is contained in:
parent
f05c61a99e
commit
a8aba7e7c2
|
@ -434,12 +434,15 @@ impl HbvmBackend {
|
|||
self.emit(instrs::st(r, atr(*node.inputs.last().unwrap()), 0, size));
|
||||
}
|
||||
|
||||
match ret {
|
||||
Some(PLoc::WideReg(..)) => {}
|
||||
Some(PLoc::Reg(..)) if node.ty.loc(tys) == Loc::Stack => {}
|
||||
Some(PLoc::Reg(r, ..)) => self.emit_cp(atr(nid), r),
|
||||
None | Some(PLoc::Ref(..)) => {}
|
||||
}
|
||||
//match ret {
|
||||
// Some(PLoc::WideReg(..)) => {}
|
||||
// Some(PLoc::Reg(..)) if node.ty.loc(tys) == Loc::Stack => {}
|
||||
// Some(PLoc::Reg(r, ..)) => self.emit_cp(atr(nid), r),
|
||||
// None | Some(PLoc::Ref(..)) => {}
|
||||
//}
|
||||
}
|
||||
Kind::RetVal => {
|
||||
self.emit_cp(atr(nid), reg::RET);
|
||||
}
|
||||
Kind::Global { global } => {
|
||||
let reloc = Reloc::new(self.code.len(), 3, 4);
|
||||
|
@ -696,6 +699,7 @@ impl<'a> FunctionBuilder<'a> {
|
|||
| Kind::Global { .. }
|
||||
| Kind::Load { .. }
|
||||
| Kind::Stre
|
||||
| Kind::RetVal
|
||||
| Kind::Stck => self.add_instr(nid),
|
||||
Kind::End | Kind::Phi | Kind::Arg | Kind::Mem | Kind::Loops | Kind::Join => {}
|
||||
Kind::Assert { .. } => unreachable!(),
|
||||
|
|
|
@ -169,12 +169,8 @@ impl Nodes {
|
|||
let mut deepest = self[node].inputs[0];
|
||||
for &inp in self[node].inputs[1..].iter() {
|
||||
if self.idepth(inp, Some(scheds)) > self.idepth(deepest, Some(scheds)) {
|
||||
if self[inp].kind.is_call() {
|
||||
deepest = inp;
|
||||
} else {
|
||||
debug_assert!(!self.is_cfg(inp));
|
||||
deepest = self.idom(inp, Some(scheds));
|
||||
}
|
||||
debug_assert!(!self.is_cfg(inp));
|
||||
deepest = self.idom(inp, Some(scheds));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -199,8 +195,8 @@ impl Nodes {
|
|||
|
||||
for &node in rpo.iter().rev() {
|
||||
self.loop_depth(node, Some(scheds));
|
||||
for i in 0..self[node].inputs.len() {
|
||||
self.push_up_impl(self[node].inputs[i], visited, scheds);
|
||||
for &i in self[node].inputs.iter() {
|
||||
self.push_up_impl(i, visited, scheds);
|
||||
}
|
||||
|
||||
if matches!(self[node].kind, Kind::Loop | Kind::Region) {
|
||||
|
@ -217,13 +213,13 @@ impl Nodes {
|
|||
self.iter()
|
||||
.map(|(n, _)| n)
|
||||
.filter(|&n| !visited.get(n)
|
||||
&& !matches!(self[n].kind, Kind::Arg | Kind::Mem | Kind::Loops))
|
||||
&& !matches!(self[n].kind, Kind::Arg | Kind::Mem | Kind::Loops | Kind::RetVal))
|
||||
.collect::<Vec<_>>(),
|
||||
vec![],
|
||||
"{:?}",
|
||||
self.iter()
|
||||
.filter(|&(n, nod)| !visited.get(n)
|
||||
&& !matches!(nod.kind, Kind::Arg | Kind::Mem | Kind::Loops))
|
||||
&& !matches!(nod.kind, Kind::Arg | Kind::Mem | Kind::Loops | Kind::RetVal))
|
||||
.collect::<Vec<_>>()
|
||||
);
|
||||
|
||||
|
@ -288,6 +284,7 @@ impl Nodes {
|
|||
|
||||
let cfg_idx = outputs.iter().position(|&n| self.is_cfg(n)).unwrap();
|
||||
outputs.swap(cfg_idx, 0);
|
||||
|
||||
for &o in outputs.iter() {
|
||||
if (!self.is_cfg(o)
|
||||
&& self[o].outputs.iter().any(|&oi| {
|
||||
|
@ -1566,6 +1563,7 @@ impl Nodes {
|
|||
K::Start => {}
|
||||
_ if self.is_cfg(target) && self.idom(target, None) == NEVER => panic!(),
|
||||
K::Entry
|
||||
| K::RetVal
|
||||
| K::Mem
|
||||
| K::Loops
|
||||
| K::End
|
||||
|
@ -1728,6 +1726,7 @@ impl Nodes {
|
|||
Kind::Mem => write!(out, " mem: "),
|
||||
Kind::Loops => write!(out, "loops: "),
|
||||
Kind::Join => write!(out, "join: "),
|
||||
Kind::RetVal => write!(out, "rval: "),
|
||||
}?;
|
||||
|
||||
if self[node].kind != Kind::Loop && self[node].kind != Kind::Region {
|
||||
|
@ -2051,8 +2050,7 @@ impl Node {
|
|||
}
|
||||
|
||||
pub fn has_no_value(&self) -> bool {
|
||||
(self.kind.is_cfg() && (!self.kind.is_call() || self.ty == ty::Id::VOID))
|
||||
|| matches!(self.kind, Kind::Stre)
|
||||
self.kind.is_cfg() || matches!(self.kind, Kind::Stre)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2087,6 +2085,12 @@ pub enum Kind {
|
|||
Return {
|
||||
file: ty::Module,
|
||||
},
|
||||
// [ctrl, ...args]
|
||||
Call {
|
||||
unreachable: bool,
|
||||
func: ty::Func,
|
||||
args: ty::Tuple,
|
||||
},
|
||||
// [ctrl]
|
||||
Die,
|
||||
// [ctrl]
|
||||
|
@ -2108,12 +2112,7 @@ pub enum Kind {
|
|||
Global {
|
||||
global: ty::Global,
|
||||
},
|
||||
// [ctrl, ...args]
|
||||
Call {
|
||||
unreachable: bool,
|
||||
func: ty::Func,
|
||||
args: ty::Tuple,
|
||||
},
|
||||
RetVal,
|
||||
// [ctrl, cond, value]
|
||||
Assert {
|
||||
kind: AssertKind,
|
||||
|
@ -2139,7 +2138,9 @@ impl Kind {
|
|||
}
|
||||
|
||||
fn is_pinned(&self) -> bool {
|
||||
self.is_cfg() || self.is_at_start() || matches!(self, Self::Phi | Kind::Assert { .. })
|
||||
self.is_cfg()
|
||||
|| self.is_at_start()
|
||||
|| matches!(self, Self::Phi | Self::Assert { .. } | Self::RetVal)
|
||||
}
|
||||
|
||||
fn is_at_start(&self) -> bool {
|
||||
|
|
|
@ -1520,7 +1520,14 @@ impl<'a> Codegen<'a> {
|
|||
None
|
||||
}
|
||||
Expr::Directive { pos, name: "eca", args } => {
|
||||
inference!(ty, ctx, self, pos, "return type", "@as(<return_ty>, @eca(<expr>...))");
|
||||
inference!(
|
||||
ret_ty,
|
||||
ctx,
|
||||
self,
|
||||
pos,
|
||||
"return type",
|
||||
"@as(<return_ty>, @eca(<expr>...))"
|
||||
);
|
||||
|
||||
let mut inps = Vc::from([NEVER]);
|
||||
let arg_base = self.tys.tmp.args.len();
|
||||
|
@ -1542,19 +1549,19 @@ impl<'a> Codegen<'a> {
|
|||
|
||||
self.append_clobbers(&mut inps, &mut clobbered_aliases);
|
||||
|
||||
let alt_value = match ty.loc(self.tys) {
|
||||
let alt_value = match ret_ty.loc(self.tys) {
|
||||
Loc::Reg => None,
|
||||
Loc::Stack => {
|
||||
let stck = self.new_stack(pos, ty);
|
||||
let stck = self.new_stack(pos, ret_ty);
|
||||
inps.push(stck);
|
||||
Some(Value::ptr(stck).ty(ty))
|
||||
Some(Value::ptr(stck).ty(ret_ty))
|
||||
}
|
||||
};
|
||||
|
||||
inps[0] = self.ci.ctrl.get();
|
||||
self.ci.ctrl.set(
|
||||
self.ci.nodes.new_node_nop(
|
||||
ty,
|
||||
ret_ty,
|
||||
Kind::Call { func: ty::Func::ECA, args, unreachable: false },
|
||||
inps,
|
||||
),
|
||||
|
@ -1563,7 +1570,11 @@ impl<'a> Codegen<'a> {
|
|||
|
||||
self.add_clobber_stores(clobbered_aliases);
|
||||
|
||||
alt_value.or(Some(Value::new(self.ci.ctrl.get()).ty(ty)))
|
||||
Some(alt_value.unwrap_or_else(|| {
|
||||
let ret =
|
||||
self.ci.nodes.new_node_nop(ret_ty, Kind::RetVal, [self.ci.ctrl.get()]);
|
||||
Value::new(ret).ty(ret_ty)
|
||||
}))
|
||||
}
|
||||
Expr::Call { func, args, .. } => self.gen_call(func, args, false),
|
||||
Expr::Directive { name: "inline", args: [func, args @ ..], .. } => {
|
||||
|
@ -2713,7 +2724,10 @@ impl<'a> Codegen<'a> {
|
|||
return None;
|
||||
}
|
||||
|
||||
alt_value.or(Some(Value::new(self.ci.ctrl.get()).ty(sig.ret)))
|
||||
Some(alt_value.unwrap_or_else(|| {
|
||||
let ret = self.ci.nodes.new_node_nop(sig.ret, Kind::RetVal, [self.ci.ctrl.get()]);
|
||||
Value::new(ret).ty(sig.ret)
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ main:
|
|||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
JAL r31, r0, :cond
|
||||
CP r33, r1
|
||||
CP r32, r0
|
||||
CP r33, r1
|
||||
JNE r33, r32, :0
|
||||
JMP :1
|
||||
0: LI64 r32, 2d
|
||||
|
|
|
@ -37,41 +37,41 @@ main:
|
|||
ST r31, r254, 0a, 40h
|
||||
CP r2, r0
|
||||
JAL r31, r0, :multiple_breaks
|
||||
CP r32, r1
|
||||
LI64 r33, 3d
|
||||
JEQ r32, r33, :0
|
||||
LI64 r32, 3d
|
||||
CP r33, r1
|
||||
JEQ r33, r32, :0
|
||||
LI64 r32, 1d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
0: LI64 r32, 4d
|
||||
CP r2, r32
|
||||
0: LI64 r33, 4d
|
||||
CP r2, r33
|
||||
JAL r31, r0, :multiple_breaks
|
||||
CP r34, r1
|
||||
LI64 r35, 10d
|
||||
JEQ r34, r35, :2
|
||||
LI64 r34, 10d
|
||||
CP r35, r1
|
||||
JEQ r35, r34, :2
|
||||
LI64 r32, 2d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
2: CP r2, r0
|
||||
JAL r31, r0, :state_change_in_break
|
||||
CP r34, r1
|
||||
JEQ r34, r0, :3
|
||||
CP r1, r33
|
||||
JMP :1
|
||||
3: CP r2, r32
|
||||
JAL r31, r0, :state_change_in_break
|
||||
CP r34, r1
|
||||
JEQ r34, r35, :4
|
||||
CP r35, r1
|
||||
JEQ r35, r0, :3
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
4: CP r2, r35
|
||||
3: CP r2, r33
|
||||
JAL r31, r0, :state_change_in_break
|
||||
CP r35, r1
|
||||
JEQ r35, r34, :4
|
||||
CP r1, r33
|
||||
JMP :1
|
||||
4: CP r2, r34
|
||||
JAL r31, r0, :continue_and_state_change
|
||||
CP r32, r1
|
||||
JEQ r32, r35, :5
|
||||
CP r33, r1
|
||||
JEQ r33, r34, :5
|
||||
LI64 r32, 5d
|
||||
CP r1, r32
|
||||
JMP :1
|
||||
5: CP r2, r33
|
||||
5: CP r2, r32
|
||||
JAL r31, r0, :continue_and_state_change
|
||||
CP r32, r1
|
||||
JEQ r32, r0, :6
|
||||
|
|
|
@ -42,10 +42,11 @@ free:
|
|||
CP r4, r14
|
||||
CP r5, r15
|
||||
ECA
|
||||
CP r13, r1
|
||||
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, 24d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :new
|
||||
|
@ -60,20 +61,19 @@ main:
|
|||
CP r2, r33
|
||||
CP r3, r34
|
||||
JAL r31, r0, :push
|
||||
CP r34, r1
|
||||
LD r35, r254, 0a, 8h
|
||||
LD r35, r35, 0a, 1h
|
||||
LD r36, r254, 24a, 8h
|
||||
LD r34, r36, 0a, 8h
|
||||
LD r34, r254, 0a, 8h
|
||||
LD r34, r34, 0a, 1h
|
||||
LD r35, r254, 24a, 8h
|
||||
LD r35, r35, 0a, 8h
|
||||
CP r2, r33
|
||||
JAL r31, r0, :deinit
|
||||
CP r2, r32
|
||||
JAL r31, r0, :deinit
|
||||
ANDI r32, r35, 255d
|
||||
ADD64 r32, r34, r32
|
||||
ANDI r32, r34, 255d
|
||||
ADD64 r32, r35, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 48a, 48h
|
||||
ADDI64 r254, r254, 96d
|
||||
LD r31, r254, 48a, 40h
|
||||
ADDI64 r254, r254, 88d
|
||||
JALA r0, r31, 0a
|
||||
malloc:
|
||||
CP r13, r2
|
||||
|
@ -125,8 +125,8 @@ push:
|
|||
2: CP r2, r32
|
||||
CP r3, r37
|
||||
JAL r31, r0, :malloc
|
||||
CP r35, r1
|
||||
ST r32, r38, 16a, 8h
|
||||
CP r35, r1
|
||||
JNE r35, r0, :3
|
||||
CP r1, r0
|
||||
JMP :4
|
||||
|
@ -179,8 +179,8 @@ push:
|
|||
CP r2, r34
|
||||
CP r3, r40
|
||||
JAL r31, r0, :malloc
|
||||
CP r35, r1
|
||||
ST r32, r38, 16a, 8h
|
||||
CP r35, r1
|
||||
JNE r35, r0, :3
|
||||
CP r1, r0
|
||||
JMP :4
|
||||
|
|
|
@ -2,8 +2,8 @@ inb:
|
|||
CP r1, r0
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -32d
|
||||
ST r31, r254, 0a, 32h
|
||||
ADDI64 r254, r254, -24d
|
||||
ST r31, r254, 0a, 24h
|
||||
LRA r32, r0, :ports
|
||||
LD r33, r32, 0a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
|
@ -11,12 +11,12 @@ main:
|
|||
JMP :1
|
||||
0: JAL r31, r0, :inb
|
||||
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
|
||||
CMPU r33, r33, r0
|
||||
CMPUI r33, r33, 0d
|
||||
NOT r33, r33
|
||||
ST r33, r32, 0a, 1h
|
||||
1: LD r31, r254, 0a, 24h
|
||||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
code size: 164
|
||||
ret: 0
|
||||
|
|
|
@ -6,9 +6,9 @@ integer_range:
|
|||
CP r2, r16
|
||||
CP r3, r15
|
||||
ECA
|
||||
CP r15, r1
|
||||
SUB64 r14, r14, r13
|
||||
ADDI64 r14, r14, 1d
|
||||
CP r15, r1
|
||||
DIRU64 r0, r14, r15, r14
|
||||
ADD64 r13, r14, r13
|
||||
CP r1, r13
|
||||
|
|
|
@ -10,26 +10,26 @@ decide:
|
|||
ADDI64 r254, r254, 24d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -120d
|
||||
ST r31, r254, 72a, 48h
|
||||
ADDI64 r254, r254, -104d
|
||||
ST r31, r254, 72a, 32h
|
||||
ADDI64 r32, r254, 48d
|
||||
CP r1, r32
|
||||
CP r2, r0
|
||||
JAL r31, r0, :decide
|
||||
ADDI64 r34, r254, 24d
|
||||
BMC r32, r34, 24h
|
||||
LI64 r35, 1d
|
||||
CP r1, r34
|
||||
CP r2, r35
|
||||
ADDI64 r33, r254, 24d
|
||||
BMC r32, r33, 24h
|
||||
LI64 r34, 1d
|
||||
CP r1, r33
|
||||
CP r2, r34
|
||||
JAL r31, r0, :decide
|
||||
ADDI64 r36, r254, 0d
|
||||
BMC r32, r36, 24h
|
||||
ADDI64 r34, r254, 0d
|
||||
BMC r32, r34, 24h
|
||||
LD r32, r254, 24a, 8h
|
||||
LD r33, r254, 0a, 8h
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 72a, 48h
|
||||
ADDI64 r254, r254, 120d
|
||||
LD r31, r254, 72a, 32h
|
||||
ADDI64 r254, r254, 104d
|
||||
JALA r0, r31, 0a
|
||||
code size: 273
|
||||
ret: 1
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -66d
|
||||
ST r31, r254, 26a, 40h
|
||||
ADDI64 r254, r254, -58d
|
||||
ST r31, r254, 26a, 32h
|
||||
JAL r31, r0, :returner_fn
|
||||
CP r32, r1
|
||||
ADDI64 r33, r254, 2d
|
||||
|
@ -25,8 +25,8 @@ main:
|
|||
JMP :1
|
||||
0: LI64 r32, 1d
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 26a, 40h
|
||||
ADDI64 r254, r254, 66d
|
||||
1: LD r31, r254, 26a, 32h
|
||||
ADDI64 r254, r254, 58d
|
||||
JALA r0, r31, 0a
|
||||
returner_bn:
|
||||
ADDI64 r254, r254, -24d
|
||||
|
|
|
@ -6,9 +6,9 @@ main:
|
|||
ADDI64 r254, r254, -128d
|
||||
ST r31, r254, 80a, 48h
|
||||
JAL r31, r0, :decide
|
||||
CP r32, r1
|
||||
CP r33, r0
|
||||
ADDI64 r34, r254, 72d
|
||||
CP r32, r1
|
||||
ANDI r32, r32, 255d
|
||||
JNE r32, r0, :0
|
||||
CP r32, r33
|
||||
|
@ -37,8 +37,8 @@ main:
|
|||
CP r1, r32
|
||||
JMP :3
|
||||
6: JAL r31, r0, :decide
|
||||
CP r32, r1
|
||||
CP r33, r0
|
||||
CP r32, r1
|
||||
ANDI r32, r32, 255d
|
||||
JNE r32, r0, :7
|
||||
CP r32, r33
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -64d
|
||||
ST r31, r254, 24a, 40h
|
||||
ADDI64 r254, r254, -56d
|
||||
ST r31, r254, 24a, 32h
|
||||
ADDI64 r32, r254, 0d
|
||||
LI64 r33, 1d
|
||||
ST r33, r254, 16a, 8h
|
||||
|
@ -9,14 +9,14 @@ main:
|
|||
ST r33, r254, 8a, 8h
|
||||
JAL r31, r0, :opaque
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r34, r254, 8a, 8h
|
||||
LD r35, r254, 16a, 8h
|
||||
ADD64 r34, r35, r34
|
||||
LD r33, r254, 8a, 8h
|
||||
LD r34, r254, 16a, 8h
|
||||
ADD64 r33, r34, r33
|
||||
LD r32, r254, 0a, 8h
|
||||
SUB64 r32, r32, r34
|
||||
SUB64 r32, r32, r33
|
||||
CP r1, r32
|
||||
LD r31, r254, 24a, 40h
|
||||
ADDI64 r254, r254, 64d
|
||||
LD r31, r254, 24a, 32h
|
||||
ADDI64 r254, r254, 56d
|
||||
JALA r0, r31, 0a
|
||||
opaque:
|
||||
ADDI64 r254, r254, -16d
|
||||
|
|
|
@ -12,8 +12,8 @@ create_back_buffer:
|
|||
0: LI8 r34, 255b
|
||||
CP r2, r34
|
||||
JAL r31, r0, :request_page
|
||||
CP r35, r1
|
||||
SUB64 r32, r32, r33
|
||||
CP r35, r1
|
||||
5: JGTS r32, r0, :2
|
||||
CP r1, r35
|
||||
JMP :1
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -52d
|
||||
ST r31, r254, 4a, 48h
|
||||
ADDI64 r254, r254, -44d
|
||||
ST r31, r254, 4a, 40h
|
||||
ADDI64 r32, r254, 0d
|
||||
JAL r31, r0, :random_color
|
||||
ST r1, r32, 0a, 4h
|
||||
LD r34, r254, 0a, 1h
|
||||
LD r35, r254, 1a, 1h
|
||||
LD r36, r254, 2a, 1h
|
||||
LD r33, r254, 0a, 1h
|
||||
LD r34, r254, 1a, 1h
|
||||
LD r35, r254, 2a, 1h
|
||||
ANDI r33, r33, 255d
|
||||
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
|
||||
ANDI r35, r35, 255d
|
||||
ADD64 r33, r34, r33
|
||||
ANDI r32, r32, 255d
|
||||
ADD64 r33, r33, r35
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 4a, 48h
|
||||
ADDI64 r254, r254, 52d
|
||||
LD r31, r254, 4a, 40h
|
||||
ADDI64 r254, r254, 44d
|
||||
JALA r0, r31, 0a
|
||||
random_color:
|
||||
LRA r13, r0, :white
|
||||
|
|
|
@ -5,8 +5,8 @@ do_stuff:
|
|||
just_read:
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -80d
|
||||
ST r31, r254, 48a, 32h
|
||||
ADDI64 r254, r254, -72d
|
||||
ST r31, r254, 48a, 24h
|
||||
ADDI64 r32, r254, 16d
|
||||
CP r1, r32
|
||||
JAL r31, r0, :optionala
|
||||
|
@ -37,8 +37,8 @@ main:
|
|||
CP r33, r1
|
||||
ADD64 r32, r33, r32
|
||||
CP r1, r32
|
||||
1: LD r31, r254, 48a, 32h
|
||||
ADDI64 r254, r254, 80d
|
||||
1: LD r31, r254, 48a, 24h
|
||||
ADDI64 r254, r254, 72d
|
||||
JALA r0, r31, 0a
|
||||
optional:
|
||||
ADDI64 r254, r254, -16d
|
||||
|
|
|
@ -9,8 +9,8 @@ foo:
|
|||
ADDI64 r254, r254, 16d
|
||||
JALA r0, r31, 0a
|
||||
main:
|
||||
ADDI64 r254, r254, -88d
|
||||
ST r31, r254, 48a, 40h
|
||||
ADDI64 r254, r254, -80d
|
||||
ST r31, r254, 48a, 32h
|
||||
ADDI64 r32, r254, 32d
|
||||
JAL r31, r0, :foo
|
||||
ST r1, r32, 0a, 16h
|
||||
|
@ -30,8 +30,8 @@ main:
|
|||
LI64 r33, 7d
|
||||
SUB64 r32, r33, r32
|
||||
CP r1, r32
|
||||
LD r31, r254, 48a, 40h
|
||||
ADDI64 r254, r254, 88d
|
||||
LD r31, r254, 48a, 32h
|
||||
ADDI64 r254, r254, 80d
|
||||
JALA r0, r31, 0a
|
||||
code size: 347
|
||||
ret: 0
|
||||
|
|
|
@ -1,46 +1,46 @@
|
|||
main:
|
||||
ADDI64 r254, r254, -48d
|
||||
ST r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, -40d
|
||||
ST r31, r254, 16a, 24h
|
||||
ADDI64 r32, r254, 0d
|
||||
CP r3, r0
|
||||
CP r4, r0
|
||||
JAL r31, r0, :maina
|
||||
ST r1, r32, 0a, 16h
|
||||
LD r34, r254, 12a, 1h
|
||||
LD r33, r254, 12a, 1h
|
||||
LD r32, r254, 3a, 1h
|
||||
SUB8 r32, r32, r34
|
||||
SUB8 r32, r32, r33
|
||||
ANDI r32, r32, 255d
|
||||
CP r1, r32
|
||||
LD r31, r254, 16a, 32h
|
||||
ADDI64 r254, r254, 48d
|
||||
LD r31, r254, 16a, 24h
|
||||
ADDI64 r254, r254, 40d
|
||||
JALA r0, r31, 0a
|
||||
maina:
|
||||
ADDI64 r254, r254, -52d
|
||||
ST r31, r254, 20a, 32h
|
||||
ADDI64 r254, r254, -44d
|
||||
ST r31, r254, 20a, 24h
|
||||
ADDI64 r32, r254, 16d
|
||||
JAL r31, r0, :small_struct
|
||||
ST r1, r32, 0a, 4h
|
||||
ST r0, r254, 0a, 1h
|
||||
ST r0, r254, 1a, 1h
|
||||
ST r0, r254, 2a, 1h
|
||||
LI8 r33, 3b
|
||||
ST r33, r254, 3a, 1h
|
||||
LI8 r34, 1b
|
||||
ST r34, r254, 4a, 1h
|
||||
LI8 r32, 3b
|
||||
ST r32, r254, 3a, 1h
|
||||
LI8 r33, 1b
|
||||
ST r33, r254, 4a, 1h
|
||||
ST r0, r254, 5a, 1h
|
||||
ST r0, r254, 6a, 1h
|
||||
ST r0, r254, 7a, 1h
|
||||
ST r0, r254, 8a, 1h
|
||||
ST r0, r254, 9a, 1h
|
||||
ST r0, r254, 10a, 1h
|
||||
ST r33, r254, 11a, 1h
|
||||
ST r34, r254, 12a, 1h
|
||||
ST r32, r254, 11a, 1h
|
||||
ST r33, r254, 12a, 1h
|
||||
ST r0, r254, 13a, 1h
|
||||
ST r0, r254, 14a, 1h
|
||||
ST r0, r254, 15a, 1h
|
||||
LD r1, r254, 0a, 16h
|
||||
LD r31, r254, 20a, 32h
|
||||
ADDI64 r254, r254, 52d
|
||||
LD r31, r254, 20a, 24h
|
||||
ADDI64 r254, r254, 44d
|
||||
JALA r0, r31, 0a
|
||||
small_struct:
|
||||
ADDI64 r254, r254, -4d
|
||||
|
|
Loading…
Reference in a new issue