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.

Reply via email to