more import preparation
This commit is contained in:
@@ -1,8 +1,16 @@
|
||||
println("testy");
|
||||
let x = 3;
|
||||
print_dec(x);
|
||||
subtest();
|
||||
start();
|
||||
|
||||
fn subtest() {
|
||||
fn el() {
|
||||
println("helo el");
|
||||
}
|
||||
el();
|
||||
}
|
||||
|
||||
struct Test {
|
||||
a: 64,
|
||||
b: 64,
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
fn start() {
|
||||
let x = asm(out = t0) {
|
||||
li t0, 40
|
||||
};
|
||||
exit(x);
|
||||
}
|
||||
import util;
|
||||
|
||||
util.println("hello!");
|
||||
let x = 39;
|
||||
util.exit(x);
|
||||
|
||||
fn exit(status: 64) {
|
||||
asm (a0 = status) {
|
||||
li a7, 93
|
||||
ecall
|
||||
};
|
||||
}
|
||||
|
||||
146
data/util.lang
Normal file
146
data/util.lang
Normal file
@@ -0,0 +1,146 @@
|
||||
fn exit(status: 64) {
|
||||
asm (a0 = status) {
|
||||
li a7, 93
|
||||
ecall
|
||||
};
|
||||
}
|
||||
|
||||
fn println(msg: slice<8>) {
|
||||
print(msg);
|
||||
print("\n");
|
||||
}
|
||||
|
||||
fn print(msg: slice<8>) {
|
||||
asm (a1 = &msg) {
|
||||
ld a2, 8, a1
|
||||
ld a1, 0, a1
|
||||
li a0, 1
|
||||
li a7, 64
|
||||
ecall
|
||||
}
|
||||
}
|
||||
|
||||
fn print_hex(x: 64) {
|
||||
let i = 64;
|
||||
loop {
|
||||
i = sub(i, 4);
|
||||
let c = and(shr(x, i), 15);
|
||||
if gt(c, 9) {
|
||||
c = add(c, 7);
|
||||
};
|
||||
c = add(c, 48);
|
||||
asm (a1 = &c) {
|
||||
li a2, 1
|
||||
li a0, 1
|
||||
li a7, 64
|
||||
ecall
|
||||
};
|
||||
if lt(i, 1) {
|
||||
break;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
fn print_dec(x: 64) {
|
||||
let i = 1;
|
||||
loop {
|
||||
if gt(i, x) {
|
||||
if lt(i, 2) {
|
||||
print("0");
|
||||
return;
|
||||
};
|
||||
break;
|
||||
};
|
||||
i = mul(i, 10);
|
||||
};
|
||||
let found = 0;
|
||||
loop {
|
||||
i = div(i, 10);
|
||||
let c = rem(div(x, i), 10);
|
||||
if and(lt(c, 1), not(found)) {
|
||||
continue;
|
||||
};
|
||||
found = 1;
|
||||
if gt(c, 9) {
|
||||
c = add(c, 7);
|
||||
};
|
||||
c = add(c, 48);
|
||||
asm (a1 = &c) {
|
||||
li a2, 1
|
||||
li a0, 1
|
||||
li a7, 64
|
||||
ecall
|
||||
};
|
||||
if lt(i, 2) {
|
||||
break;
|
||||
};
|
||||
};
|
||||
if not(found) {
|
||||
print("0");
|
||||
}
|
||||
}
|
||||
|
||||
fn add(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
add t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn mul(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
mul t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn div(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
div t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn sub(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
sub t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn rem(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
rem t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn shr(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
srl t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn shl(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
sll t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn lt(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
slt t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn gt(a: 64, b: 64) -> 64 {
|
||||
lt(b, a)
|
||||
}
|
||||
|
||||
fn and(a: 64, b: 64) -> 64 {
|
||||
asm (t0 = a, t1 = b, out = t0) {
|
||||
and t0, t0, t1
|
||||
}
|
||||
}
|
||||
|
||||
fn not(a: 64) -> 64 {
|
||||
asm (t0 = a, out = t0) {
|
||||
xori t0, t0, 1
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user