<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><font face="Georgia">The primitive does seem to have different
        error codes -- is there a way from the image to retrieve the
        particular one that caused the problem?</font><br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 1/10/17 6:48 PM, David T. Lewis
      wrote:<br>
    </div>
    <blockquote cite="mid:20170110234828.GA2462@shell.msen.com"
      type="cite">
      <pre wrap="">On Tue, Jan 10, 2017 at 10:39:46PM +0100, Levente Uzonyi wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">The same issue is present on 64-bit Linux. When the target is smaller than 
the source, the primitive will just fail for 4-byte collections. Here's an 
example with WordArray:

source := #(1 2 3) asWordArray.
target := WordArray new: 2. "change to 3 to make it use the primitive"
target
        replaceFrom: 1
        to: target size
        with: source
        startingAt: 1
</pre>
      </blockquote>
      <pre wrap="">
I'm not sure this is a useful data point, but it does work as expected on a
64-bit V3 image (format 68002). Comparing the sources for #primitiveStringReplace
in oscog versus interpreter VM, they seem to have identical logic for array
size check, and I do not see any other meaningful difference, so I do not see
an obvious reason for the problem.

</pre>
      <blockquote type="cite">
        <pre wrap="">
The same problem is present for 2-byte (DoubleByteArray) and 8-byte 
(DoubleWordArray) collections, but, to my surprise, it works for 
ByteArray. (Haven't checked the C code yet.)
</pre>
      </blockquote>
      <pre wrap="">
DoubleByteArray and DoubleWordArray are not supported on V3 so I can't
check those.

Probably someone will need to look at it in the simulator or gdb debugger.

Dave

</pre>
      <blockquote type="cite">
        <pre wrap="">
Levente

On Tue, 10 Jan 2017, Bob Arning wrote:

</pre>
        <blockquote type="cite">
          <pre wrap="">
I got the 64-bit macos vm and the problem is still there.


/Users/bob/squeak/Squeak5.1-16548-64bit-All-in-One/Squeak5.1-16548-64bit-All-in-One.app/Contents/Resources/CocoaFast.app/Contents/MacOS/Squeak
Croquet Closure Cog[Spur] VM [CoInterpreterPrimitives 
VMMaker.oscog-cb.1919]
Mac OS X built on Sep 25 2016 16:07:11 UTC Compiler: 4.2.1 Compatible 
Apple LLVM 6.0 (clang-600.0.54)
platform sources revision VM: 201608171728 
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm.git">https://github.com/OpenSmalltalk/opensmalltalk-vm.git</a> $ Date: Wed Aug 17 
10:28:01 2016 -0700 $ Plugins: 201608171728
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm.git">https://github.com/OpenSmalltalk/opensmalltalk-vm.git</a> $
CoInterpreter VMMaker.oscog-cb.1919 uuid: 
00a8dd2a-bc8d-4552-b400-be781c8aabec Sep 25 2016
StackToRegisterMappingCogit VMMaker.oscog-cb.1919 uuid: 
00a8dd2a-bc8d-4552-b400-be781c8aabec Sep 25 2016


On 1/10/17 1:00 PM, David T. Lewis wrote:

It sounds like a VM bug. I am away and cannot check anything further right
now, but one thing I would mention is that there has been a good deal of
recent VM development that may be related to this, so if you don't mind
experimenting you may want to try one of the latest VMs here:

<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/201608171728">https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/201608171728</a>

That will at least let you see if it is a bug that someone has already
fixed (which I think is quite likely).

Dave


Thanks, Dave,

There are a number of errors possible in that primitive and I don't know
if one can see the particular code after a failure. I was able to narrow
it down, though. Adding this to FloatArray:

testreplaceFrom: start to: stop with: replacement startingAt: repStart
"
(FloatArray new: 8) testreplaceFrom: 1 to: 3 with: (FloatArray new: 3)
startingAt: 1
"
    <primitive: 105>
    self halt.

Runs fine in 32-bit squeak and halts in 64-bit.

-----------succeeds on-----------

Virtual Machine
---------------
/Users/bob/squeak/old squeak5.1/ast 5.1.app/Contents/MacOS/Squeak
Croquet Closure Cog[Spur] VM [CoInterpreterPrimitives
VMMaker.oscog-cb.1919] 32 bit
Mac OS X built on Aug 17 2016 18:59:49 UTC Compiler: 4.2.1 Compatible
Apple LLVM 6.0 (clang-600.0.54)
platform sources revision VM: 201608171728
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm.git">https://github.com/OpenSmalltalk/opensmalltalk-vm.git</a> $ Date: Wed Aug 17
10:28:01 2016 -0700 $ Plugins: 201608171728
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm.git">https://github.com/OpenSmalltalk/opensmalltalk-vm.git</a> $
CoInterpreter VMMaker.oscog-cb.1919 uuid:
00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016
StackToRegisterMappingCogit VMMaker.oscog-cb.1919 uuid:
00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016

--------fails on--------

Virtual Machine
---------------
/Users/bob/squeak/Squeak5.1-16548-64bit-All-in-One/Squeak5.1-16548-64bit-All-in-One.app/Contents/MacOS/Squeak
Croquet Closure Cog[Spur] VM [CoInterpreterPrimitives
VMMaker.oscog-cb.1919] 64 bit
Mac OS X built on Aug 17 2016 18:51:56 UTC Compiler: 4.2.1 Compatible
Apple LLVM 6.0 (clang-600.0.54)
platform sources revision VM: 201608171728
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm.git">https://github.com/OpenSmalltalk/opensmalltalk-vm.git</a> $ Date: Wed Aug 17
10:28:01 2016 -0700 $ Plugins: 201608171728
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm.git">https://github.com/OpenSmalltalk/opensmalltalk-vm.git</a> $
CoInterpreter VMMaker.oscog-cb.1919 uuid:
00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016
StackToRegisterMappingCogit VMMaker.oscog-cb.1919 uuid:
00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016




On 1/10/17 9:06 AM, David T. Lewis wrote:

How to see primitive source these days:

The code is in the VMMaker repository
'<a class="moz-txt-link-freetext" href="http://source.squeak.org/VMMaker">http://source.squeak.org/VMMaker</a>'.

For the Spur VM, the package is 'VMMaker.oscog'. For purposes of just
taking a quick look at the code, you can load the latest version
VMMaker.oscog-eem.2079 (this will not exactly corresponding to the
version
you are running but here I assume you just want a quick look at what
primitive 105 is doing).

To find the numbered primitive, see CoInterpreter
class>>initializePrimitiveTable,
which calls StackInterpreter class>>initializePrimitiveTable, which
shows
primitive 105 as #primitiveStringReplace.

The Smalltalk code for this primitive is
InterpreterPrimitives>>primitiveStringReplace.
The generated C code for this can be found in the GitHub repository
<a class="moz-txt-link-freetext" href="https://github.com/OpenSmalltalk/opensmalltalk-vm">https://github.com/OpenSmalltalk/opensmalltalk-vm</a>, look for the
primitiveStringReplace function in
opensmalltalk-vm/src/vm/gcc3x-cointerpmt.c.

Dave



On Tue, Jan 10, 2017 at 07:57:31AM -0500, Bob Arning wrote:

I'm was copying a FloatArray and it seems not to be using the primitive
to move the data over to the copy.
Float>>replaceFrom:to:with:startingAt: says it uses a primitive, but it
seem to fallback to the code in SequenceableCollection. How can I see
the priitive code to see what the issue may be? This is what it says it
does:

replaceFrom: start to: stop with: replacement startingAt: repStart
"Primitive. This destructively replaces elements from start to stop in
the receiver starting at index, repStart, in the collection,
replacement. Answer the receiver. Range checks are performed in the
primitive only. Optional. See Object documentation whatIsAPrimitive."
    <primitive: 105>     super replaceFrom: start to: stop with:
replacement startingAt: repStart

This is what I did to see if the prim failed:

replaceFrom: start to: stop with: replacement startingAt: repStart
"Primitive. This destructively replaces elements from start to stop in
the receiver starting at index, repStart, in the collection,
replacement. Answer the receiver. Range checks are performed in the
primitive only. Optional. See Object documentation whatIsAPrimitive."
    <primitive: 105>     WOOPS ifNil: [         WOOPS _ #WOOPS.
self halt     ].     super replaceFrom: start to: stop with:
replacement
startingAt: repStart

And it did fail and I'm puzzled as to why:

Halt:
10 January 2017 7:46:09.382669 am

VM: Mac OS - Smalltalk
Image: Squeak5.1 [latest update: #16548]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir
/Users/bob/squeak/Squeak5.1-16548-64bit-All-in-One/Squeak5.1-16548-64bit-All-in-One.app/Contents/Resources
Trusted Dir /Users/bob/Library/Application Support/Squeak/
Untrusted Dir /Users/bob/Documents/Squeak/

FloatArray(Object)>>halt
    Receiver: a FloatArray(0.0 0.0 0.0)
    Arguments and temporary variables:

    Receiver's instance variables:
a FloatArray(0.0 0.0 0.0)
FloatArray>>replaceFrom:to:with:startingAt:
    Receiver: a FloatArray(0.0 0.0 0.0)
    Arguments and temporary variables:
        start:     1
        stop:     3
        replacement:     a FloatArray(1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1...etc...
        repStart:     1
    Receiver's instance variables:
a FloatArray(0.0 0.0 0.0)
FloatArray(SequenceableCollection)>>copyFrom:to:
    Receiver: a FloatArray(1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1...etc...
    Arguments and temporary variables:
        start:     1
        stop:     3
        newSize:     3
    Receiver's instance variables:
a FloatArray(1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0
1.0 1.0 1.0 1.0 1...etc...
ConvolutionalLayer>>forward:isTraining:








</pre>
        </blockquote>
        <pre wrap="">
</pre>
      </blockquote>
      <pre wrap="">
</pre>
    </blockquote>
    <br>
  </body>
</html>