[Vm-dev] VM Maker: Cog-eem.412.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Oct 24 03:21:08 UTC 2020


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

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

Name: Cog-eem.412
Author: eem
Time: 23 October 2020, 8:21:06.015949 pm
UUID: 5aa6e5fb-f48c-45fc-9b43-a5ffda953561
Ancestors: Cog-eem.411

Simplifications in set/void register state.
State to revive MultiProcessor.

=============== Diff against Cog-eem.411 ===============

Item was removed:
- ----- Method: BochsIA32Alien>>setRegisterState: (in category 'accessing-abstract') -----
- setRegisterState: aRegisterStateArray
- 	"N.B. keep in sync with voidRegisterState"
- 	self eax: (aRegisterStateArray at: 1).
- 	self ebx: (aRegisterStateArray at: 2).
- 	self ecx: (aRegisterStateArray at: 3).
- 	self edx: (aRegisterStateArray at: 4).
- 	self esp: (aRegisterStateArray at: 5).
- 	self ebp: (aRegisterStateArray at: 6).
- 	self esi: (aRegisterStateArray at: 7).
- 	self edi: (aRegisterStateArray at: 8).
- 	self eip: (aRegisterStateArray at: 9).
- 	self eflags: (aRegisterStateArray at: 10).
- 	self xmm0low: (aRegisterStateArray at: 11).
- 	self xmm1low: (aRegisterStateArray at: 12).
- 	self xmm2low: (aRegisterStateArray at: 13).
- 	self xmm3low: (aRegisterStateArray at: 14).
- 	self xmm4low: (aRegisterStateArray at: 15).
- 	self xmm5low: (aRegisterStateArray at: 16).
- 	self xmm6low: (aRegisterStateArray at: 17).
- 	self xmm7low: (aRegisterStateArray at: 18)!

Item was removed:
- ----- Method: BochsIA32Alien>>voidRegisterState (in category 'accessing-abstract') -----
- voidRegisterState
- 	"N.B. keep in sync with setRegisterState:"
- 	self setRegisterState: (Array new: 18 withAll: 0)!

Item was added:
+ ----- Method: CogProcessorAlien>>setRegisterState: (in category 'accessing-abstract') -----
+ setRegisterState: aRegisterStateArray
+ 	"N.B. keep in sync with registerState, voidRegisterState, registerStateSetters, registerStateGetters"
+ 	| setters |
+ 	setters := self registerStateSetters.
+ 	aRegisterStateArray withIndexDo:
+ 		[:state :index|
+ 		self perform: (setters at: index) with: state]!

Item was added:
+ ----- Method: CogProcessorAlien>>voidRegisterState (in category 'accessing-abstract') -----
+ voidRegisterState
+ 	"N.B. keep in sync with registerState, voidRegisterState, registerStateSetters, registerStateGetters"
+ 	self registerStateSetters do:
+ 		[:setter| self perform: setter with: 0]!

Item was removed:
- ----- Method: GdbARMAlien>>setRegisterState: (in category 'accessing-abstract') -----
- setRegisterState: aRegisterStateArray
- 	"N.B. keep in sync with voidRegisterState"
- 
- 	self r0:  (aRegisterStateArray at: 1).
- 	self r1: (aRegisterStateArray at: 2).
- 	self r2: (aRegisterStateArray at: 3).
- 	self r3: (aRegisterStateArray at: 4).
- 	self r4: (aRegisterStateArray at: 5).
- 	self r5: (aRegisterStateArray at: 6).
- 	self r6: (aRegisterStateArray at: 7).
- 	self r7: (aRegisterStateArray at: 8).
- 	self r8: (aRegisterStateArray at: 9).
- 	self r9: (aRegisterStateArray at: 10).
- 	self r10: (aRegisterStateArray at: 11).
- 	self fp: (aRegisterStateArray at: 12).
- 	self r12: (aRegisterStateArray at: 13).
- 	self sp: (aRegisterStateArray at: 14).
- 	self lr: (aRegisterStateArray at: 15).
- 	self pc: (aRegisterStateArray at: 16).
- 	self eflags:  (aRegisterStateArray at: 17).!

Item was removed:
- ----- Method: GdbARMAlien>>voidRegisterState (in category 'accessing-abstract') -----
- voidRegisterState
- 	"N.B. keep in sync with setRegisterState:"
- 	self setRegisterState: (Array new: 17 withAll: 0)!

Item was changed:
  Object subclass: #MultiProcessor
+ 	instanceVariableNames: 'mutex processor guardedProcessorProtocol unguardedProcessorProtocol owner registerState coInterpreter threadIndex cogit'
- 	instanceVariableNames: 'mutex processor guardedProcessorProtocol unguardedProcessorProtocol owner registerState coInterpreter threadIndex'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'Cog-Processors'!

Item was changed:
  ----- Method: MultiProcessor>>coInterpreter: (in category 'initialize-release') -----
  coInterpreter: aCoInterpreter
+ 	coInterpreter := aCoInterpreter.
+ 	cogit := aCoInterpreter cogit!
- 	coInterpreter := aCoInterpreter!

Item was changed:
  ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') -----
  doesNotUnderstand: aMessage
  	"Forward a message to the actual processor, managing a thread-switch if necessary.
  	 Catch ProcessorSimulationTraps and raise them outside of the critical section to
  	 avoid deadlock when reentering the VM from a trap and switching threads in the run-time."
  	| selector result trap |
  	selector := aMessage selector.
  	(guardedProcessorProtocol includes: selector) ifFalse:
  		[^(unguardedProcessorProtocol includes: selector)
  			ifTrue: [processor perform: selector withArguments: aMessage arguments]
  			ifFalse: [super doesNotUnderstand: aMessage]].
+ 	(#(simulateLeafCallOf:nextpc:memory:) includes: selector) ifTrue:
+ 		[self halt: selector].
  	result := [mutex critical:
  				[owner ~~ mutex owningProcess ifTrue:
  					[owner ifNotNil:
  						[registerState at: owner put: processor registerState].
  					 (registerState at: (owner := mutex owningProcess) ifAbsent: nil)
  						ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)]
  						ifNotNil: [:newState| processor setRegisterState: newState]].
  				 processor perform: selector withArguments: aMessage arguments]]
+ 					on: ProcessorSimulationTrap, Error, AssertionFailure
+ 					do: [:ex|
+ 						ex class == ProcessorSimulationTrap ifFalse:
+ 							[ex pass].
+ 						trap := ex].
- 					on: ProcessorSimulationTrap, Error
- 					do: [:ex| trap := ex].
  	^trap ifNil: [result] ifNotNil: [trap signal]!

Item was added:
+ ----- Method: MultiProcessor>>flushICacheFrom:to: (in category 'system primitives') -----
+ flushICacheFrom: startAddress "<Integer>" to: endAddress "<Integer>"
+ 	processor flushICacheFrom: startAddress to: endAddress!

Item was changed:
  ----- Method: MultiProcessor>>processor: (in category 'initialize-release') -----
  processor: aProcessor
  	processor := aProcessor.
+ 	"Try and compute messages such as those in the execution category, for which
+ 	 we should thread-switch, and those, in accessing, for which we don't need to.
+ 	 Better would be to use pragmas to label those messages we should thread-switch on."
+ 	guardedProcessorProtocol := Set new.
+ 	unguardedProcessorProtocol := Set new.
+ 	(aProcessor class withAllSuperclasses copyUpThrough: CogProcessorAlien) do:
+ 		[:class|
+ 		unguardedProcessorProtocol addAll: class selectors.
+ 		#(execution) do:
+ 			[ :category|
+ 			guardedProcessorProtocol addAll: (class organization listAtCategoryNamed: category)]].
+ 	unguardedProcessorProtocol removeAll: guardedProcessorProtocol!
- 	guardedProcessorProtocol := aProcessor class selectors asSet
- 									addAll: aProcessor class superclass selectors;
- 									yourself.
- 	unguardedProcessorProtocol := #(#'Cog API' #opcodes #disassembly #printing)
- 										inject: Set new
- 										into: [ :protocol :category|
- 											protocol
- 												addAll: (aProcessor class organization listAtCategoryNamed: category);
- 												addAll: (aProcessor class superclass organization listAtCategoryNamed: category);
- 												yourself].
- 	guardedProcessorProtocol removeAll: unguardedProcessorProtocol!

Item was added:
+ ----- Method: Mutex>>owningProcess (in category '*Cog-Processors-accessing') -----
+ owningProcess
+ 	^owner!



More information about the Vm-dev mailing list