X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Farray.lisp;h=cf0f2fd52d14fdc380bfab4a788e2f0cd480f031;hb=45bc305be4e269d2e1a477c8e0ae9a64df1ccd1c;hp=36f2d492a87c6f39531ee67e6426b8685e91f371;hpb=d2508075f57f0b37c127a5145b009e7fbba76f6f;p=sbcl.git diff --git a/src/compiler/generic/array.lisp b/src/compiler/generic/array.lisp index 36f2d49..cf0f2fd 100644 --- a/src/compiler/generic/array.lisp +++ b/src/compiler/generic/array.lisp @@ -15,7 +15,7 @@ (: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 *) @@ -23,7 +23,10 @@ (: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 @@ -39,8 +42,8 @@ (: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 *) @@ -48,7 +51,49 @@ (: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))) + +(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 + #!+(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