[Vm-dev] Problem changing primitiveBitOr or primitiveBitAnd

Eliot Miranda eliot.miranda at gmail.com
Thu Oct 7 17:59:29 UTC 2010


On Thu, Oct 7, 2010 at 1:25 AM, Mariano Martinez Peck <marianopeck at gmail.com
> wrote:

>
>
>
> On Thu, Oct 7, 2010 at 9:55 AM, Andreas Raab <andreas.raab at gmx.de> wrote:
>
>>
>> You *really* need to learn how to use the simulator
>
>
> Is it working? I've been told it is not working at all and that it should
> take me time to fix it.
>

Cog works.  If the standard simulator doesn't and you fix it that would be a
great contribution to the community /ad/ you would learn a lot in the
process.  So you can get two images up side-by-side, try Cog (the simulator
expression is in one of the workspaces; use the StackInterpreter) and you
can copy across code to your VMMaker until the simulator works, announce it
and someone like myself or David can integrate it into the main VMMaker
line.

HTH
Eliot



>
>> (and read the code in the VM).
>
>
> I am reading the code in the VM as much as possible.
>
>
>> Asking people here to debug your code is an extremely slow way to do it.
>>
>> That said, replacing popStack with stackValue is NOT EQUIVALENT. Thus your
>> transformation of popStack -> stackValue is entirely incorrect. Where you
>> previously had:
>>
>> 1) popStack
>> 2) popStack
>> 3) test and...
>>        3a) return result
>>        3b) unpop 2
>>
>> with stackValue you need to use
>>
>> 1) stackValue: 0.
>> 2) stackValue: 1.
>> 3) test and ...
>>        3a) pop 2 and return result
>>        3b) =do nothing=
>>
>> I.e., stackValue does NOT POP but rather indexes into the stack.
>>
>
>
> Ok, I understand that. But before doing that, I just replced
>
>
> integerArgument := self popPos32BitInteger.
> integerReceiver := self popPos32BitInteger.
>
> by
>
> arg := self popStack.
> integerArgument := self positive32BitValueOf: arg.
> rcvr := self popStack.
> integerReceiver := self positive32BitValueOf: rcvr.
>
> So....I JUST copy the code of #popPos32BitInteger and put it there.....I
> didn't change anything else, and I have the same problem.
>
> At the end:
>
> primitiveBitOr
>     | integerReceiver integerArgument arg rcvr |
>     arg := self popStack.
>     integerArgument := self positive32BitValueOf: arg.
>     rcvr := self popStack.
>     integerReceiver := self positive32BitValueOf: rcvr.
>
>     successFlag
>         ifTrue: [
>             self push: (self positive32BitIntegerFor:
>                     (integerReceiver bitOr: integerArgument))]
>         ifFalse: [self unPop: 2]
>
>
> is has CPU100 and
>
> primitiveBitOr
>     | integerReceiver integerArgument |
>     integerArgument := self popPos32BitInteger.
>     integerReceiver := self popPos32BitInteger.
>     successFlag
>         ifTrue: [self push: (self positive32BitIntegerFor:
>                     (integerReceiver bitOr: integerArgument))]
>         ifFalse: [self unPop: 2]
>
> works perfect.
>
> And I am not using stackValue.
>
> Anyway, thanks for the explanation about both differences.
>
> Cheers
>
> Mariano
>
>
>
>>
>> Cheers,
>>  - Andreas
>>
>>
>> On 10/7/2010 12:39 AM, Mariano Martinez Peck wrote:
>>
>>>
>>>
>>>
>>>
>>> Hi, I want to change #primitiveBitOr or #primitiveBitAnd and in both
>>> cases, I compile the VM, I run an image, and the image cannot even start
>>> and CPU 100%  :(
>>> I have a loop somewhere.
>>>
>>> This is the current implementation of #primitiveBitOr for example:
>>>
>>> primitiveBitOr
>>>     | integerReceiver integerArgument |
>>>     integerArgument := self popPos32BitInteger.
>>>     integerReceiver := self popPos32BitInteger.
>>>     successFlag
>>>         ifTrue: [self push: (self positive32BitIntegerFor:
>>>                     (integerReceiver bitOr: integerArgument))]
>>>         ifFalse: [self unPop: 2]
>>>
>>>
>>> I NEED to have the receiver oop and the argument oop. So, I've change it
>>> to:
>>>
>>> primitiveBitOr
>>>     | integerReceiver integerArgument arg rcvr |
>>>     arg := self popStack.
>>>     integerArgument := self positive32BitValueOf: arg.
>>>     rcvr := self popStack.
>>>     integerReceiver := self positive32BitValueOf: rcvr.
>>>
>>>     successFlag
>>>         ifTrue: [
>>>             self push: (self positive32BitIntegerFor:
>>>                     (integerReceiver bitOr: integerArgument))]
>>>         ifFalse: [self unPop: 2]
>>>
>>>
>>> And then to:
>>>
>>> primitiveBitOr
>>>     | integerReceiver integerArgument arg rcvr |
>>>     arg := self stackValue: 0.
>>>     integerArgument := self positive32BitValueOf: arg.
>>>     rcvr := self stackValue: 1.
>>>     integerReceiver := self positive32BitValueOf: rcvr.
>>>
>>>     successFlag
>>>         ifTrue: [
>>>             self push: (self positive32BitIntegerFor:
>>>                     (integerReceiver bitOr: integerArgument))]
>>>         ifFalse: [self unPop: 2]
>>>
>>> But in both cases, while trying to start an image, I have cpu 100%
>>> Of course, the same happens if I do this in #primitiveBitAnd
>>>
>>> Any ideas what can be happening? because I tried to understand but
>>> nothing :(
>>>
>>> Thanks in advance
>>>
>>> Mariano
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20101007/9608a130/attachment.htm


More information about the Vm-dev mailing list