From 3fb86f2cd650445c3fca877d00752050bd003ded Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Sat, 25 Jul 2009 19:12:10 -0700 Subject: assemble: defer "operand size missing" until end of type check Defer the "operand size missing" error until we know all the other operands have the correct type. Otherwise we'll end up with false positives, which result in noise entered into the xsizeflags array, thus causing fuzzy matching to fail. It's possible we should defer it even further. Signed-off-by: H. Peter Anvin --- assemble.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assemble.c b/assemble.c index 829cb1be..b4ba4442 100644 --- a/assemble.c +++ b/assemble.c @@ -2053,6 +2053,7 @@ static enum match_result matches(const struct itemplate *itemp, insn *instruction, int bits) { int i, size[MAX_OPERANDS], asize, oprs, ret; + bool opsizemissing = false; ret = MOK_GOOD; @@ -2178,10 +2179,13 @@ static enum match_result matches(const struct itemplate *itemp, if ((itemp->opd[i] & ~type & ~SIZE_MASK) || (type & SIZE_MASK)) return MERR_INVALOP; else - return MERR_OPSIZEMISSING; + opsizemissing = true; } } + if (opsizemissing) + return MERR_OPSIZEMISSING; + /* * Check operand sizes */ -- cgit v1.2.1