From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id A26F03858402 for ; Tue, 14 Sep 2021 21:34:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A26F03858402 Received: from fencepost.gnu.org ([2001:470:142:3::e]:41008) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQG4C-0000sW-PX; Tue, 14 Sep 2021 17:34:12 -0400 Received: from [141.143.193.79] (port=52936 helo=termi.gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQG4C-0001MA-Fg; Tue, 14 Sep 2021 17:34:12 -0400 From: "Jose E. Marchesi" To: "Guillermo E. Martinez via Cgen" Subject: Re: [PATCH CGEN v1] cgen: Compute correct mask and values when offset in define-ifield is not 0. References: <20210820023254.2575757-1-guillermo.e.martinez@oracle.com> Date: Tue, 14 Sep 2021 23:34:09 +0200 In-Reply-To: <20210820023254.2575757-1-guillermo.e.martinez@oracle.com> (Guillermo E. Martinez via Cgen's message of "Thu, 19 Aug 2021 21:32:54 -0500") Message-ID: <87v932suy6.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cgen@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cgen mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Sep 2021 21:34:14 -0000 Hi Guillermo. > diff --git a/utils.scm b/utils.scm > index 29b72ff..3573eff 100644 > --- a/utils.scm > +++ b/utils.scm > @@ -804,14 +804,14 @@ > ; Otherwise START denotes the most significant bit. > ; N is assumed to fit in the field. > > -(define (word-value start length size lsb0? start-lsb? value) > +(define (word-value start length size offset lsb0? start-lsb? value) > (if lsb0? > (if start-lsb? > (logsll value start) > - (logsll value (+ (- start length) 1))) > + (logsll value (+ (- start length) offset 1))) > (if start-lsb? > (logsll value (- size start 1)) > - (logsll value (- size (+ start length))))) > + (logsll value (- size (+ start length offset))))) > ) > > ; Return a bit mask of LENGTH bits in a word of SIZE bits starting at START. > @@ -820,14 +820,14 @@ > ; START-LSB? is non-#f if START denotes the least significant bit. > ; Otherwise START denotes the most significant bit. > > -(define (word-mask start length size lsb0? start-lsb?) > +(define (word-mask start length size offset lsb0? start-lsb?) > (if lsb0? > (if start-lsb? > (logsll (mask length) start) > - (logsll (mask length) (+ (- start length) 1))) > + (logsll (mask length) (+ (- start length) offset 1))) > (if start-lsb? > (logsll (mask length) (- size start 1)) > - (logsll (mask length) (- size (+ start length))))) > + (logsll (mask length) (- size (+ start length offset))))) > ) > > ; Extract LENGTH bits at bit number START in a word of SIZE bits from VALUE. I just noticed that you forgot to add entries for OFFSET to the comment blocks of word-value and word-mask.