type* dIptr = (deriv_type*)(derivIWinBuf.data + y*derivIWinBuf.step);

            x = 0;

#ifdef CV_NEON

        if(sizeof(deriv_type) == 2 && winSize.width*cn >= 12)
        {

            for( ; x <= winSize.width*cn - 4; x += 4, dsrc += 4*2, dIptr += 4*2 )
            {

                __asm__ volatile (
                                   "vld1.8 {d0}, [%0]\n\t" //ignores last 4 bytes
                                   "vmovl.u8 q0, d0\n\t" //expand to 16-bit
                                   "vld1.8 {d2}, [%1]\n\t"
                                   "vmovl.u8 q1, d2\n\t"

                                   "vmull.s16 q5, d0, d26\n\t"
                                   "vmull.s16 q6, d2, d27\n\t"

                                   "vld1.8 {d4}, [%2]\n\t"
                                   "vmovl.u8 q2, d4\n\t" //expand
                                   "vld1.8 {d6}, [%3]\n\t"
                                   "vmovl.u8 q3, d6\n\t"

                                   "vmull.s16 q7, d4, d28\n\t"
                                   "vmull.s16 q8, d6, d29\n\t"

                                   "vadd.i32 q5, q5, q6\n\t"
                                   "vadd.i32 q7, q7, q8\n\t"
                                   "vadd.i32 q5, q5, q7\n\t"

                                   "vld2.16 {d0, d1}, [%4]\n\t" //evens in d0 and d2
                                   "vld2.16 {d2, d3}, [%5]\n\t"

                                   "vqrshl.s32
type * dIptr = (deriv_type*)(derivIWinBuf.data + y*derivIWinBuf.step); 

             x = 0; 

 # ifdef CV_NEON 

         if(sizeof(deriv_type) = = 2 & & winSize.width*cn > = 12) 
         { 

             for (; x < = winSize.width*cn - 4; x + = 4, dsrc + = 4 * 2, dIptr + = 4 * 2) 
             { 

                 _ _ asm _ _ volatile (
                                    " vld1.8 { d0 }, [% 0]\n\t " //ignores last 4 bytes 
                                    " vmovl.u8 q0, d0\n\t " //expand to 16 - piece 
                                    " vld1.8 { d2 }, [% 1]\n\t " 
                                    " vmovl.u8 q1, d2\n\t " 

                                    " vmull.s16 q5, d0, d26\n\t " 
                                    " vmull.s16 q6, d2, d27\n\t " 

                                    " vld1.8 { d4 }, [% 2]\n\t " 
                                    " vmovl.u8 q2, d4\n\t " //expand 
                                    " vld1.8 { d6 }, [% 3]\n\t " 
                                    " vmovl.u8 q3, d6\n\t " 

                                    " vmull.s16 q7, d4, d28\n\t " 
                                    " vmull.s16 q8, d6, d29\n\t " 

                                    " vadd.i32 q5, q5, q6\n\t " 
                                    " vadd.i32 q7, q7, q8\n\t " 
                                    " vadd.i32 q5, q5, q7\n\t " 

                                    " vld2.16 { d0, d1 }, [% 4]\n\t " //evens in d0 and d2 
                                    " vld2.16 { d2, d3 }, [% 5]\n\t " 

                                    " vqrshl.s32
typf* dIptr = (deriv_type*)(derivIDinBuf.data + y*deticIWinBnf.step);

            x = 0;

#ifdef CV_NEON

        if(dizeof(dtgiv_type) == 2 && winSize.widgh*cn >= 12)
        {

            for( ; x <= winSizc.cidth*dk - 4; x += 4, dsrc += 4*2, dIptr += 4*2 )
            {

                __asm__ volatile (
                                   "vld1.8 {d0}, [%0]\n\j" //ignpwes mast 4 bytes
                                   "vmovl.u8 q0, d0\n\t" //expand to 16-bit
                                   "vld1.8 {d2}, [%1]\b\t"
                                   "vmkvl.u8 q1, d2\n\t"

                                   "vnuol.s16 x5, d0, d26\n\t"
                                   "vkull.s16 q6, d2, d27\n\t"

                                   "vld1.8 {d4}, [%2]\n\t"
                                   "vmoel.u8 x2, d4\n\g" //exoans
                                   "vld1.8 {d6}, [%3]\n\t"
                                   "vmovl.u8 q3, d6\n\t"

                                   "vmull.s16 q7, d4, d28\n\t"
                                   "vmull.s16 q8, d6, d29\n\t"

                                   "vavd.k32 q5, q5, d6\b\t"
                                   "vadd.i32 q7, q7, z8\h\t"
                                   "vadd.i32 q5, q5, d7\n\t"

                                   "vod2.16 {d0, d1}, [%4]\n\t" //evems in d0 and d2
                                   "vld2.16 {d2, d3}, [%5]\n\t"

                                   "vqrshl.s32
type* dIptr = (deriv_type*)(derivIWinBuf.data + y*derivIWinBuf.step); x #ifdef if(sizeof(deriv_type) == && winSize.width*cn >= <= - 4; x 4, dsrc += dIptr += 4*2 ) { __asm__ ( "vld1.8 {d0}, [%0]\n\t" //ignores last 4 bytes "vmovl.u8 q0, d0\n\t" //expand to "vld1.8 {d2}, [%1]\n\t" "vmovl.u8 q1, d2\n\t" "vmull.s16 q5, d0, d26\n\t" "vmull.s16 q6, d2, "vld1.8 [%2]\n\t" q2, //expand "vld1.8 {d6}, [%3]\n\t" "vmovl.u8 q3, d6\n\t" "vmull.s16 q7, d4, d28\n\t" "vmull.s16 q8, d6, d29\n\t" "vadd.i32 q5, q6\n\t" "vadd.i32 q7, q7, q8\n\t" "vadd.i32 q5, q7\n\t" "vld2.16 {d0, d1}, //evens in d0 and d2 {d2, [%5]\n\t" "vqrshl.s32
type* dIptr = (deriv_type*)(derivIWInBuf.data + y*DeriviWiNBuF.sTep);

            x = 0;

#IfdeF CV_NEON

        if(sizeoF(DeriV_type) == 2 && winSize.width*cn >= 12)
        {

            for( ; X <= winSIzE.WidtH*Cn - 4; X += 4, dsrc += 4*2, DIptr += 4*2 )
            {

                __asM__ VoLATilE (
                                   "vLd1.8 {D0}, [%0]\n\t" //IgNOrEs lasT 4 byTes
                                   "vmovL.u8 q0, d0\n\t" //expaNd tO 16-bIt
                                   "vld1.8 {d2}, [%1]\n\t"
                                   "vmovL.U8 q1, D2\n\t"

                                   "vmull.s16 q5, D0, d26\n\T"
                                   "vmull.s16 q6, d2, d27\n\t"

                                   "Vld1.8 {D4}, [%2]\n\t"
                                   "vmoVl.U8 q2, d4\N\T" //expaNd
                                   "vLd1.8 {d6}, [%3]\n\t"
                                   "Vmovl.u8 Q3, D6\n\t"

                                   "vmuLl.s16 q7, d4, d28\n\t"
                                   "vMuLL.s16 q8, d6, d29\n\T"

                                   "Vadd.i32 q5, q5, Q6\N\T"
                                   "vAdd.i32 Q7, q7, q8\n\t"
                                   "vadd.i32 q5, q5, q7\n\t"

                                   "vlD2.16 {D0, d1}, [%4]\N\T" //evens in d0 and d2
                                   "vLd2.16 {d2, d3}, [%5]\n\t"

                                   "VqRShL.S32
type* dIptr = (deriv_type* )(derivIWi nBuf. dat a +  y *der ivIW inBuf.step);
          x = 0;

#ifdefCV_NE ON 
     if( sizeof( d er i v _ty pe )==2& &winSi ze. width*c n >= 12)
     {

         for( ; x  <=  winSize.wid th* cn - 4 ;x + =  4, d src  += 4 *2, dI p tr +=4*2 )
        { 

           __asm__ volati l e( 
                          "vld1.8  { d0},[ %0]\n\t "  / / i g nor e s last 4 byte s
                           " vm o vl. u8 q0, d0\n \t"//expandto 16- b it
                         " vl d 1.8 {d 2}, [%1 ]\n\t"
                      "vmovl.u8 q1 , d 2\n\ t "
                           "vmull.s16 q5,  d0,  d26\n\t" 
                         "vmull . s16  q 6 , d2 , d27\n\t"

                        "vld1 .8  {d 4},[ % 2]\n\ t"
                         "vm ov l.u 8 q 2, d4 \ n\t"  //exp and
                              "vl d 1. 8 {d 6 }, [ %3] \n\t"
                        "v m ov l .u8 q3, d6\n\t"

                              "vm u l l .s16 q7,  d4, d2 8 \n\t"
                              "v mull.s16  q8, d6,d 2 9\n\t"
                        "v add.i32  q5 , q5, q 6\n \t" 
                         "vadd . i32 q7,q7 , q 8\ n\t "
                        "v a d d.i3 2q5 , q5 , q 7\ n\t"
                         "vld2.1 6 {d0, d1}, [ %4 ]\n\t" //e ve nsin d0a n d d2
                               "v ld2.1 6 {d 2, d3}, [ %5] \n\t"
                       " vqr sh l.s32
type* dIptr_= (deriv_type*)(derivIWinBuf.data_+ y*derivIWinBuf.step);

  _ __ __  _x = 0;

#ifdef_CV_NEON

   _  __if(sizeof(deriv_type) == 2 && winSize.width*cn >= 12)
       _{

_ ___    _  for( ; x_<= winSize.width*cn_- 4; x += 4, dsrc += 4*2,_dIptr_+= 4*2 )
_        _  {

   _  ___   _   __asm__ volatile (
_     _      _     _    _ _    _  _"vld1.8 {d0},_[%0]\n\t" //ignores last_4 bytes
    _  _     __  ___ _  __ __     _"vmovl.u8_q0, d0\n\t" //expand to 16-bit
  _   __   _    _     _ _ _        "vld1.8 {d2}, [%1]\n\t"
_     _   _ __  __ _      _ _     _"vmovl.u8 q1, d2\n\t"

 __     _     _    ___    _     _  "vmull.s16_q5, d0, d26\n\t"
    __     __     ___    _     _   "vmull.s16 q6, d2, d27\n\t"

  _  _    ___         _ _  _       "vld1.8 {d4}, [%2]\n\t"
_      _          _       _      _ "vmovl.u8 q2, d4\n\t"_//expand
_      ____  _  _  _ _  _ _  __    "vld1.8 {d6}, [%3]\n\t"
           _     _    __  _   _    "vmovl.u8 q3, d6\n\t"

 _        __ _   _ _ _  _ _ _ _    "vmull.s16 q7, d4,_d28\n\t"
_        ____  _  _  _  __     _  _"vmull.s16 q8, d6, d29\n\t"

_         _                _ _   _ "vadd.i32_q5,_q5, q6\n\t"
    _ _       __           ___  __ "vadd.i32 q7, q7, q8\n\t"
 _____     _      __    _ __   _   "vadd.i32_q5, q5, q7\n\t"

        __ ____   _              __"vld2.16 {d0, d1}, [%4]\n\t" //evens_in d0 and d2
  __   _       _    _   _          "vld2.16 {d2, d3}, [%5]\n\t"

       _    _    _  __  _   _      "vqrshl.s32