[Vm-dev] VM Maker: VMMaker.oscog-eem.1068.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Feb 16 19:55:07 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1068.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1068
Author: eem
Time: 16 February 2015, 11:53:51.24 am
UUID: 3aeb252a-64eb-45a8-a5ad-c4daf88f87b8
Ancestors: VMMaker.oscog-eem.1067
...and add type inference support for at: rto rescue
inlining in the Klatt plugin.
Mark SpurSegmentManager>>initializeFromFreeChunks:
as doNotGenerate to avoid a type inferrence error.
=============== Diff against VMMaker.oscog-eem.1067 ===============
Item was changed:
----- Method: CCodeGenerator>>returnTypeForSend:in: (in category 'type inference') -----
returnTypeForSend: sendNode in: aTMethod
"Answer the return type for a send. Absent sends default to #sqInt.
The bitwise operators answer unsigned versions of their argument types, at least in gcc
although this author can't find that in the C99 spec. If you can find this, please let me know."
| sel |
^(self anyMethodNamed: (sel := sendNode selector))
ifNil: [kernelReturnTypes
at: sel
ifAbsent:
[^sel
caseOf: {
[#+] -> [self typeForArithmetic: sendNode in: aTMethod].
[#-] -> [self typeForArithmetic: sendNode in: aTMethod].
[#*] -> [self typeForArithmetic: sendNode in: aTMethod].
[#/] -> [self typeForArithmetic: sendNode in: aTMethod].
+ [#at:] -> [self typeForDereference: sendNode in: aTMethod].
[#bitAnd:] -> [self unsignedTypeForBitwiseSend: sendNode in: aTMethod].
[#bitOr:] -> [self unsignedTypeForBitwiseSend: sendNode in: aTMethod].
[#bitXor:] -> [self unsignedTypeForBitwiseSend: sendNode in: aTMethod].
[#asVoidPointer] -> [#'void *'].
[#asVoidPointer] -> [#'void *'].
[#asUnsignedInteger] -> [#usqInt].
[#asLong] -> [#long].
[#asUnsignedLong] -> [#'unsigned long'].
[#signedIntToLong] -> [#usqInt]. "c.f. generateSignedIntToLong:on:indent:"
[#signedIntToShort] -> [#usqInt]. "c.f. generateSignedIntToShort:on:indent:"
[#cCoerce:to:] -> [sendNode args last value].
[#cCoerceSimple:to:] -> [sendNode args last value] }
otherwise: [#sqInt]]]
ifNotNil:
[:m|
m returnType ifNotNil:
[:type| "map fields to #usqInt"
((type beginsWith: 'unsigned')
and: [(type includes: $:)
and: [type last isDigit]])
ifTrue: [#usqInt]
ifFalse: [type]]]!
Item was added:
+ ----- Method: CCodeGenerator>>typeForDereference:in: (in category 'type inference') -----
+ typeForDereference: sendNode in: aTMethod
+ | type |
+ type := self typeFor: sendNode receiver in: aTMethod.
+ type last = $* ifTrue:
+ [^type allButLast withBlanksTrimmed].
+ self error: 'cannot determine type'.
+ ^nil!
Item was changed:
----- Method: SpurSegmentManager>>initializeFromFreeChunks: (in category 'simulation only') -----
initializeFromFreeChunks: freeChunks
+ <doNotGenerate>
"For testing, create a set of segments using the freeChunks as bridges."
self assert: (freeChunks allSatisfy: [:f| manager hasOverflowHeader: f]).
numSegments := freeChunks size.
freeChunks do:
[:f|
manager initSegmentBridgeWithBytes: (manager bytesInObject: f) at: (manager startOfObject: f).
self assert: (manager isSegmentBridge: f)].
segments := (1 to: numSegments) collect:
[:i| | bridge start size |
bridge := freeChunks at: i.
start := i = 1
ifTrue: [manager newSpaceLimit]
ifFalse: [manager addressAfter: (freeChunks at: i - 1)].
size := bridge + manager baseHeaderSize - start.
SpurSegmentInfo new
segStart: start;
segSize: size;
yourself].
manager setEndOfMemory: segments last segLimit.
segments := CArrayAccessor on: segments.
freeChunks with: segments object do:
[:bridge :segment|
self assert: (self isValidSegmentBridge: bridge).
self assert: bridge = (self bridgeFor: segment)]!
More information about the Vm-dev
mailing list