After loading UTCDateAndTime (*) into my Spur image, I see a recurrence of
an old epoch bug. The error is in primitiveUtcWithOffset.
DateAndTime now ==> 2084-05-23T12:11:16.131115-04:00
My Spur VM is:
Virtual Machine
---------------
/usr/local/lib/squeak/5.0-3312/squeak
Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.1207]
Unix built on Apr 17 2015 12:45:25 Compiler: 4.4.7 20120313 (Red Hat 4.4.7-4)
platform sources revision VM: r3312 http://www.squeakvm.org/svn/squeak/branches/Cog Date: 2015-04-17 12:34:25 -0700 Plugins: r3275 http://squeakvm.org/svn/squeak/trunk/platforms/Cross/plugins
CoInterpreter VMMaker.oscog-eem.1207 uuid: 4a338677-029f-42ac-b38d-2bc5ecc213f1 Apr 17 2015
StackToRegisterMappingCogit VMMaker.oscog-eem.1207 uuid: 4a338677-029f-42ac-b38d-2bc5ecc213f1 Apr 17 2015
I think we fixed this in Cog a few years ago, and I do not see the problem
in this version of Cog:
Virtual Machine
---------------
/usr/local/lib/squeak/4.0-3003/squeak
Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.746]
Unix built on Jun 15 2014 15:31:52 Compiler: 4.1.2 20080704 (Red Hat 4.1.2-48)
platform sources revision VM: r3003 http://www.squeakvm.org/svn/squeak/branches/Cog Date: 2014-06-15 15:17:31 -0700 Plugins: r2954 http://squeakvm.org/svn/squeak/trunk/platforms/Cross/plugins
CoInterpreter VMMaker.oscog-eem.746 uuid: cc4961d3-e629-4e28-b308-88eab314a8c9 Jun 15 2014
StackToRegisterMappingCogit VMMaker.oscog-eem.774 uuid: 665ef9a5-4139-4f97-85c0-0d0df9eea422 Jun 15 2014
Note, there is a cleaner implemention of the primitive in SVN trunk which
does the time+offset inquiry as an atomic operation. The difference is academic,
but it would be nice if we could use this in Cog/Spur too.
Dave
* http://wiki.squeak.org/squeak/6197
... at http://www.mirandabanda.org/files/Cog/VM/VM.r3354
CogVM binaries as per VMMaker.oscog-eem.1318/r3354
Cogit:
Fix the performance regression on x86 in r3308 VMMaker.oscog-eem.1178
through
the use of XCHG instruction in
CogIA32Compiler>>genPushRegisterArgsForNumArgs:.
Since SendNumArgsReg is not live with small arity sends it can replace
TempReg.
Spur:
Fix bad C bug in nextInSortedFreeListLink:given:. The result
type must be usqInt, otherwise the list can be wrongly
terminated and the second compaction pass can segfault.
Change printFreeChunk:isNextChunk: to printFreeChunk:printAsTreeNode:, and
use
it to implement printSortedFreeList.
Firm up the checkTraversableSortedFreeList assert routine to check that
the list is traversable from lastFreeChunk, not just firstFreeChunk. Make
checkTraversableSortedFreeList robust in presence of empty sorted free list.
Slang:
Make promoteArithmeticTypes:and: obey C99's promotion rules more closely in
an
effort to generate more stable sources. Types were flipping between sqInt &
usqInt for variables that were assigned both types, so that one generation
would produce one type and a subsequent one another (Set/Dictionary
hashing?).
--
best,
Eliot
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1319.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1319
Author: eem
Time: 21 May 2015, 6:00:53.388 pm
UUID: 797f904f-0e7c-42b8-bf53-aa40ee592b13
Ancestors: VMMaker.oscog-eem.1318
Fix generation of the closed PIC prototype when
using pc-relative addressing (on ARMv5).
=============== Diff against VMMaker.oscog-eem.1318 ===============
Item was changed:
----- Method: Cogit>>generateClosedPICPrototype (in category 'initialization') -----
generateClosedPICPrototype
"Generate the prototype ClosedPIC to determine how much space as full PIC takes.
When we first allocate a closed PIC it only has one or two cases and we want to grow it.
So we have to determine how big a full one is before hand."
numPICCases := 6.
+ methodLabel
+ address: methodZoneBase;
+ dependent: nil.
"stack allocate the various collections so that they
are effectively garbage collected on return."
self allocateOpcodes: numPICCases * 7 bytecodes: 0.
self compileClosedPICPrototype.
self computeMaximumSizes.
methodLabel concretizeAt: methodZoneBase.
closedPICSize := (self sizeof: CogMethod) + (self generateInstructionsAt: methodZoneBase + (self sizeof: CogMethod)).
firstCPICCaseOffset := endCPICCase0 address - methodZoneBase.
cPICCaseSize := endCPICCase1 address - endCPICCase0 address.
cPICEndSize := closedPICSize - (numPICCases - 1 * cPICCaseSize + firstCPICCaseOffset).
closedPICSize := methodZone roundUpLength: closedPICSize
"self cCode: ''
inSmalltalk:
[| end |
end := self outputInstructionsAt: methodZoneBase + headerSize.
self disassembleFrom: methodZoneBase + headerSize to: end - 1.
self halt]"!