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

commits at source.squeak.org commits at source.squeak.org
Mon Sep 21 20:14:36 UTC 2015


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

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

Name: Cog-eem.281
Author: eem
Time: 21 September 2015, 1:13:55.328 pm
UUID: 022a9cf4-e144-49ca-bf3a-cd567d9b723d
Ancestors: Cog-eem.280

Double dispatch conversion to/from integers so processor can choose word size.

Implement some printing support in the x64 alien.

=============== Diff against Cog-eem.280 ===============

Item was added:
+ ----- Method: BochsX64Alien>>convertIntegerToInternal: (in category 'tests support') -----
+ convertIntegerToInternal: anInteger
+ 	"Conversion for 64-bit processors."
+ 	^anInteger signedIntToLong64!

Item was added:
+ ----- Method: BochsX64Alien>>convertInternalToInteger: (in category 'tests support') -----
+ convertInternalToInteger: unsigned
+ 	"Conversion for 64-bit processors."
+ 	^unsigned signedIntFromLong64!

Item was added:
+ ----- Method: BochsX64Alien>>printFields:inRegisterState:on: (in category 'printing') -----
+ printFields: fields inRegisterState: registerStateVector on: aStream
+ 	| rsvs |
+ 	aStream ensureCr.
+ 	rsvs := registerStateVector readStream.
+ 	fields withIndexDo:
+ 		[:sym :index| | val |
+ 		sym = #cr
+ 			ifTrue: [aStream cr]
+ 			ifFalse:
+ 				[(val := rsvs next) isNil ifTrue: [^self].
+ 				(sym beginsWith: 'xmm')
+ 					ifTrue:
+ 						[aStream nextPutAll: sym; nextPut: $:; space.
+ 						 val printOn: aStream base: 16 length: 16 padded: true.
+ 						 aStream space; nextPut: $(.
+ 						 "At the image level Float is apparently in big-endian format"
+ 						 ((Float basicNew: 2)
+ 						 	at: 2 put: (val bitAnd: 16rFFFFFFFF);
+ 							at: 1 put: (val bitShift: -32);
+ 							yourself)
+ 								printOn: aStream.
+ 						 aStream nextPut: $)]
+ 					ifFalse:
+ 						[aStream nextPutAll: sym; nextPut: $:; space.
+ 						 val printOn: aStream base: 16 length: 8 padded: true.
+ 						 #eflags == sym
+ 							ifTrue:
+ 								[aStream space.
+ 								 'C-P-A-ZS---O' withIndexDo:
+ 									[:flag :bitIndex|
+ 									flag ~= $- ifTrue:
+ 										[aStream nextPut: flag; nextPutAll: 'F='; print: (val bitAnd: 1 << (bitIndex - 1)) >> (bitIndex - 1); space]]]
+ 							ifFalse:
+ 								[val > 16 ifTrue:
+ 									[aStream space; nextPut: $(.
+ 									 val printOn: aStream base: 10 length: 1 padded: false.
+ 									 aStream nextPut: $)]]].
+ 						(fields at: index + 1) ~~ #cr ifTrue:
+ 							[aStream tab]]]!

Item was added:
+ ----- Method: BochsX64Alien>>printRegisterState:on: (in category 'printing') -----
+ printRegisterState: registerStateVector on: aStream
+ 	self printFields:
+ 			((registerStateVector size < 26
+ 			  or: [(19 to: 26) allSatisfy: [:i| (registerStateVector at: i) isZero]])
+ 				ifTrue:
+ 					[#(	rax rbx rcx rdx cr
+ 						rsp rbp rsi rdi cr
+ 						r8 r9 r10 r11 cr
+ 						r12 r13 r14 r15 cr
+ 						rip rflags cr)]
+ 				ifFalse:
+ 					[#(	rax rbx rcx rdx cr
+ 						rsp rbp rsi rdi cr
+ 						r8 r9 r10 r11 cr
+ 						r12 r13 r14 r15 cr
+ 						rip rflags cr
+ 						xmm0low xmm1low cr
+ 						xmm2low xmm3low cr
+ 						xmm4low xmm5low cr
+ 						xmm6low xmm7low cr )])
+ 		inRegisterState: registerStateVector
+ 		on: aStream!

Item was added:
+ ----- Method: CogProcessorAlien>>convertIntegerToInternal: (in category 'tests support') -----
+ convertIntegerToInternal: anInteger
+ 	"Default conversion for 32-bit processors.  64-bit processors override."
+ 	^anInteger signedIntToLong!

Item was added:
+ ----- Method: CogProcessorAlien>>convertInternalToInteger: (in category 'tests support') -----
+ convertInternalToInteger: unsigned
+ 	"Default conversion for 32-bit processors.  64-bit processors override."
+ 	^unsigned signedIntFromLong!



More information about the Vm-dev mailing list