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