This is the mail archive of the cgen@sources.redhat.com mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA:] Fix lsb? bug with insn fields beyond base insn size.


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.]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]