Re: Anyone understand this?

"David McClain (as dbm at refined-audiometrics dot com)" <[email protected]>
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
More properly, it appears to be a bug in FLI::SET-DYNAMIC-LISP-ARRAY-POINTER, which is part of the macro expansion.




> On Jan 22, 2025, at 12:10, David McClain <[email protected]> wrote:
> 
> It appears now that the fault actually lies with FLI:WITH-DYNAMIC-LISP-ARRAY-POINTER. 
> 
> Using this code to produce a dummy second pointer with explicit :START 0, alongside the actual pointer of interest with a non-zero :START parameter, and then stepping through this code with a breakpoint set where the pointers are created, shows that both pointers produce identical FLI:POINTER objects. There is no base + offset in a composite object. The POINTER is expected to have a reduced direct address. And the two pointers do not differ when they ought to be different.
> 
> So looks like a bug in FLI:WITH-DYNAMIC-LISP-ARRAY-POINTER.
> 
> (defun vdot (arr1 arr2 &key (start2 0))
>   ;; intended for pre-decimation FIR filtering, where:
>   ;;   arr1 = FIR filter kernel
>   ;;   arr2 = input data buffer
>   ;;   nel  = length of FIR filter (ntaps)
>   ;;   start2 = starting position in data buffer for filtering,
>   ;;            as kernel steps along by ndec
>   (declare (array (double-float *) arr1 arr2))
>   (fli:with-dynamic-foreign-objects ()
>     (let ((ans (fli:allocate-dynamic-foreign-object :type :double-float)))
>       (hcl:with-pinned-objects (arr2)
>         (fli:with-dynamic-lisp-array-pointer (parr arr2 :type :double-float :start start2)
>           (fli:with-dynamic-lisp-array-pointer (parrx arr2 :type :double-float :start 0)
>             (_vdsp-dotprd arr1 1 parr 1 ans (length arr1))
>             (inspect (list parr parrx))
>             (fli:dereference ans)))
>         ))))
> 
> #|
> (let* ((arr2 (make-array 5
>                          :element-type 'double-float
>                          :allocation :pinnable
>                          :initial-contents '(1d0 2d0 3d0 4d0 5d0)))
>        (arr1 (make-array 3
>                          :element-type 'double-float
>                          :allocation :pinnable
>                          :initial-contents '(10d0 20d0 30d0))))
>   (vdot arr1 arr2 :start2 1)) ;; should produce 200.0, but produces 140.0.
> |#
> 
> 
>> On Jan 22, 2025, at 11:57, Yuri Davidovsky (as work at disclosure dot ie) <[email protected]> wrote:
>> 
>> That’s some classy email formatting. 
>> 
>>> On 22 Jan 2025, at 18:52, David McClain (as dbm at refined-audiometrics dot com) <[email protected]> wrote…
>> 
>> 
>> _______________________________________________
>> Lisp Hug - the mailing list for LispWorks users
>> [email protected]
>> http://www.lispworks.com/support/lisp-hug.html
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.