VM Maker: VMMaker.oscog-dtl.2754.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-dtl.2754.mcz

David T. Lewis uploaded a new version of VMMaker to project VM Maker:

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

Name: VMMaker.oscog-dtl.2754
Author: dtl
Time: 9 May 2020, 7:15:30.719882 pm
UUID: 31df59c3-3574-4246-8793-9ffd8ac05d12
Ancestors: VMMaker.oscog-nice.2753

primitiveUtcWithOffset should call ioUTCMicrosecondsNow rather than ioUTCMicroseconds because it is used for DateAndTime now. Discussion and performance measurements at http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-May/209209.html

=============== Diff against VMMaker.oscog-nice.2753 ===============

Item was changed:
  ----- Method: InterpreterPrimitives>>primitiveUtcWithOffset (in category 'system control primitives') -----
  "Answer an array with UTC microseconds since the Posix epoch and the
  current seconds offset from GMT in the local time zone. An empty two
  element array (or any object with two or more slots) may be supplied
  as a parameter.
  This is a named (not numbered) primitive in the null module (ie the VM)"
  | epochDelta resultArray |
  <export: true>
  <var: #epochDelta declareC: 'static usqLong epochDelta = 2177452800000000ULL'>
  self cCode: '' inSmalltalk: [epochDelta := 2177452800000000].
  argumentCount > 0
  [argumentCount > 1 ifTrue: [^self primitiveFailFor: PrimErrBadNumArgs].
  resultArray := self stackTop.
  ((objectMemory isPointers: resultArray)
   and: [(objectMemory lengthOf: resultArray) >= 2]) ifFalse:
  [^self primitiveFailFor: PrimErrBadArgument]]
  ifFalse: [resultArray := objectMemory instantiateClass: objectMemory classArray indexableSize: 2].
  "N.B. No pushRemappableOop:/popRemappableOop in Cog because positive64BitIntegerFor: et al use
  eeInstantiate... allocators which are guaranteed not to do a GC."
  storePointerUnchecked: 1 ofObject: resultArray withValue: (objectMemory integerObjectOf: self ioLocalSecondsOffset);
+ storePointer: 0 ofObject: resultArray withValue: (self positive64BitIntegerFor: self ioUTCMicrosecondsNow - epochDelta).
- storePointer: 0 ofObject: resultArray withValue: (self positive64BitIntegerFor: self ioUTCMicroseconds - epochDelta).
  self pop: argumentCount + 1 thenPush: resultArray!