Beispiel #1
0
BigInt & BigInt::operator-=(BICR bi)
{
	int borrow=0;
	std::vector<int>::iterator it;

	it=transform(bi.digits.begin(),bi.digits.end(),
		digits.begin(),digits.begin(),SubWithBorrow(borrow));

	transform(it,digits.end(),it,Borrow(borrow));

	return *this;
}
Beispiel #2
0
void rsc_inst(ARMProc *proc, UWord instruction) {
#ifdef DEBUG
        printf("Ejecutaste un rsc\n");
#endif
	//Instrucciones de DP
	ARMAddr *modes = addr_modes_dp();
	ARMAddr *mode;
	ARMAddrDPReturn result;
	Word S;
        Word Rn;
        Word Rd;
	Word borrow;
	Word last_rd;
	Word Cflag = get_bits(*proc->cpsr,29,1);
	
	mode = fetch_addr(modes, instruction);
	
	if(mode != NULL)
		mode->execute(proc, instruction, &result);

	if(!cond(proc,instruction))
                return;
        Rn = get_bits(instruction,16,4);
        Rd = get_bits(instruction,12,4);
	
	last_rd = *proc->r[Rd];
        *proc->r[Rd] =  SubWithBorrow(result.shifter_operand,*proc->r[Rn]+!Cflag,&borrow);

        if(S && Rd==15){
                if(proc->cpsr != NULL){
                        *proc->cpsr = *proc->spsr;
                }
        }
        else if(S == 1){
                set_status(proc,status_n,get_bits(*proc->r[Rd],31,1));
                set_status(proc,status_z,*proc->r[Rd] == 0);
                set_status(proc,status_c,borrow == 0);
                set_status(proc,status_v,OverflowFrom(last_rd,*proc->r[Rd]));
         }
}