[squeak-dev] The Trunk: Compiler-eem.349.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Apr 6 22:28:37 UTC 2017


Eliot Miranda uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-eem.349.mcz

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

Name: Compiler-eem.349
Author: eem
Time: 6 April 2017, 3:28:27.168241 pm
UUID: d41ed80d-cd74-4d9d-ac42-689529b93592
Ancestors: Compiler-eem.348

Fix the limitation on num literals in the SistaV1 send bytecodes.  Makew a probably obsolete method multiple-bytecode set aware.

=============== Diff against Compiler-eem.348 ===============

Item was changed:
  ----- Method: BlockLocalTempCounter>>testTempCountForBlockAt:in: (in category 'initialize-release') -----
  testTempCountForBlockAt: startPc in: method
  	"Compute the number of local temporaries in a block.
  	 If the block begins with a sequence of push: nil bytecodes then some of
  	 These could be initializing local temps.  We can only reliably disambuguate
  	 them from other uses of nil by parsing the stack and seeing what the offset
  	 of the stack pointer is at the end of the block.There are short-cuts.  The only
  	 one we take here is
  		- if there is no sequence of push nils there can be no local temps"
  
  	| symbolicLines line prior thePc |
  	symbolicLines := Dictionary new.
  	method symbolicLinesDo:
  		[:pc :lineForPC| symbolicLines at: pc put: lineForPC].
  	stackPointer := 0.
  	scanner := InstructionStream new method: method pc: startPc.
  	scanner interpretNextInstructionFor: self.
  	blockEnd ifNil:
  		[self error: 'pc is not that of a block'].
+ 	scanner nextByte = method encoderClass pushNilCode ifTrue:
- 	scanner nextByte = Encoder pushNilCode ifTrue:
  		[joinOffsets := Dictionary new.
  		 [scanner pc < blockEnd] whileTrue:
  			[line := symbolicLines at: scanner pc.
  			 prior := stackPointer.
  			 thePc := scanner pc.
  			 scanner interpretNextInstructionFor: self.
  			 Transcript cr; print: prior; nextPutAll: '->'; print: stackPointer;  tab; print: thePc; tab; nextPutAll: line; flush]].
  	^stackPointer!

Item was changed:
  ----- Method: EncoderForSistaV1>>genSend:numArgs: (in category 'bytecode generation') -----
  genSend: selectorLiteralIndex numArgs: nArgs
  	| extendedIndex extendedNArgs |
  	(selectorLiteralIndex < 0 or: [selectorLiteralIndex > 65535]) ifTrue:
  		[^self outOfRangeError: 'selectorLiteralIndex' index: selectorLiteralIndex range: 0 to: 65535].
  	(nArgs < 0 or: [nArgs > 31]) ifTrue:
  		[^self outOfRangeError: 'numArgs' index: nArgs range: 0 to: 31 "!!!!"].
  	(selectorLiteralIndex < 16 and: [nArgs < 3]) ifTrue: 
  	 	["128-143	1000 iiii			Send Literal Selector #iiii With 0 Argument
  		  144-159	1001 iiii			Send Literal Selector #iiii With 1 Arguments
  		  160-175	1010 iiii			Send Literal Selector #iiii With 2 Arguments"
  		 stream nextPut: 128 + (nArgs * 16) + selectorLiteralIndex.
  		 ^self].
  	(extendedIndex := selectorLiteralIndex) > 31 ifTrue:
+ 		[self genUnsignedMultipleExtendA: extendedIndex // 32.
- 		[self genUnsignedSingleExtendA: extendedIndex // 32.
  		 extendedIndex := extendedIndex \\ 32].
  	(extendedNArgs := nArgs) > 7 ifTrue:
  		[self genUnsignedSingleExtendB: extendedNArgs // 8.
  		 extendedNArgs := extendedNArgs \\ 8].
  	"234		11101010	i i i i i j j j	Send Literal Selector #iiiii (+ Extend A * 32) with jjj (+ Extend B * 8) Arguments"
  	stream
  		nextPut: 234;
  		nextPut: extendedNArgs + (extendedIndex * 8)!

Item was changed:
  ----- Method: EncoderForSistaV1>>genSendDirectedSuper:numArgs: (in category 'extended bytecode generation') -----
  genSendDirectedSuper: selectorLiteralIndex numArgs: nArgs
  	| extendedIndex |
  	(selectorLiteralIndex < 0 or: [selectorLiteralIndex > 65535]) ifTrue:
  		[^self outOfRangeError: 'selectorLiteralIndex' index: selectorLiteralIndex range: 0 to: 65535].
  	(nArgs < 0 or: [nArgs > 31]) ifTrue:
  		[^self outOfRangeError: 'numArgs' index: nArgs range: 0 to: 31 "!!!!"].
  	(extendedIndex := selectorLiteralIndex) > 31 ifTrue:
+ 		[self genUnsignedMultipleExtendA: extendedIndex // 32.
- 		[self genUnsignedSingleExtendA: extendedIndex // 32.
  		 extendedIndex := extendedIndex \\ 32].
  	"Bit 6 of the ExtB byte is the directed send flag.  Bit 6 allows for future expansion to up to 255 args."
  	self genUnsignedSingleExtendB: nArgs // 8 + 64.
  	"235		11101011	iiiiijjj		Send To Superclass Literal Selector #iiiii (+ Extend A * 32) with jjj (+ Extend B * 8) Arguments"
  	stream
  		nextPut: 235;
  		nextPut: nArgs \\ 8 + (extendedIndex * 8)!

Item was changed:
  ----- Method: EncoderForSistaV1>>genSendSuper:numArgs: (in category 'bytecode generation') -----
  genSendSuper: selectorLiteralIndex numArgs: nArgs
  	| extendedIndex extendedNArgs |
  	(selectorLiteralIndex < 0 or: [selectorLiteralIndex > 65535]) ifTrue:
  		[^self outOfRangeError: 'selectorLiteralIndex' index: selectorLiteralIndex range: 0 to: 65535].
  	(nArgs < 0 or: [nArgs > 31]) ifTrue:
  		[^self outOfRangeError: 'numArgs' index: nArgs range: 0 to: 31 "!!!!"].
  	(extendedIndex := selectorLiteralIndex) > 31 ifTrue:
+ 		[self genUnsignedMultipleExtendA: extendedIndex // 32.
- 		[self genUnsignedSingleExtendA: extendedIndex // 32.
  		 extendedIndex := extendedIndex \\ 32].
  	(extendedNArgs := nArgs) > 7 ifTrue:
  		[self genUnsignedSingleExtendB: extendedNArgs // 8.
  		 extendedNArgs := extendedNArgs \\ 8].
  	"235		11101011	iiiiijjj		Send To Superclass Literal Selector #iiiii (+ Extend A * 32) with jjj (+ Extend B * 8) Arguments"
  	stream
  		nextPut: 235;
  		nextPut: extendedNArgs + (extendedIndex * 8)!



More information about the Squeak-dev mailing list