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

commits at source.squeak.org commits at source.squeak.org
Thu Jun 30 00:37:15 UTC 2016


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

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

Name: VMMaker.oscog-eem.1893
Author: eem
Time: 29 June 2016, 5:35:30.7422 pm
UUID: ed498bfa-0631-4cf2-8bfb-c49e20505d40
Ancestors: VMMaker.oscog-eem.1892

Fix a couple of cases that should use mositiveMachineIntegerValue: and nuke an unnecessary stackObjectValue:. 

In 1893: Riots of Mons during the Belgian general strike of 1893, The day after, Belgian parliament approved Universal suffrage. The Independent Labour Party of the United Kingdom has its first meeting. The United States overthrows the Kingdom of Hawaii: Lorrin A. Thurston and the Citizen's Committee of Public Safety in Hawaii with the intervention of the United States Marine Corps overthrow the government of Queen Liliuokalani.

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

Item was changed:
  ----- Method: IA32ABIPlugin>>primBoxedFree (in category 'primitives-memory management') -----
  primBoxedFree
  	"Free the memory referenced by the receiver, an Alien."
  	"proxy <Alien> primFree ^<Alien>
  		<primitive: 'primBoxedFree' error: errorCode module: 'IA32ABI'>"
  	| addr rcvr ptr sizeField |
  	<export: true>
  	<var: #ptr type: 'sqInt *'>
  	<var: #sizeField type: 'long'>
  
+ 	rcvr := interpreterProxy stackValue: 0.
- 	rcvr := interpreterProxy stackObjectValue: 0.
  	(interpreterProxy byteSizeOf: rcvr) >= (2 * interpreterProxy bytesPerOop) ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadReceiver].
  	ptr := interpreterProxy firstIndexableField: rcvr.
  	sizeField := ptr at: 0.
  	addr := ptr at: 1.
  	"Don't you dare to free Squeak's memory!!"
  	(sizeField >= 0 or: [addr = 0 or: [interpreterProxy isInMemory: addr]]) ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrInappropriate].
  	self cCode: 'free((void *)addr)'
  		inSmalltalk: [self Cfree: addr].
  	ptr
  		at: 0 put: 0;
  		at: 1 put: 0 "cleanup"!

Item was changed:
  ----- Method: IA32ABIPlugin>>primFree (in category 'primitives-memory management') -----
  primFree
  	"Free the memory referenced by the argument, an integer."
  	"<Anywhere> primFree: address <Integer>
  		<primitive: 'primFree' error: errorCode module: 'IA32ABI'>"
  	| addr |
  	<export: true>
+ 	addr := interpreterProxy stackPositiveMachineIntegerValue: 0.
- 	addr := interpreterProxy positive32BitValueOf: (interpreterProxy stackValue: 0).
  	interpreterProxy failed ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	"Don't you dare to free Squeak's memory!!"
  	(addr = 0 or: [interpreterProxy isInMemory: addr]) ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrInappropriate].
  	self cCode: 'free((void *)addr)'
  		inSmalltalk: [self Cfree: addr].
  	interpreterProxy pop: 1!

Item was changed:
  ----- Method: IA32ABIPlugin>>primReturnFromContextThrough (in category 'primitives-callbacks') -----
  primReturnFromContextThrough
  	"Return a result from a callback to the callback's callee.  The primitive
  	 has a signature of either of the forms:
  		result <FFICallbackResult> primReturnFromContext: callbackContext <MethodContext> through: jmpBuf <Integer>
  		result <FFICallbackResult> primSignal: aSemaphore <Semaphore> andReturnFromContext: callbackContext <MethodContext> through: jmpBuf <Integer>
  			<primitive: 'primReturnFromContextThrough' error: errorCode module: 'IA32ABI'>.
  	 If of the second form answer true if this is not the most recent callback, and signal aSemaphore
  	 if it is, so as to implement LIFO ordering of callbacks."
  	<export: true>
  	<legacy>
  	| mac vmCallbackContext vmCallbackReturnValue isMostRecent |
  	<var: #vmCallbackContext type: #'VMCallbackContext *'>
  	<var: #vmCallbackReturnValue type: #'VMCallbackReturnValue *'>
+ 	vmCallbackContext := self cCoerceSimple: (interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0))
- 	vmCallbackContext := self cCoerceSimple: (interpreterProxy positive32BitValueOf: (interpreterProxy stackValue: 0))
  								to: #'VMCallbackContext *'.
  	(interpreterProxy failed or: [vmCallbackContext = 0]) ifTrue:
  		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  
  	(mac := interpreterProxy methodArgumentCount) = 3 ifTrue:
  		[isMostRecent := vmCallbackContext = self getMostRecentCallbackContext.
  		isMostRecent ifFalse:
  			[interpreterProxy methodReturnValue: interpreterProxy trueObject.
  			^nil].
  		(interpreterProxy fetchClassOf: (interpreterProxy stackValue: 2)) = interpreterProxy classSemaphore
  			ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  		[interpreterProxy signalNoResume: (interpreterProxy stackValue: 2)] whileFalse].
  	vmCallbackReturnValue := self cCoerceSimple: (self startOfData: (interpreterProxy stackValue: mac))
  									to: #'VMCallbackReturnValue *'.
  	self cCode: "C needs a typedef for structs to be assigned, but that implies a struct class for just one assignment."
  		[self mem: (self addressOf: vmCallbackContext rvs)
  			cp: (self addressOf: vmCallbackReturnValue crvrvs)
  			y: (self sizeof: vmCallbackContext rvs)]
  		inSmalltalk: [vmCallbackContext rvs: vmCallbackReturnValue crvrvs].
  	(interpreterProxy
  		returnAs: (interpreterProxy integerObjectOf: vmCallbackReturnValue type + 1)
  		ThroughCallback: vmCallbackContext
  		Context: (interpreterProxy stackValue: 1)) ifFalse:
  			[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
  	"NOTREACHED"!



More information about the Vm-dev mailing list