def test_execute_arith_shift_right(rn, rm, is16bit):
    rd = 2
    state = new_state(rf0=trim_32(rn), rf1=trim_32(rm))
    instr = (opcode_factory.asr16(rd=rd, rn=0, rm=1) if is16bit
             else opcode_factory.asr32(rd=rd, rn=0, rm=1))
    name, executefn = decode(instr)
    executefn(state, Instruction(instr, None))
    expected_state = StateChecker(AZ=(False if rn < 0 else True), # 1 >> 5 == 0
                                  AV=0, AC=0,
                                  pc=((2 if is16bit else 4) + RESET_ADDR),
                                  rf2=(trim_32(-1) if rn < 0 else 0))
    expected_state.check(state)
示例#2
0
 ('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)),
 ('lsrimm16',    opcode_factory.lsr16_immediate(rd=1, rn=1, imm=1)),
 ('lslimm16',    opcode_factory.lsl16_immediate(rd=1, rn=1, imm=1)),
 ('asrimm16',    opcode_factory.asr16_immediate(rd=1, rn=1, imm=1)),
 ('bitrimm16',   opcode_factory.bitr16_immediate(rd=1, rn=1, imm=1)),
 ('lsrimm32',    opcode_factory.lsr32_immediate(rd=1, rn=1, imm=1)),
 ('lslimm32',    opcode_factory.lsl32_immediate(rd=1, rn=1, imm=1)),
 ('asrimm32',    opcode_factory.asr32_immediate(rd=1, rn=1, imm=1)),
 ('bitrimm32',   opcode_factory.bitr32_immediate(rd=1, rn=1, imm=1)),
 ('jr32',        opcode_factory.jr32(rn=0)),
 ('jr16',        opcode_factory.jr16(rn=0)),