Eliot Miranda uploaded a new version of BytecodeSets to project VM Maker: http://source.squeak.org/VMMaker/BytecodeSets.spur-eem.11.mcz
==================== Summary ====================
Name: BytecodeSets.spur-eem.11 Author: eem Time: 13 August 2014, 10:11:57.09 am UUID: 59e46149-58c6-47f6-9a2f-81787a393b7d Ancestors: BytecodeSets-eem.10
Save BytecodeSets for latest version of Spur bootstrap (Cog.190) with changes to compiler, etc.
=============== Diff against BytecodeSets-eem.10 ===============
Item was removed: - ----- Method: EncoderForNewsqueakV4>>computeMethodHeaderForNumArgs:numTemps:numLits:primitive: (in category 'method encoding') ----- - computeMethodHeaderForNumArgs: numArgs numTemps: numTemps numLits: numLits primitive: primitiveIndex - numTemps > 63 ifTrue: - [^self error: 'Cannot compile -- too many temporary variables']. - numLits > 65535 ifTrue: - [^self error: 'Cannot compile -- too many literals']. - ^SmallInteger minVal "sign bit is the flag for the alternative bytecode set" - + (numArgs bitShift: 24) - + (numTemps bitShift: 18) - "+ (largeBit bitShift: 17)" "largeBit gets filled in later" - + numLits - + (primitiveIndex > 0 ifTrue: [1 bitShift: 16] ifFalse: [0])!
Item was changed: ----- Method: EncoderForNewsqueakV4>>computeMethodHeaderForNumArgs:numTemps:numLits:primitive:accessModifier: (in category 'method encoding') ----- computeMethodHeaderForNumArgs: numArgs numTemps: numTemps numLits: numLits primitive: primitiveIndex accessModifier: accessModifier numArgs > 15 ifTrue: [^self error: 'Cannot compile -- too many arguments']. numTemps > 63 ifTrue: [^self error: 'Cannot compile -- too many temporary variables']. numLits > 65535 ifTrue: [^self error: 'Cannot compile -- too many literals']. + ^(CompiledMethod headerFlagForEncoder: self) + + (accessModifier = #protected ifTrue: [1 bitShift: 29] ifFalse: [0]) + + (accessModifier = #private ifTrue: [1 bitShift: 28] ifFalse: [0]) - ^SmallInteger minVal "sign bit is the flag for the alternative bytecode set" - + (accessModifier = #protected ifTrue: [ 1 bitShift: 29 ] ifFalse: [ 0 ]) - + (accessModifier = #private ifTrue: [ 1 bitShift: 28 ] ifFalse: [ 0 ]) + (numArgs bitShift: 24) + (numTemps bitShift: 18) "+ (largeBit bitShift: 17)" "largeBit gets filled in later" + + (primitiveIndex > 0 ifTrue: [1 bitShift: 16] ifFalse: [0]) + + numLits! - + ((Smalltalk vmParameterAt: 65) == true - ifTrue: [numLits + (primitiveIndex > 0 ifTrue: [1 bitShift: 16] ifFalse: [0])] - ifFalse: [numLits > 255 ifTrue: [self error: 'vm does not support large methods']. - primitiveIndex > 511 ifTrue: [self error: 'hack does not support primitive > 511']. - (numLits bitShift: 9) - + (primitiveIndex bitAnd: 511)])!
Item was removed: - ----- Method: EncoderForNewsqueakV4>>generateMethodOfClass:trailer:from: (in category 'method encoding') ----- - generateMethodOfClass: aCompiledMethodClass trailer: trailer from: methodNode - "The receiver is the root of a parse tree. Answer an instance of aCompiledMethodClass. - The argument, trailer, is arbitrary but is typically either the reference to the source code - that is stored with every CompiledMethod, or an encoding of the method's temporary names." - - | primErrNode blkSize nLits locals literals header method stack | - primErrNode := methodNode primitiveErrorVariableName ifNotNil: - [self fixTemp: methodNode primitiveErrorVariableName]. - methodNode ensureClosureAnalysisDone. - self rootNode: methodNode. "this is for BlockNode>>sizeCodeForClosureValue:" - blkSize := (methodNode block sizeCodeForEvaluatedValue: self) - + (methodNode primitive > 0 - ifTrue: [self sizeCallPrimitive: methodNode primitive] - ifFalse: [0]) - + (primErrNode - ifNil: [0] - ifNotNil: - [primErrNode - index: methodNode arguments size + methodNode temporaries size; - sizeCodeForStore: self "The VM relies on storeIntoTemp: (129)"]). - locals := methodNode arguments, methodNode temporaries, (primErrNode ifNil: [#()] ifNotNil: [{primErrNode}]). - self noteBlockExtent: methodNode block blockExtent hasLocals: locals. - header := self computeMethodHeaderForNumArgs: methodNode arguments size - numTemps: locals size - numLits: (nLits := (literals := self allLiterals) size) - primitive: methodNode primitive. - method := trailer - createMethod: blkSize - class: aCompiledMethodClass - header: header. - 1 to: nLits do: [:lit | method literalAt: lit put: (literals at: lit)]. - self streamToMethod: method. - stack := ParseStack new init. - methodNode primitive > 0 ifTrue: - [self genCallPrimitive: methodNode primitive]. - primErrNode ifNotNil: - [primErrNode emitCodeForStore: stack encoder: self]. - stack position: method numTemps. - [methodNode block emitCodeForEvaluatedValue: stack encoder: self] - on: Error "If an attempt is made to write too much code the method will be asked" - do: [:ex| "to grow, and the grow attempt will fail in CompiledMethod class>>#new:" - ex signalerContext sender method = (CompiledMethod class>>#new:) - ifTrue: [^self error: 'Compiler code size discrepancy'] - ifFalse: [ex pass]]. - stack position ~= (method numTemps + 1) ifTrue: - [^self error: 'Compiler stack discrepancy']. - self methodStreamPosition ~= (method size - trailer size) ifTrue: - [^self error: 'Compiler code size discrepancy']. - method needsFrameSize: stack size - method numTemps. - ^method!
Item was removed: - ----- Method: EncoderForSistaV1>>computeMethodHeaderForNumArgs:numTemps:numLits:primitive: (in category 'method encoding') ----- - computeMethodHeaderForNumArgs: numArgs numTemps: numTemps numLits: numLits primitive: primitiveIndex - numTemps > 63 ifTrue: - [^self error: 'Cannot compile -- too many temporary variables']. - numLits > 65535 ifTrue: - [^self error: 'Cannot compile -- too many literals']. - ^SmallInteger minVal "sign bit is the flag for the alternative bytecode set" - + (numArgs bitShift: 24) - + (numTemps bitShift: 18) - "+ (largeBit bitShift: 17)" "largeBit gets filled in later" - + numLits - + (primitiveIndex > 0 ifTrue: [1 bitShift: 16] ifFalse: [0])!
Item was removed: - ----- Method: EncoderForSistaV1>>generateMethodOfClass:trailer:from: (in category 'method encoding') ----- - generateMethodOfClass: aCompiledMethodClass trailer: trailer from: methodNode - "The receiver is the root of a parse tree. Answer an instance of aCompiledMethodClass. - The argument, trailer, is arbitrary but is typically either the reference to the source code - that is stored with every CompiledMethod, or an encoding of the method's temporary names." - - | primErrNode blkSize nLits locals literals header method stack | - primErrNode := methodNode primitiveErrorVariableName ifNotNil: - [self fixTemp: methodNode primitiveErrorVariableName]. - methodNode ensureClosureAnalysisDone. - self rootNode: methodNode. "this is for BlockNode>>sizeCodeForClosureValue:" - blkSize := (methodNode block sizeCodeForEvaluatedValue: self) - + (methodNode primitive > 0 - ifTrue: [self sizeCallPrimitive: methodNode primitive] - ifFalse: [0]) - + (primErrNode - ifNil: [0] - ifNotNil: - [primErrNode - index: methodNode arguments size + methodNode temporaries size; - sizeCodeForStore: self "The VM relies on storeIntoTemp: (129)"]). - locals := methodNode arguments, methodNode temporaries, (primErrNode ifNil: [#()] ifNotNil: [{primErrNode}]). - self noteBlockExtent: methodNode block blockExtent hasLocals: locals. - header := self computeMethodHeaderForNumArgs: methodNode arguments size - numTemps: locals size - numLits: (nLits := (literals := self allLiterals) size) - primitive: methodNode primitive. - method := trailer - createMethod: blkSize - class: aCompiledMethodClass - header: header. - 1 to: nLits do: [:lit | method literalAt: lit put: (literals at: lit)]. - self streamToMethod: method. - stack := ParseStack new init. - methodNode primitive > 0 ifTrue: - [self genCallPrimitive: methodNode primitive]. - primErrNode ifNotNil: - [primErrNode emitCodeForStore: stack encoder: self]. - stack position: method numTemps. - [methodNode block emitCodeForEvaluatedValue: stack encoder: self] - on: Error "If an attempt is made to write too much code the method will be asked" - do: [:ex| "to grow, and the grow attempt will fail in CompiledMethod class>>#new:" - ex signalerContext sender method = (CompiledMethod class>>#new:) - ifTrue: [^self error: 'Compiler code size discrepancy'] - ifFalse: [ex pass]]. - stack position ~= (method numTemps + 1) ifTrue: - [^self error: 'Compiler stack discrepancy']. - self methodStreamPosition ~= (method size - trailer size) ifTrue: - [^self error: 'Compiler code size discrepancy']. - method needsFrameSize: stack size - method numTemps. - ^method!
Item was removed: - ----- Method: InstructionClient>>callPrimitive: (in category '*BytecodeSets-instruction decoding') ----- - callPrimitive: pimIndex - "SqueakV3PlusClosures: 239 11101111 iiiiiiii jjjjjjjj Call Primitive #iiiiiiii + (jjjjjjjj * 256) - NewsqueakV4: 249 11111001 iiiiiiii jjjjjjjj Call Primitive #iiiiiiii + (jjjjjjjj * 256) - SistaV1: 248 11111000 iiiiiiii mjjjjjjj Call Primitive #iiiiiiii + (jjjjjjj * 256) - m=1 means inlined primitive, no hard return after execution."!
Item was removed: - ----- Method: MethodNode>>generate:using: (in category '*BytecodeSets-code generation') ----- - generate: trailer using: aCompiledMethodClass - "The receiver is the root of a parse tree. Answer an instance of aCompiledMethodClass. - The argument, trailer, is arbitrary but is typically either the reference to the source code - that is stored with every CompiledMethod, or an encoding of the method's temporary names." - - | method | - self generate: trailer - using: aCompiledMethodClass - ifQuick: - [:m | - m literalAt: 2 put: encoder associationForClass; - properties: properties. - ^m]. - method := encoder generateMethodOfClass: aCompiledMethodClass trailer: trailer from: self. - method properties: properties. - ^method!
vm-dev@lists.squeakfoundation.org