2009-07-19 Doug Evans <dje@sebabeach.org>
+ * ifield.scm (-multi-ifield-make-default-insert): Fix shifts
+ calculation.
+ (-multi-ifield-make-default-extract): Ditto.
+
* rtl-c.scm (addc-cflag, addc-oflag, subc-cflag, subc-oflag): Define.
(add-cflag, add-oflag, sub-cflag, sub-oflag): Deprecate.
* rtx-funcs.scm (addc-cflag, addc-oflag, subc-cflag, subc-oflag):
nil)
)
-; {value},{follows} are missing on purpose
+; {ordinal} is missing on purpose, it's handled at a higher level.
+; {value},{follows} are missing on purpose.
; {value} is handled specially.
; {follows} is rarely used
(method-make-make! <ifield> '(name comment attrs mode bitrange encode decode))
(define (-multi-ifield-make-default-insert container-name subfields)
(let* ((lengths (map ifld-length subfields))
- (shifts (cons 0 (list-tail-drop 1 (plus-scan (cons 0 lengths))))))
+ (shifts (list-tail-drop 1 (plus-scan (cons 0 lengths)))))
; Build RTL expression to shift and mask each ifield into right spot.
(let ((exprs (map (lambda (f length shift)
(rtx-make 'and (rtx-make 'srl container-name shift)
(define (-multi-ifield-make-default-extract container-name subfields)
(let* ((lengths (map ifld-length subfields))
- (shifts (cons 0 (list-tail-drop 1 (plus-scan (cons 0 lengths))))))
+ (shifts (list-tail-drop 1 (plus-scan (cons 0 lengths)))))
; Build RTL expression to shift and mask each ifield into right spot.
(let ((exprs (map (lambda (f length shift)
(rtx-make 'sll (rtx-make 'and (obj:name f)