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 C83C13851C24 for ; Thu, 2 Sep 2021 13:22:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C83C13851C24 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 182AiprA029866 for ; Thu, 2 Sep 2021 13:22:54 GMT Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3atdw0jqky-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 02 Sep 2021 13:22:50 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 182DBiVN191467 for ; Thu, 2 Sep 2021 13:22:49 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2170.outbound.protection.outlook.com [104.47.56.170]) by aserp3020.oracle.com with ESMTP id 3atdyvj963-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 02 Sep 2021 13:22:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FrJinYvTv263uFII6wW27BbsjS5xGLSY7DU69PY3zvDC6iiv0sK04QrayMtyKfJ5l5PSuVFPN+fy0eRRI2/H7/JknCX1XeIceDQxqmLLMvI2j1bQUSJJCLD6+9T/qUlLMUoQMqvvRVvG5pMblnss9NvJ8DUHwXcCWL4jmiXYmOvryk4sX8Kwh/chBHFllUPuOcZ1H70M5JD/LqKZggyHVmTqyyPs8v4sn8flItQjmZ/fkbWEpQoThnYJB22T4wbToTzOyjQDdPZxp6FhHMKZncNy6U/8YrtY/7FfKmGIsHHHmMghcHWKEmpy85Rtt27yYR/iGsDIYQUCdxsA2Mf3Ng== 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=4tFNylKAFuX1yCBQE7CLBSGKSuXE8V9rGSvyU6gqtqI=; b=RttZyN+tbYE3GGnJCQrupVz1nc8wRC8pGtAP+6nlIULrBUwjiyLPbONeXojRT9JVLCDivz6x9XHre9SJQOeGa5ef/C+I3KbyAu9wGA6n6lO42YqebsvdifU1rdi5sIMefbqbev/UIquEavf9vGfCcyv0jYi3ihw9nhZyHJmPBbafDE3DG+uTI+pmLrCdiS0gtwQRuoWrhTUcMlabEOcK4ZARXgSx4eZvWYizRVDIhZd4N2CxFpbnlv8crhX3Gu36Qjo3LRJHTSfFaNHfeBsPCwHnsc6KHgzrueOshAXou9/OOEkbt7N1t0bA6cjbnE8hPo6tXIRXik8kyhbzw4VH3Q== 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 BLAPR10MB5188.namprd10.prod.outlook.com (2603:10b6:208:30d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4478.19; Thu, 2 Sep 2021 13:22:47 +0000 Received: from BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::6c94:aab3:108:174b]) by BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::6c94:aab3:108:174b%7]) with mapi id 15.20.4457.025; Thu, 2 Sep 2021 13:22:47 +0000 From: Guillermo Martinez To: "cgen@sourceware.org" Subject: Re: [PATCH CGEN v1] cgen: Compute correct mask and values when offset in define-ifield is not 0. Thread-Topic: [PATCH CGEN v1] cgen: Compute correct mask and values when offset in define-ifield is not 0. Thread-Index: AQHXlWvJGx5EvtOB30+NtSND3SNo/auQ0GOA Date: Thu, 2 Sep 2021 13:22:46 +0000 Message-ID: <7123187.iIbC2pHGDl@sali> References: <20210820023254.2575757-1-guillermo.e.martinez@oracle.com> In-Reply-To: <20210820023254.2575757-1-guillermo.e.martinez@oracle.com> 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: d292c578-cac2-4055-60f2-08d96e14c175 x-ms-traffictypediagnostic: BLAPR10MB5188: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dJPBGBugckOvUKt0Dn7PJt6GTSFvnm9pDOSuZsWRNFjAS/NUFoCoTjQ7qcNOtDJo0hXYazkyWW3v1/BEtAvmUVHBJnGmWblodxPUfKDMCs+a/x+hZ5FE0SzJT63kqD1CserIKi5yk4gRhNljL1ZCc82zs73LvWhyHkh1k0P1ArFU1etSIZqxbMLDT70iwtVYn9JDoH8AYpa+ocTwHmz++HMcuD3wFNZZITRxtDXfeqku8rkRnfL+LH6Ien8PZaydLLH8w+Ywf8BGOiToZrL2naBfZkOpvjHecm+lxamIQnLaKHWId7Az/BrmPhMtX7TBGktBSWcum9J5TzhQvjrjmTpP5MfxRhPfagasPDBboTxmPjRiw45yo86ARzV883mhByuLs6IlZjECuzY23z0zh12y2raBJbtr7tgNAhe+/LAZ/HDSaLvIYjKUNwcZex1KqMtpgLO7jseMtTJYI7aISZqMDsDBDj+7tZ5fY1T+rtIWZX1Mu9oQzMHnU6xW9yY9ORbTngfd4GIjTbXFFcaQyGsb0fyElx1N/FaC/F3eqzZdxPjnE7S7eFYVZrssau+HeKj2tO5yINMAixZcgotsD9Y1Y8qfMYWhSDPgjXBMpYc6nPJuS7LepXo62QXYcJff3FaLf2BGc70l3RFkyA2yL8x1kLo69TAzWAN7sVYiYEqcpY3oCZksvj/vrNLXUsi6B8ysaqtnXaA4iByeIEG1yPYhQHSVYbDQOb/UW27VsCA= 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)(366004)(2906002)(86362001)(53546011)(6506007)(38070700005)(186003)(26005)(83380400001)(122000001)(38100700002)(66556008)(8676002)(66476007)(316002)(6916009)(66946007)(76116006)(91956017)(5660300002)(8936002)(508600001)(33716001)(6512007)(9686003)(6486002)(64756008)(71200400001)(66446008)(39026012); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?+I6wte0bFOOAhosOpFklsSvTVWYB4yy4x7m0icr2U6JQ3UXAmGbDy0GWp+VJ?= =?us-ascii?Q?J0KNqQxrpQZ4OUjWkGWeOLUSzra+Pfyvz9oHWhk+tkrkGBBVvX4o14BcEHMg?= =?us-ascii?Q?90XYvX3V8rLLelgE+d4rzZXFcnqmcvSbfjkAr4UsTLmNGfGOQHUmoDWezSIG?= =?us-ascii?Q?jxANE123rqzlGVPUmj6zIjby/9eRVf1M09AEsevibLR7P4Fh/nexlv9ujr8L?= =?us-ascii?Q?ZSQ04z3x90308xvqNfLRCkz5DBbgkoCgMZ4TKh7/Ki1al90aI3egvmc/WWYj?= =?us-ascii?Q?n3KQTNAr9j9mW2/f6+N+mVhrSsQSiRgXdo2FqBR90jqFcfUmXoiz0ktRL5Ao?= =?us-ascii?Q?mPA7sCqwwebUE9I2uxobeIN3nNE1gosoD9dpfibi+TLiSs+YzHQKPOduGRkn?= =?us-ascii?Q?YwECYkTOBrYvyHY+T1n2o9lmXYU7kRjnKR6JdT6KIAYBgY51mUxIWMFbFQq5?= =?us-ascii?Q?QRmnrrLiJjKGs+Ez9bZ7DNTnOQg0hrrSBawZktfL9H6mvuhqF4G5m63KRch+?= =?us-ascii?Q?srA0prZ0ih5GrioVx1eD0c4AJf26FjT5eS5KBIhlDwxz7cahbIFO4aV+iEeq?= =?us-ascii?Q?XYUqZ/EF5NJ/HZ6YEgq4TMAyzqPtGj/M5BPE+2AiA0AWVrNtpXmVvuPefoZQ?= =?us-ascii?Q?3U56eOYg6shC0d6VKeNDuMcr6zxbD3CXVOjG8tRiU5zjX4KYKFT8ldwJuWo9?= =?us-ascii?Q?pxneOlh6n0P8TgeCFnIIBaC+4kQ9Hehx4/boekE71JauoBpf7RLW+KqEjasL?= =?us-ascii?Q?K9IdGKj4ub7vzjNug885NjEx6hjn7jglHXIyZ0drmy08fJshF/Wvay4qeYJx?= =?us-ascii?Q?zTQ+uFNLbtQc43Iv3dm5um9YaKRVWvqvvdHiwOPQNUH/cew44sK59g/F1eav?= =?us-ascii?Q?SAVyaVAEiD7Zq4E2XkgnvkIV3hIcw7ATHqy5KvmZSChZ08nQDoYna8a1B4U7?= =?us-ascii?Q?j4IvJW4tTyEL+i+T6TvIfCnSMZGT44MeU3b6wbfJj1/ovCF8hNsOZDqkr0+d?= =?us-ascii?Q?NKaTxgSNPHvgWPrNnf0FLKh2jLrtijL2LqqlvadOj4XK9tkvjKGNWREigzKW?= =?us-ascii?Q?uJNmRIufin4uqXYzOHb6R6n1Ob3qfzSlMQHa8H6MCGw0kn8J23j3S4wvUUbP?= =?us-ascii?Q?bz+VN2dy66Aokpo17BwL6DE/3DFUK9yRLLxhNhwmz6DA0UpJwx/6ZCIecb1D?= =?us-ascii?Q?rEnDIKBXgcN6r5jIbMNq2ny6yV5LFBfOVNskmHTIN7zYZvIeo1cGcnuy1x97?= =?us-ascii?Q?WdTGcrpxlOSHPxfJD3mk1BU3lyL6gRf+FrBbvntqgE2/1sV4wHbFlnVtfkAF?= =?us-ascii?Q?TGzmY6gbeDlOccs1GgIsRj5s?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="us-ascii" Content-ID: <9E70149BBCFCE7419A4B9DEE0080B81A@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: d292c578-cac2-4055-60f2-08d96e14c175 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Sep 2021 13:22:47.1833 (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: mi6pEtRdmBZtt3bDRrPiKUA5qTxQte+wTAf2f3UoVnUhIWu2vM9rhHZEB09NqIo/bnLZoj9z/rZJRGXWKGAaJKlBJos6yT6qkA7CHPHWEGk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5188 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10094 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 bulkscore=0 suspectscore=0 phishscore=0 adultscore=0 mlxscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2108310000 definitions=main-2109020081 X-Proofpoint-GUID: 9n0346c-DXru8LEf8ZSG-hqBkdHtob0d X-Proofpoint-ORIG-GUID: 9n0346c-DXru8LEf8ZSG-hqBkdHtob0d 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_H2, 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: Thu, 02 Sep 2021 13:23:06 -0000 Hi guys,=0A= =0A= Just to know if you have some comments to this patch :-)=0A= Thanks in advance.=0A= =0A= Kinds regards,=0A= Guillermo=0A= =0A= On Thursday, August 19, 2021 9:32:54 PM CDT Guillermo E. Martinez wrote:=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 | 12 ++++++------=0A= > 4 files changed, 20 insertions(+), 17 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..3573eff 100644=0A= > --- a/utils.scm=0A= > +++ b/utils.scm=0A= > @@ -804,14 +804,14 @@=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 ST= ART.=0A= > @@ -820,14 +820,14 @@=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 VA= LUE.=0A= > =0A= =0A=