extern "C" void slv6_X_set_reg(SLv6_Processor *proc, const SLv6_Condition cond, const uint8_t d, const uint32_t data) { if (!ConditionPassed(&proc->cpsr,cond)) return; set_reg(proc,d,data); }
void b_t3(int i) { /* imm32 = SignExtend(S:J2:J1:imm6:imm11:'0', 32); if cond<3:1> == '111' then SEE Branches, miscellaneous control instructions on page A4-30; if InITBlock() then UNPREDICTABLE; if ConditionPassed() then EncodingSpecificOperations(); BranchWritePC(PC + imm32); */ int imm32; *((int*)(&conditionalBranch))=i; imm32=(conditionalBranch.s<<20)|(conditionalBranch.j2<<19)|(conditionalBranch.j1<<18)| (conditionalBranch.off2<<12)|(conditionalBranch.off1<<1); imm32 &= 0xFFFFFFFE; //SignExtend if(imm32 & 0x00100000) imm32 |= 0xFFE00000; else imm32 &= 0x001FFFFF; if(conditionalBranch.cond>=14){ //question? printf("Error!Branch conditonal instruction,con<3:1>=111\n"); return; } else if(InITBlock()) printf("UNPREDICTABLE instruction\n"); else if(ConditionPassed(conditionalBranch.cond)){ EncodingSpecificOperations(); BranchWritePC(get_pc()+imm32); } }