From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12208 invoked by alias); 21 Jun 2002 18:59:06 -0000 Mailing-List: contact cgen-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cgen-owner@sources.redhat.com Received: (qmail 12124 invoked from network); 21 Jun 2002 18:59:02 -0000 Received: from unknown (HELO neon-gw.transmeta.com) (63.209.4.196) by sources.redhat.com with SMTP; 21 Jun 2002 18:59:02 -0000 Received: (from root@localhost) by neon-gw.transmeta.com (8.9.3/8.9.3) id LAA08972; Fri, 21 Jun 2002 11:58:58 -0700 Received: from mailhost.transmeta.com(10.1.1.15) by neon-gw.transmeta.com via smap (V2.1) id xma008925; Fri, 21 Jun 02 11:58:47 -0700 Received: from casey.transmeta.com (casey.transmeta.com [10.10.25.22]) by deepthought.transmeta.com (8.11.6/8.11.6) with ESMTP id g5LIwnj29455; Fri, 21 Jun 2002 11:58:49 -0700 (PDT) Received: (from dje@localhost) by casey.transmeta.com (8.9.3/8.7.3) id LAA16333; Fri, 21 Jun 2002 11:58:49 -0700 From: Doug Evans MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15635.30569.363814.376285@casey.transmeta.com> Date: Fri, 21 Jun 2002 11:59:00 -0000 To: Hans-Peter Nilsson Cc: cgen@sources.redhat.com Subject: [RFA:] Fix lsb? bug with insn fields beyond base insn size. In-Reply-To: <200206190111.DAA19613@ignucius.axis.se> References: <200206190111.DAA19613@ignucius.axis.se> X-SW-Source: 2002-q2/txt/msg00031.txt.bz2 Hans-Peter Nilsson writes: > Ok to commit? > > 2002-06-19 Hans-Peter Nilsson > > * 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.]