David T. Lewis uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-dtl.737.mcz
==================== Summary ====================
Name: VMMaker.oscog-dtl.737 Author: dtl Time: 29 May 2014, 8:18:52.343 pm UUID: dd942895-9394-4192-aa6f-dc808c730053 Ancestors: VMMaker.oscog-tpr.736
Fix code generation for ThreadedFFIPlugin by ensuring that target directory exists, addressing failures in http://build.squeak.org/job/CogVM/ code generation test.
Fix regression in primitiveUtcWithOffset, answer the correct local time offset.
=============== Diff against VMMaker.oscog-tpr.736 ===============
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 | + - | resultArray | <export: true> + <var: #epochDelta declareC: 'static usqLong epochDelta= 2177452800000000ULL'> + <var: #utcMicroseconds type: #usqLong> + <var: #offset type: #sqLong> + utcMicroseconds := self ioUTCMicroseconds. + offset := self ioLocalMicroseconds - utcMicroseconds. + offset := offset / 1000000. + objectMemory pushRemappableOop: (objectMemory integerObjectOf: offset). + objectMemory pushRemappableOop: (self positive64BitIntegerFor: utcMicroseconds - epochDelta). - "2177452800000000 = '1/1/1970' asDate asSeconds - '1/1/1901' asDate asSeconds * 1,000,000" - objectMemory pushRemappableOop: (self positive64BitIntegerFor: self ioUTCMicrosecondsNow - 2177452800000000). resultArray := objectMemory instantiateClass: objectMemory classArray indexableSize: 2. self storePointer: 0 ofObject: resultArray withValue: objectMemory popRemappableOop. + self storePointerUnchecked: 1 ofObject: resultArray withValue: objectMemory popRemappableOop. - self storePointerUnchecked: 1 ofObject: resultArray withValue: (objectMemory integerObjectOf: self ioLocalSecondsOffset). self pop: 1 thenPush: resultArray !
Item was changed: ----- Method: ThreadedFFIPlugin class>>translateInDirectory:doInlining: (in category 'translation') ----- translateInDirectory: directory doInlining: inlineFlag "As a hack to allow ThreadedFFIPlugin to generate a skeletal SqueakFFIPrims.c that simply includes the fleshed-out SqueakIA32FFIPrims.c, SqueakARMFFIPrims.c et al, intercept for ThreadedFFIPlugin and output generateCodeStringForPrimitives." | ffiPluginRootClass | ffiPluginRootClass := thisContext method methodClass soleInstance. ^self == ffiPluginRootClass ifTrue: [self storeString: self generateCodeStringForPrimitives onFileNamed: (directory fullNameFor: self moduleName, '.c'). #()] ifFalse: [super + translateInDirectory: (directory containingDirectory directoryNamed: ffiPluginRootClass moduleName) assureExistence - translateInDirectory: (directory containingDirectory directoryNamed: ffiPluginRootClass moduleName) doInlining: inlineFlag]!
vm-dev@lists.squeakfoundation.org