https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119779
--- Comment #11 from Zbigniew <zbigniew2011 at gmail dot com> ---
(* gm2 exampleadd2.mod -o exampleadd2 -masm=intel *)
MODULE exampleadd2 ;
FROM libc IMPORT printf, exit ;
PROCEDURE Example (foo, bar: LONGCARD) : CARDINAL ;
VAR
myout: LONGCARD ;
BEGIN
ASM VOLATILE (
"mov rax, %[left]; add rax, %[right]; mov %[output], rax;"
: [output] "=rm" (myout) (* outputs *)
: [left] "rm" (foo), [right] "rm" (bar) (* inputs *)
: "rax") ; (* we trash *)
RETURN( myout )
END Example ;
VAR
a, b, c: CARDINAL ;
BEGIN
a := 1 ;
b := 2 ;
c := Example (a, b) ;
IF c # 3
THEN
printf ("Example procedure function failed to return 3, seen %d", c) ;
exit (1)
ELSE
printf ("It's OK, procedure function returned 3, seen %d", c) ;
exit (0)
END
END exampleadd2.