Lisp HUG Maillist Archive

optimize problem

I created the two functions below to copy between byte vectors and foreign memory based on the example in the documentation link.

http://www.lispworks.com/documentation/lw70/LW/html/lw-61.htm


I created some test code and get the correct results. But when I tried to use the same functions outside my test application (same environment, compiled the same way), it is not working. In particular, if I check the results of byte-to-foreign-vector, the bytes do not match the input array.

If I comment out (optimize (safety 0)), I get the correct results in all cases.

Bug or am I missing something obvious?

Thanks,

John DeSoi, Ph.D.



(defun byte-from-foreign-vector (byte-vector foreign-vector length)
  (declare (optimize (safety 0))
           (type (simple-array (unsigned-byte 8) 1) byte-vector)
           (fixnum length))
  (dotimes (index length)
    (declare (type fixnum index))
    (setf (aref byte-vector index) (fli:foreign-typed-aref '(unsigned-byte 8) foreign-vector index))))


(defun byte-to-foreign-vector (byte-vector foreign-vector length)
  (declare (optimize (safety 0))
           (type (simple-array (unsigned-byte 8) 1) byte-vector)
           (fixnum length))
  (dotimes (index length)
    (declare (type fixnum index))
    (setf (fli:foreign-typed-aref '(unsigned-byte 8) foreign-vector index) (aref byte-vector index))))

_______________________________________________
Lisp Hug - the mailing list for LispWorks users
lisp-hug@lispworks.com
http://www.lispworks.com/support/lisp-hug.html

Re: optimize problem

I've always used * where you have a 1. (Type  (simple-array 
(unsigned-byte 8) (*)) xxx).  Does the '1' mean you have a one element 
array?


On 2/4/2017 12:53 PM, John DeSoi wrote:
> I created the two functions below to copy between byte vectors and foreign memory based on the example in the documentation link.
>
> http://www.lispworks.com/documentation/lw70/LW/html/lw-61.htm
>
>
> I created some test code and get the correct results. But when I tried to use the same functions outside my test application (same environment, compiled the same way), it is not working. In particular, if I check the results of byte-to-foreign-vector, the bytes do not match the input array.
>
> If I comment out (optimize (safety 0)), I get the correct results in all cases.
>
> Bug or am I missing something obvious?
>
> Thanks,
>
> John DeSoi, Ph.D.
>
>
>
> (defun byte-from-foreign-vector (byte-vector foreign-vector length)
>    (declare (optimize (safety 0))
>             (type (simple-array (unsigned-byte 8) 1) byte-vector)
>             (fixnum length))
>    (dotimes (index length)
>      (declare (type fixnum index))
>      (setf (aref byte-vector index) (fli:foreign-typed-aref '(unsigned-byte 8) foreign-vector index))))
>
>
> (defun byte-to-foreign-vector (byte-vector foreign-vector length)
>    (declare (optimize (safety 0))
>             (type (simple-array (unsigned-byte 8) 1) byte-vector)
>             (fixnum length))
>    (dotimes (index length)
>      (declare (type fixnum index))
>      (setf (fli:foreign-typed-aref '(unsigned-byte 8) foreign-vector index) (aref byte-vector index))))
>
> _______________________________________________
> Lisp Hug - the mailing list for LispWorks users
> lisp-hug@lispworks.com
> http://www.lispworks.com/support/lisp-hug.html

_______________________________________________
Lisp Hug - the mailing list for LispWorks users
lisp-hug@lispworks.com
http://www.lispworks.com/support/lisp-hug.html

Updated at: 2020-12-10 08:31 UTC