[Vm-dev] VM Maker: VMMaker.oscog-akg.2474.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Oct 24 13:59:51 UTC 2018


Alistair Grant uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-akg.2474.mcz

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

Name: VMMaker.oscog-akg.2474
Author: akg
Time: 24 October 2018, 3:57:54.515846 pm
UUID: 6f62ab11-b855-47bf-9371-dea8cc27067e
Ancestors: VMMaker.oscog-akg.2473

VMClass>>memcpy:_:_: handle CugMethodSurrogates

=============== Diff against VMMaker.oscog-akg.2473 ===============

Item was added:
+ ----- Method: CogMethodSurrogate>>isVMSimulationAddress (in category 'testing') -----
+ isVMSimulationAddress
+ 	"Answer a boolean indicating whether the receiver is a kind of address in the VM simulation"
+ 
+ 	^true!

Item was added:
+ ----- Method: Object>>isVMSimulationAddress (in category '*VMMaker-testing') -----
+ isVMSimulationAddress
+ 	"Answer a boolean indicating whether the receiver is a kind of address in the VM simulation"
+ 
+ 	^false!

Item was changed:
  ----- Method: VMClass>>memcpy:_:_: (in category 'C library simulation') -----
  memcpy: dest _: src _: bytes
  	<doNotGenerate>
  	"implementation of memcpy(3). N.B. If ranges overlap, must use memmove."
+ 	| getBlock setBlock source destination |
- 	| getBlock setBlock |
  
+ 	source := src isVMSimulationAddress
+ 		ifTrue: [src asInteger]
+ 		ifFalse: [src].
+ 	destination := dest isVMSimulationAddress
+ 		ifTrue: [dest asInteger]
+ 		ifFalse: [dest].
+ 	(source isInteger and: [destination isInteger]) ifTrue:
+ 		[ self deny: ((destination <= source and: [destination + bytes > source])
+ 					or: [source <= destination and: [source + bytes > destination]])].
- 	(src isInteger and: [dest isInteger]) ifTrue:
- 		[ self deny: ((dest <= src and: [dest + bytes > src])
- 					or: [src <= dest and: [src + bytes > dest]])].
  
  	"Determine the source and destination access blocks based on the parameter type"
+ 	getBlock := source isCollection ifTrue: 
+ 		[source isString ifTrue: 
- 	getBlock := src isCollection ifTrue: 
- 		[src isString ifTrue: 
  			"basicAt: answers integers"
+ 			[[ :idx | source basicAt: idx]]
- 			[[ :idx | src basicAt: idx]]
  		ifFalse: 
+ 			[source class == ByteArray ifTrue: 
+ 				[[ :idx | source at: idx]]]]
- 			[src class == ByteArray ifTrue: 
- 				[[ :idx | src at: idx]]]]
  	ifFalse: 
+ 		[source isInteger ifTrue: 
+ 			[[ :idx | self byteAt: source + idx - 1]]
- 		[src isInteger ifTrue: 
- 			[[ :idx | self byteAt: src + idx - 1]]
  		ifFalse: 
+ 			[source isCArray ifTrue:
+ 				[[ :idx | source at: idx - 1]]]].
- 			[src isCArray ifTrue:
- 				[[ :idx | src at: idx - 1]]]].
  	getBlock ifNil: [self error: 'unhandled type of source string'].
+ 	setBlock := destination isCollection ifTrue: 
+ 		[destination isString ifTrue:
- 	setBlock := dest isCollection ifTrue: 
- 		[dest isString ifTrue:
  			"basicAt:put: stores integers"
+ 			[[ :idx | destination basicAt: idx put: (getBlock value: idx)]] 
- 			[[ :idx | dest basicAt: idx put: (getBlock value: idx)]] 
  		ifFalse: 
+ 			[destination class == ByteArray ifTrue: 
+ 				[[ :idx | destination at: idx put: (getBlock value: idx)]]]]
- 			[dest class == ByteArray ifTrue: 
- 				[[ :idx | dest at: idx put: (getBlock value: idx)]]]]
  	ifFalse: 
+ 		[destination isInteger ifTrue:
+ 			[[ :idx | self byteAt: destination + idx - 1 put: (getBlock value: idx)]]
- 		[dest isInteger ifTrue:
- 			[[ :idx | self byteAt: dest + idx - 1 put: (getBlock value: idx)]]
  		ifFalse:
+ 			[destination isCArray ifTrue:
+ 				[[ :idx | destination at: idx - 1 put: (getBlock value: idx)]]]].
- 			[dest isCArray ifTrue:
- 				[[ :idx | dest at: idx - 1 put: (getBlock value: idx)]]]].
  	setBlock ifNil: [self error: 'unhandled type of destination string'].
  	1 to: bytes do: setBlock.
  
+ 	^destination!
- 	^dest!



More information about the Vm-dev mailing list