This is the mail archive of the
cgen@sources.redhat.com
mailing list for the CGEN project.
[RFA:] Fix lsb? bug with insn fields beyond base insn size.
- From: Doug Evans <dje at transmeta dot com>
- To: Hans-Peter Nilsson <hans-peter dot nilsson at axis dot com>
- Cc: cgen at sources dot redhat dot com
- Date: Fri, 21 Jun 2002 11:58:49 -0700 (PDT)
- Subject: [RFA:] Fix lsb? bug with insn fields beyond base insn size.
- References: <200206190111.DAA19613@ignucius.axis.se>
Hans-Peter Nilsson writes:
> Ok to commit?
>
> 2002-06-19 Hans-Peter Nilsson <hp@axis.com>
>
> * types.scm (bitrange-overlap?): Handle lsb0?.
> * utils-gen.scm (-gen-extract-word): Ditto.
>
> Index: types.scm
> ===================================================================
> RCS file: /cvs/src/src/cgen/types.scm,v
> retrieving revision 1.1.1.1
> diff -p -c -r1.1.1.1 types.scm
> *** types.scm 28 Jul 2000 04:11:52 -0000 1.1.1.1
> --- types.scm 19 Jun 2002 00:10:19 -0000
> ***************
> *** 241,251 ****
> ; Return a boolean indicating if two bitranges overlap.
>
> (define (bitrange-overlap? start1 length1 start2 length2 lsb0?)
> ! ; ??? lsb0?
> ! (let ((end1 (+ start1 length1))
> ! (end2 (+ start2 length2)))
> ! (not (or (<= end1 start2)
> ! (>= start1 end2))))
> )
>
> ; Return a boolean indicating if BITPOS is beyond bitrange START,LEN.
> --- 241,255 ----
> ; Return a boolean indicating if two bitranges overlap.
>
> (define (bitrange-overlap? start1 length1 start2 length2 lsb0?)
> ! (if lsb0?
> ! (let ((end1 (- start1 length1))
> ! (end2 (- start2 length2)))
> ! (not (or (<= start1 end2)
> ! (>= end1 start2))))
> ! (let ((end1 (+ start1 length1))
> ! (end2 (+ start2 length2)))
> ! (not (or (<= end1 start2)
> ! (>= start1 end2)))))
> )
>
> ; Return a boolean indicating if BITPOS is beyond bitrange START,LEN.
I don't know why bitrange-overlap? was written to use not/or instead
of just and. Patch is approved, modulo converting it to this.
(define (bitrange-overlap? start1 length1 start2 length2 lsb0?)
(if lsb0?
(let ((end1 (- start1 length1))
(end2 (- start2 length2)))
(and (< end1 start2)
(> start1 end2)))
(let ((end1 (+ start1 length1))
(end2 (+ start2 length2)))
(and (> end1 start2)
(< start1 end2))))
)
sound ok?
[utils-gen.scm patch discussion to follow]
[And sorry for the delay, I know I said a day.
Took awhile to update my fsf tree and get it building again.]