aboutsummaryrefslogtreecommitdiff
path: root/examples/records.hdass
blob: 8e87a4c9c02746574be8008d09106d32cfbdf678 (plain)
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
[entry: main]

// An enum of status codes and a struct describing a memory layout. Stores two
// fields into a stack instance, reads them back, and exits with their sum.
enum Status
{
    Ok,
    Warn,
    Fail
}

struct Pair
{
    a: qword
    b: qword
}

const SYS_EXIT = 60

proc main
{
    stack pair[Pair.size]

    rsi = pair
    rsi += Pair.a
    rbx = 40
    ^rsi = rbx            // pair.a

    rsi = pair
    rsi += Pair.b
    rcx = Status.Fail     // 2
    ^rsi = rcx            // pair.b

    rsi = pair
    rsi += Pair.a
    rdi = ^rsi            // load a = 40
    rsi = pair
    rsi += Pair.b
    rax = ^rsi            // load b = 2
    rdi += rax            // 42

    rax = SYS_EXIT
    syscall
}