From cfcd8d2370c04a464d3fe877f9c736f6729c9b24 Mon Sep 17 00:00:00 2001 From: devans Date: Thu, 10 Sep 2009 08:07:04 +0000 Subject: [PATCH] * insn.scm (/parse-insn-format): Improve error message for missing or too many bits. --- cgen/ChangeLog | 1 + cgen/insn.scm | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/cgen/ChangeLog b/cgen/ChangeLog index 48d766bfe1..7824b947b3 100644 --- a/cgen/ChangeLog +++ b/cgen/ChangeLog @@ -1,6 +1,7 @@ 2009-09-10 Doug Evans * insn.scm (/parse-insn-format): New arg `verify?', all callers updated. + Improve error message for missing or too many bits. (/insn-parse): Don't verify iformat for virtual insns. * sid-decode.scm (cgen-decode.cxx): Remove redundant call to diff --git a/cgen/insn.scm b/cgen/insn.scm index 606824005b..984425d156 100644 --- a/cgen/insn.scm +++ b/cgen/insn.scm @@ -686,7 +686,14 @@ (if verify? - (let ((base-len (isa-base-insn-bitsize isa))) + (let ((base-len (isa-base-insn-bitsize isa)) + (pretty-print-iflds (lambda (iflds) + (if (null? iflds) + " none provided" + (string-map (lambda (f) + (string-append " " + (ifld-pretty-print f))) + iflds))))) ;; Perform some error checking. ;; Look for overlapping ifields and missing bits. @@ -702,11 +709,19 @@ ;; have problems, and I don't have time to fix them right now. (cond ((< base-iflds-length base-len) (parse-warning context - "insufficient number of bits specified in base insn" + (string-append + "insufficient number of bits specified in base insn\n" + "ifields:" + (pretty-print-iflds parsed-ifld-list) + "\nprovided spec") ifld-list)) ((> base-iflds-length base-len) (parse-warning context - "too many or duplicated bits specified in base insn" + (string-append + "too many or duplicated bits specified in base insn\n" + "ifields:" + (pretty-print-iflds parsed-ifld-list) + "\nprovided spec") ifld-list))) ) )) -- 2.11.0