def test_single_inst_add32(): instructions = [(opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.bkpt16(), 16)] epiphany = MockEpiphany() epiphany.init_state(instructions, rf0=0b01010101010) assert epiphany.state.running epiphany.run() expected_state = StateChecker(AZ=0, pc=(6 + RESET_ADDR), rf1=(0b01010101010 * 2)) expected_state.check(epiphany.state) assert not epiphany.state.running
def test_single_inst_add32(): instructions = [(opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.trap16(3), 16)] revelation = MockRevelation() revelation.init_state(instructions, rf0=0b01010101010) assert revelation.states[0x808].running exit_code, ticks = revelation.run() expected_state = StateChecker(AZ=0, pc=(6 + RESET_ADDR), rf1=(0b01010101010 * 2)) expected_state.check(revelation.states[0x808]) assert EXIT_SUCCESS == exit_code assert len(instructions) == ticks assert not revelation.states[0x808].running
def test_add32_nop16_sub32(): from pydgin.utils import trim_32 instructions = [(opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.nop16(), 16), (opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.bkpt16(), 16), ] epiphany = MockEpiphany() epiphany.init_state(instructions, rf0=0) assert epiphany.state.running epiphany.run() expected_state = StateChecker(pc=(12 + RESET_ADDR), AC=0, AN=1, AZ=0, rf1=trim_32(0 - 0b01010101010)) expected_state.check(epiphany.state) assert not epiphany.state.running
def test_add32_sub32(): from pydgin.utils import trim_32 instructions = [(opcode_factory.add32_immediate(rd=1,rn=0, imm=0b01010101010), 32), # TODO: Add new instruction to move the result of instruction 1 # TODO: to rf[0] before instruction 2 is executed. (opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.bkpt16(), 16), ] epiphany = MockEpiphany() epiphany.init_state(instructions, rf0=0) assert epiphany.state.running epiphany.run() expected_state = StateChecker(AZ=0, AN=1, AC=0, pc=(10 + RESET_ADDR), rf1=trim_32(0 - 0b01010101010)) expected_state.check(epiphany.state) assert not epiphany.state.running
def test_add32_nop16_sub32(): from pydgin.utils import trim_32 instructions = [(opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.nop16(), 16), (opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.trap16(3), 16), ] revelation = MockRevelation() revelation.init_state(instructions, rf0=0) assert revelation.states[0x808].running exit_code, ticks = revelation.run() expected_state = StateChecker(pc=(12 + RESET_ADDR), AC=0, AN=1, AZ=0, rf1=trim_32(0 - 0b01010101010)) expected_state.check(revelation.states[0x808]) assert EXIT_SUCCESS == exit_code assert len(instructions) == ticks assert not revelation.states[0x808].running
def test_bcond32(): instructions = [(opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b00000000101), 32), (opcode_factory.bcond32(condition=0b0000, imm=0b000000000000000000000100), 32), (opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.bkpt16(), 16), ] epiphany = MockEpiphany() epiphany.init_state(instructions, rf0=5) assert epiphany.state.running epiphany.run() expected_state = StateChecker(pc=(14 + RESET_ADDR), rf1=0) expected_state.check(epiphany.state) assert not epiphany.state.running epiphany.init_state(instructions, rf0=8) epiphany.run() expected_state = StateChecker(pc=(14 + RESET_ADDR), rf1=(8 + 0b01010101010)) expected_state.check(epiphany.state) assert not epiphany.state.running
def test_add32_sub32(): from pydgin.utils import trim_32 instructions = [(opcode_factory.add32_immediate(rd=1,rn=0, imm=0b01010101010), 32), # TODO: Add new instruction to move the result of instruction 1 # TODO: to rf[0] before instruction 2 is executed. (opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.trap16(3), 16), ] revelation = MockRevelation() revelation.init_state(instructions, rf0=0) assert revelation.states[0x808].running exit_code, ticks = revelation.run() expected_state = StateChecker(AZ=0, AN=1, AC=0, pc=(10 + RESET_ADDR), rf1=trim_32(0 - 0b01010101010)) expected_state.check(revelation.states[0x808]) assert EXIT_SUCCESS == exit_code assert len(instructions) == ticks assert not revelation.states[0x808].running
def test_bcond32(): instructions = [(opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b00000000101), 32), (opcode_factory.bcond32(condition=0b0000, imm=0b000000000000000000000100), 32), (opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), 32), (opcode_factory.trap16(3), 16), ] revelation = MockRevelation() revelation.init_state(instructions, rf0=5) assert revelation.states[0x808].running exit_code, ticks = revelation.run() expected_state = StateChecker(pc=(14 + RESET_ADDR), rf1=0) expected_state.check(revelation.states[0x808]) assert EXIT_SUCCESS == exit_code assert len(instructions) - 1 == ticks assert not revelation.states[0x808].running revelation = MockRevelation() revelation.init_state(instructions, rf0=8) exit_code, ticks = revelation.run() expected_state = StateChecker(pc=(14 + RESET_ADDR), rf1=(8 + 0b01010101010)) expected_state.check(revelation.states[0x808]) assert EXIT_SUCCESS == exit_code assert len(instructions) == ticks assert not revelation.states[0x808].running
def test_decode_add32_immediate_argument(): instr = Instruction(opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010), '') assert instr.rd == 1 assert instr.rn == 0 assert instr.imm11 == 0b01010101010
from epiphany.instruction import Instruction import opcode_factory import pytest @pytest.mark.parametrize('name,instr', [('add32', opcode_factory.add32(rd=0, rn=0, rm=0)), ('add16', opcode_factory.add16(rd=0, rn=0, rm=0)), ('add32', opcode_factory.add32(rd=1, rn=1, rm=1)), ('add16', opcode_factory.add16(rd=1, rn=1, rm=1)), ('sub32', opcode_factory.sub32(rd=0, rn=0, rm=0)), ('sub16', opcode_factory.sub16(rd=0, rn=0, rm=0)), ('sub32', opcode_factory.sub32(rd=1, rn=1, rm=1)), ('sub16', opcode_factory.sub16(rd=1, rn=1, rm=1)), ('add32', opcode_factory.add32_immediate(rd=1, rn=0, imm=0b01010101010)), ('add16', opcode_factory.add16_immediate(rd=1, rn=0, imm=0b0101)), ('sub32', opcode_factory.sub32_immediate(rd=1, rn=0, imm=0b01010101010)), ('sub16', opcode_factory.sub16_immediate(rd=1, rn=0, imm=0b0101)), ('and32', opcode_factory.and32(rd=1, rn=1, rm=1)), ('and16', opcode_factory.and16(rd=1, rn=1, rm=1)), ('orr32', opcode_factory.orr32(rd=1, rn=1, rm=1)), ('orr16', opcode_factory.orr16(rd=1, rn=1, rm=1)), ('eor32', opcode_factory.eor32(rd=1, rn=1, rm=1)), ('eor16', opcode_factory.eor16(rd=1, rn=1, rm=1)), ('asr32', opcode_factory.asr32(rd=1, rn=1, rm=1)), ('asr16', opcode_factory.asr16(rd=1, rn=1, rm=1)), ('lsr32', opcode_factory.lsr32(rd=1, rn=1, rm=1)), ('lsr16', opcode_factory.lsr16(rd=1, rn=1, rm=1)), ('lsl32', opcode_factory.lsl32(rd=1, rn=1, rm=1)), ('lsl16', opcode_factory.lsl16(rd=1, rn=1, rm=1)),