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

commits at source.squeak.org commits at source.squeak.org
Tue Sep 22 05:16:16 UTC 2015


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

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

Name: VMMaker.oscog-rmacnak.1460
Author: rmacnak
Time: 21 September 2015, 10:15:06.87 pm
UUID: 1e805848-96e9-4317-9750-726ab918b8bc
Ancestors: VMMaker.oscog-eem.1459

Remove some hardcoded word sizes from Alien.

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

Item was changed:
  ----- Method: IA32ABIPlugin>>primAllocateExecutablePage (in category 'primitives-memory management') -----
  primAllocateExecutablePage
  	"Answer an Alien for an executable page; for thunks"
  	"primAllocateExecutablePage ^<Alien>
  		<primitive: 'primAllocateExecutablePage' error: errorCode module: 'IA32ABI'>"
  	| byteSize ptr mem alien |
  	<export: true>
  	<var: #byteSize type: 'long'>
  	<var: #ptr type: 'long *'>
  	<var: #mem type: 'void *'>
  
  	self cCode: 'mem = allocateExecutablePage(&byteSize)'
  		inSmalltalk: [self error: 'not yet implemented'. mem := 0. byteSize := 0].
  	mem = 0 ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrNoCMemory].
  	alien := interpreterProxy
  				instantiateClass: interpreterProxy classAlien
+ 				indexableSize: 2 * interpreterProxy bytesPerOop.
- 				indexableSize: 8.
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrNoMemory].
  	ptr := interpreterProxy firstIndexableField: alien.
  	ptr at: 0 put: 0 - byteSize. "indirect mem indicated by negative size. Slang doesn't grok negated"
  	ptr at: 1 put: (self cCoerce: mem to: 'long').
  	interpreterProxy methodReturnValue: alien!

Item was changed:
  ----- Method: IA32ABIPlugin>>primStrlenThroughPointerAtIndex (in category 'primitives-accessing') -----
  primStrlenThroughPointerAtIndex
  	"Answer the number of non-null bytes starting at the byte addressed by
  	 the 4-byte pointer at index."
  	"<Alien> strlenThroughPointerAt: index <Integer> ^<Integer>
  		<primitive: 'primStrlenThroughPointerAtIndex' error: errorCode module: 'IA32ABI'>"
  	| byteOffset rcvr ptr addr |
  	<export: true>
  	<var: #ptr type: #'char *'>
  
  	byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1.
  	rcvr := interpreterProxy stackObjectValue: 1.
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	(self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse:
- 	(self index: byteOffset length: 4 inRange: rcvr) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadIndex].
  	addr := (self startOfData: rcvr) + byteOffset.
  	ptr := self cCoerce: (self longAt: addr) to: #'char *'.
  	^interpreterProxy methodReturnValue: (interpreterProxy positive32BitIntegerFor: (self strlen: ptr))!



More information about the Vm-dev mailing list