def _createState(self): state = State() test_utils = state_transition_test_utils self._mExpectedStateData[ EStateElementType.PC ] = test_utils.add_random_pc_state_element(self, state) self._mExpectedStateData[ EStateElementType.FloatingPointRegister ] = test_utils.add_random_floating_point_register_state_elements( self, state, RandomUtils.random32(0, 20) ) self._mExpectedStateData[ EStateElementType.GPR ] = test_utils.add_random_gpr_state_elements( self, state, RandomUtils.random32(0, 20) ) self._mExpectedStateData[ EStateElementType.Memory ] = test_utils.add_random_memory_state_elements( self, state, RandomUtils.random32(0, 20) ) expected_sys_reg_state_data = [] max_rand = ( 0xFFFFFFFF if self.getGlobalState("AppRegisterWidth") == 32 else 0xFFFFFFFFFFFFFFFF ) mscratch_val = RandomUtils.random64(0, max_rand) state.addRegisterStateElement("mscratch", (mscratch_val,)) expected_sys_reg_state_data.append(("mscratch", mscratch_val)) mepc_val = UtilityFunctions.getAlignedValue( RandomUtils.random64(0, max_rand), 4 ) state.addRegisterStateElement("mepc", (mepc_val,)) expected_sys_reg_state_data.append(("mepc", mepc_val)) self._mExpectedStateData[ EStateElementType.SystemRegister ] = expected_sys_reg_state_data expected_vm_context_state_data = [] mode_val = ( self.choice((0, 1)) if self.getGlobalState("AppRegisterWidth") == 32 else self.choice((0, 8, 9)) ) state.addVmContextStateElement("satp", "MODE", mode_val) expected_vm_context_state_data.append(("satp", "MODE", mode_val)) mpp_val = self.choice((0, 1, 3)) state.addVmContextStateElement("mstatus", "MPP", mpp_val) expected_vm_context_state_data.append(("mstatus", "MPP", mpp_val)) sum_val = RandomUtils.random32(0, 1) state.addVmContextStateElement("mstatus", "SUM", sum_val) expected_vm_context_state_data.append(("mstatus", "SUM", sum_val)) self._mExpectedStateData[ EStateElementType.VmContext ] = expected_vm_context_state_data self._mExpectedStateData[ EStateElementType.VectorRegister ] = test_utils.add_random_vector_register_state_elements( self, state, RandomUtils.random32(0, 20) ) return state
def _genRandomBranchInstructions(self): for _ in range(RandomUtils.random32(100, 200)): instr = BranchJump_map.pick(self.genThread) self.genInstruction(instr)
def generate(self, **kargs): for _ in range(RandomUtils.random32(250, 300)): instr = RV_G_map.pick(self.genThread) self.genInstruction(instr)
def addRandomPcStateElement(aSequence, aState, aPriorityMin=1, aPriorityMax=100): pc_val = aSequence.genVA(Size=4, Align=4, Type='I') aState.addPcStateElement(pc_val, aPriority=RandomUtils.random32(aPriorityMin, aPriorityMax)) return pc_val
def _createState(self): state = State() self._mExpectedStateData[EStateElementType.Memory] = state_transition_test_utils.addRandomMemoryStateElements(self, state, RandomUtils.random32(0, 20)) self._mExpectedStateData[EStateElementType.GPR] = state_transition_test_utils.addRandomGprStateElements(self, state, RandomUtils.random32(0, 20)) self._mExpectedStateData[EStateElementType.FloatingPointRegister] = state_transition_test_utils.addRandomFloatingPointRegisterStateElements(self, state, RandomUtils.random32(0, 20)) self._mExpectedStateData[EStateElementType.PC] = state_transition_test_utils.addRandomPcStateElement(self, state) return state
def _genRandomBranchInstructions(self): for _ in range(RandomUtils.random32(100, 200)): instr = self.choice(branch_instructions)