[Vm-dev] VM Maker: VMMaker.oscog-tpr.1222.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Apr 19 21:20:20 UTC 2015
tim Rowledge uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-tpr.1222.mcz
==================== Summary ====================
Name: VMMaker.oscog-tpr.1222
Author: tpr
Time: 19 April 2015, 2:18:52.714 pm
UUID: 450da7c2-7fde-4a26-be04-6bf4f3f4cba4
Ancestors: VMMaker.oscog-eem.1221
Oops, NOP size is 4 on ARM, not 0.
=============== Diff against VMMaker.oscog-eem.1221 ===============
Item was changed:
----- Method: CogARMCompiler>>computeMaximumSize (in category 'generate machine code') -----
computeMaximumSize
"Because we don't use Thumb, each ARM instruction has 4 bytes. Some abstract opcodes need more than one instruction. We only handle those in this caseOf: and let the default return 4"
opcode
caseOf: {
"Noops & Pseudo Ops"
[Label] -> [^maxSize := 0].
+ [AlignmentNops] -> [^maxSize := (operands at: 0) - 4].
- [AlignmentNops] -> [^maxSize := (operands at: 0) - 1].
[Fill16] -> [^maxSize := 4].
[Fill32] -> [^maxSize := 4].
[FillFromWord] -> [^maxSize := 4].
[Nop] -> [^maxSize := 4].
"ARM Specific Control/Data Movement"
[BICCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[TstCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[SMULL] -> [^maxSize := 4].
"Control"
[Call] -> [^maxSize := 4].
[CallFull] -> [^maxSize := 20].
[JumpR] -> [^maxSize := 4].
[Jump] -> [^maxSize := 4].
[JumpFull] -> [^maxSize := 20].
[JumpLong] -> [^maxSize := 4].
[JumpZero] -> [^maxSize := 4].
[JumpNonZero] -> [^maxSize := 4].
[JumpNegative] -> [^maxSize := 4].
[JumpNonNegative] -> [^maxSize := 4].
[JumpOverflow] -> [^maxSize := 4].
[JumpNoOverflow] -> [^maxSize := 4].
[JumpCarry] -> [^maxSize := 4].
[JumpNoCarry] -> [^maxSize := 4].
[JumpLess] -> [^maxSize := 4].
[JumpGreaterOrEqual] -> [^maxSize := 4].
[JumpGreater] -> [^maxSize := 4].
[JumpLessOrEqual] -> [^maxSize := 4].
[JumpBelow] -> [^maxSize := 4].
[JumpAboveOrEqual] -> [^maxSize := 4].
[JumpAbove] -> [^maxSize := 4].
[JumpBelowOrEqual] -> [^maxSize := 4].
[JumpLongZero] -> [^maxSize := 4].
[JumpLongNonZero] -> [^maxSize := 4].
[JumpFPEqual] -> [^maxSize := 8].
[JumpFPNotEqual] -> [^maxSize := 8].
[JumpFPLess] -> [^maxSize := 8].
[JumpFPGreaterOrEqual]-> [^maxSize := 8].
[JumpFPGreater] -> [^maxSize := 8].
[JumpFPLessOrEqual] -> [^maxSize := 8].
[JumpFPOrdered] -> [^maxSize := 8].
[JumpFPUnordered] -> [^maxSize := 8].
[RetN] -> [^(operands at: 0) = 0
ifTrue: [maxSize := 4]
ifFalse: [maxSize := 8]].
[Stop] -> [^maxSize := 4].
"Arithmetic"
[AddCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[AndCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[AndCqRR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[CmpCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[OrCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[SubCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[XorCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[AddCwR] -> [^maxSize := 20].
[AndCwR] -> [^maxSize := 20].
[CmpCwR] -> [^maxSize := 20].
[OrCwR] -> [^maxSize := 20].
[SubCwR] -> [^maxSize := 20].
[XorCwR] -> [^maxSize := 20].
[AddRR] -> [^maxSize := 4].
[AndRR] -> [^maxSize := 4].
[CmpRR] -> [^maxSize := 4].
[OrRR] -> [^maxSize := 4].
[XorRR] -> [^maxSize := 4].
[SubRR] -> [^maxSize := 4].
[NegateR] -> [^maxSize := 4].
[LoadEffectiveAddressMwrR]
-> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[LogicalShiftLeftCqR] -> [^maxSize := 4].
[LogicalShiftRightCqR] -> [^maxSize := 4].
[ArithmeticShiftRightCqR] -> [^maxSize := 4].
[LogicalShiftLeftRR] -> [^maxSize := 4].
[LogicalShiftRightRR] -> [^maxSize := 4].
[ArithmeticShiftRightRR] -> [^maxSize := 4].
[AddRdRd] -> [^maxSize := 4].
[CmpRdRd] -> [^maxSize := 4].
[SubRdRd] -> [^maxSize := 4].
[MulRdRd] -> [^maxSize := 4].
[DivRdRd] -> [^maxSize := 4].
[SqrtRd] -> [^maxSize := 4].
"Data Movement"
[MoveCqR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 16]].
[MoveCwR] -> [^maxSize := 16].
[MoveRR] -> [^maxSize := 4].
[MoveRdRd] -> [^maxSize := 4].
[MoveAwR] -> [^maxSize := (self isAddressRelativeToVarBase: (operands at: 0))
ifTrue: [4]
ifFalse: [20]].
[MoveRAw] -> [^maxSize := (self isAddressRelativeToVarBase: (operands at: 1))
ifTrue: [4]
ifFalse: [20]].
[MoveRMwr] -> [self is12BitValue: (operands at: 1)
ifTrue: [ :u :i | ^maxSize := 4]
ifFalse: [ ^maxSize := 20 ]].
[MoveRdM64r] -> [^maxSize := 20].
[MoveMbrR] -> [self is12BitValue: (operands at: 0)
ifTrue: [ :u :i | ^maxSize := 4]
ifFalse: [ ^maxSize := 20 ]].
[MoveRMbr] -> [self is12BitValue: (operands at: 1)
ifTrue: [ :u :i | ^maxSize := 4]
ifFalse: [ ^maxSize := 20 ]].
[MoveM16rR] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 4]
ifFalse: [maxSize := 20]].
[MoveM64rRd] -> [^maxSize := 20].
[MoveMwrR] -> [self is12BitValue: (operands at: 0)
ifTrue: [ :u :i | ^maxSize := 4]
ifFalse: [ ^maxSize := 20 ]].
[MoveXbrRR] -> [^maxSize := 4].
[MoveRXbrR] -> [^maxSize := 4].
[MoveXwrRR] -> [^maxSize := 4].
[MoveRXwrR] -> [^maxSize := 4].
[PopR] -> [^maxSize := 4].
[PushR] -> [^maxSize := 4].
[PushCw] -> [^maxSize := 20].
[PushCq] -> [^self rotateable8bitImmediate: (operands at: 0)
ifTrue: [:r :i| maxSize := 8]
ifFalse: [maxSize := 20]].
[PrefetchAw] -> [^maxSize := (self isAddressRelativeToVarBase: (operands at: 1))
ifTrue: [4]
ifFalse: [20]].
"Conversion"
[ConvertRRd] -> [^maxSize := 4].
}.
^0 "to keep C compiler quiet"
!
More information about the Vm-dev
mailing list