[PATCH CGEN v1] cgen: Compute correct mask and values when offset in define-ifield is not 0.
Jose E. Marchesi
jemarch@gnu.org
Tue Sep 14 21:34:09 GMT 2021
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.
More information about the Cgen
mailing list