Пример #1
0
    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)
Пример #3
0
 def generate(self, **kargs):
     for _ in range(RandomUtils.random32(250, 300)):
         instr = RV_G_map.pick(self.genThread)
         self.genInstruction(instr)
Пример #4
0
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
Пример #5
0
    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
Пример #6
0
 def _genRandomBranchInstructions(self):
     for _ in range(RandomUtils.random32(100, 200)):
         instr = self.choice(branch_instructions)