Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2705.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2705 Author: eem Time: 4 February 2020, 1:05:54.591994 pm UUID: 35875931-68e1-4c94-a7ec-9cf66d27743d Ancestors: VMMaker.oscog-eem.2704 Oops, mis-edited two methods. =============== Diff against VMMaker.oscog-eem.2704 =============== Item was changed: ----- Method: AbstractInstructionTests>>runCmpRRJumpCond:on: (in category 'running') ----- runCmpRRJumpCond: assertPrintBar on: aStream "Compile and evaluate as many combinations of CmpR:R: JumpCond: as possible, checking that they produce the expected result. Answer an array of the number of comparisons and the number of them that succeeded." "self defaultTester runCmpRRJumpCond: false" | cogit nTests nGood | cogit := self cogitForTests. nTests := nGood := 0. self concreteCompilerClass dataRegistersWithAccessorsGiven: self processor do: [:sreg :srgetter :srsetter| self concreteCompilerClass dataRegistersWithAccessorsGiven: self processor do: [:dreg :drgetter :drsetter| (sreg ~= dreg "N.B. We do not expect the backEnd to provide CmpR: SPReg R: reg, only CmpR: reg R: SPReg" and: [drgetter ~= #sp]) ifTrue: [#( = ~= > > >= >= < < <= <=) with: #(JumpZero: JumpNonZero: JumpGreater: JumpAbove: JumpGreaterOrEqual: JumpAboveOrEqual: JumpLess: JumpBelow: JumpLessOrEqual: JumpBelowOrEqual:) do: [:comparison :instruction| | unsigned jmp memory | unsigned := (instruction includesSubstring: 'Above') or: [instruction includesSubstring: 'Below']. "(drgetter = #sp or: [srgetter = #sp]) ifTrue: [self halt]." cogit resetGen. cogit CmpR: dreg R: sreg. jmp := cogit perform: instruction with: 0. cogit + MoveCq: 0 R: ABIResultReg; - MoveCq: 0 R: cogit ABIResultReg; Jump: 1536. + jmp jmpTarget: (cogit MoveCq: 1 R: ABIResultReg). - jmp jmpTarget: (cogit MoveCq: 1 R: cogit ABIResultReg). cogit Jump: 1536. memory := self generatedCodeFrom: cogit. "self processor disassembleFrom: 1024 to: cogit codeSize - 1024 * 2 + 1024 in: memory ''" self pairs: { -1 << 30. "-1 << 16." -1 << 8. 0. 1 << 8. "1 << 16." 1 << 30 } do: [:a :b| | bogus error expected nInsts | nTests := nTests + 1. error := false. nInsts := 0. self processor reset; pc: self defaultCodeStart; perform: srsetter with: (processor convertIntegerToInternal: a); perform: drsetter with: (processor convertIntegerToInternal: b). [[processor pc ~= 1536 and: [nInsts < 16]] whileTrue: [processor singleStepIn: memory. nInsts := nInsts + 1]] on: Error do: [:ex| error := true]. nInsts >= 16 ifTrue: [error := true]. "self processor disassembleInstructionAt: 0 In: memory" bogus := (processor pc = 1536 and: [#[0 1] includes: processor cResultRegister]) not. assertPrintBar ifTrue: [self deny: bogus]. expected := unsigned ifTrue: [(a bitAnd: 1 << 32 - 1) perform: comparison with: (b bitAnd: 1 << 32 - 1)] ifFalse: [a perform: comparison with: b]. (bogus or: [error or: [self processor cResultRegister = 1 ~= expected]]) ifFalse: [nGood := nGood + 1]. assertPrintBar ifTrue: [self assert: self processor cResultRegister = 1 equals: expected] ifFalse: [self processor cResultRegister = 1 ~= expected ifTrue: [aStream nextPutAll: srgetter; space; nextPutAll: comparison; space; nextPutAll: drgetter. unsigned ifTrue: [aStream nextPutAll: ' (unsigned)']. aStream nextPutAll: (error ifTrue: [' ERRORED'] ifFalse: [' is incorrect']); cr; flush. bogus ifTrue: [self processor printRegistersOn: aStream. aStream nextPutAll: (self processor disassembleInstructionAt: 0 In: memory); cr; flush]]]]]]]]. assertPrintBar ifFalse: [aStream print: nTests; nextPutAll: ' tests; '; print: nGood; nextPutAll: ' good'; cr]. ^{nTests. nGood}! Item was changed: ----- Method: CogObjectRepresentationForSpur>>genStoreCheckTrampoline (in category 'initialization') ----- genStoreCheckTrampoline | jumpSC | <var: #jumpSC type: #'AbstractInstruction *'> <inline: true> CheckRememberedInTrampoline ifTrue: [cogit zeroOpcodeIndex. + jumpSC := self genCheckRememberedBitOf: ReceiverResultReg scratch: ABIResultReg. - jumpSC := self genCheckRememberedBitOf: ReceiverResultReg scratch: cogit ABIResultReg. self assert: jumpSC opcode = JumpNonZero. jumpSC opcode: JumpZero. cogit RetN: 0. jumpSC jmpTarget: cogit Label]. ^cogit genTrampolineFor: #remember: called: 'ceStoreCheckTrampoline' numArgs: 1 arg: ReceiverResultReg arg: nil arg: nil arg: nil regsToSave: (CallerSavedRegisterMask bitClear: (cogit registerMaskFor: ReceiverResultReg)) pushLinkReg: true resultReg: cogit returnRegForStoreCheck appendOpcodes: CheckRememberedInTrampoline! |
Free forum by Nabble | Edit this page |