[Vm-dev] VM Maker: VMMaker.oscog-eem.1062.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Feb 13 19:38:52 UTC 2015


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1062.mcz

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

Name: VMMaker.oscog-eem.1062
Author: eem
Time: 13 February 2015, 11:37:27.254 am
UUID: 5016dc92-e170-43ca-bef4-9f8fb53a75f9
Ancestors: VMMaker.oscog-eem.1061

Simplify primitiveDisplayString given isArray:.

=============== Diff against VMMaker.oscog-eem.1061 ===============

Item was changed:
  ----- Method: BitBltSimulation>>primitiveDisplayString (in category 'primitives') -----
  primitiveDisplayString
  
  	| kernDelta xTable glyphMap stopIndex startIndex sourceString bbObj maxGlyph ascii glyphIndex sourcePtr left quickBlt |
  	<export: true>
  	<var: #sourcePtr type: 'char *'>
+ 	interpreterProxy methodArgumentCount = 6 ifFalse:
+ 		[^interpreterProxy primitiveFail].
- 	interpreterProxy methodArgumentCount = 6 
- 		ifFalse:[^interpreterProxy primitiveFail].
  	kernDelta := interpreterProxy stackIntegerValue: 0.
  	xTable := interpreterProxy stackObjectValue: 1.
  	glyphMap := interpreterProxy stackObjectValue: 2.
- 	((interpreterProxy fetchClassOf: xTable) = interpreterProxy classArray and:[
- 		(interpreterProxy fetchClassOf: glyphMap) = interpreterProxy classArray])
- 			ifFalse:[^interpreterProxy primitiveFail].
- 	(interpreterProxy slotSizeOf: glyphMap) = 256 ifFalse:[^interpreterProxy primitiveFail].
- 	interpreterProxy failed ifTrue:[^nil].
- 	maxGlyph := (interpreterProxy slotSizeOf: xTable) - 2.
- 
  	stopIndex := interpreterProxy stackIntegerValue: 3.
  	startIndex := interpreterProxy stackIntegerValue: 4.
  	sourceString := interpreterProxy stackObjectValue: 5.
- 	(interpreterProxy isBytes: sourceString) ifFalse:[^interpreterProxy primitiveFail].
- 	(startIndex > 0 and:[stopIndex > 0 and:[
- 		stopIndex <= (interpreterProxy byteSizeOf: sourceString)]])
- 			ifFalse:[^interpreterProxy primitiveFail].
- 
  	bbObj := interpreterProxy stackObjectValue: 6.
+ 	interpreterProxy failed ifTrue:
+ 		[^nil].
+ 
+ 	((interpreterProxy isArray: xTable)
+ 	 and: [(interpreterProxy isArray: glyphMap)
+ 	 and: [(interpreterProxy slotSizeOf: glyphMap) = 256
+ 	 and: [(interpreterProxy isBytes: sourceString)
+ 	 and: [startIndex > 0
+ 	 and: [stopIndex > 0
+ 	 and: [stopIndex <= (interpreterProxy byteSizeOf: sourceString)
+ 	 and: [(self loadBitBltFrom: bbObj)
+ 	 and: [combinationRule ~= 30 "these two need extra source alpha"
+ 	 and: [combinationRule ~= 31]]]]]]]]]) ifFalse:
+ 		[^interpreterProxy primitiveFail].
+ 	maxGlyph := (interpreterProxy slotSizeOf: xTable) - 2.
- 	(self loadBitBltFrom: bbObj) ifFalse:[^interpreterProxy primitiveFail].
- 	(combinationRule = 30 or:[combinationRule = 31]) "needs extra source alpha"
- 		ifTrue:[^interpreterProxy primitiveFail].
  	"See if we can go directly into copyLoopPixMap (usually we can)"
  	quickBlt := destBits ~= 0 "no OS surfaces please"
  				and:[sourceBits ~= 0 "and again"
  				and:[noSource = false "needs a source"
  				and:[sourceForm ~= destForm "no blits onto self"
+ 				and:[cmFlags ~= 0 
+ 					 or:[sourceMSB ~= destMSB 
+ 					 or:[sourceDepth ~= destDepth]]]]]]. "no point using slower version"
- 				and:[(cmFlags ~= 0 
- 						or:[sourceMSB ~= destMSB 
- 						or:[sourceDepth ~= destDepth]]) "no point using slower version"
- 				]]]].
  	left := destX.
  	sourcePtr := interpreterProxy firstIndexableField: sourceString.
  	startIndex to: stopIndex do:[:charIndex|
  		ascii := interpreterProxy byteAtPointer: sourcePtr + charIndex - 1.
  		glyphIndex := interpreterProxy fetchInteger: ascii ofObject: glyphMap.
  		(glyphIndex < 0 or:[glyphIndex > maxGlyph]) 
  			ifTrue:[^interpreterProxy primitiveFail].
  		sourceX := interpreterProxy fetchInteger: glyphIndex ofObject: xTable.
  		width := (interpreterProxy fetchInteger: glyphIndex+1 ofObject: xTable) - sourceX.
  		interpreterProxy failed ifTrue:[^nil].
  		self clipRange.	"Must clip here"
  		(bbW > 0 and:[bbH > 0]) ifTrue: [
  			quickBlt ifTrue:[
  				self destMaskAndPointerInit.
  				self copyLoopPixMap.
  				"both, hDir and vDir are known to be > 0"
  				affectedL := dx.
  				affectedR := dx + bbW.
  				affectedT := dy.
  				affectedB := dy + bbH.
  			] ifFalse:[self copyBits]].
  		interpreterProxy failed ifTrue:[^nil].
  		destX := destX + width + kernDelta.
  	 ].
  	affectedL := left.
  	self showDisplayBits.
  	"store destX back"	
  	interpreterProxy storeInteger: BBDestXIndex ofObject: bbObj withValue: destX.
  	interpreterProxy pop: 6. "pop args, return rcvr"!



More information about the Vm-dev mailing list