]> granicus.if.org Git - yasm/commitdiff
Fix incorrect invalidation of [eax+ebx+ecx-eax] and others like it.
authorPeter Johnson <peter@tortall.net>
Thu, 3 Oct 2002 07:38:15 +0000 (07:38 -0000)
committerPeter Johnson <peter@tortall.net>
Thu, 3 Oct 2002 07:38:15 +0000 (07:38 -0000)
svn path=/trunk/yasm/; revision=725

modules/arch/x86/x86expr.c
src/arch/x86/x86expr.c

index 04417d3004ca3ed6404162c35da32d242ebee686..9855a087b4778f431c0749a7ee68907a456a0cd7 100644 (file)
@@ -293,7 +293,7 @@ x86_expr_checkea_getregusage(expr **ep, /*@null@*/ int *indexreg, void *data,
                        return 0;
                    (*reg) +=
                        intnum_get_int(e->terms[i].data.expn->terms[1].data.intn);
-                   if (indexreg)
+                   if (indexreg && *reg > 0)
                        *indexreg = reg-(int *)data;
                }
            }
@@ -563,7 +563,7 @@ x86_expr_checkea(expr **ep, unsigned char *addrsize, unsigned char bits,
                ErrorAt(e->line, _("invalid effective address"));
                return 0;
            }
-           if (i != indexreg && reg32mult[i] == 1)
+           if (i != indexreg && reg32mult[i] == 1 && basereg == REG32_NONE)
                basereg = i;
            else if (indexreg == REG32_NONE && reg32mult[i] > 0)
                indexreg = i;
index 04417d3004ca3ed6404162c35da32d242ebee686..9855a087b4778f431c0749a7ee68907a456a0cd7 100644 (file)
@@ -293,7 +293,7 @@ x86_expr_checkea_getregusage(expr **ep, /*@null@*/ int *indexreg, void *data,
                        return 0;
                    (*reg) +=
                        intnum_get_int(e->terms[i].data.expn->terms[1].data.intn);
-                   if (indexreg)
+                   if (indexreg && *reg > 0)
                        *indexreg = reg-(int *)data;
                }
            }
@@ -563,7 +563,7 @@ x86_expr_checkea(expr **ep, unsigned char *addrsize, unsigned char bits,
                ErrorAt(e->line, _("invalid effective address"));
                return 0;
            }
-           if (i != indexreg && reg32mult[i] == 1)
+           if (i != indexreg && reg32mult[i] == 1 && basereg == REG32_NONE)
                basereg = i;
            else if (indexreg == REG32_NONE && reg32mult[i] > 0)
                indexreg = i;