Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3035.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3035 Author: eem Time: 13 August 2021, 11:58:40.766763 am UUID: fb618590-b3d1-46f5-9454-89b87658f4a8 Ancestors: VMMaker.oscog-eem.3034
CoInterpreter: Make primitiveCompareBytes a FastCPrimitive. ThreadedFFIPlugin: Provide a fast primitive to create a new ExternalAddress.
=============== Diff against VMMaker.oscog-eem.3034 ===============
Item was changed: ----- Method: InterpreterPrimitives>>primitiveCompareBytes (in category 'indexing primitives') ----- primitiveCompareBytes "Primitive. Compare two byte-indexed objects for equality" + <export: true flags: #FastCPrimitiveFlag> + | arg1 arg2 len | - | arg1 arg2 len1 len2 | - <export: true> - argumentCount = 1 ifFalse:[self primitiveFail. ^self]. arg1 := self stackValue: 1. arg2 := self stackValue: 0. - ((objectMemory isBytes: arg1) and:[objectMemory isBytes: arg2]) - ifFalse:[self primitiveFail. ^self]. "Quick identity test" + arg1 = arg2 ifTrue: + [^self methodReturnBool: true]. + ((objectMemory isBytes: arg1) and:[objectMemory isBytes: arg2]) ifFalse: + [^self primitiveFailFor: PrimErrBadArgument]. + len := objectMemory numBytesOfBytes: arg1. + len = (objectMemory numBytesOfBytes: arg2) ifFalse: + [^self methodReturnBool: false]. + 0 to: len - 1 do: + [:i| + (objectMemory fetchByte: i ofObject: arg1) = (objectMemory fetchByte: i ofObject: arg2) ifFalse: + [^self methodReturnBool: false]]. + ^self methodReturnBool: true! - (arg1 = arg2) ifTrue:[^self pop: 2 thenPush: objectMemory trueObject]. - len1 := objectMemory byteSizeOf: arg1. - len2 := objectMemory byteSizeOf: arg2. - len1 = len2 ifFalse:[^self pop: 2 thenPush: objectMemory falseObject]. - 0 to: len1-1 do:[:i| - (objectMemory fetchByte: i ofObject: arg1) = (objectMemory fetchByte: i ofObject: arg2) - ifFalse:[^self pop: 2 thenPush: objectMemory falseObject]]. - self pop: 2 thenPush: objectMemory trueObject. - !
Item was added: + ----- Method: ThreadedFFIPlugin>>primitiveExternalAddressFromInteger (in category 'primitives') ----- + primitiveExternalAddressFromInteger + "Answer a 4 byte or 8 byte ExternalAddress with value of the argument." + <export: true flags: #FastCPrimitiveFlag> + | value | + value := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0). + interpreterProxy failed ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. + (interpreterProxy instantiateClass: interpreterProxy classExternalAddress indexableSize: BytesPerWord) + ifNil: [^interpreterProxy primitiveFailFor: PrimErrNoMemory] + ifNotNil: + [:address| + (self cCoerce: (interpreterProxy firstIndexableField: address) to: #usqIntptr_t) at: 0 put: value. + ^interpreterProxy methodReturnValue: address]!
vm-dev@lists.squeakfoundation.org