[Vm-dev] VM Maker: BytecodeSets.spur-cb.66.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jan 19 16:52:25 UTC 2017


ClementBera uploaded a new version of BytecodeSets to project VM Maker:
http://source.squeak.org/VMMaker/BytecodeSets.spur-cb.66.mcz

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

Name: BytecodeSets.spur-cb.66
Author: cb
Time: 19 January 2017, 5:52:17.032116 pm
UUID: adcb4362-6dd8-49a5-9ca0-156b185b00ea
Ancestors: BytecodeSets.spur-eem.65

Added support for branchIfInstanceOf: decoding

=============== Diff against BytecodeSets.spur-eem.65 ===============

Item was added:
+ ----- Method: InstructionClient>>branchIfInstanceOf:distance: (in category '*BytecodeSets-instruction decoding') -----
+ branchIfInstanceOf: literal distance: distance
+ 	"If the object on top of stack has the type -or one of the type- present in the literal (the literal is a behavior or an array of behavior), then pop it. Else jumps by the distance."
+ 	!

Item was added:
+ ----- Method: InstructionPrinter>>branchIfInstanceOf:distance: (in category '*BytecodeSets-SistaV1-decoding') -----
+ branchIfInstanceOf: behaviorOrArrayOfBehavior distance: distance
+ 	"If the object on top of stack has the type -or one of the type- present in the literal
+ 	 (the literal is a behavior or an array of behavior), then pop it. Else jumps by the distance."
+ 	self print: 'branchIfInstanceOf: ', behaviorOrArrayOfBehavior printString, ' distance: ', distance printString!

Item was changed:
  ----- Method: InstructionStream>>interpretNext3ByteSistaV1Instruction:for:extA:extB:startPC: (in category '*BytecodeSets-SistaV1-decoding') -----
  interpretNext3ByteSistaV1Instruction: bytecode for: client extA: extA extB: extB startPC: startPC
  	"Send to the argument, client, a message that specifies the next instruction.
  	 This method handles the three-byte codes.
  	 For a table of the bytecode set, see EncoderForSistaV1's class comment."
  
  	| method byte2 byte3 literal |
  	method := self method.
  	byte2 := method at: pc.
  	byte3 := method at: pc + 1.
  	pc := pc + 2.
  	"we search the bytecodes by what we expect to be the static frequency."
  	bytecode = 248 ifTrue:
  		[byte3 >= 128 ifTrue:
  			[^client callInlinePrimitive: byte2 + (byte3 - 128 bitShift: 8)].
  		 ^client callPrimitive: byte2 + (byte3 bitShift: 8)].
  	"*	249		11111001	xxxxxxxx	siyyyyyy	push Closure Compiled block literal index xxxxxxxx (+ Extend A * 256) numCopied yyyyyy receiverOnStack: s = 1 ignoreOuterContext: i = 1"
  	bytecode = 249 ifTrue:
  		[literal := method literalAt: (extA bitShift: 8) + byte2 + 1.
  		 ^client pushFullClosure: literal numCopied: (byte3 bitAnd: 16r3F)].
  	bytecode = 250 ifTrue:
  		["**	250  11111010  eeiiikkk  jjjjjjjj  Push Closure Num Copied iii (+ExtA//16*8) Num Args kkk (+ ExtA\\16*8) BlockSize jjjjjjjj (+ExtB*256). ee = num extensions"
  		 ^client
  			pushClosureCopyNumCopiedValues: ((byte2 bitShift: -3) bitAnd: 7) + (extA // 16 bitShift: 3)
  			numArgs: (byte2 bitAnd: 7) + (extA \\ 16 bitShift: 3)
  			blockSize: byte3 + (extB bitShift: 8)].
  	bytecode = 251 ifTrue:
  		[^client pushRemoteTemp: byte2 inVectorAt: byte3].
  	bytecode = 252 ifTrue:
  		[^client storeIntoRemoteTemp: byte2 inVectorAt: byte3].
  	bytecode = 253 ifTrue:
  		[^client popIntoRemoteTemp: byte2 inVectorAt: byte3].
  	"**	254		11111110	kkkkkkkk	jjjjjjjj		branch If Not Instance Of Behavior/Array Of Behavior kkkkkkkk (+ Extend A * 256, where Extend A >= 0) distance jjjjjjjj (+ Extend B * 256, where Extend B >= 0)"
  	bytecode = 254 ifTrue: 
+ 		[extB < 0 ifTrue: [client branchIfInstanceOf: literal distance: (extB + 128 bitShift: 8) + byte3].
+ 		^ client branchIfNotInstanceOf: literal distance: (extB bitShift: 8) + byte3 ].
- 		[^ client branchIfNotInstanceOf: literal distance: (extB bitShift: 8) + byte3 ].
  	^self unusedBytecode: client at: startPC!

Item was changed:
  ----- Method: StackDepthFinder>>branchIfNotInstanceOf:distance: (in category '*BytecodeSets-SistaV1-decoding') -----
+ branchIfNotInstanceOf: behaviorOrArrayOfBehavior distance: delta 
+ 	self drop.
+ 	self doJump: delta!
- branchIfNotInstanceOf: behaviorOrArrayOfBehavior distance: anInteger 
- 	self drop!



More information about the Vm-dev mailing list