X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Farray.lisp;h=cf0f2fd52d14fdc380bfab4a788e2f0cd480f031;hb=45bc305be4e269d2e1a477c8e0ae9a64df1ccd1c;hp=6d79907dce01d891e031c3ea3555334e7a1de9ee;hpb=3f82b95d9a0e29d8c6b218ce16447e2bc2e93351;p=sbcl.git diff --git a/src/compiler/generic/array.lisp b/src/compiler/generic/array.lisp index 6d79907..cf0f2fd 100644 --- a/src/compiler/generic/array.lisp +++ b/src/compiler/generic/array.lisp @@ -15,14 +15,18 @@ (:translate data-vector-ref) (:policy :fast-safe) (:args (object :scs (descriptor-reg)) - (index :scs (unsigned-reg))) + (index :scs (unsigned-reg))) (:arg-types simple-array-nil positive-fixnum) (:results (value :scs (descriptor-reg))) (:result-types *) + (:ignore index value) (:vop-var vop) (:save-p :compute-only) (:generator 1 - (error-call vop nil-array-accessed-error object))) + (error-call vop + #!+(or x86 x86-64) 'nil-array-accessed-error + #!-(or x86 x86-64) nil-array-accessed-error + object))) ;;; It shouldn't be possible to fall through to here in normal user ;;; code, as the system is smart enough to deduce that there must be @@ -38,15 +42,58 @@ (:translate data-vector-set) (:policy :fast-safe) (:args (object :scs (descriptor-reg)) - (index :scs (unsigned-reg)) - (value :scs (descriptor-reg))) + (index :scs (unsigned-reg)) + (value :scs (descriptor-reg))) (:arg-types simple-array-nil positive-fixnum *) + (:results (result :scs (descriptor-reg))) + (:result-types *) + (:ignore index value result) + (:vop-var vop) + (:save-p :compute-only) + (:generator 1 + (error-call vop + #!+(or x86 x86-64) 'nil-array-accessed-error + #!-(or x86 x86-64) nil-array-accessed-error + object))) + +(define-vop (data-vector-ref-with-offset/simple-array-nil) + (:translate data-vector-ref-with-offset) + (:policy :fast-safe) + (:args (object :scs (descriptor-reg)) + (index :scs (unsigned-reg))) + (:info offset) + (:arg-types simple-array-nil positive-fixnum + (:constant (integer 0 0))) (:results (value :scs (descriptor-reg))) (:result-types *) + (:ignore index value offset) + (:vop-var vop) + (:save-p :compute-only) + (:generator 1 + (error-call vop + #!+(or x86 x86-64) 'nil-array-accessed-error + #!-(or x86 x86-64) nil-array-accessed-error + object))) + +(define-vop (data-vector-set/simple-array-nil) + (:translate data-vector-set) + (:policy :fast-safe) + (:args (object :scs (descriptor-reg)) + (index :scs (unsigned-reg)) + (value :scs (descriptor-reg))) + (:info offset) + (:arg-types simple-array-nil positive-fixnum * + (:constant (integer 0 0))) + (:results (result :scs (descriptor-reg))) + (:result-types *) + (:ignore index value result offset) (:vop-var vop) (:save-p :compute-only) (:generator 1 - (error-call vop nil-array-accessed-error object))) + (error-call vop + #!+(or x86 x86-64) 'nil-array-accessed-error + #!-(or x86 x86-64) nil-array-accessed-error + object))) ;;; FIXME: There is probably plenty of other array stuff that looks ;;; the same or similar enough to be genericized. Do so, and move it