簡體   English   中英

從SIMD SSE內部指令轉換為等效的C代碼

[英]Converson from SIMD SSE Intrinsic Instruction to equivalent c code

我分配了將SIMD SSE指令轉換為等效的C代碼的代碼。代碼是這樣的(I1_block_addr--是uint8_t,而esc_offset_1是32位整數。)

      __m128i xmm1 = _mm_load_si128((__m128i*)(I1_block_addr+desc_offset_1));
      __m128i xmm6 = _mm_load_si128((__m128i*)(I2_block_addr+desc_offset_1));

       xmm6 = _mm_sad_epu8(xmm1,xmm6);

我所做的是

 char *c1;
 char xmm1[16],xmm6[16];
 short xmm6s[16]

 //for loding 16 byte 
  c1=( char* )( I1_block_addr + desc_offset_1 );
  memcpy( xmm1 , c1 , 16 ); 

  c1=( char* )( I2_block_addr + desc_offset_1 );
  memcpy( xmm6 , c1 , 16 ); 

 xmm6s[0] = (short) ( abs(xmm1[0]-xmm6[0]) + abs(xmm1[1]-xmm6[1]) + abs(xmm1[2]-xmm6[2]) + abs(xmm1[3]-xmm6[3]) + abs(xmm1[4]-xmm6[4]) + abs(xmm1[5]-xmm6[5]) + 
            abs(xmm1[6]-xmm6[6]) + abs(xmm1[7]-xmm6[7]) );

xmm6s[1] = 0;   xmm6s[2] = 0;   xmm6s[3] = 0;   

xmm6s[4] = (short) ( abs(xmm1[8]-xmm6[8]) + abs(xmm1[9]-xmm6[9]) +    abs(xmm1[10]-xmm6[10]) + abs(xmm1[11]-xmm6[11]) + abs(xmm1[12]-xmm6[12]) + 
abs(xmm1[13]-xmm6[13]) + abs(xmm1[14]-xmm6[14]) + abs(xmm1[15]-xmm6[15]) );

xmm6s[5] = 0;   xmm6s[6] = 0;   xmm6s[7] = 0;

我沒有收到任何錯誤,但是圖像質量下降了。 請告訴代碼的哪一部分是錯誤的,以及如何糾正。

代碼看起來或多或少還可以-我認為您只需要將char / short類型更改為適當的未簽名類型即可:

#include <stdint.h>

uint8_t *c1;
uint8_t xmm1[16], xmm6[16];
uint16_t xmm6s[8];

c1 = I1_block_addr + desc_offset_1;
memcpy(xmm1, c1, 16); 

c1 = I2_block_addr + desc_offset_1;
memcpy(xmm6, c1, 16); 

xmm6s[0] = (uint16_t) ( abs(xmm1[0]-xmm6[0]) + abs(xmm1[1]-xmm6[1]) + abs(xmm1[2]-xmm6[2]) + abs(xmm1[3]-xmm6[3]) + 
                        abs(xmm1[4]-xmm6[4]) + abs(xmm1[5]-xmm6[5]) + abs(xmm1[6]-xmm6[6]) + abs(xmm1[7]-xmm6[7]) );

xmm6s[1] = xmm6s[2] = xmm6s[3] = 0;   

xmm6s[4] = (uint16_t) ( abs(xmm1[8]-xmm6[8]) + abs(xmm1[9]-xmm6[9]) + abs(xmm1[10]-xmm6[10]) + abs(xmm1[11]-xmm6[11]) + 
                        abs(xmm1[12]-xmm6[12]) + abs(xmm1[13]-xmm6[13]) + abs(xmm1[14]-xmm6[14]) + abs(xmm1[15]-xmm6[15]) );

xmm6s[5] = xmm6s[6] = xmm6s[7] = 0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM