adding rescheduling

This commit is contained in:
Jakub Doka 2024-10-26 00:34:22 +02:00
parent 46f9903562
commit 8016b1fad5
No known key found for this signature in database
GPG key ID: C6E9A89936B8C143
21 changed files with 384 additions and 300 deletions

View file

@ -527,6 +527,13 @@ main := fn(): uint {
### Purely Testing Examples
#### big_array_crash
```hb
SIN_TABLE := [int].(0, 174, 348, 523, 697, 871, 1045, 1218, 1391, 1564, 1736, 1908, 2079, 2249, 2419, 2588, 2756, 2923, 3090, 3255, 3420, 3583, 3746, 3907, 4067, 4226, 4384, 4540, 4695, 4848, 5000, 5150, 5299, 5446, 5591, 5735, 5877, 6018, 6156, 6293, 6427, 6560, 6691, 6819, 6946, 7071, 7193, 7313, 7431, 7547, 7660, 7771, 7880, 7986, 8090, 8191, 8290, 8386, 8480, 8571, 8660, 8746, 8829, 8910, 8987, 9063, 9135, 9205, 9271, 9335, 9396, 9455, 9510, 9563, 9612, 9659, 9702, 9743, 9781, 9816, 9848, 9877, 9902, 9925, 9945, 9961, 9975, 9986, 9993, 9998, 10000)
main := fn(): int return SIN_TABLE[10]
```
#### returning_global_struct
```hb
Color := struct {r: u8, g: u8, b: u8, a: u8}

View file

@ -20,7 +20,6 @@ use {
alloc::{borrow::ToOwned, string::String, vec::Vec},
core::{
assert_matches::debug_assert_matches,
borrow::Borrow,
cell::RefCell,
fmt::{self, Debug, Display, Write},
format_args as fa, mem,
@ -29,6 +28,7 @@ use {
hashbrown::hash_map,
hbbytecode::DisasmError,
regalloc2::VReg,
std::panic,
};
const VOID: Nid = 0;
@ -145,16 +145,16 @@ impl Nodes {
fn graphviz_in_browser(&self, tys: &Types, files: &[parser::Ast]) {
#[cfg(all(debug_assertions, feature = "std"))]
{
let out = &mut String::new();
_ = self.graphviz_low(tys, files, out);
if !std::process::Command::new("brave")
.arg(format!("https://dreampuf.github.io/GraphvizOnline/#{out}"))
.status()
.unwrap()
.success()
{
log::error!("{out}");
}
// let out = &mut String::new();
// _ = self.graphviz_low(tys, files, out);
// if !std::process::Command::new("brave")
// .arg(format!("https://dreampuf.github.io/GraphvizOnline/#{out}"))
// .status()
// .unwrap()
// .success()
// {
// log::error!("{out}");
// }
}
}
@ -3755,7 +3755,7 @@ impl<'a> Function<'a> {
return;
}
let node = self.nodes[nid].clone();
let mut node = self.nodes[nid].clone();
match node.kind {
Kind::Start => {
debug_assert_matches!(self.nodes[node.outputs[0]].kind, Kind::Entry);
@ -3801,6 +3801,7 @@ impl<'a> Function<'a> {
block.push(self.rg(ph));
}
self.blocks[self.nodes[nid].ralloc_backref as usize].params = block;
self.reschedule_block(&mut node.outputs);
for o in node.outputs.into_iter().rev() {
self.emit_node(o, nid);
}
@ -3874,6 +3875,7 @@ impl<'a> Function<'a> {
)]);
}
self.reschedule_block(&mut node.outputs);
for o in node.outputs.into_iter().rev() {
self.emit_node(o, nid);
}
@ -3881,6 +3883,7 @@ impl<'a> Function<'a> {
Kind::Then | Kind::Else => {
self.nodes[nid].ralloc_backref = self.add_block(nid);
self.bridge(prev, nid);
self.reschedule_block(&mut node.outputs);
for o in node.outputs.into_iter().rev() {
self.emit_node(o, nid);
}
@ -3981,6 +3984,7 @@ impl<'a> Function<'a> {
self.add_instr(nid, ops);
self.reschedule_block(&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)
@ -4069,6 +4073,74 @@ impl<'a> Function<'a> {
.preds
.push(regalloc2::Block::new(self.nodes[pred].ralloc_backref as usize));
}
fn reschedule_block(&mut self, outputs: &mut Vc) {
let mut buf = Vec::with_capacity(outputs.len());
let mut seen = BitSet::default();
seen.clear(self.nodes.values.len());
for &o in outputs.iter() {
if !self.nodes.is_cfg(o) {
continue;
}
seen.set(o);
let mut cursor = buf.len();
buf.push(o);
while let Some(&n) = buf.get(cursor) {
for &i in &self.nodes[n].inputs[1..] {
if self.nodes[i].inputs.is_empty() {
std::println!("{:?}", self.nodes[i]);
}
if self.nodes[n].inputs.first() == self.nodes[i].inputs.first()
&& self.nodes[i].outputs.iter().all(|&o| {
self.nodes[o].inputs.first() != self.nodes[i].inputs.first()
|| seen.get(o)
})
&& seen.set(i)
{
buf.push(i);
}
}
cursor += 1;
}
}
for &o in outputs.iter() {
if !seen.set(o) {
continue;
}
let mut cursor = buf.len();
buf.push(o);
while let Some(&n) = buf.get(cursor) {
for &i in &self.nodes[n].inputs[1..] {
if self.nodes[i].inputs.is_empty() {
std::println!("{:?}", self.nodes[i]);
}
if self.nodes[n].inputs.first() == self.nodes[i].inputs.first()
&& self.nodes[i].outputs.iter().all(|&o| {
self.nodes[o].inputs.first() != self.nodes[i].inputs.first()
|| seen.get(o)
})
&& seen.set(i)
{
buf.push(i);
}
}
cursor += 1;
}
}
debug_assert!(outputs.len() == buf.len() || outputs.len() == buf.len() + 1,);
std::println!("{:?}\n{:?}", outputs, buf);
if buf.len() + 1 == outputs.len() {
outputs.remove(outputs.len() - 1);
}
outputs.copy_from_slice(&buf);
}
}
impl regalloc2::Function for Function<'_> {
@ -4574,6 +4646,7 @@ mod tests {
fb_driver;
// Purely Testing Examples;
big_array_crash;
returning_global_struct;
small_struct_bitcast;
small_struct_assignment;

View file

@ -1,21 +1,21 @@
main:
ADDI64 r254, r254, -36d
ST r31, r254, 28a, 8h
LI64 r7, 4d
LI64 r8, 2d
LI64 r9, 1d
LI8 r6, 1b
LI8 r10, 255b
LI8 r11, 0b
ADDI64 r12, r254, 0d
ST r11, r254, 0a, 1h
ST r11, r254, 1a, 1h
ST r10, r254, 2a, 1h
ST r6, r254, 3a, 1h
LI8 r1, 0b
ADDI64 r5, r254, 0d
ST r1, r254, 0a, 1h
ST r1, r254, 1a, 1h
LI8 r6, 255b
ST r6, r254, 2a, 1h
LI8 r9, 1b
ST r9, r254, 3a, 1h
LI64 r1, 1d
ADDI64 r2, r254, 4d
ST r9, r254, 4a, 8h
ST r8, r254, 12a, 8h
ST r7, r254, 20a, 8h
ST r1, r254, 4a, 8h
LI64 r5, 2d
ST r5, r254, 12a, 8h
LI64 r8, 4d
ST r8, r254, 20a, 8h
JAL r31, r0, :pass
LD r2, r254, 3a, 1h
ANDI r4, r2, 255d
@ -26,11 +26,11 @@ main:
pass:
LD r4, r2, 8a, 8h
MULI64 r8, r4, 8d
ADD64 r10, r8, r2
LD r8, r10, 0a, 8h
LD r7, r2, 0a, 8h
ADD64 r11, r4, r7
ADD64 r1, r8, r11
LD r5, r2, 0a, 8h
ADD64 r11, r8, r2
ADD64 r10, r4, r5
LD r11, r11, 0a, 8h
ADD64 r1, r11, r10
JALA r0, r31, 0a
code size: 327
ret: 8

View file

@ -0,0 +1,7 @@
main:
LRA r1, r0, :SIN_TABLE
LD r1, r1, 80a, 8h
JALA r0, r31, 0a
code size: 767
ret: 1736
status: Ok(())

View file

@ -1,45 +1,45 @@
main:
ADDI64 r254, r254, -24d
LI32 r6, 2w
LI32 r5, 0w
LI8 r8, 0b
LI8 r9, 255b
ADDI64 r10, r254, 0d
ADDI64 r7, r254, 12d
ST r9, r254, 12a, 1h
ST r8, r254, 13a, 1h
ST r8, r254, 14a, 1h
ST r9, r254, 15a, 1h
ST r5, r254, 16a, 4h
ST r6, r254, 20a, 4h
BMC r7, r10, 12h
LI8 r3, 255b
ADDI64 r2, r254, 12d
ST r3, r254, 12a, 1h
LI8 r6, 0b
ST r6, r254, 13a, 1h
ST r6, r254, 14a, 1h
ST r3, r254, 15a, 1h
LI32 r11, 0w
ST r11, r254, 16a, 4h
LI32 r3, 2w
ST r3, r254, 20a, 4h
ADDI64 r5, r254, 0d
BMC r2, r5, 12h
LD r8, r254, 8a, 4h
ANDI r8, r8, 4294967295d
ANDI r6, r6, 4294967295d
JEQ r8, r6, :0
ANDI r3, r3, 4294967295d
JEQ r8, r3, :0
LI64 r1, 0d
JMP :1
0: LD r2, r254, 4a, 4h
ANDI r2, r2, 4294967295d
ANDI r5, r5, 4294967295d
JEQ r2, r5, :2
ANDI r11, r11, 4294967295d
JEQ r2, r11, :2
LI64 r1, 64d
JMP :1
2: LD r8, r254, 3a, 1h
ANDI r10, r8, 255d
LD r7, r254, 2a, 1h
ANDI r9, r7, 255d
LD r6, r254, 1a, 1h
ANDI r8, r6, 255d
LD r4, r254, 0a, 1h
ANDI r7, r4, 255d
LD r5, r254, 8a, 4h
LD r6, r254, 4a, 4h
ADD32 r11, r5, r6
ADD32 r12, r11, r7
ADD32 r4, r12, r8
ADD32 r8, r4, r9
ADD32 r12, r8, r10
2: LD r10, r254, 0a, 1h
LD r9, r254, 4a, 4h
LD r11, r254, 8a, 4h
LD r5, r254, 1a, 1h
ANDI r4, r10, 255d
ADD32 r6, r11, r9
LD r11, r254, 2a, 1h
ANDI r10, r5, 255d
ADD32 r9, r6, r4
LD r5, r254, 3a, 1h
ANDI r4, r11, 255d
ADD32 r3, r9, r10
ANDI r9, r5, 255d
ADD32 r8, r3, r4
ADD32 r12, r8, r9
ANDI r1, r12, 4294967295d
1: ADDI64 r254, r254, 24d
JALA r0, r31, 0a

View file

@ -1,20 +1,20 @@
main:
ADDI64 r254, r254, -31d
LI64 r5, 5d
LI64 r1, 10d
ADDI64 r4, r254, 15d
ST r1, r254, 15a, 8h
LI64 r7, 20d
LI64 r2, 1d
LI64 r4, 10d
LI64 r6, 6d
ADDI64 r8, r254, 15d
ST r4, r254, 15a, 8h
ST r7, r254, 23a, 8h
LD r3, r8, 0a, 16h
LI64 r6, 6d
LI64 r5, 5d
LI64 r2, 1d
LD r3, r4, 0a, 16h
ECA
LRA r5, r0, :arbitrary text
ADDI64 r7, r254, 0d
BMC r5, r7, 15h
LI64 r1, 0d
ADDI64 r8, r254, 0d
BMC r5, r8, 15h
ADDI64 r254, r254, 31d
JALA r0, r31, 0a
ev: Ecall

View file

@ -21,14 +21,13 @@ main:
LI64 r32, 0d
CP r2, r32
JAL r31, r0, :multiple_breaks
CP r3, r1
LI64 r1, 3d
LI64 r7, 1d
JEQ r3, r1, :0
CP r1, r7
LI64 r6, 1d
LI64 r7, 3d
JEQ r1, r7, :0
CP r1, r6
JMP :1
0: CP r33, r7
CP r34, r1
0: CP r33, r6
CP r34, r7
LI64 r35, 4d
CP r2, r35
JAL r31, r0, :multiple_breaks
@ -92,6 +91,6 @@ state_change_in_break:
JMP :4
3: JALA r0, r31, 0a
timed out
code size: 585
code size: 582
ret: 10
status: Ok(())

View file

@ -1,9 +1,9 @@
deinit:
ADDI64 r254, r254, -48d
ST r31, r254, 24a, 24h
LI64 r4, 8d
LD r5, r2, 16a, 8h
CP r32, r2
LI64 r4, 8d
MUL64 r3, r5, r4
CP r5, r32
LD r2, r5, 0a, 8h
@ -31,9 +31,9 @@ main:
ADDI64 r32, r254, 24d
CP r1, r32
JAL r31, r0, :new
LI64 r3, 69d
ADDI64 r33, r254, 0d
BMC r32, r33, 24h
LI64 r3, 69d
CP r2, r33
JAL r31, r0, :push
LD r12, r254, 0a, 8h
@ -67,15 +67,15 @@ push:
ST r31, r254, 0a, 72h
CP r32, r3
LI64 r33, 1d
LD r7, r2, 16a, 8h
LD r8, r2, 8a, 8h
LD r6, r2, 8a, 8h
LD r8, r2, 16a, 8h
CP r34, r2
JNE r7, r8, :0
JNE r8, r6, :0
LI64 r35, 0d
JNE r7, r35, :1
JNE r8, r35, :1
CP r36, r33
JMP :2
1: MULI64 r36, r7, 2d
1: MULI64 r36, r8, 2d
2: LI64 r37, 8d
MUL64 r2, r36, r37
CP r3, r37
@ -95,9 +95,9 @@ push:
9: JNE r11, r12, :5
LD r5, r38, 8a, 8h
JEQ r5, r1, :6
LD r2, r38, 0a, 8h
CP r4, r37
MUL64 r3, r5, r4
LD r2, r38, 0a, 8h
JAL r31, r0, :free
CP r5, r39
JMP :7

View file

@ -1,17 +1,17 @@
main:
LI64 r5, 0d
LI64 r8, 6d
LRA r4, r0, :gb
LI64 r10, 6d
LD r7, r4, 0a, 8h
CMPU r11, r7, r5
CMPUI r11, r11, 0d
ORI r12, r11, 0d
LI64 r7, 0d
LD r9, r4, 0a, 8h
CMPU r10, r9, r7
CMPUI r10, r10, 0d
ORI r12, r10, 0d
ANDI r12, r12, 255d
JNE r12, r0, :0
CP r5, r10
CP r5, r8
JMP :1
0: LI64 r5, 1d
1: SUB64 r1, r5, r10
1: SUB64 r1, r5, r8
JALA r0, r31, 0a
code size: 131
ret: 0

View file

@ -23,27 +23,27 @@ scalar_values:
JALA r0, r31, 0a
structs:
ADDI64 r254, r254, -48d
LI64 r7, 5d
LI64 r6, 20d
LI64 r4, 0d
ADDI64 r8, r254, 0d
ADDI64 r10, r254, 8d
ADDI64 r8, r254, 24d
ADDI64 r8, r254, 40d
ST r4, r254, 40a, 8h
ST r6, r254, 0a, 8h
ST r7, r254, 8a, 8h
ST r7, r254, 16a, 8h
ADDI64 r1, r254, 40d
LI64 r3, 0d
ST r3, r254, 40a, 8h
ADDI64 r7, r254, 0d
LI64 r9, 20d
ST r9, r254, 0a, 8h
LI64 r1, 5d
ADDI64 r2, r254, 8d
ST r1, r254, 8a, 8h
ST r1, r254, 16a, 8h
LD r6, r254, 0a, 8h
LD r8, r254, 8a, 8h
LD r9, r254, 0a, 8h
ADD64 r12, r8, r9
SUB64 r12, r12, r7
ST r12, r254, 24a, 8h
ST r6, r254, 32a, 8h
ADD64 r11, r8, r6
SUB64 r11, r11, r1
ADDI64 r5, r254, 24d
ST r11, r254, 24a, 8h
ST r9, r254, 32a, 8h
LD r5, r254, 40a, 8h
LD r7, r254, 24a, 8h
LD r8, r254, 40a, 8h
ADD64 r10, r7, r8
SUB64 r1, r10, r6
ADD64 r10, r7, r5
SUB64 r1, r10, r9
ADDI64 r254, r254, 48d
JALA r0, r31, 0a
code size: 417

View file

@ -1,13 +1,12 @@
main:
ADDI64 r254, r254, -24d
ST r31, r254, 16a, 8h
LI64 r4, 1024d
LI64 r2, 0d
ADDI64 r2, r254, 8d
LI64 r4, 0d
ST r4, r254, 8a, 8h
ADDI64 r3, r254, 0d
ADDI64 r5, r254, 8d
ST r2, r254, 8a, 8h
ST r2, r254, 0a, 8h
CP r2, r5
ST r4, r254, 0a, 8h
LI64 r4, 1024d
JAL r31, r0, :set
ANDI r1, r1, 4294967295d
LD r31, r254, 16a, 8h
@ -15,18 +14,18 @@ main:
JALA r0, r31, 0a
set:
ADDI64 r254, r254, -25d
LI32 r9, 8w
LI8 r8, 5b
ANDI r10, r4, 4294967295d
ADDI64 r1, r254, 0d
ST r8, r254, 0a, 1h
ST r10, r254, 1a, 4h
ST r9, r254, 5a, 4h
LI8 r7, 5b
ADDI64 r11, r254, 0d
ST r7, r254, 0a, 1h
ANDI r11, r4, 4294967295d
ST r11, r254, 1a, 4h
LI32 r4, 8w
ST r4, r254, 5a, 4h
ST r2, r254, 9a, 8h
ST r3, r254, 17a, 8h
LD r1, r254, 1a, 4h
ADDI64 r254, r254, 25d
JALA r0, r31, 0a
code size: 298
code size: 295
ret: 1024
status: Ok(())

View file

@ -5,13 +5,13 @@ clobber:
main:
ADDI64 r254, r254, -16d
ST r31, r254, 8a, 8h
LI64 r3, 2d
ADDI64 r2, r254, 0d
ST r3, r254, 0a, 8h
LI64 r4, 2d
ST r4, r254, 0a, 8h
JAL r31, r0, :clobber
LI64 r6, 4d
LD r9, r254, 0a, 8h
SUB64 r1, r6, r9
LD r8, r254, 0a, 8h
LI64 r7, 4d
SUB64 r1, r7, r8
LD r31, r254, 8a, 8h
ADDI64 r254, r254, 16d
JALA r0, r31, 0a

View file

@ -3,8 +3,8 @@ drop:
main:
ADDI64 r254, r254, -24d
ST r31, r254, 8a, 16h
LI64 r32, 1d
ADDI64 r2, r254, 0d
LI64 r32, 1d
ST r32, r254, 0a, 8h
JAL r31, r0, :modify
CP r2, r32

View file

@ -37,14 +37,13 @@ main:
ADDI64 r254, r254, 8d
JALA r0, r31, 0a
request_page:
CP r12, r2
LRA r4, r0, :"\0\u{1}xxxxxxxx\0"
ST r2, r4, 1a, 1h
LI64 r5, 12d
LI64 r3, 2d
LI64 r2, 3d
LRA r4, r0, :"\0\u{1}xxxxxxxx\0"
ST r12, r4, 1a, 1h
ECA
JALA r0, r31, 0a
code size: 339
code size: 336
ret: 42
status: Ok(())

View file

@ -6,16 +6,16 @@ main:
ST r1, r254, 4a, 4h
ADDI64 r5, r254, 0d
BMC r32, r5, 4h
LD r3, r254, 3a, 1h
ANDI r5, r3, 255d
LD r2, r254, 2a, 1h
ANDI r4, r2, 255d
LD r1, r254, 1a, 1h
ANDI r3, r1, 255d
LD r2, r254, 0a, 8h
ADD64 r6, r2, r3
ADD64 r10, r6, r4
ADD64 r1, r10, r5
LD r9, r254, 1a, 1h
LD r1, r254, 2a, 1h
ANDI r12, r9, 255d
LD r11, r254, 0a, 8h
LD r7, r254, 3a, 1h
ANDI r6, r1, 255d
ADD64 r5, r11, r12
ANDI r11, r7, 255d
ADD64 r10, r5, r6
ADD64 r1, r10, r11
LD r31, r254, 8a, 16h
ADDI64 r254, r254, 24d
JALA r0, r31, 0a

View file

@ -1,10 +1,10 @@
main:
ADDI64 r254, r254, -4d
LRA r3, r0, :white
LRA r2, r0, :black
ADDI64 r4, r254, 0d
BMC r2, r4, 4h
BMC r3, r4, 4h
LRA r1, r0, :black
ADDI64 r3, r254, 0d
LRA r5, r0, :white
BMC r1, r3, 4h
BMC r5, r3, 4h
LD r9, r254, 3a, 1h
ANDI r1, r9, 255d
ADDI64 r254, r254, 4d

View file

@ -16,21 +16,21 @@ main:
JNE r10, r6, :3
CP r7, r9
JMP :4
3: ADDI64 r12, r254, 32d
MUL64 r11, r7, r6
SUB64 r1, r6, r9
MUL64 r1, r1, r6
ADD64 r9, r10, r8
ADD64 r1, r1, r10
MULI64 r1, r1, 8d
ADD64 r1, r1, r5
ADD64 r2, r11, r10
MULI64 r10, r2, 8d
ADD64 r10, r10, r5
3: ADD64 r3, r10, r8
MUL64 r12, r7, r6
SUB64 r11, r6, r9
ADD64 r9, r12, r10
MUL64 r11, r11, r6
MULI64 r9, r9, 8d
ADD64 r11, r11, r10
ADD64 r9, r9, r5
MULI64 r11, r11, 8d
ADDI64 r10, r254, 32d
ADD64 r12, r11, r5
BMC r9, r10, 8h
BMC r12, r9, 8h
BMC r10, r12, 8h
BMC r1, r10, 8h
BMC r12, r1, 8h
CP r10, r9
CP r10, r3
JMP :5
0: ADD64 r2, r9, r8
MULI64 r12, r9, 8d

View file

@ -1,93 +1,93 @@
main:
ADDI64 r254, r254, -168d
LI8 r11, 4b
LI8 r5, 1b
LI8 r3, 0b
ADDI64 r6, r254, 144d
ADDI64 r6, r254, 148d
ST r3, r254, 148a, 1h
ST r3, r254, 149a, 1h
ST r3, r254, 150a, 1h
ST r3, r254, 151a, 1h
ST r5, r254, 144a, 1h
ST r5, r254, 145a, 1h
ST r5, r254, 146a, 1h
ST r5, r254, 147a, 1h
LD r7, r254, 144a, 1h
LD r8, r254, 148a, 1h
ADD8 r10, r7, r8
ST r10, r254, 148a, 1h
LD r2, r254, 145a, 1h
LD r3, r254, 149a, 1h
ADD8 r5, r3, r2
ST r5, r254, 149a, 1h
LD r9, r254, 146a, 1h
LD r10, r254, 150a, 1h
ADD8 r12, r10, r9
ST r12, r254, 150a, 1h
LD r4, r254, 147a, 1h
LD r5, r254, 151a, 1h
ADD8 r7, r5, r4
ST r7, r254, 151a, 1h
LD r2, r254, 151a, 1h
LD r12, r254, 150a, 1h
LI8 r1, 0b
ADDI64 r3, r254, 148d
ST r1, r254, 148a, 1h
ST r1, r254, 149a, 1h
ST r1, r254, 150a, 1h
ST r1, r254, 151a, 1h
LI8 r10, 1b
ADDI64 r11, r254, 144d
ST r10, r254, 144a, 1h
ST r10, r254, 145a, 1h
ST r10, r254, 146a, 1h
ST r10, r254, 147a, 1h
LD r6, r254, 144a, 1h
LD r7, r254, 148a, 1h
ADD8 r9, r6, r7
ST r9, r254, 148a, 1h
LD r1, r254, 145a, 1h
LD r2, r254, 149a, 1h
ADD8 r4, r2, r1
ST r4, r254, 149a, 1h
LD r8, r254, 146a, 1h
LD r9, r254, 150a, 1h
ADD8 r11, r9, r8
ST r11, r254, 150a, 1h
LD r3, r254, 147a, 1h
LD r4, r254, 151a, 1h
ADD8 r6, r4, r3
ST r6, r254, 151a, 1h
LD r10, r254, 149a, 1h
LD r11, r254, 150a, 1h
ADD8 r1, r11, r10
LD r3, r254, 148a, 1h
LD r4, r254, 149a, 1h
ADD8 r4, r12, r4
ADD8 r8, r3, r4
ADD8 r12, r2, r8
ANDI r12, r12, 255d
ADD8 r6, r3, r1
LD r7, r254, 151a, 1h
LI8 r9, 4b
ADD8 r11, r7, r6
ANDI r11, r11, 255d
JEQ r12, r11, :0
ANDI r9, r9, 255d
JEQ r11, r9, :0
LI64 r1, 1008d
JMP :1
0: LI64 r1, 0d
LI64 r10, 4d
LI64 r2, 3d
0: LI64 r5, 1d
ADDI64 r8, r254, 80d
ST r5, r254, 80a, 8h
LI64 r9, 2d
LI64 r3, 1d
ADDI64 r5, r254, 0d
ADDI64 r4, r254, 32d
ADDI64 r4, r254, 48d
ADDI64 r12, r4, 16d
ADDI64 r4, r254, 80d
ADDI64 r6, r254, 96d
ADDI64 r11, r254, 112d
ST r3, r254, 80a, 8h
ST r9, r254, 88a, 8h
ST r2, r254, 32a, 8h
ST r10, r254, 40a, 8h
LD r6, r254, 80a, 8h
LD r7, r254, 32a, 8h
ADD64 r8, r7, r6
ST r8, r254, 0a, 8h
LD r2, r254, 40a, 8h
LD r3, r254, 88a, 8h
ADD64 r3, r2, r3
ST r3, r254, 8a, 8h
LD r6, r254, 32a, 8h
LD r8, r254, 80a, 8h
SUB64 r10, r6, r8
ST r10, r254, 16a, 8h
LD r2, r254, 88a, 8h
LD r3, r254, 40a, 8h
SUB64 r6, r3, r2
ST r6, r254, 24a, 8h
BMC r5, r11, 32h
ST r1, r254, 96a, 8h
ST r1, r254, 104a, 8h
LI64 r1, 3d
ADDI64 r4, r254, 32d
ST r1, r254, 32a, 8h
LI64 r5, 4d
ST r5, r254, 40a, 8h
LD r12, r254, 32a, 8h
LD r1, r254, 80a, 8h
ADDI64 r11, r254, 0d
ADD64 r3, r12, r1
ST r3, r254, 0a, 8h
LD r7, r254, 40a, 8h
LD r9, r254, 88a, 8h
ADD64 r10, r7, r9
ST r10, r254, 8a, 8h
LD r2, r254, 80a, 8h
LD r3, r254, 32a, 8h
SUB64 r5, r3, r2
ST r5, r254, 16a, 8h
LD r9, r254, 88a, 8h
LD r10, r254, 40a, 8h
SUB64 r12, r10, r9
ST r12, r254, 24a, 8h
ADDI64 r3, r254, 112d
BMC r11, r3, 32h
LI64 r6, 0d
ADDI64 r9, r254, 96d
ST r6, r254, 96a, 8h
ST r6, r254, 104a, 8h
LD r1, r254, 32a, 8h
LD r2, r254, 96a, 8h
LD r5, r254, 32a, 8h
SUB64 r6, r2, r5
ST r6, r254, 48a, 8h
ADDI64 r9, r254, 48d
SUB64 r5, r2, r1
ST r5, r254, 48a, 8h
LD r10, r254, 40a, 8h
LD r11, r254, 104a, 8h
SUB64 r1, r11, r10
ST r1, r254, 56a, 8h
BMC r4, r12, 16h
LD r6, r254, 48a, 8h
LD r8, r254, 112a, 8h
ADD64 r10, r6, r8
SUB64 r12, r11, r10
ST r12, r254, 56a, 8h
ADDI64 r10, r9, 16d
BMC r8, r10, 16h
LD r7, r254, 112a, 8h
LD r8, r254, 48a, 8h
ADD64 r10, r8, r7
ST r10, r254, 48a, 8h
LD r2, r254, 120a, 8h
LD r3, r254, 56a, 8h
@ -101,11 +101,11 @@ main:
LD r6, r254, 72a, 8h
ADD64 r8, r5, r6
ST r8, r254, 72a, 8h
LD r11, r254, 48a, 8h
LD r1, r254, 64a, 8h
ADD64 r3, r1, r11
ADDI64 r8, r254, 152d
ST r3, r254, 152a, 8h
LD r12, r254, 64a, 8h
LD r1, r254, 48a, 8h
ADDI64 r7, r254, 152d
ADD64 r4, r12, r1
ST r4, r254, 152a, 8h
LD r8, r254, 72a, 8h
LD r9, r254, 56a, 8h
ADD64 r11, r8, r9

View file

@ -1,12 +1,12 @@
foo:
ADDI64 r254, r254, -16d
LI32 r3, 2w
LI64 r5, 3d
ADDI64 r4, r254, 0d
ST r5, r254, 0a, 8h
ST r3, r254, 8a, 4h
ST r3, r254, 12a, 4h
LD r1, r4, 0a, 16h
LI64 r3, 3d
ADDI64 r2, r254, 0d
ST r3, r254, 0a, 8h
LI32 r6, 2w
ST r6, r254, 8a, 4h
ST r6, r254, 12a, 4h
LD r1, r2, 0a, 16h
ADDI64 r254, r254, 16d
JALA r0, r31, 0a
main:
@ -21,15 +21,15 @@ main:
ADDI64 r2, r254, 0d
JAL r31, r0, :foo
ST r1, r254, 0a, 16h
LI64 r7, 7d
LD r8, r254, 12a, 4h
ANDI r9, r8, 4294967295d
LD r5, r254, 24a, 4h
ANDI r8, r5, 4294967295d
LD r3, r254, 32a, 8h
ADD64 r11, r3, r8
ADD64 r3, r11, r9
SUB64 r1, r7, r3
LD r2, r254, 24a, 4h
LD r7, r254, 12a, 4h
ANDI r5, r2, 4294967295d
LD r1, r254, 32a, 8h
ANDI r11, r7, 4294967295d
ADD64 r10, r1, r5
ADD64 r2, r10, r11
LI64 r3, 7d
SUB64 r1, r3, r2
LD r31, r254, 48a, 8h
ADDI64 r254, r254, 56d
JALA r0, r31, 0a

View file

@ -1,21 +1,21 @@
main:
ADDI64 r254, r254, -96d
ST r31, r254, 64a, 32h
LI64 r32, 3d
LI64 r3, 4d
ADDI64 r33, r254, 0d
ADDI64 r34, r254, 48d
ST r3, r254, 48a, 8h
ST r32, r254, 56a, 8h
LD r3, r34, 0a, 16h
LI64 r2, 4d
ADDI64 r32, r254, 48d
ST r2, r254, 48a, 8h
LI64 r33, 3d
ST r33, r254, 56a, 8h
ADDI64 r34, r254, 0d
LD r3, r32, 0a, 16h
JAL r31, r0, :odher_pass
ST r1, r254, 0a, 16h
ADDI64 r11, r254, 16d
BMC r32, r11, 16h
ADDI64 r2, r254, 32d
BMC r34, r11, 16h
BMC r33, r2, 16h
BMC r34, r2, 16h
LD r7, r254, 40a, 8h
JNE r7, r32, :0
JNE r7, r33, :0
JAL r31, r0, :pass
JMP :1
0: LI64 r1, 0d

View file

@ -1,8 +1,8 @@
main:
ADDI64 r254, r254, -48d
ST r31, r254, 32a, 16h
LI64 r4, 0d
ADDI64 r32, r254, 16d
LI64 r4, 0d
CP r3, r4
JAL r31, r0, :maina
ST r1, r254, 16a, 16h
@ -21,27 +21,27 @@ maina:
ADDI64 r32, r254, 36d
JAL r31, r0, :small_struct
ST r1, r254, 36a, 4h
LI8 r2, 1b
LI8 r3, 3b
LI8 r1, 0b
ADDI64 r6, r254, 0d
ADDI64 r8, r6, 8d
ADDI64 r7, r254, 16d
ADDI64 r4, r254, 24d
ADDI64 r5, r254, 32d
BMC r32, r5, 4h
ST r1, r254, 24a, 1h
ST r1, r254, 25a, 1h
ST r1, r254, 26a, 1h
ST r3, r254, 27a, 1h
ST r2, r254, 28a, 1h
ST r1, r254, 29a, 1h
ST r1, r254, 30a, 1h
ST r1, r254, 31a, 1h
BMC r4, r7, 8h
BMC r4, r6, 8h
BMC r7, r8, 8h
LD r1, r6, 0a, 16h
ADDI64 r9, r254, 32d
BMC r32, r9, 4h
LI8 r2, 0b
ADDI64 r1, r254, 24d
ST r2, r254, 24a, 1h
ST r2, r254, 25a, 1h
ST r2, r254, 26a, 1h
LI8 r7, 3b
ST r7, r254, 27a, 1h
LI8 r10, 1b
ST r10, r254, 28a, 1h
ST r2, r254, 29a, 1h
ST r2, r254, 30a, 1h
ST r2, r254, 31a, 1h
ADDI64 r4, r254, 16d
BMC r1, r4, 8h
ADDI64 r7, r254, 0d
BMC r1, r7, 8h
ADDI64 r10, r7, 8d
BMC r4, r10, 8h
LD r1, r7, 0a, 16h
LD r31, r254, 40a, 16h
ADDI64 r254, r254, 56d
JALA r0, r31, 0a