This is the mail archive of the
cgen@sources.redhat.com
mailing list for the CGEN project.
decoder bug fix
- From: Doug Evans <dje at transmeta dot com>
- To: Ben Elliston <bje at redhat dot com>
- Cc: cgen at sources dot redhat dot com
- Date: Wed, 8 Jan 2003 19:44:49 -0800 (PST)
- Subject: decoder bug fix
- References: <m3znqbm365.fsf@scooby.brisbane.redhat.com>
Ben Elliston writes:
> I am committing the following patch (written by Graydon Hoare last
> year) that fixes an edge condition in the (-gen-decoder-switch) logic.
>
> Ben
>
> 2003-01-09 Ben Elliston <bje@redhat.com>
>
> From Graydon Hoare <graydon@redhat.com>:
> * utils-sim.scm (-gen-decoder-switch): Fix edge condition
> empty ISAs.
>
> Index: utils-sim.scm
> ===================================================================
> RCS file: /cvs/src/src/cgen/utils-sim.scm,v
> retrieving revision 1.8
> diff -u -p -r1.8 utils-sim.scm
> --- utils-sim.scm 20 Dec 2002 07:58:32 -0000 1.8
> +++ utils-sim.scm 9 Jan 2003 03:05:01 -0000
> @@ -938,9 +938,11 @@
> ";\n"
> indent " val = "))
> (string-append indent " unsigned int val = "))
> - (-gen-decode-bits (dtable-guts-bitnums table-guts)
> - (dtable-guts-startbit table-guts)
> - (dtable-guts-bitsize table-guts) "insn" lsb0?)
> + (if (< (length (dtable-guts-bitnums table-guts)) 1)
> + "0"
> + (-gen-decode-bits (dtable-guts-bitnums table-guts)
> + (dtable-guts-startbit table-guts)
> + (dtable-guts-bitsize table-guts) "insn" lsb0?))
> ";\n"
> indent " switch (val)\n"
> indent " {\n"
> <
This is ok with me,
though I can make an argument to fix -gen-decode-bits instead.
Without having tried it, seems like this should work.
--- utils-sim.scm.~1~ Sun Dec 22 14:57:08 2002
+++ utils-sim.scm Wed Jan 8 19:41:41 2003
@@ -550,8 +550,7 @@
pos (+ 1 count)
(cdr bitnums)))))))
(string-append
- "("
- (string-drop 3
+ "(0"
(string-map
(lambda (group)
(let* ((first (car group))
@@ -569,7 +568,7 @@
") & ("
(number->string (- (integer-expt 2 bits) 1))
" << " (number->string pos) "))")))
- groups))
+ groups)
")"))
)
[suitably re-indented of course]