Landin library reference discuss source

compiler/tests/fixtures/runtime/library-platform-xtensa/main.ldn

1import platform/xtensa
2
3fixed if compiler.arch == xtensa then
4    nested_masks_restore: () -> (ok: bool) =
5        before := xtensa.interrupt_mask()
6        enabled := xtensa.enabled_lines()
7        outer := xtensa.disable_interrupts()
8        inner := xtensa.disable_interrupts()
9        masked := xtensa.interrupt_mask()
10        xtensa.compiler_barrier()
11        xtensa.restore_interrupts(inner)
12        still := xtensa.interrupt_mask()
13        xtensa.restore_interrupts(outer)
14        after := xtensa.interrupt_mask()
15        low := xtensa.mask_level_one()
16        only_low := xtensa.interrupt_mask()
17        xtensa.restore_interrupts(low)
18        xtensa.set_enabled_lines(enabled)
19        xtensa.device_barrier()
20        xtensa.completion_barrier()
21        ok = masked == 15 and still == 15 and after == before and only_low == 1
22             and xtensa.enabled_lines() == enabled
23    end nested_masks_restore
24else
25    nested_masks_restore: () -> (ok: bool) = ok = true end nested_masks_restore
26end if
27
28public main: () -> (code: i32) =
29    code = 1
30    if nested_masks_restore() then code = 42 end if
31end main