VM Maker: VMMaker.oscog-eem.133.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.133.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.133.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.133
Author: eem
Time: 7 October 2011, 3:56:54.295 pm
UUID: 1ca6557f-8901-4791-8473-e2c09d25bbf3
Ancestors: VMMaker.oscog-eem.132

Tiny performance tweak to bytecodePrimMultiply.
Added findStringBeginningWith: debugging facility.

=============== Diff against VMMaker.oscog-eem.132 ===============

Item was changed:
  ----- Method: Interpreter>>bytecodePrimMultiply (in category 'common selector sends') -----
  bytecodePrimMultiply
  | rcvr arg result |
  rcvr := self internalStackValue: 1.
  arg := self internalStackValue: 0.
  (self areIntegers: rcvr and: arg)
  ifTrue: [rcvr := self integerValueOf: rcvr.
  arg := self integerValueOf: arg.
  result := rcvr * arg.
+ (arg = 0
+ or: [(result // arg) = rcvr and: [self isIntegerValue: result]]) ifTrue:
+ [self internalPop: 2 thenPush: (self integerObjectOf: result).
+ ^self fetchNextBytecode "success"]]
- ((arg = 0 or: [(result // arg) = rcvr]) and: [self isIntegerValue: result])
- ifTrue: [self internalPop: 2 thenPush: (self integerObjectOf: result).
- ^ self fetchNextBytecode "success"]]
  ifFalse: [successFlag := true.
  self externalizeIPandSP.
  self primitiveFloatMultiply: rcvr byArg: arg.
  self internalizeIPandSP.
  successFlag ifTrue: [^ self fetchNextBytecode "success"]].
 
  messageSelector := self specialSelector: 8.
  argumentCount := 1.
  self normalSend.
  !

Item was added:
+ ----- Method: NewObjectMemory>>findStringBeginningWith: (in category 'debug support') -----
+ findStringBeginningWith: aCString
+ "Print the oops of all string-like things that start with the same characters as aCString"
+ <api>
+ <var: #aCString type: #'char *'>
+ | cssz obj sz |
+ cssz := self strlen: aCString.
+ obj := self firstObject.
+ [self oop: obj isLessThan: freeStart] whileTrue:
+ [(self isFreeObject: obj)
+ ifTrue:
+ [sz := self sizeOfFree: obj]
+ ifFalse:
+ [((self isBytesNonInt: obj)
+  and: [(self lengthOf: obj) >= cssz
+  and: [(self str: aCString n: (self pointerForOop: obj + BaseHeaderSize) cmp: cssz) = 0]]) ifTrue:
+ [coInterpreter printHex: obj; space; printNum: (self lengthOf: obj); space; printOopShort: obj; cr].
+ sz := self sizeBitsOf: obj].
+ obj := self oopFromChunk: obj + sz]!

Item was changed:
  ----- Method: NewspeakInterpreter>>bytecodePrimMultiply (in category 'common selector sends') -----
  bytecodePrimMultiply
  | rcvr arg result |
  rcvr := self internalStackValue: 1.
  arg := self internalStackValue: 0.
  (self areIntegers: rcvr and: arg)
  ifTrue: [rcvr := self integerValueOf: rcvr.
  arg := self integerValueOf: arg.
  result := rcvr * arg.
+ (arg = 0
+ or: [(result // arg) = rcvr and: [self isIntegerValue: result]]) ifTrue:
+ [self internalPop: 2 thenPush: (self integerObjectOf: result).
+ ^self fetchNextBytecode "success"]]
- ((arg = 0 or: [(result // arg) = rcvr]) and: [self isIntegerValue: result])
- ifTrue: [self internalPop: 2 thenPush: (self integerObjectOf: result).
- ^ self fetchNextBytecode "success"]]
  ifFalse: [self initPrimCall.
  self externalizeIPandSP.
  self primitiveFloatMultiply: rcvr byArg: arg.
  self internalizeIPandSP.
  self successful ifTrue: [^ self fetchNextBytecode "success"]].
 
  messageSelector := self specialSelector: 8.
  argumentCount := 1.
  self normalSend.
  !

Item was changed:
  ----- Method: StackInterpreter>>bytecodePrimMultiply (in category 'common selector sends') -----
  bytecodePrimMultiply
  | rcvr arg result |
  rcvr := self internalStackValue: 1.
  arg := self internalStackValue: 0.
  (self areIntegers: rcvr and: arg)
  ifTrue: [rcvr := objectMemory integerValueOf: rcvr.
  arg := objectMemory integerValueOf: arg.
  result := rcvr * arg.
+ (arg = 0
+ or: [(result // arg) = rcvr and: [objectMemory isIntegerValue: result]]) ifTrue:
+ [self internalPop: 2 thenPush: (objectMemory integerObjectOf: result).
+ ^self fetchNextBytecode "success"]]
- ((arg = 0 or: [(result // arg) = rcvr]) and: [objectMemory isIntegerValue: result])
- ifTrue: [self internalPop: 2 thenPush: (objectMemory integerObjectOf: result).
- ^ self fetchNextBytecode "success"]]
  ifFalse: [self initPrimCall.
  self externalizeIPandSP.
  self primitiveFloatMultiply: rcvr byArg: arg.
  self internalizeIPandSP.
  self successful ifTrue: [^ self fetchNextBytecode "success"]].
 
  messageSelector := self specialSelector: 8.
  argumentCount := 1.
  self normalSend!