# HG changeset patch # User Shinji KONO # Date 1396267876 -32400 # Node ID 043b9bd024a19734cc9110af4a766749e5fb3df1 # Parent e12f4a4d796dc2a78dccef0f2c70fd1a1c11b18c arg_order in inline. diff -r e12f4a4d796d -r 043b9bd024a1 mc-code-i64.c --- a/mc-code-i64.c Mon Mar 31 19:41:37 2014 +0900 +++ b/mc-code-i64.c Mon Mar 31 21:11:16 2014 +0900 @@ -436,7 +436,20 @@ #define ENDIAN_L 0 #define ENDIAN_D 0 -int eval_order = REVERSE; +/* + Eary implementation uses pushl arg for function call. gcc + use the same arguement evaluation order. Of course, the + order is unspecified in C language, but it is better to + use same argument evaluation order. Especially for test + program. + */ +#ifdef __llvm__ +// llvm on mavericks has different arg order evaluation +#define ARG_ORDER NORMAL +#else +#define ARG_ORDER REVERSE +#endif +int eval_order = ARG_ORDER; #define TEXT_EMIT_MODE 0 #define DATA_EMIT_MODE 1 @@ -1291,6 +1304,7 @@ register_usage(char *s) { int i; + if (!lsrc) return ; printf("## %d: %s:",lineno,s); if (creg) printf(" creg=%s ",register_name(creg,0)); for(i=1;i