2013년 3월 10일 일요일

neon example


#include "arm_neon.h"

int main()
{
 
  uint64_t op1_64[2]={0x9999991234567890,0xFFFFFFFFFFFFFFFF};
  uint64_t op2_64[2]={0xFFFFFFFFFFFFFFFF,0xFEEEEEEEEEEEEEEE};

  uint64x2_t op3[3];
  uint64x2_t* kkk;
 
  op1_64[0]=0x9999991234567890;
  op2_64[0]=0xFFFFFFFFFFFFFFFF;
 
  uint32_t ret,ret2;
  //op3[0]=vld1q_u64(op1_64);
  //op3[1]=vld1q_u64(op2_64);
  asm(
      //"add r0, sp, #0x0 \n\t"
      "vld1.64 {D0,D1}, [%0] \n\t"
      "add r0, sp, #0x10 \n\t"
      "vld1.64 {D2,D3}, [r0] \n\t"
       
     // "vtrn.32 d0,d1 \n\t"
       
        "vext.32 q2,q1,q0, #2\n\t"
        //"vsli.64 q2, q1, #2 \n\t"
      //"veor  q2,q1,q0 \n\t"

       //   "mov r1, #10 \n\t"
        //  "mov r2, #20 \n\t"
        //  "vmov d4, r1,r2 \n\t"
     
         
     // "add r0,sp,#0x0 \n\t"
      "vst1.64 {d4,d5},[%0] \n\t"
       
        :
          : "r"(&op1_64[0]) ,[value] "r" (ret2)
   
//"add r0, sp, #0x20 \n\t"
//"vstm r0, {D2,D3} \n\t"
      );
 
  op3[2]=vaddq_u64(op3[0],op3[1]);
 
  vst1q_u64(op1_64,op3[2]);
 
  return 0;
}

댓글 없음:

댓글 쓰기