aboutsummaryrefslogtreecommitdiff
path: root/examples/records.hdass
blob: 98008394bf7fe253e8a7f32b2131b788a5f11926 (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
[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[16]        // Pair.size

    rsi = pair
    rbx = 40
    ^rsi = rbx            // pair.a (offset 0)

    rsi = pair
    rsi += Pair.b
    rcx = Status.Fail     // 2
    ^rsi = rcx            // pair.b (offset 8)

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

    rax = SYS_EXIT
    syscall
}