translate: don't overpromote to fastcall
authornotaz <notasas@gmail.com>
Sat, 24 Oct 2015 20:53:05 +0000 (23:53 +0300)
committernotaz <notasas@gmail.com>
Sat, 24 Oct 2015 20:53:05 +0000 (23:53 +0300)
this creates false register deps and leads to problems

tools/translate.c

index 44d6fb4..8ebda82 100644 (file)
@@ -8634,8 +8634,9 @@ static void output_hdr_fp(FILE *fout, const struct func_prototype *fp,
       argc_normal++;
       regmask_dep = 0;
     }
-    else if (regmask_dep && (fp->is_stdcall || fp->argc_stack == 0)
-      && (regmask_dep & ~(mxCX | mxDX)) == 0)
+    else if ((regmask_dep == (mxCX | mxDX)
+              && (fp->is_stdcall || fp->argc_stack == 0))
+      || (regmask_dep == mxCX && fp->argc_stack == 0))
     {
       fprintf(fout, "  __fastcall    ");
       if (!(regmask_dep & (1 << xDX)) && fp->argc_stack == 0)