我最近一直在研究分组密码模式(加密)。 我对OCB(Offset codebook)非常感兴趣并试图实现它。 我使用了算法作者提供的实现。 我现在收到错误。这些错误的深度对我来说有点太深了。
下面列出的错误很多。我试着读一下_m128i的用途, 但我从未真正触及任何与之相关的事情。 (不是Linux经验) 我觉得它可能与OS /编译器/设置有关吗?
错误:
从类型'int'分配类型'__m128i'时不兼容的类型
*(使用gcc运行:gcc -march = native -O3 ocb.c timing_x86-1.c)*
任何见解都会非常感激。
修改的
以下是错误发生位置的示例。 (__m128i转换)
static void AES_128_Key_Expansion(const unsigned char *userkey, void *key)
{
__m128i x0,x1,x2;
__m128i *kp = (__m128i *)key;
kp[0] = x0 = _mm_loadu_si128((__m128i*)userkey);
x2 = _mm_setzero_si128();
EXPAND_ASSIST(x0,x1,x2,x0,255,1); kp[1] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,2); kp[2] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,4); kp[3] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,8); kp[4] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,16); kp[5] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,32); kp[6] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,64); kp[7] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,128); kp[8] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,27); kp[9] = x0;
EXPAND_ASSIST(x0,x1,x2,x0,255,54); kp[10] = x0;
}
#define EXPAND_ASSIST(v1,v2,v3,v4,shuff_const,aes_const) \
v2 = _mm_aeskeygenassist_si128(v4,aes_const); \
v3 = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(v3), \
_mm_castsi128_ps(v1), 16)); \
v1 = _mm_xor_si128(v1,v3); \
v3 = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(v3), \
_mm_castsi128_ps(v1), 140)); \
v1 = _mm_xor_si128(v1,v3); \
v2 = _mm_shuffle_epi32(v2,shuff_const); \
v1 = _mm_xor_si128(v1,v2)
#define EXPAND192_STEP(idx,aes_const) \
EXPAND_ASSIST(x0,x1,x2,x3,85,aes_const); \
x3 = _mm_xor_si128(x3,_mm_slli_si128 (x3, 4)); \
x3 = _mm_xor_si128(x3,_mm_shuffle_epi32(x0, 255)); \
kp[idx] = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(tmp), \
_mm_castsi128_ps(x0), 68)); \
kp[idx+1] = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(x0), \
_mm_castsi128_ps(x3), 78)); \
EXPAND_ASSIST(x0,x1,x2,x3,85,(aes_const*2)); \
x3 = _mm_xor_si128(x3,_mm_slli_si128 (x3, 4)); \
x3 = _mm_xor_si128(x3,_mm_shuffle_epi32(x0, 255)); \
kp[idx+2] = x0; tmp = x3
答案 0 :(得分:1)
您无法将其转换为机器寄存器。这就是load命令正在为你做的事情。
您只需直接提供指向加载命令的指针而无需强制转换。它将从ram复制到向量寄存器。演员不能那样做。