From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id B43083858C39 for ; Wed, 15 Sep 2021 18:04:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B43083858C39 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 18FGe1G0008933; Wed, 15 Sep 2021 18:04:48 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3b3jysgr56-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 15 Sep 2021 18:04:47 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 18FHkaF0010973; Wed, 15 Sep 2021 18:04:46 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2102.outbound.protection.outlook.com [104.47.58.102]) by aserp3030.oracle.com with ESMTP id 3b0jgf0at6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 15 Sep 2021 18:04:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f5zoMmO8DRw2SkiHm126fmUr/kYfFElj6Uq4Jj7JTSF+e2d7L4C6aomrLzS4uj4dzsS+x24ncQku3zfLm87NA4BERIhTDcBQs43ptFp08u1cIO6QMqOKxVy4Siqd5tfSfOZivOI7SR75syNROirueNf2RfB24jKgE0ekW0kjIBMaRzFxE9AbHloToIr33x10/MEJN7JrH2GYrMIjyteJma3/GuySTHIgtxtCCkK/6VOcF7avpUXSeTmAmUH7zAcP5SR24EkDf6MaRXSAA+csPvZGBwxNycgeIqDRoadSddYLikdystufjBB9M0L3ea8PFMxepycyAQII/MlSRN7X0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=fNCe+n5NwRzuHXQ+6th34qapQaAbxB0zc2wy4cHkepA=; b=XrcxlYvQHC7i0Yd2TOifF4GyKjEYP7V5I+Q2bn5hVDZA3CCxVXWtZfU9xnxuN17z3ZkQ70J4mtaxnkmSfaZ40pSCA+hnf9spe6u4BZ7HoHribicaQeYtfzf+xxDgPa3U0QM33ggb2oM5L4NF30M4YFuCFkp3dxaVQZkJl5Sf5rPyfbTV8RRAaBRO2RfGloA4hp7wKsOG/TnWZlDNTIl5hRRSreV8vga18w/B3lc9YJo9RhW6Z5qDVqRe2reVb5rTWXerdb3ypJ86++rIQViaUJMNu4idhSz0xBXe5pDIB8HeDYQsO161SeLvGa3+Pmwy4Q588DfTyc3aVgYdaIb6lw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from BL0PR10MB2852.namprd10.prod.outlook.com (2603:10b6:208:76::22) by MN2PR10MB4367.namprd10.prod.outlook.com (2603:10b6:208:1d3::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Wed, 15 Sep 2021 18:04:44 +0000 Received: from BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::3dec:9a58:e63e:c452]) by BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::3dec:9a58:e63e:c452%6]) with mapi id 15.20.4500.019; Wed, 15 Sep 2021 18:04:44 +0000 From: Guillermo Martinez To: "Guillermo E. Martinez via Cgen" , "Jose E. Marchesi" Subject: Re: [PATCH v2] cgen: Compute correct mask and values when offset in define-ifield is not 0. Thread-Topic: [PATCH v2] cgen: Compute correct mask and values when offset in define-ifield is not 0. Thread-Index: AQHXqk9KgQmlgNV5/U6RyXxKhyS0wqulTqyPgAAVCAA= Date: Wed, 15 Sep 2021 18:04:44 +0000 Message-ID: <1807213.tdWV9SEqCh@sali> References: <20210820023254.2575757-1-guillermo.e.martinez@oracle.com> <20210915163212.157394-1-guillermo.e.martinez@oracle.com> <87tuil943b.fsf@gnu.org> In-Reply-To: <87tuil943b.fsf@gnu.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dfaca0c8-56aa-40e3-50a0-08d978734c74 x-ms-traffictypediagnostic: MN2PR10MB4367: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +7BlGGdq2GmYmBOu2kS7k6FraIV7jI+DXwc3tnpv+3xoIH+MB878VEPos8i028n+FNvBiA3tUclgedR3Gi7j+3l7+KlaKgxC1z47PJdw8k3P3v/SA4TVFqk5K6R8/cgTz0KKuzBEnMvyaL2sgA6jVfR6ekh3kx84yVsvmiC9RdOYNbP6pYu4uUcX2eSk1cskO7YIVi0/24+eDTNnFtlXroNWNVqsSMVgQAKwB/x3a9JDS+Mg5NZYDI9ViF7BoJz9N7KAetrUNSEKsUlIQtgswB6bZh/LL51oXi0ri3+P4/7wZUWTjq0g/jU9d2jbsZcOR6zWSzqQQ9on0VXEWA7UFchlwM+DdWav54ywqmZNvMxW3Sw42QpQ1WUB8Z+Jw6S2SrExhTDLPQYS/N/uaZ1zkaqYyt55Uf7tUctERybe/DwUKn7tXo0LVxSgz3Dc6fb1cgOi4YklcCryyoHj1igOmtd/3xbxVivT/T0vQwOsSPtL9tf4ZxZZRtggJf4xBbWPSPHhRG8Sg9C/pxNsCwrA0N+99YSkqb8bOCyHzOcvr6p6eqqL+2Z9tjgR272x6ak9H5kGnjP1SQDu9KDYOxQsd0SszDWrTZUyqr9Xc369sZHOhPP2x35ZFHqnswKllXBu73tAAudKlsoAP/1zQbmEsuLMqhh1SonI3eWnNdxXichhnZTvZo76vFuumOBNMmTBmWtkMjhjFAzlP3hYDSm87+XedjyaFO9JVSkdWTKL6hI= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR10MB2852.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(7916004)(396003)(346002)(376002)(136003)(39860400002)(366004)(91956017)(66946007)(76116006)(64756008)(6486002)(33716001)(66556008)(66446008)(110136005)(8936002)(8676002)(478600001)(6506007)(122000001)(38070700005)(66476007)(83380400001)(9686003)(6512007)(316002)(86362001)(186003)(38100700002)(26005)(71200400001)(53546011)(5660300002)(2906002)(39026012); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?pFkV4s+wFKs3aaMcVsel5jwnJ5eJQTE5lbx1iIAhPxo4aYVQZbqtZrcStZhG?= =?us-ascii?Q?PSnnkdesmcMSpzb6b9mfYwfcjW73EkQfHyJHHPNqodBYj80qv6mrf7flhpWa?= =?us-ascii?Q?y+6WVupyKr9MWcCDEv7lTbKMzm2m1gzUn6XuiqpRyErNxRWH/QoJhhvmD6AR?= =?us-ascii?Q?6MiZJO4jPVERYtu4degk0NLa2dwMJGK8HE9Hrb/FlsnyXGyP6ODmZU02skvd?= =?us-ascii?Q?1n2h+5A3K9k86idLEw4CGza5I3LIUQF/Hu2AqL8qPuXyUjvzfw9AMrrLVKSc?= =?us-ascii?Q?HPZqfZvfXh5WehKBTFT3uOyDl9gsB00wi5tqUhxHXQXuv4eA6BQF6ujcHoIB?= =?us-ascii?Q?iiCNxn4lysMMvJ4OGNCmJMY0yCsyil/VqKR1+WoftM4bWLgUwk/qvrULnkd5?= =?us-ascii?Q?z2CCAQU13WbAhaLanAev7Uh9jsGDA8moXiFI2ZqVYMmKMrjUT4QpLEsDRxBV?= =?us-ascii?Q?j85nkdFN6q2almnu708vNtqz5eOHHQzSHnhLx0kGg5GkpDwIcf8abO9W+B1r?= =?us-ascii?Q?5U8yQF3juP50GWckwTooFT0OCIqWtA4vzY9F6998QKcnXuNvM/fgbJgsudhx?= =?us-ascii?Q?1L/lREn6737WI9NekVyRr1qHpTO5jsYNOt6ubjS+YvWQWBympO6jrEktzkGm?= =?us-ascii?Q?JMNJe/plULUQjeCUIVZeIg2YSG8xV9aOzKHGP+GFGMOhhOWqGLkCWzgk3LQa?= =?us-ascii?Q?lYpI41C4TlT4wIoJrkw1fdDHdW0rLqsBezYHPmi8Eu0QSIrkXtPBIfrfOJjY?= =?us-ascii?Q?vYWycEyW918QLeOqg736hCdbHv6Eyc5uvDhw2ckjvmEYG9NfFuGy7SZlJeVs?= =?us-ascii?Q?25BNjG3oTAOKan0gM4veAKMFUv76at+RA+CXgS8uylVu/zPwloQ1an9oSWmT?= =?us-ascii?Q?VvXQU8yLU/Iib/jRAeC5NosGadvIKnKc+yBfhYCUQVtTkVsckrmXETfcPBQd?= =?us-ascii?Q?qAiEWk+LLw0/DqubdwDAcufC8LddSNkm7wkvL/3/5UdNrEVKXdmA+3AUyJgf?= =?us-ascii?Q?/VMSIJR5k8p1IoPKIfZTVaFspDyFLBkfsjXNqvxdL1LHSdIx1Jr//XbyA73h?= =?us-ascii?Q?Cy9OdFQ++newAQV/Y7VATOlZjiBFQU/CxCESiUs4zOQI9XHi4qSikYOqctzz?= =?us-ascii?Q?Dhj5H29F/Rc74i+FA55HhKpeyy4kfP3VAbE9C4DPEON/9xSKRACgoe+OK7Qy?= =?us-ascii?Q?cb1kujN1X6xTTD5x4ySe+Y+VDYjEgCREVPYo96fRLCkqQGYjNVgjQ3h4u3ve?= =?us-ascii?Q?e+N686mTENwA6E78JdSLxoahCWCUlFl4f8dc5Q1GmTFU/poSRAHCtO1pM+hP?= =?us-ascii?Q?/fqE21QYYGrw0mntxG0LftP+?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="us-ascii" Content-ID: <4A363BFE3944A046AD2BAE1FDAD7D2FB@namprd10.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL0PR10MB2852.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfaca0c8-56aa-40e3-50a0-08d978734c74 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Sep 2021 18:04:44.8569 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 0tlvazcupPpIWOx+7PffjmhmM3x90pMvnwsqHIjCHn7JNhNuQYIVg7wAVNawhBl4Zz9x2fpz6GdfaJV9YD5cFP/ahfAQrtggtY8+/VE5Jd8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB4367 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10108 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2109030001 definitions=main-2109150105 X-Proofpoint-GUID: 58HWz9yoojW_pvQaC84nSCIiBh9oMixF X-Proofpoint-ORIG-GUID: 58HWz9yoojW_pvQaC84nSCIiBh9oMixF X-Spam-Status: No, score=-14.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: Wed, 15 Sep 2021 18:04:56 -0000 On Wednesday, September 15, 2021 11:49:12 AM CDT Jose E. Marchesi wrote:=0A= =0A= Hi Jose,=0A= great!=0A= =0A= Thanks to you!=0A= =0A= > =0A= > Hi Guillermo.=0A= > =0A= > I just installed this version of the patch on your behalf.=0A= > Thanks!=0A= > =0A= > > If an instruction field is defined in a long form, assigning=0A= > > an offset different to 0 the mask and constant values are not=0A= > > computed appropriately:=0A= > >=0A= > > (dwf f-op-fld-offset "field with an offset" (all-isas) 32 64 31 32 UINT= )=0A= > > ;;=0A= > > ;; 63 39 32 31 7 0=0A= > > ;; +---------------------+-------....-------------+=0A= > > ;; |/////////////////////| | |=0A= > > ;; +---------------------+-------....-------------+=0A= > > ;; |=0A= > > ;; |=0A= > > ;; |=0A= > > ;; |=0A= > > ;; +---> OP_FLD_OFFSET_...=0A= > >=0A= > > bitrange: #(object 29 32 31 32 64 #t)=0A= > > mask: 0xffffffff=0A= > > value: simplify.inc:173:3: Error: Instruction has opcode=0A= > > bits outside of its mask.=0A= > >=0A= > > Fixed to:=0A= > >=0A= > > bitrange: #(object 29 32 31 32 64 #t)=0A= > > mask: 0xffffffff00000000=0A= > > value: 0xaa00000000=0A= > >=0A= > > word-length relies in base-len (sum of length of all fields=0A= > > in bitrange objects that conform the instruction), word-value=0A= > > and word-mask are not using the offset entry in the bitrange=0A= > > object to calculate the accurate values when constant fields=0A= > > are provided (ifld-constant? #t), so one more argument=0A= > > is passed to those procedures to be used in the compute.=0A= > >=0A= > > Regression tests to the following targets were done:=0A= > >=0A= > > bpf arm-linuxeabi arm-nacl arm-netbsdelf arm-nto arm-pe=0A= > > arm-symbianelf arm-vxworks arm-wince-pe aarch64-linux alpha-dec-vms=0A= > > alpha-linux alpha-linuxecoff alpha-netbsd alpha-unknown-freebsd4.7=0A= > > am33_2.0-linux arc-linux-uclibc avr-elf bfin-elf cr16-elf cris-elf=0A= > > crisv32-linux crx-elf d10v-elf d30v-elf dlx-elf epiphany-elf fr30-elf= =0A= > > frv-elf frv-linux ft32-elf h8300-elf hppa-linux hppa-hp-hpux10=0A= > > hppa64-hp-hpux11.23 hppa64-linux mips-linux mips-vxworks mips64-linux= =0A= > > mipsel-linux-gnu mipsisa32el-linux mips64-openbsd mipstx39-elf=0A= > > ia64-elf ia64-freebsd5 ia64-hpux ia64-linux ia64-netbsd ia64-vms=0A= > > ip2k-elf iq2000-elf lm32-elf m32c-elf m32r-elf m68hc11-elf=0A= > > m68hc12-elf m68k-elf m68k-linux m68k-netbsd mcore-elf mcore-pe=0A= > > mep-elf metag-linux microblaze-elf mmix mn10200-elf mn10300-elf=0A= > > moxie-elf ms1-elf msp430-elf mt-elf nds32le-elf nios2-linux or1k-elf=0A= > > pdp11-dec-aout pj-elf powerpc-eabisim powerpc-eabivle powerpc-linux=0A= > > powerpc-nto powerpc-wrs-vxworks powerpc64-linux powerpcle-cygwin=0A= > > powerpcle-elf powerpc64le-linux ppc-lynxos pru-elf riscv32-elf=0A= > > riscv64-elf rl78-elf rs6000-aix4.3.3 rs6000-aix5.1 rx-elf s390-linux=0A= > > s390x-linux score-elf sh-linux sh-nto sh-pe sh-rtems sh-vxworks=0A= > > shl-unknown-netbsdelf sparc-aout sparc-linux sparc-vxworks=0A= > > sparc64-linux sparc-sun-solaris2.12 spu-elf tic30-unknown-aout=0A= > > tic30-unknown-coff tic4x-coff tic54x-coff tic6x-elf tilegx-linux=0A= > > tilepro-linux v850-elf vax-netbsdelf visium-elf i386-darwin=0A= > > i386-lynxos i586-linux i686-nacl i686-pc-beos i686-pc-elf i686-pe=0A= > > i686-vxworks x86_64-linux x86_64-w64-mingw32 x86_64-nacl xgate-elf=0A= > > xstormy16-elf xtensa-elf z8k-coff z80-coff.=0A= > > ---=0A= > > ChangeLog | 9 +++++++++=0A= > > ifield.scm | 12 ++++--------=0A= > > insn.scm | 4 +---=0A= > > utils.scm | 18 ++++++++++--------=0A= > > 4 files changed, 24 insertions(+), 19 deletions(-)=0A= > >=0A= > > diff --git a/ChangeLog b/ChangeLog=0A= > > index 93eafe4..7b2b885 100644=0A= > > --- a/ChangeLog=0A= > > +++ b/ChangeLog=0A= > > @@ -1,3 +1,12 @@=0A= > > +2021-08-19 Guillermo E. Martinez =0A= > > +=0A= > > + * ifield.scm: word-len has a relative value depending of word-offset= =0A= > > + value, method field-value use word-offset parameter.=0A= > > + * insn.scm: remove condition ifld-beyond-base? in insn-base-value=0A= > > + procedure to allow field access when its offset is different to zero.= =0A= > > + * utils.scm: word-value/work-mask accept an offset as argument to=0A= > > + compute the mask and get the value when offset is different that zero= .=0A= > > +=0A= > > 2020-05-29 Jose E. Marchesi =0A= > > =0A= > > * desc-cpu.scm (/gen-cpu-open): Support passing the instruction=0A= > > diff --git a/ifield.scm b/ifield.scm=0A= > > index 13e0c4f..c1c8cbd 100644=0A= > > --- a/ifield.scm=0A= > > +++ b/ifield.scm=0A= > > @@ -216,16 +216,13 @@=0A= > > (let ((lsb0? (bitrange-lsb0? bitrange))=0A= > > (start (bitrange-start bitrange))=0A= > > (length (bitrange-length bitrange))=0A= > > - (word-length (or (and (=3D word-offset 0) base-len)=0A= > > - recorded-word-length))=0A= > > + (word-length base-len)=0A= > > (container-word-offset (bitrange-word-offset container))=0A= > > (container-word-length (bitrange-word-length container)))=0A= > > (cond=0A= > > ; must be same lsb0=0A= > > ((not (eq? lsb0? (bitrange-lsb0? container)))=0A= > > (error "field-mask: different lsb0? values"))=0A= > > - ((not (=3D word-length container-word-length))=0A= > > - 0)=0A= > > ; container occurs after?=0A= > > ((<=3D (+ word-offset word-length) container-word-offset)=0A= > > 0)=0A= > > @@ -233,7 +230,7 @@=0A= > > ((>=3D word-offset (+ container-word-offset container-word-length))= =0A= > > 0)=0A= > > (else=0A= > > - (word-mask start length word-length lsb0? #f))))))=0A= > > + (word-mask start length word-length word-offset lsb0? #f))))))=0A= > > )=0A= > > =0A= > > (define (ifld-mask ifld base-len container)=0A= > > @@ -251,11 +248,11 @@=0A= > > (let* ((bitrange (/ifld-bitrange self))=0A= > > (recorded-word-length (bitrange-word-length bitrange))=0A= > > (word-offset (bitrange-word-offset bitrange))=0A= > > - (word-length (or (and (=3D word-offset 0) base-len)=0A= > > - recorded-word-length)))=0A= > > + (word-length base-len))=0A= > > (word-value (ifld-start self)=0A= > > (bitrange-length bitrange)=0A= > > word-length=0A= > > + word-offset=0A= > > (bitrange-lsb0? bitrange) #f=0A= > > value)))=0A= > > )=0A= > > @@ -441,7 +438,6 @@=0A= > > ; collision with the proc named `length'.=0A= > > ;=0A= > > ; FIXME: More error checking.=0A= > > -=0A= > > (define (/ifield-parse context name comment attrs=0A= > > word-offset word-length start flength follows=0A= > > mode encode decode)=0A= > > diff --git a/insn.scm b/insn.scm=0A= > > index e62bb87..7a230df 100644=0A= > > --- a/insn.scm=0A= > > +++ b/insn.scm=0A= > > @@ -982,9 +982,7 @@=0A= > > (elm-get insn '/insn-base-value)=0A= > > (let* ((base-len (insn-base-mask-length insn))=0A= > > (constant-base-iflds=0A= > > - (find (lambda (f)=0A= > > - (and (ifld-constant? f)=0A= > > - (not (ifld-beyond-base? f))))=0A= > > + (find ifld-constant?=0A= > > (ifields-base-ifields (insn-iflds insn))))=0A= > > (base-value (apply +=0A= > > (map (lambda (f)=0A= > > diff --git a/utils.scm b/utils.scm=0A= > > index 29b72ff..a6d2d53 100644=0A= > > --- a/utils.scm=0A= > > +++ b/utils.scm=0A= > > @@ -797,37 +797,39 @@=0A= > > =0A= > > (define (minmax min max) (cons min max))=0A= > > =0A= > > -; Move VALUE of LENGTH bits to position START in a word of SIZE bits.= =0A= > > +; Move VALUE of LENGTH bits to position START plus an OFFSET bits=0A= > > +; in a word of SIZE bits.=0A= > > ; LSB0? is non-#f if bit numbering goes LSB->MSB.=0A= > > ; Otherwise it goes MSB->LSB.=0A= > > ; START-LSB? is non-#f if START denotes the least significant bit.=0A= > > ; Otherwise START denotes the most significant bit.=0A= > > ; N is assumed to fit in the field.=0A= > > =0A= > > -(define (word-value start length size lsb0? start-lsb? value)=0A= > > +(define (word-value start length size offset lsb0? start-lsb? value)= =0A= > > (if lsb0?=0A= > > (if start-lsb?=0A= > > (logsll value start)=0A= > > - (logsll value (+ (- start length) 1)))=0A= > > + (logsll value (+ (- start length) offset 1)))=0A= > > (if start-lsb?=0A= > > (logsll value (- size start 1))=0A= > > - (logsll value (- size (+ start length)))))=0A= > > + (logsll value (- size (+ start length offset)))))=0A= > > )=0A= > > =0A= > > -; Return a bit mask of LENGTH bits in a word of SIZE bits starting at = START.=0A= > > +; Return a bit mask of LENGTH bits in a word of SIZE bits starting=0A= > > +; at START plus an OFFSET bits.=0A= > > ; LSB0? is non-#f if bit numbering goes LSB->MSB.=0A= > > ; Otherwise it goes MSB->LSB.=0A= > > ; START-LSB? is non-#f if START denotes the least significant bit.=0A= > > ; Otherwise START denotes the most significant bit.=0A= > > =0A= > > -(define (word-mask start length size lsb0? start-lsb?)=0A= > > +(define (word-mask start length size offset lsb0? start-lsb?)=0A= > > (if lsb0?=0A= > > (if start-lsb?=0A= > > (logsll (mask length) start)=0A= > > - (logsll (mask length) (+ (- start length) 1)))=0A= > > + (logsll (mask length) (+ (- start length) offset 1)))=0A= > > (if start-lsb?=0A= > > (logsll (mask length) (- size start 1))=0A= > > - (logsll (mask length) (- size (+ start length)))))=0A= > > + (logsll (mask length) (- size (+ start length offset)))))=0A= > > )=0A= > > =0A= > > ; Extract LENGTH bits at bit number START in a word of SIZE bits from = VALUE.=0A= > =0A= =0A=