(#.fun-end-breakpoint-trap
(nt "Function end breakpoint trap"))
(#.object-not-instance-trap
- (nt "Object not instance trap"))
- )))
+ (nt "Object not instance trap")))))
(eval-when (:compile-toplevel :execute)
(when (typep si 'fixup)
(ecase ,fixup
((:ha :l) (note-fixup segment ,fixup si)))
- (setq si 0))
+ (setq si (or (fixup-offset si) 0)))
(emit-d-form-inst segment ,op (reg-tn-encoding rt) (reg-tn-encoding ra) si)))))
(define-d-rs-ui-instruction (name op &key (cost 1) other-dependencies)
(define-instruction-macro srwi. (ra rs n)
`(inst rlwinm. ,ra ,rs (- 32 ,n) ,n 31))
+ (define-instruction-macro clrlwi (ra rs n)
+ `(inst rlwinm ,ra ,rs 0 ,n 31))
+
+ (define-instruction-macro clrlwi. (ra rs n)
+ `(inst rlwinm. ,ra ,rs 0 ,n 31))
+
(define-instruction-macro clrrwi (ra rs n)
`(inst rlwinm ,ra ,rs 0 0 (- 31 ,n)))
(inst ori temp temp (ldb (byte 16 0) delta))
(inst add dst src temp))))))
-;; this function is misnamed. should be compute-code-from-lip,
-;; if the use in xep-allocate-frame is typical
-;; (someone says code = fn - header - label-offset + other-pointer-tag)
-(define-instruction compute-code-from-fn (segment dst src label temp)
+;; code = lip - header - label-offset + other-pointer-tag
+(define-instruction compute-code-from-lip (segment dst src label temp)
(:declare (type tn dst src temp) (type label label))
(:attributes variable-length)
(:dependencies (reads src) (writes dst) (writes temp))
(component-header-length))))))
;; code = lra - other-pointer-tag - header - label-offset + other-pointer-tag
+;; = lra - (header + label-offset)
(define-instruction compute-code-from-lra (segment dst src label temp)
(:declare (type tn dst src temp) (type label label))
(:attributes variable-length)
(component-header-length)))))))
;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
+;; = code + header + label-offset
(define-instruction compute-lra-from-code (segment dst src label temp)
(:declare (type tn dst src temp) (type label label))
(:attributes variable-length)