def fact ()
  local n:
    n <- copy %rdi;
    jumpif lte n, 1 -> fini, rec;

    fini:
    %rax <- copy 1;
    ret;

    rec:
    %rdi <- sub n, 1;
    fact();
    %rax <- mul %rax, n;
    ret;
end

globals (x)
  %rdi <- copy 5;
  fact();
  x <- copy %rax;

  %rdi <- copy x;
  observe_int();

  exit;
end