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