Boris G. Shingarov uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.gdb-bgs.2748.mcz ==================== Summary ==================== Name: VMMaker.gdb-bgs.2748 Author: bgs Time: 1 June 2020, 7:04:31.839686 pm UUID: ee592c75-7d1e-4ff9-9f6c-3c27e621f21e Ancestors: VMMaker.gdb-bgs.2747 Add TargetAwareARM. Corresponds to GDB-bgs.4 =============== Diff against VMMaker.gdb-bgs.2747 =============== Item was changed: ----- Method: CogAbstractInstruction>>getDefaultCogCodeSize (in category 'accessing') ----- getDefaultCogCodeSize "Answer the default number of bytes to allocate for native code at startup. The actual value can be set via vmParameterAt: and/or a preference in the ini file. Subclasses may this default override to arrange that the code zone has about the same number of methods as the x86 back-end at a similar point in execution." <inline: true> + ^1024 * 2048! - ^1024 * 1024! Item was changed: ----- Method: CogOutOfLineLiteralsARMCompiler>>getDefaultCogCodeSize (in category 'accessing') ----- getDefaultCogCodeSize "Return the default number of bytes to allocate for native code at startup. The actual value can be set via vmParameterAt: and/or a preference in the ini file." <inline: true> + ^1024 * 2048! - ^1024 * 1280! Item was changed: ----- Method: CogVMSimulator>>moveMethodCacheToMemoryAt: (in category 'initialization') ----- moveMethodCacheToMemoryAt: address | oldMethodCache | oldMethodCache := methodCache. "In the VM the methodCache is written as a normal array with 1-relative addressing. In C this works by allocating an extra element in the methodCache array (see class-side declareCVarsIn:). In simulation simply position the start of the methodCache one word lower, achieving the same effect. -1 because CArrayAccessor is 0-relative and adds 1 on accesses itself." methodCache := CMethodCacheAccessor new objectMemory: objectMemory at: address array: oldMethodCache functionPointerIndex: MethodCachePrimFunction entrySize: MethodCacheEntrySize. self assert: address - objectMemory wordSize = self methodCacheAddress. + 1 to: MethodCacheSize do: - " 1 to: MethodCacheSize do: [:i| + self assert: (methodCache at: i) = 0]. - self assert: (methodCache at: i) = 0]. " methodCache at: 1 put: 16rC4EC4. self assert: (objectMemory longAt: address) = 16rC4EC4. 1 to: MethodCacheSize do: [:i| methodCache at: i put: (oldMethodCache at: i)]! Item was changed: ----- Method: CogVMSimulator>>movePrimTraceLogToMemoryAt: (in category 'initialization') ----- movePrimTraceLogToMemoryAt: address | oldTraceLog | oldTraceLog := primTraceLog. primTraceLog := CArrayOfLongsAccessor new objectMemory: objectMemory at: address. self assert: address = self primTraceLogAddress. + 0 to: PrimTraceLogSize - 1 do: - " 0 to: PrimTraceLogSize - 1 do: [:i| + self assert: (primTraceLog at: i) = 0]. - self assert: (primTraceLog at: i) = 0]." primTraceLog at: 0 put: 16rC4EC4. self assert: (objectMemory longAt: address) = 16rC4EC4. 0 to: PrimTraceLogSize - 1 do: [:i| primTraceLog at: i put: (oldTraceLog at: i)]! Item was changed: ----- Method: Cogit class>>initializeMiscConstants (in category 'class initialization') ----- initializeMiscConstants super initializeMiscConstants. Debug := InitializationOptions at: #Debug ifAbsent: [false]. (InitializationOptions includesKey: #EagerInstructionDecoration) ifTrue: [EagerInstructionDecoration := InitializationOptions at: #EagerInstructionDecoration] ifFalse: [EagerInstructionDecoration ifNil: [EagerInstructionDecoration := false]]. "speeds up single stepping but could lose fidelity" ProcessorClass := (InitializationOptions at: #ISA ifAbsentPut: [self objectMemoryClass defaultISA]) caseOf: { [#X64] -> [BochsX64Alien]. [#IA32] -> ["BochsIA32Alien" TargetAwareX86 ]. + [#ARMv5] -> ["GdbARMAlien" TargetAwareARM ]. - [#ARMv5] -> [GdbARMAlien]. [#ARMv8] -> [GdbARMv8Alien]. [#MIPSEL] -> [MIPSELSimulator] }. CogCompilerClass := self activeCompilerClass. CogAbstractInstruction initializeAbstractRegisters. self objectMemoryClass objectRepresentationClass initializeMiscConstants. "Our criterion for which methods to JIT is literal count. The default value is 60 literals or less." MaxLiteralCountForCompile := InitializationOptions at: #MaxLiteralCountForCompile ifAbsent: [60]. "we special-case 0, 1 & 2 argument sends, N is numArgs >= 3" NumSendTrampolines := 4. "Currently not even the ceImplicitReceiverTrampoline contains object references." NumObjRefsInRuntime := 0. "6 is a fine number for the max number of PCI entries. 8 is too large." MaxCPICCases := 6. "One variable defines whether in a block and whether in a vanilla or full block." InVanillaBlock := 1. InFullBlock := 2. NSCSelectorIndex := (NSSendCache instVarNames indexOf: #selector) - 1. NSCNumArgsIndex := (NSSendCache instVarNames indexOf: #numArgs) - 1. NSCClassTagIndex := (NSSendCache instVarNames indexOf: #classTag) - 1. NSCEnclosingObjectIndex := (NSSendCache instVarNames indexOf: #enclosingObject) - 1. NSCTargetIndex := (NSSendCache instVarNames indexOf: #target) - 1. NumOopsPerNSC := NSSendCache instVarNames size. "Max size to alloca when compiling. Mac OS X 10.6.8 segfaults approaching 8Mb. Linux 2.6.9 segfaults above 11Mb. WIndows XP segfaults approaching 2Mb." MaxStackAllocSize := 1024 * 1024 * 3 / 2 ! Item was changed: ----- Method: Cogit>>handleABICallOrJumpSimulationTrap:evaluable: (in category 'simulation only') ----- handleABICallOrJumpSimulationTrap: aProcessorSimulationTrap evaluable: evaluable <doNotGenerate> + self assert: aProcessorSimulationTrap type = #controlTransfer. - self assert: aProcessorSimulationTrap type = #call. processor + simulateBuildFrameIn: coInterpreter memory for: evaluable. - simulateLeafCallOf: aProcessorSimulationTrap address - nextpc: aProcessorSimulationTrap nextpc - memory: coInterpreter memory. self recordInstruction: {'(simulated call of '. aProcessorSimulationTrap address. '/'. evaluable selector. ')'}. clickConfirm ifTrue: [(self confirm: 'skip run-time call?') ifFalse: [clickConfirm := false. self halt]]. evaluable valueWithArguments: (processor postCallArgumentsNumArgs: evaluable numArgs in: coInterpreter memory). self recordInstruction: {'(simulated return to '. processor retpcIn: coInterpreter memory. ')'}. processor smashABICallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize; + simulateReturnIn: coInterpreter memory! - simulateLeafReturnIn: coInterpreter memory! |
Free forum by Nabble | Edit this page |