(and (rtl:float-offset? expression)
(let ((base (rtl:float-offset-base expression))
(offset (rtl:float-offset-offset expression)))
- (and (or (rtl:machine-constant? offset)
- (rtl:register? offset))
- (or (rtl:register? base)
- (and (rtl:offset-address? base)
- (rtl:register? (rtl:offset-address-base base))
- (rtl:machine-constant?
- (rtl:offset-address-offset base))))))
+ (if (rtl:register? base)
+ (or (rtl:machine-constant? offset)
+ (rtl:register? offset))
+ (and (rtl:float-offset-address? base)
+ (rtl:machine-constant? offset)
+ (rtl:register? (rtl:float-offset-address-base base))
+ (rtl:register? (rtl:float-offset-address-offset base)))))
expression))
(define (float-offset->reference! offset)
(objects-per-float
(quotient address-units-per-float address-units-per-object)))
(cond ((not (rtl:register? base))
- (let ((base*
- (rtl:register-number (rtl:offset-address-base base)))
- (w-offset
- (rtl:machine-constant-value
- (rtl:offset-address-offset base))))
- (if (rtl:machine-constant? offset)
- (indirect-reference!
- base*
- (+ (* objects-per-float (rtl:machine-constant-value offset))
- w-offset))
- (indexed-ea base*
- (rtl:register-number offset)
- address-units-per-float
- (* address-units-per-object w-offset)))))
+ (indexed-ea
+ (rtl:register-number (rtl:float-offset-address-base base))
+ (rtl:register-number (rtl:float-offset-address-offset base))
+ address-units-per-float
+ (* address-units-per-float (rtl:machine-constant-value offset))))
((rtl:machine-constant? offset)
(indirect-reference! (rtl:register-number base)
(* objects-per-float