Re: [PATCH CGEN v1] cgen: Compute correct mask and values when offset in define-ifield is not 0.
"Jose E. Marchesi via Cgen" <[email protected]> Tue, 14 Sep 2021 23:34:09 +0200
| Newsgroups | gmane.comp.tools.cgen.devel |
|---|---|
| Message-ID | <[email protected]> |
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.