From: <wa...@te...> - 2009-11-13 21:12:00
|
There seems to be a problem when you use sap-ref-16, 32 (and probably 64) with a computed offset. For whatever reason, the offset seems be systematically larger than it should be. I've provided some code that demonstrates this problem on 'SBCL 1.0.29.gentoo-r0'.<br/><br/>It should not matter if the offset is 4, or (+ 0 4), but this example shows that SBCL produces the correct answer in the first case, and the wrong answer in the second case.<br/><br/>(flet ((try (sap offset)<br/> (format t "~%TRY+0: @~a, sap-ref-32: ~a, sap-ref-16: ~a, sap-ref-8: ~a, 2xsap-ref-8: ~a."<br/> offset (sb-sys:sap-ref-32 sap offset)<br/> (sb-sys:sap-ref-16 sap offset)<br/> (sb-sys:sap-ref-8 sap offset)<br/> (logior (ash (sb-sys:sap-ref-8 sap (+ offset 1)) 8) (sb-sys:sap-ref-8 sap offset))))<br/> (try+4 (sap offset)<br/> (format t "~%TRY+4: @~a, sap-ref-32: ~a, sap-ref-16: ~a, sap-ref-8: ~a, 2xsap-ref-8: ~a."<br/> (+ offset 4)<br/> (sb-sys:sap-ref-32 sap (+ offset 4))<br/> (sb-sys:sap-ref-16 sap (+ offset 4))<br/> (sb-sys:sap-ref-8 sap (+ offset 4))<br/> (logior (ash (sb-sys:sap-ref-8 sap (+ offset 4 1)) 8)<br/> (sb-sys:sap-ref-8 sap (+ offset 4))))))<br/> (let ((array (make-array 24 :element-type '(unsigned-byte 8) :initial-contents '(#x01 #x00 #x00 #x00<br/> #x02 #x00 #x00 #x00<br/> #x03 #x00 #x00 #x00<br/> #x04 #x00 #x00 #x00<br/> #x05 #x00 #x00 #x00<br/> #x06 #x00 #x00 #x00))))<br/> (format t "~%array is: ~a ~a" (type-of array) array)<br/> (sb-sys:with-pinned-objects (array)<br/> (let ((sap (sb-sys:vector-sap array)))<br/> (try sap (+ 0 4))<br/> (try sap (+ 4 4))<br/> (try sap (+ 8 4))<br/> (try+4 sap 0) <br/> (try+4 sap 4)<br/> (try+4 sap 8)))))<br/><br/>(output):<br/><br/>TRY+0: @4, sap-ref-32: 2, sap-ref-16: 2, sap-ref-8: 2, 2xsap-ref-8: 2.<br/>TRY+0: @8, sap-ref-32: 3, sap-ref-16: 3, sap-ref-8: 3, 2xsap-ref-8: 3.<br/>TRY+0: @12, sap-ref-32: 4, sap-ref-16: 4, sap-ref-8: 4, 2xsap-ref-8: 4.<br/>TRY+4: @4, sap-ref-32: 5, sap-ref-16: 3, sap-ref-8: 2, 2xsap-ref-8: 2.<br/>TRY+4: @8, sap-ref-32: 6, sap-ref-16: 4, sap-ref-8: 3, 2xsap-ref-8: 3.<br/>TRY+4: @12, sap-ref-32: 96, sap-ref-16: 5, sap-ref-8: 4, 2xsap-ref-8: 4.<br/><br/>(what you should see):<br/>The TRY+4 lines should show the same numbers as the TRY+0 lines<br/><br/>Cheers,<br/>Warren Wilkinson<br/> |
From: Christophe R. <cs...@ca...> - 2009-11-13 21:22:24
|
wa...@te... writes: > a computed offset. For whatever reason, the offset seems be systematically > larger than it should be. I've provided some code that demonstrates this > problem on 'SBCL 1.0.29.gentoo-r0'. I believe this was fixed in sbcl-1.0.31, released about 8 weeks ago. Best, Christophe |