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);
 }
예제 #2
0
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);
	}
	


}