[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
|