,(eval offset))))
(:results (value :scs ,scs))
(:result-types ,el-type)
- (:generator 5
+ (:generator 4
(inst ,(ecase size
(:byte (if signed 'lb 'lbu))
(:short (if signed 'lh 'lhu)))
,el-type)
(:results (result :scs ,scs))
(:result-types ,el-type)
- (:generator 5
+ (:generator 4
(inst ,(ecase size (:byte 'sb) (:short 'sh))
value object
- (- (* ,offset n-word-bytes) (* index ,scale) ,lowtag))
+ (- (+ (* ,offset n-word-bytes) (* index ,scale)) ,lowtag))
(move result value))))))
+
+(defmacro sb!sys::with-pinned-objects ((&rest objects) &body body)
+ "Arrange with the garbage collector that the pages occupied by
+OBJECTS will not be moved in memory for the duration of BODY.
+Useful for e.g. foreign calls where another thread may trigger
+garbage collection. This is currently implemented by disabling GC"
+ (declare (ignore objects)) ;should we eval these for side-effect?
+ `(without-gcing
+ ,@body))