adding the stack optimizations
This commit is contained in:
parent
cb9d7f7d1e
commit
0c2db878f0
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
|
@ -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(())
|
||||||
|
|
Loading…
Reference in a new issue