adding the stack optimizations

This commit is contained in:
Jakub Doka 2024-10-24 10:21:10 +02:00
parent cb9d7f7d1e
commit 0c2db878f0
No known key found for this signature in database
GPG key ID: C6E9A89936B8C143
13 changed files with 307 additions and 370 deletions

View file

@ -277,7 +277,7 @@ impl Value {
} }
fn imm(value: u64) -> Self { fn imm(value: u64) -> Self {
Self { ty: ty::Id::INT, loc: Loc::ct(value) } Self { ty: ty::Id::UINT, loc: Loc::ct(value) }
} }
fn ty(ty: ty::Id) -> Self { fn ty(ty: ty::Id) -> Self {

View file

@ -881,10 +881,6 @@ impl Nodes {
#[allow(dead_code)] #[allow(dead_code)]
fn eliminate_stack_temporaries(&mut self) { fn eliminate_stack_temporaries(&mut self) {
if !cfg!(debug_assertions) {
return;
}
'o: for stack in self[MEM].outputs.clone() { 'o: for stack in self[MEM].outputs.clone() {
if self[stack].kind != Kind::Stck { if self[stack].kind != Kind::Stck {
continue; continue;
@ -895,6 +891,7 @@ impl Nodes {
match self[o].kind { match self[o].kind {
Kind::Load Kind::Load
if self[o].ty == self[stack].ty if self[o].ty == self[stack].ty
&& self[o].outputs.iter().all(|&n| self[n].kind == Kind::Stre)
&& let mut full_stores = self[o].outputs.iter().filter(|&&n| { && let mut full_stores = self[o].outputs.iter().filter(|&&n| {
self[n].kind == Kind::Stre && self[n].inputs[1] == o self[n].kind == Kind::Stre && self[n].inputs[1] == o
}) })
@ -928,7 +925,6 @@ impl Nodes {
continue; continue;
} }
let Some(index) = unidentifed.iter().position(|&n| n == contact_point) else { let Some(index) = unidentifed.iter().position(|&n| n == contact_point) else {
std::println!("{stack} {region} {unidentifed:?} duped {:?}", self[region]);
continue 'o; continue 'o;
}; };
unidentifed.remove(index); unidentifed.remove(index);
@ -941,15 +937,9 @@ impl Nodes {
} }
if !unidentifed.is_empty() { if !unidentifed.is_empty() {
for &n in unidentifed.iter() {
std::println!("{:?}", self[n]);
}
std::println!("failed {stack}");
continue; continue;
} }
std::println!("{dst} {stack}");
// FIXME: when the loads and stores become parallel we will need to get saved // FIXME: when the loads and stores become parallel we will need to get saved
// differently // differently
let region = self[dst].inputs[2]; let region = self[dst].inputs[2];
@ -1288,7 +1278,7 @@ impl ItemCtx {
self.scope.clear(&mut self.nodes); self.scope.clear(&mut self.nodes);
self.nodes.unlock(NEVER); self.nodes.unlock(NEVER);
self.nodes.unlock(MEM); self.nodes.unlock(MEM);
//self.nodes.eliminate_stack_temporaries(); self.nodes.eliminate_stack_temporaries();
} }
fn emit(&mut self, instr: (usize, [u8; instrs::MAX_SIZE])) { fn emit(&mut self, instr: (usize, [u8; instrs::MAX_SIZE])) {
@ -3958,16 +3948,17 @@ impl<'a> Function<'a> {
let ops = vec![self.drg(nid)]; let ops = vec![self.drg(nid)];
self.add_instr(nid, ops); self.add_instr(nid, ops);
} }
//Kind::Stck Kind::Stck
// if node.outputs.iter().all(|&n| { if node.ty.loc(self.tys) == Loc::Reg && node.outputs.iter().all(|&n| {
// matches!(self.nodes[n].kind, Kind::Stre | Kind::Load)
// || matches!(self.nodes[n].kind, Kind::BinOp { op: TokenKind::Add } matches!(self.nodes[n].kind, Kind::Stre | Kind::Load)
// if self.nodes.is_const(self.nodes[n].inputs[2]) || matches!(self.nodes[n].kind, Kind::BinOp { op: TokenKind::Add }
// && self.nodes[n] if self.nodes.is_const(self.nodes[n].inputs[2])
// .outputs && self.nodes[n]
// .iter() .outputs
// .all(|&n| matches!(self.nodes[n].kind, Kind::Stre | Kind::Load))) .iter()
// }) => {} .all(|&n| matches!(self.nodes[n].kind, Kind::Stre | Kind::Load)))
}) => {}
Kind::Stck if self.tys.size_of(node.ty) == 0 => self.nodes.lock(nid), Kind::Stck if self.tys.size_of(node.ty) == 0 => self.nodes.lock(nid),
Kind::Stck => { Kind::Stck => {
let ops = vec![self.drg(nid)]; let ops = vec![self.drg(nid)];
@ -4372,7 +4363,7 @@ mod tests {
fn generate(ident: &'static str, input: &'static str, output: &mut String) { fn generate(ident: &'static str, input: &'static str, output: &mut String) {
_ = log::set_logger(&crate::fs::Logger); _ = log::set_logger(&crate::fs::Logger);
//log::set_max_level(log::LevelFilter::Info); log::set_max_level(log::LevelFilter::Info);
// log::set_max_level(log::LevelFilter::Trace); // log::set_max_level(log::LevelFilter::Trace);
let (ref files, embeds) = crate::test_parse_files(ident, input); let (ref files, embeds) = crate::test_parse_files(ident, input);

View file

@ -1,31 +1,27 @@
main: main:
ADDI64 r254, r254, -64d ADDI64 r254, r254, -36d
ST r31, r254, 56a, 8h ST r31, r254, 28a, 8h
LI64 r9, 4d LI64 r7, 4d
LI64 r7, 1d LI64 r6, 1d
LI64 r6, 2d LI64 r5, 2d
LI64 r10, 3d LI64 r9, 3d
LI64 r8, 1d LI64 r8, 1d
LI64 r11, 0d LI64 r10, 0d
ADDI64 r2, r254, 0d ADDI64 r12, r254, 0d
ADDI64 r3, r254, 24d ST r10, r254, 0a, 1h
ADDI64 r4, r254, 48d ST r10, r254, 1a, 1h
ADDI64 r12, r254, 52d ST r9, r254, 2a, 1h
ST r11, r254, 52a, 1h ST r6, r254, 3a, 1h
ST r11, r254, 53a, 1h ADDI64 r2, r254, 4d
ST r10, r254, 54a, 1h ST r8, r254, 4a, 8h
ST r7, r254, 55a, 1h ST r5, r254, 12a, 8h
BMC r12, r4, 4h ST r7, r254, 20a, 8h
ST r8, r254, 24a, 8h
ST r6, r254, 32a, 8h
ST r9, r254, 40a, 8h
BMC r3, r2, 24h
JAL r31, r0, :pass JAL r31, r0, :pass
LD r8, r254, 51a, 1h LD r2, r254, 3a, 1h
ANDI r10, r8, 255d ANDI r4, r2, 255d
ADD64 r1, r1, r10 ADD64 r1, r1, r4
LD r31, r254, 56a, 8h LD r31, r254, 28a, 8h
ADDI64 r254, r254, 64d ADDI64 r254, r254, 36d
JALA r0, r31, 0a JALA r0, r31, 0a
pass: pass:
LD r3, r2, 8a, 8h LD r3, r2, 8a, 8h
@ -36,6 +32,6 @@ pass:
ADD64 r11, r3, r9 ADD64 r11, r3, r9
ADD64 r1, r8, r11 ADD64 r1, r8, r11
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 380 code size: 348
ret: 8 ret: 8
status: Ok(()) status: Ok(())

View file

@ -5,18 +5,17 @@ main:
ADDI64 r254, r254, -16d ADDI64 r254, r254, -16d
ST r31, r254, 8a, 8h ST r31, r254, 8a, 8h
JAL r31, r0, :cond JAL r31, r0, :cond
LI64 r6, 0d LI64 r5, 0d
CP r8, r6 CP r7, r5
JNE r1, r8, :0 JNE r1, r7, :0
CP r6, r8 CP r5, r7
CP r1, r6 CP r1, r5
JMP :1 JMP :1
0: LI64 r1, 2d 0: LI64 r1, 2d
1: ADDI64 r8, r254, 0d 1: ST r1, r254, 0a, 8h
ST r1, r254, 0a, 8h
LD r31, r254, 8a, 8h LD r31, r254, 8a, 8h
ADDI64 r254, r254, 16d ADDI64 r254, r254, 16d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 158 code size: 147
ret: 0 ret: 0
status: Ok(()) status: Ok(())

View file

@ -1,53 +1,46 @@
main: main:
ADDI64 r254, r254, -36d ADDI64 r254, r254, -12d
LI64 r8, 2d LI64 r5, 2d
LI64 r7, 0d LI64 r4, 0d
LI64 r6, 0d LI64 r6, 0d
LI64 r9, 255d LI64 r7, 255d
ADDI64 r1, r254, 0d ADDI64 r9, r254, 0d
ADDI64 r10, r254, 12d ST r7, r254, 0a, 1h
ADDI64 r11, r254, 20d ST r6, r254, 1a, 1h
ST r9, r254, 20a, 1h ST r6, r254, 2a, 1h
ST r6, r254, 21a, 1h ST r7, r254, 3a, 1h
ST r6, r254, 22a, 1h ST r4, r254, 4a, 4h
ST r9, r254, 23a, 1h ST r5, r254, 8a, 4h
ADDI64 r12, r254, 24d LD r6, r254, 8a, 4h
ADDI64 r9, r12, 4d ANDI r6, r6, 4294967295d
BMC r11, r12, 4h ANDI r5, r5, 4294967295d
ST r7, r254, 12a, 4h JEQ r6, r5, :0
ST r8, r254, 16a, 4h
BMC r10, r9, 8h
BMC r12, r1, 12h
LD r4, r254, 8a, 4h
ANDI r4, r4, 4294967295d
ANDI r8, r8, 4294967295d
JEQ r4, r8, :0
LI64 r1, 0d LI64 r1, 0d
JMP :1 JMP :1
0: LD r10, r254, 4a, 4h 0: LD r11, r254, 4a, 4h
ANDI r10, r10, 4294967295d ANDI r11, r11, 4294967295d
ANDI r7, r7, 4294967295d ANDI r4, r4, 4294967295d
JEQ r10, r7, :2 JEQ r11, r4, :2
LI64 r1, 64d LI64 r1, 64d
JMP :1 JMP :1
2: LD r4, r254, 3a, 1h 2: LD r5, r254, 3a, 1h
ANDI r7, r5, 255d
LD r4, r254, 2a, 1h
ANDI r6, r4, 255d ANDI r6, r4, 255d
LD r3, r254, 2a, 1h LD r3, r254, 1a, 1h
ANDI r5, r3, 255d ANDI r5, r3, 255d
LD r2, r254, 1a, 1h LD r1, r254, 0a, 1h
ANDI r4, r2, 255d ANDI r4, r1, 255d
LD r12, r254, 0a, 1h LD r2, r254, 8a, 4h
ANDI r3, r12, 255d LD r3, r254, 4a, 4h
LD r1, r254, 8a, 4h ADD32 r8, r2, r3
LD r2, r254, 4a, 4h ADD32 r9, r8, r4
ADD32 r7, r1, r2 ADD32 r1, r9, r5
ADD32 r8, r7, r3 ADD32 r5, r1, r6
ADD32 r12, r8, r4 ADD32 r9, r5, r7
ADD32 r4, r12, r5 ANDI r1, r9, 4294967295d
ADD32 r8, r4, r6 1: ADDI64 r254, r254, 12d
ANDI r1, r8, 4294967295d
1: ADDI64 r254, r254, 36d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 492 code size: 433
ret: 512 ret: 512
status: Ok(()) status: Ok(())

View file

@ -1,22 +1,20 @@
main: main:
ADDI64 r254, r254, -256d ADDI64 r254, r254, -128d
LI64 r7, 69d LI64 r6, 69d
LI64 r6, 128d LI64 r5, 128d
LI64 r8, 0d LI64 r7, 0d
ADDI64 r5, r254, 0d ADDI64 r4, r254, 0d
ADDI64 r9, r254, 128d 2: JLTS r7, r5, :0
BMC r9, r5, 128h LD r2, r254, 42a, 1h
2: JLTS r8, r6, :0 ANDI r1, r2, 255d
LD r5, r254, 42a, 1h
ANDI r1, r5, 255d
JMP :1 JMP :1
0: ADDI64 r9, r8, 1d 0: ADDI64 r8, r7, 1d
ADD64 r8, r8, r5 ADD64 r3, r7, r4
ST r7, r8, 0a, 1h ST r6, r3, 0a, 1h
CP r8, r9 CP r7, r8
JMP :2 JMP :2
1: ADDI64 r254, r254, 256d 1: ADDI64 r254, r254, 128d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 168 code size: 152
ret: 69 ret: 69
status: Ok(()) status: Ok(())

View file

@ -22,34 +22,30 @@ scalar_values:
LI64 r1, 0d LI64 r1, 0d
JALA r0, r31, 0a JALA r0, r31, 0a
structs: structs:
ADDI64 r254, r254, -64d ADDI64 r254, r254, -48d
LI64 r9, 5d LI64 r7, 5d
LI64 r7, 20d LI64 r6, 20d
LI64 r4, 0d LI64 r4, 0d
ADDI64 r12, r254, 0d ADDI64 r8, r254, 0d
ADDI64 r1, r254, 8d ADDI64 r10, r254, 8d
ADDI64 r10, r254, 24d ADDI64 r8, r254, 24d
ADDI64 r10, r254, 32d ADDI64 r8, r254, 40d
ADDI64 r11, r254, 40d ST r4, r254, 40a, 8h
ADDI64 r2, r254, 56d ST r6, r254, 0a, 8h
ST r4, r254, 56a, 8h ST r7, r254, 8a, 8h
ST r7, r254, 24a, 8h ST r7, r254, 16a, 8h
ST r9, r254, 0a, 8h LD r8, r254, 8a, 8h
BMC r12, r1, 8h LD r9, r254, 0a, 8h
ST r9, r254, 16a, 8h ADD64 r12, r8, r9
LD r1, r254, 8a, 8h SUB64 r12, r12, r7
LD r2, r254, 24a, 8h ST r12, r254, 24a, 8h
ADD64 r5, r1, r2 ST r6, r254, 32a, 8h
SUB64 r5, r5, r9 LD r7, r254, 24a, 8h
ST r5, r254, 32a, 8h LD r8, r254, 40a, 8h
BMC r10, r11, 8h ADD64 r10, r7, r8
ST r7, r254, 48a, 8h SUB64 r1, r10, r6
LD r12, r254, 40a, 8h ADDI64 r254, r254, 48d
LD r1, r254, 56a, 8h
ADD64 r4, r12, r1
SUB64 r1, r4, r7
ADDI64 r254, r254, 64d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 449 code size: 417
ret: 0 ret: 0
status: Ok(()) status: Ok(())

View file

@ -1,17 +1,16 @@
main: main:
ADDI64 r254, r254, -8d ADDI64 r254, r254, -8d
LI64 r4, 0d LI64 r3, 0d
LI64 r2, 10d LI64 r2, 10d
ADDI64 r5, r254, 0d
ST r2, r254, 0a, 8h ST r2, r254, 0a, 8h
2: LD r1, r254, 0a, 8h 2: LD r1, r254, 0a, 8h
JNE r1, r4, :0 JNE r1, r3, :0
JMP :1 JMP :1
0: ADDI64 r1, r1, -1d 0: ADDI64 r11, r1, -1d
ST r1, r254, 0a, 8h ST r11, r254, 0a, 8h
JMP :2 JMP :2
1: ADDI64 r254, r254, 8d 1: ADDI64 r254, r254, 8d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 137 code size: 126
ret: 0 ret: 0
status: Ok(()) status: Ok(())

View file

@ -1,145 +1,118 @@
main: main:
ADDI64 r254, r254, -440d ADDI64 r254, r254, -136d
ST r32, r254, 352a, 88h LI64 r2, 4d
LI64 r4, 4d
LI64 r9, 1d LI64 r9, 1d
LI64 r7, 3d LI64 r6, 3d
LI64 r11, 2d LI64 r7, 2d
LI64 r12, 1d LI64 r8, 1d
LI64 r8, 0d LI64 r10, 0d
ADDI64 r3, r254, 336d ADDI64 r12, r254, 112d
ADDI64 r2, r254, 340d ADDI64 r12, r254, 116d
ADDI64 r2, r254, 344d ST r10, r254, 116a, 1h
ADDI64 r10, r254, 348d ST r10, r254, 117a, 1h
ST r8, r254, 348a, 1h ST r10, r254, 118a, 1h
ST r8, r254, 349a, 1h ST r10, r254, 119a, 1h
ST r8, r254, 350a, 1h ST r9, r254, 112a, 1h
ST r8, r254, 351a, 1h ST r9, r254, 113a, 1h
BMC r10, r2, 4h ST r9, r254, 114a, 1h
ST r9, r254, 340a, 1h ST r9, r254, 115a, 1h
ST r9, r254, 341a, 1h LD r1, r254, 112a, 1h
ST r9, r254, 342a, 1h LD r3, r254, 116a, 1h
ST r9, r254, 343a, 1h ADD8 r4, r1, r3
LD r6, r254, 340a, 1h ST r4, r254, 116a, 1h
LD r8, r254, 344a, 1h LD r9, r254, 113a, 1h
ADD8 r9, r6, r8 LD r10, r254, 117a, 1h
ST r9, r254, 336a, 1h ADD8 r11, r10, r9
LD r1, r254, 341a, 1h ST r11, r254, 117a, 1h
LD r5, r254, 345a, 1h LD r3, r254, 114a, 1h
ADD8 r5, r5, r1 LD r4, r254, 118a, 1h
ST r5, r254, 337a, 1h ADD8 r9, r4, r3
LD r8, r254, 342a, 1h ST r9, r254, 118a, 1h
LD r9, r254, 346a, 1h LD r10, r254, 115a, 1h
ADD8 r1, r9, r8 LD r11, r254, 119a, 1h
ST r1, r254, 338a, 1h ADD8 r1, r11, r10
LD r5, r254, 343a, 1h ST r1, r254, 119a, 1h
LD r6, r254, 347a, 1h LD r9, r254, 119a, 1h
ADD8 r6, r6, r5 LD r5, r254, 118a, 1h
ST r6, r254, 339a, 1h LD r10, r254, 116a, 1h
BMC r3, r2, 4h LD r11, r254, 117a, 1h
LD r2, r254, 347a, 1h ADD8 r11, r5, r11
LD r3, r254, 344a, 1h ADD8 r3, r10, r11
LD r1, r254, 345a, 1h ADD8 r5, r9, r3
LD r5, r254, 346a, 1h ANDI r5, r5, 255d
ADD8 r5, r5, r1 ANDI r2, r2, 255d
ADD8 r8, r3, r5 JEQ r5, r2, :0
ADD8 r1, r2, r8
ANDI r1, r1, 255d
ANDI r4, r4, 255d
JEQ r1, r4, :0
LI64 r1, 1008d LI64 r1, 1008d
JMP :1 JMP :1
0: LI64 r5, 0d 0: LI64 r3, 0d
LI64 r32, 4d LI64 r1, 4d
ADDI64 r2, r254, 0d ADDI64 r4, r254, 0d
ADDI64 r8, r254, 16d ADDI64 r2, r254, 16d
ADDI64 r9, r254, 32d ADDI64 r10, r2, 16d
ADDI64 r10, r254, 64d ADDI64 r4, r254, 48d
ADDI64 r3, r254, 96d ADDI64 r9, r254, 64d
ADDI64 r1, r254, 112d ADDI64 r11, r254, 96d
ADDI64 r4, r1, 16d ST r8, r254, 48a, 8h
ADDI64 r33, r254, 144d ST r7, r254, 56a, 8h
ADDI64 r34, r254, 160d ST r6, r254, 0a, 8h
ADDI64 r35, r254, 176d ST r1, r254, 8a, 8h
ADDI64 r36, r254, 208d LD r2, r254, 48a, 8h
ADDI64 r37, r254, 224d LD r5, r254, 0a, 8h
ADDI64 r38, r254, 240d ADD64 r6, r5, r2
ADDI64 r39, r38, 16d ST r6, r254, 64a, 8h
ADDI64 r40, r254, 272d LD r11, r254, 8a, 8h
ADDI64 r41, r254, 288d LD r12, r254, 56a, 8h
ADDI64 r6, r254, 304d ADD64 r1, r11, r12
ADDI64 r42, r254, 320d ST r1, r254, 72a, 8h
ST r12, r254, 320a, 8h LD r5, r254, 0a, 8h
ST r11, r254, 328a, 8h LD r6, r254, 48a, 8h
BMC r42, r6, 16h SUB64 r8, r5, r6
ST r7, r254, 288a, 8h ST r8, r254, 80a, 8h
ST r32, r254, 296a, 8h LD r12, r254, 56a, 8h
BMC r41, r40, 16h LD r1, r254, 8a, 8h
LD r7, r254, 272a, 8h SUB64 r5, r1, r12
LD r11, r254, 304a, 8h ST r5, r254, 88a, 8h
ADD64 r7, r7, r11 ST r3, r254, 96a, 8h
ST r7, r254, 224a, 8h ST r3, r254, 104a, 8h
LD r11, r254, 280a, 8h LD r11, r254, 96a, 8h
LD r12, r254, 312a, 8h LD r1, r254, 0a, 8h
ADD64 r7, r11, r12 SUB64 r3, r11, r1
ST r7, r254, 232a, 8h
BMC r37, r38, 16h
LD r7, r254, 304a, 8h
LD r11, r254, 272a, 8h
SUB64 r11, r11, r7
ST r11, r254, 208a, 8h
LD r7, r254, 312a, 8h
LD r11, r254, 280a, 8h
SUB64 r7, r11, r7
ST r7, r254, 216a, 8h
BMC r36, r39, 16h
BMC r38, r35, 32h
ST r5, r254, 160a, 8h
ST r5, r254, 168a, 8h
BMC r34, r33, 16h
LD r11, r254, 272a, 8h
LD r12, r254, 144a, 8h
SUB64 r12, r12, r11
ST r12, r254, 96a, 8h
LD r5, r254, 280a, 8h
LD r7, r254, 152a, 8h
SUB64 r7, r7, r5
ST r7, r254, 104a, 8h
BMC r3, r1, 16h
BMC r6, r4, 16h
BMC r1, r10, 32h
LD r5, r254, 176a, 8h
LD r6, r254, 64a, 8h
ADD64 r11, r6, r5
ST r11, r254, 32a, 8h
LD r12, r254, 184a, 8h
LD r1, r254, 72a, 8h
ADD64 r3, r12, r1
ST r3, r254, 40a, 8h
LD r7, r254, 192a, 8h
LD r11, r254, 80a, 8h
ADD64 r11, r7, r11
ST r11, r254, 48a, 8h
LD r3, r254, 200a, 8h
LD r4, r254, 88a, 8h
ADD64 r5, r3, r4
ST r5, r254, 56a, 8h
BMC r9, r10, 32h
LD r11, r254, 80a, 8h
LD r12, r254, 64a, 8h
ADD64 r3, r11, r12
ST r3, r254, 16a, 8h ST r3, r254, 16a, 8h
LD r6, r254, 88a, 8h LD r7, r254, 8a, 8h
LD r7, r254, 72a, 8h LD r8, r254, 104a, 8h
ADD64 r9, r6, r7 SUB64 r11, r8, r7
ST r9, r254, 24a, 8h ST r11, r254, 24a, 8h
BMC r8, r2, 16h BMC r4, r10, 16h
LD r3, r254, 8a, 8h LD r3, r254, 16a, 8h
LD r4, r254, 0a, 8h LD r5, r254, 64a, 8h
ADD64 r1, r3, r4 ADD64 r7, r3, r5
1: LD r32, r254, 352a, 88h ST r7, r254, 16a, 8h
ADDI64 r254, r254, 440d LD r11, r254, 72a, 8h
LD r12, r254, 24a, 8h
ADD64 r2, r11, r12
ST r2, r254, 24a, 8h
LD r7, r254, 80a, 8h
LD r8, r254, 32a, 8h
ADD64 r10, r7, r8
ST r10, r254, 32a, 8h
LD r2, r254, 88a, 8h
LD r3, r254, 40a, 8h
ADD64 r5, r2, r3
ST r5, r254, 40a, 8h
LD r8, r254, 16a, 8h
LD r10, r254, 32a, 8h
ADD64 r12, r10, r8
ADDI64 r5, r254, 120d
ST r12, r254, 120a, 8h
LD r5, r254, 40a, 8h
LD r6, r254, 24a, 8h
ADD64 r8, r5, r6
ST r8, r254, 128a, 8h
LD r12, r254, 120a, 8h
LD r2, r254, 128a, 8h
ADD64 r1, r2, r12
1: ADDI64 r254, r254, 136d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 1460 code size: 1231
ret: 10 ret: 10
status: Ok(()) status: Ok(())

View file

@ -32,26 +32,24 @@ fib_iter:
JMP :2 JMP :2
1: JALA r0, r31, 0a 1: JALA r0, r31, 0a
main: main:
ADDI64 r254, r254, -20d ADDI64 r254, r254, -18d
ST r31, r254, 4a, 16h ST r31, r254, 2a, 16h
LI64 r2, 10d LI64 r1, 10d
ADDI64 r4, r254, 0d ADDI64 r3, r254, 0d
ADDI64 r3, r254, 2d ST r1, r254, 0a, 1h
ST r2, r254, 2a, 1h ST r1, r254, 1a, 1h
ST r2, r254, 3a, 1h LD r7, r254, 0a, 1h
BMC r3, r4, 2h ANDI r2, r7, 255d
LD r10, r254, 0a, 1h
ANDI r2, r10, 255d
JAL r31, r0, :fib JAL r31, r0, :fib
CP r32, r1 CP r32, r1
LD r4, r254, 1a, 1h LD r1, r254, 1a, 1h
ANDI r2, r4, 255d ANDI r2, r1, 255d
JAL r31, r0, :fib_iter JAL r31, r0, :fib_iter
CP r11, r32 CP r8, r32
SUB64 r1, r11, r1 SUB64 r1, r8, r1
LD r31, r254, 4a, 16h LD r31, r254, 2a, 16h
ADDI64 r254, r254, 20d ADDI64 r254, r254, 18d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 398 code size: 382
ret: 0 ret: 0
status: Ok(()) status: Ok(())

View file

@ -1,28 +1,26 @@
main: main:
ADDI64 r254, r254, -96d ADDI64 r254, r254, -88d
ST r31, r254, 72a, 24h ST r31, r254, 64a, 24h
LI64 r32, 3d LI64 r32, 3d
LI64 r3, 4d LI64 r3, 4d
ADDI64 r33, r254, 16d ADDI64 r33, r254, 0d
ADDI64 r8, r254, 32d ADDI64 r7, r254, 16d
ADDI64 r9, r254, 48d ADDI64 r5, r254, 48d
ST r3, r254, 48a, 8h ST r3, r254, 48a, 8h
ADDI64 r7, r254, 56d ST r32, r254, 56a, 8h
BMC r9, r7, 8h BMC r5, r7, 16h
ST r32, r254, 64a, 8h LD r3, r5, 0a, 16h
BMC r7, r8, 16h
LD r3, r7, 0a, 16h
JAL r31, r0, :odher_pass JAL r31, r0, :odher_pass
ST r1, r254, 16a, 16h ST r1, r254, 0a, 16h
ADDI64 r2, r254, 0d ADDI64 r2, r254, 32d
BMC r33, r2, 16h BMC r33, r2, 16h
LD r10, r254, 8a, 8h LD r7, r254, 40a, 8h
JNE r10, r32, :0 JNE r7, r32, :0
JAL r31, r0, :pass JAL r31, r0, :pass
JMP :1 JMP :1
0: LI64 r1, 0d 0: LI64 r1, 0d
1: LD r31, r254, 72a, 24h 1: LD r31, r254, 64a, 24h
ADDI64 r254, r254, 96d ADDI64 r254, r254, 88d
JALA r0, r31, 0a JALA r0, r31, 0a
odher_pass: odher_pass:
ADDI64 r254, r254, -16d ADDI64 r254, r254, -16d
@ -34,6 +32,6 @@ odher_pass:
pass: pass:
LD r1, r2, 0a, 8h LD r1, r2, 0a, 8h
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 350 code size: 334
ret: 4 ret: 4
status: Ok(()) status: Ok(())

View file

@ -1,32 +1,30 @@
main: main:
ADDI64 r254, r254, -20480d ADDI64 r254, r254, -10240d
LI64 r8, 64d LI64 r7, 64d
LI64 r6, 1024d LI64 r5, 1024d
LI64 r10, 1d LI64 r9, 1d
LI64 r9, 0d LI64 r8, 0d
ADDI64 r7, r254, 0d ADDI64 r6, r254, 0d
ADDI64 r11, r254, 10240d 4: JLTS r8, r5, :0
BMC r11, r7, 10240h LI64 r7, 10d
4: JLTS r9, r6, :0 CP r8, r9
LI64 r8, 10d 3: JLTS r8, r7, :1
CP r11, r10 LD r9, r254, 2048a, 1h
3: JLTS r11, r8, :1 ANDI r1, r9, 255d
LD r12, r254, 2048a, 1h
ANDI r1, r12, 255d
JMP :2 JMP :2
1: ADD64 r9, r11, r10 1: ADD64 r3, r8, r9
MUL64 r5, r11, r6 MUL64 r2, r8, r5
ADD64 r11, r5, r7 ADD64 r4, r2, r6
BMC r7, r11, 1024h BMC r6, r4, 1024h
CP r11, r9 CP r8, r3
JMP :3 JMP :3
0: ADD64 r5, r9, r10 0: ADD64 r2, r8, r9
ADD64 r3, r9, r7 ADD64 r12, r8, r6
ST r8, r3, 0a, 1h ST r7, r12, 0a, 1h
CP r9, r5 CP r8, r2
JMP :4 JMP :4
2: ADDI64 r254, r254, 20480d 2: ADDI64 r254, r254, 10240d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 214 code size: 198
ret: 64 ret: 64
status: Ok(()) status: Ok(())

View file

@ -16,33 +16,31 @@ main:
ADDI64 r254, r254, 48d ADDI64 r254, r254, 48d
JALA r0, r31, 0a JALA r0, r31, 0a
maina: maina:
ADDI64 r254, r254, -56d ADDI64 r254, r254, -48d
ST r31, r254, 40a, 16h ST r31, r254, 32a, 16h
ADDI64 r32, r254, 36d ADDI64 r32, r254, 28d
JAL r31, r0, :small_struct JAL r31, r0, :small_struct
LI64 r2, 1d LI64 r2, 1d
LI64 r3, 3d LI64 r4, 3d
LI64 r1, 0d LI64 r1, 0d
ADDI64 r6, r254, 0d ADDI64 r5, r254, 0d
ADDI64 r8, r6, 8d ADDI64 r7, r5, 8d
ADDI64 r7, r254, 16d ADDI64 r3, r254, 16d
ADDI64 r4, r254, 24d ADDI64 r6, r254, 24d
ADDI64 r5, r254, 32d BMC r32, r6, 4h
BMC r32, r5, 4h ST r1, r254, 16a, 1h
ST r1, r254, 24a, 1h ST r1, r254, 17a, 1h
ST r1, r254, 25a, 1h ST r1, r254, 18a, 1h
ST r1, r254, 26a, 1h ST r4, r254, 19a, 1h
ST r3, r254, 27a, 1h ST r2, r254, 20a, 1h
ST r2, r254, 28a, 1h ST r1, r254, 21a, 1h
ST r1, r254, 29a, 1h ST r1, r254, 22a, 1h
ST r1, r254, 30a, 1h ST r1, r254, 23a, 1h
ST r1, r254, 31a, 1h BMC r3, r7, 8h
BMC r4, r7, 8h BMC r3, r5, 8h
BMC r4, r6, 8h LD r1, r5, 0a, 16h
BMC r7, r8, 8h LD r31, r254, 32a, 16h
LD r1, r6, 0a, 16h ADDI64 r254, r254, 48d
LD r31, r254, 40a, 16h
ADDI64 r254, r254, 56d
JALA r0, r31, 0a JALA r0, r31, 0a
small_struct: small_struct:
ADDI64 r254, r254, -4d ADDI64 r254, r254, -4d
@ -53,6 +51,6 @@ small_struct:
LD r1, r3, 0a, 4h LD r1, r3, 0a, 4h
ADDI64 r254, r254, 4d ADDI64 r254, r254, 4d
JALA r0, r31, 0a JALA r0, r31, 0a
code size: 560 code size: 544
ret: 2 ret: 2
status: Ok(()) status: Ok(())