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