[Vm-dev] VM Maker: BytecodeSets.spur-eem.11.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Aug 13 17:12:04 UTC 2014


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!



More information about the Vm-dev mailing list