Tim Felgentreff uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-tfel.1691.mcz
==================== Summary ====================
Name: VMMaker.oscog-tfel.1691 Author: tfel Time: 22 February 2016, 10:13:26.026346 am UUID: cb86b38a-7db8-484c-9407-70223d2da428 Ancestors: VMMaker.oscog-eem.1690
- call super in BitBltSimulator>>halftoneAt: - implement asInteger on CObjectAccessor, so simulation code works - fix InterpreterPrimitives>>primitiveUtcWithOffset to work in Simulator - add a test case to run the full simulation for a few million bytecodes
=============== Diff against VMMaker.oscog-eem.1690 ===============
Item was changed: ----- Method: BitBltSimulator>>halftoneAt: (in category 'memory access') ----- halftoneAt: idx
^self cCode: [(halftoneBase + (idx \ halftoneHeight * 4)) long32At: 0] + inSmalltalk: [super halftoneAt: idx]! - inSmalltalk: [self long32At: halftoneBase + (idx \ halftoneHeight * 4)]!
Item was added: + ----- Method: CObjectAccessor>>asInteger (in category 'converting') ----- + asInteger + + ^ self!
Item was added: + TestCase subclass: #FullSimulationTest + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'VMMaker-Tests'!
Item was added: + ----- Method: FullSimulationTest>>testSimulate2MillionBytecodes (in category 'as yet unclassified') ----- + testSimulate2MillionBytecodes + <timeout: 120> + | vm om | + vm := StackInterpreterSimulator newWithOptions: #(#ObjectMemory #Spur32BitMemoryManager ). + om := vm objectMemory. + vm desiredNumStackPages: 8. "Makes simulation faster by creating fewer stack pages." + vm openOn: Smalltalk imageName. + vm instVarNamed: 'assertVEPAES' put: false. "This makes the simulation faster by turning off some expensive asserts" + [[vm runForNBytes: 1500000] + on: Halt , ProvideAnswerNotification "This exception handler ignores some halts and confirmers occurring during simulation" + do: [:ex | + ex messageText == #primitiveExecuteMethodArgsArray + ifTrue: [ex resume]. + ex messageText = 'clear transcript?' + ifTrue: [ex resume: false]. + ex pass]] ensure: [Display restore].!
Item was changed: ----- Method: InterpreterPrimitives>>primitiveUtcWithOffset (in category 'system control primitives') ----- primitiveUtcWithOffset "Answer an array with UTC microseconds since the Posix epoch and the current seconds offset from GMT in the local time zone. This is a named (not numbered) primitive in the null module (ie the VM)" | epochDelta offset resultArray utcMicroseconds |
<export: true> <var: #epochDelta declareC: 'static usqLong epochDelta= 2177452800000000ULL'> <var: #utcMicroseconds type: #usqLong> <var: #offset type: #sqLong> + self cCode: '' inSmalltalk: [epochDelta := 2177452800000000]. utcMicroseconds := self ioUTCMicroseconds. offset := self ioLocalMicroseconds - utcMicroseconds. offset := offset / 1000000. objectMemory pushRemappableOop: (self positive64BitIntegerFor: utcMicroseconds - epochDelta). resultArray := objectMemory instantiateClass: objectMemory classArray indexableSize: 2. + objectMemory storePointer: 0 ofObject: resultArray withValue: objectMemory popRemappableOop. + objectMemory storePointerUnchecked: 1 ofObject: resultArray withValue: (objectMemory integerObjectOf: offset). - self storePointer: 0 ofObject: resultArray withValue: objectMemory popRemappableOop. - self storePointerUnchecked: 1 ofObject: resultArray withValue: (objectMemory integerObjectOf: offset). self pop: 1 thenPush: resultArray !
Item was changed: ----- Method: StackInterpreter class>>initializeClassIndices (in category 'initialization') ----- initializeClassIndices "Class Class" SuperclassIndex := 0. MethodDictionaryIndex := 1. InstanceSpecificationIndex := 2. "Fields of a message dictionary" + MethodArrayIndex := 1. - MethodArrayIndex := 1. SelectorStart := 2.
"Newspeak extensions" "Fields of a Mixin (also defined by Behavior)" EnclosingMixinIndex := NewspeakVM ifTrue: [3]. "(Class instVarIndexFor: 'mixinSlot') - 1" "Fields of a MixinApplication (also defined by Behavior)" MixinIndex := NewspeakVM ifTrue: [3]. "(Class instVarIndexFor: 'mixinSlot') - 1" EnclosingObjectIndex := NewspeakVM ifTrue: [4]. "(Class instVarIndexFor: 'enclosingObjectSlot') - 1"
!
vm-dev@lists.squeakfoundation.org