[Vm-dev] VM Maker: VMMaker.oscog-rmacnak.1484.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Sep 30 02:01:35 UTC 2015


Ryan Macnak uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-rmacnak.1484.mcz

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

Name: VMMaker.oscog-rmacnak.1484
Author: rmacnak
Time: 29 September 2015, 7:00:15.911 pm
UUID: ff357178-7fee-49ac-9ac9-0d33800ef6f5
Ancestors: VMMaker.oscog-EstebanLorenzano.1483

Add word accessors to Alien.

=============== Diff against VMMaker.oscog-EstebanLorenzano.1483 ===============

Item was changed:
  ----- Method: IA32ABIPlugin>>primSignedLongAt (in category 'primitives-accessing') -----
  primSignedLongAt
  	"Answer the signed 32-bit integer starting at the given byte offset (little endian)."
  	"<Alien> signedLongAt: index <Integer> ^<Integer>
  		<primitive: 'primSignedLongAt' error: errorCode module: 'IA32ABI'>"
  	| byteOffset rcvr startAddr addr value valueOop |
  	<export: true>
  
  	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1.
  	rcvr := interpreterProxy stackObjectValue: 1.
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	(self index: byteOffset length: 4 inRange: rcvr) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
  	(startAddr := self startOfData: rcvr) = 0 ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
  	addr := startAddr + byteOffset.
+ 	value := self long32At: addr.
- 	value := self longAt: addr.
  	valueOop := interpreterProxy signed32BitIntegerFor: value.
  	^interpreterProxy methodReturnValue: valueOop!

Item was changed:
  ----- Method: IA32ABIPlugin>>primSignedLongAtPut (in category 'primitives-accessing') -----
  primSignedLongAtPut
  	"Store a signed integer into 32 bits starting at the given byte offset (little endian)."
  	"<Alien> signedLongAt: index <Integer> put: value <Integer> ^<Integer>
  		<primitive: 'primSignedLongAtPut' error: errorCode module: 'IA32ABI'>"
  	| byteOffset rcvr startAddr addr value valueOop |
  	<export: true>
  
  	valueOop := interpreterProxy stackValue: 0.
  	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1.
  	rcvr := interpreterProxy stackObjectValue: 2.
  	value := interpreterProxy signed32BitValueOf: valueOop.
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	(self index: byteOffset length: 4 inRange: rcvr) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
  	(startAddr := self startOfData: rcvr) = 0 ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
  	addr := startAddr + byteOffset.
+ 	self long32At: addr put: value.
- 	self longAt: addr put: value.
  	^interpreterProxy methodReturnValue: valueOop!

Item was added:
+ ----- Method: IA32ABIPlugin>>primSignedWordAt (in category 'primitives-accessing') -----
+ primSignedWordAt
+ 	"Answer the signed word starting at the given byte offset (little endian)."
+ 	"<Alien> signedWordAt: index <Integer> ^<Integer>
+ 		<primitive: 'primSignedWordAt' error: errorCode module: 'IA32ABI'>"
+ 	| byteOffset rcvr startAddr addr value valueOop |
+ 	<export: true>
+ 
+ 	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1.
+ 	rcvr := interpreterProxy stackObjectValue: 1.
+ 	interpreterProxy failed ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	(self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
+ 	(startAddr := self startOfData: rcvr) = 0 ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
+ 	addr := startAddr + byteOffset.
+ 	value := self longAt: addr.
+ 	valueOop := interpreterProxy signedMachineIntegerValueOf: value.
+ 	^interpreterProxy methodReturnValue: valueOop!

Item was added:
+ ----- Method: IA32ABIPlugin>>primSignedWordAtPut (in category 'primitives-accessing') -----
+ primSignedWordAtPut
+ 	"Store a signed integer into the word starting at the given byte offset (little endian)."
+ 	"<Alien> signedWordAt: index <Integer> put: value <Integer> ^<Integer>
+ 		<primitive: 'primSignedWordAtPut' error: errorCode module: 'IA32ABI'>"
+ 	| byteOffset rcvr startAddr addr value valueOop |
+ 	<export: true>
+ 
+ 	valueOop := interpreterProxy stackValue: 0.
+ 	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1.
+ 	rcvr := interpreterProxy stackObjectValue: 2.
+ 	value := interpreterProxy signedMachineIntegerValueOf: valueOop.
+ 	interpreterProxy failed ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	(self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
+ 	(startAddr := self startOfData: rcvr) = 0 ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
+ 	addr := startAddr + byteOffset.
+ 	self longAt: addr put: value.
+ 	^interpreterProxy methodReturnValue: valueOop!

Item was changed:
  ----- Method: IA32ABIPlugin>>primUnsignedLongAt (in category 'primitives-accessing') -----
  primUnsignedLongAt
  	"Answer the unsigned 32-bit integer starting at the given byte offset (little endian)."
  	"<Alien> unsignedLongAt: index <Integer> ^<Integer>
  		<primitive: 'primUnsignedLongAt' error: errorCode module: 'IA32ABI'>"
  	| byteOffset rcvr startAddr addr value valueOop |
  	<export: true>
  
  	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1.
  	rcvr := interpreterProxy stackObjectValue: 1.
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	(self index: byteOffset length: 4 inRange: rcvr) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
  	(startAddr := self startOfData: rcvr) = 0 ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
  	addr := startAddr + byteOffset.
+ 	value := self long32At: addr.
- 	value := self longAt: addr.
  	valueOop := interpreterProxy positive32BitIntegerFor: value.
  	^interpreterProxy methodReturnValue: valueOop!

Item was changed:
  ----- Method: IA32ABIPlugin>>primUnsignedLongAtPut (in category 'primitives-accessing') -----
  primUnsignedLongAtPut
  	"Store an unsigned integer into 32 bits starting at the given byte offset (little endian)."
  	"<Alien> unsignedLongAt: index <Integer> put: value <Integer> ^<Integer>
  		<primitive: 'primUnsignedLongAtPut' error: errorCode module: 'IA32ABI'>"
  	| byteOffset rcvr startAddr addr value valueOop |
  	<export: true>
  
  	valueOop := interpreterProxy stackValue: 0.
  	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1.
  	rcvr := interpreterProxy stackObjectValue: 2.
  	value := interpreterProxy positive32BitValueOf: valueOop.
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	(self index: byteOffset length: 4 inRange: rcvr) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
  	(startAddr := self startOfData: rcvr) = 0 ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
  	addr := startAddr + byteOffset.
+ 	self long32At: addr put: value.
- 	self longAt: addr put: value.
  	^interpreterProxy methodReturnValue: valueOop!

Item was added:
+ ----- Method: IA32ABIPlugin>>primUnsignedWordAt (in category 'primitives-accessing') -----
+ primUnsignedWordAt
+ 	"Answer the unsigned word starting at the given byte offset (little endian)."
+ 	"<Alien> unsignedWordAt: index <Integer> ^<Integer>
+ 		<primitive: 'primUnsignedWordAt' error: errorCode module: 'IA32ABI'>"
+ 	| byteOffset rcvr startAddr addr value valueOop |
+ 	<export: true>
+ 
+ 	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1.
+ 	rcvr := interpreterProxy stackObjectValue: 1.
+ 	interpreterProxy failed ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	(self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
+ 	(startAddr := self startOfData: rcvr) = 0 ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
+ 	addr := startAddr + byteOffset.
+ 	value := self longAt: addr.
+ 	valueOop := interpreterProxy positiveMachineIntegerFor: value.
+ 	^interpreterProxy methodReturnValue: valueOop!

Item was added:
+ ----- Method: IA32ABIPlugin>>primUnsignedWordAtPut (in category 'primitives-accessing') -----
+ primUnsignedWordAtPut
+ 	"Store an unsigned integer into 32 bits starting at the given byte offset (little endian)."
+ 	"<Alien> unsignedWordAt: index <Integer> put: value <Integer> ^<Integer>
+ 		<primitive: 'primUnsignedWordAtPut' error: errorCode module: 'IA32ABI'>"
+ 	| byteOffset rcvr startAddr addr value valueOop |
+ 	<export: true>
+ 
+ 	valueOop := interpreterProxy stackValue: 0.
+ 	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1.
+ 	rcvr := interpreterProxy stackObjectValue: 2.
+ 	value := interpreterProxy positiveMachineIntegerValueOf: valueOop.
+ 	interpreterProxy failed ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	(self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
+ 	(startAddr := self startOfData: rcvr) = 0 ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
+ 	addr := startAddr + byteOffset.
+ 	self longAt: addr put: value.
+ 	^interpreterProxy methodReturnValue: valueOop!



More information about the Vm-dev mailing list