-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.ursl
72 lines (59 loc) · 1.53 KB
/
example.ursl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
bits 8
minstack 200
minheap 0
.str [ "Hello, World!\n" 0 ]
.num 0x20
.nums [ 1 2 3 4 /* ... */ @MAX ]
.vtable_or_something [ $fib ]
.matrix8x8 [
[ 00 01 02 03 04 05 06 07 ]
[ 08 09 10 11 12 13 14 15 ]
[ 16 17 18 19 20 21 22 23 ]
[ 24 25 26 27 28 29 30 31 ]
[ 32 33 34 35 36 37 38 39 ]
[ 40 41 42 43 44 45 46 47 ]
[ 48 49 50 51 52 53 54 55 ]
[ 56 57 58 59 60 61 62 63 ]
]
.thats_awesome "That's awesome!"
// inst swap [a b] -> [b a]
func $main {
const 20
const $fib
perm [a b] -> [b a]
// This is also a testament to how unsafe "extern icall" is. It's not that hard to just completely fuck up the calling convention and get weird unexplainable behaviour.
extern "Hexagn" icall 1 -> 1
out %NUMB
}
// return a constant 0 in the first slot because this should make it compatible with Hexagn
// PLEASE DO NOT DO THIS IT IS JUST FOR TESTING MY CODE, THIS IS THE HACKIEST WAY TO CREATE EXTERN FUNCTIONS FFS
func $fib 1 -> 2 {
const 0
get 0
dup const 0 eq branch :base_case
dup const 1 eq branch :base_case
dup const 1 sub call $fib swap pop
swap const 2 sub call $fib swap pop
add
ret
height 2
label :base_case
ret
}
// Example of ``.`` being allowed in a function name, and how it is escaped
func $example.module.func {
}
func $print_string 1 -> 0 {
get 0
label :loop
dup
load
dup
const 0
eq branch :exit
out %TEXT
jump :loop
height 2
label :exit
pop pop
}