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.