// Copyright 2011 The Code Cavern

void bda_mod_1_2(bda_ptr rem,bda_srcptr xp,bda_len xn,bda_srcptr db)// in each round we hack off a 2 word from the body , ie k=2
{bda_digit h,l,sh,sl,th,tl;
 bda_len j;
 
ASSERT(xn>=4);
ASSERT_BDA(xp,xn);
ASSERT_DIGIT(db[0]);ASSERT_DIGIT(db[1]);ASSERT_DIGIT(db[2]);

tl=xp[xn-2];th=xp[xn-1];
for(j=xn-4;j>=0;j-=2)
   {bda_digit_mul(sh,sl,xp[j+1],db[0]);
    bda_2digit_add(sh,sl,sh,sl,0,xp[j]);
    bda_digit_mul(h,l,tl,db[1]);
    bda_2digit_add(sh,sl,sh,sl,h,l);
    bda_digit_mul(th,tl,th,db[2]);
    bda_2digit_add(th,tl,th,tl,sh,sl);}
if(j>-2)// we have at least three word to do still ie xp[0],...,tl,th
  {bda_digit_mul(sh,sl,tl,db[0]);
   bda_2digit_add(sh,sl,sh,sl,0,xp[0]);
   bda_digit_mul(th,tl,th,db[1]);
   bda_2digit_add(th,tl,th,tl,sh,sl);}
bda_digit_mul(h,l,th,db[0]);
bda_2digit_add(h,l,h,l,0,tl);

rem[0]=l;rem[1]=h;
return;}
