Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 长内存段上的按位操作_C_Assembly_Bitwise Operators_Sse - Fatal编程技术网

C 长内存段上的按位操作

C 长内存段上的按位操作,c,assembly,bitwise-operators,sse,C,Assembly,Bitwise Operators,Sse,是否可以直接在长内存块(比如512位或更多)上执行位操作 直接说,我的意思是,不是多重移位和监视边界。。。如下代码所示 /* // shifting 128 bit data [pc2, pc1] to left, // and then assigning it to [rc2, rc1]: */ uint64_t au1, pc1, pc2, rc1, rc2; rc1 = pc1 >> 63;\ au1 = pc2 << 1;\ rc2 = rc1 ^ au1;

是否可以直接在长内存块(比如512位或更多)上执行位操作

直接说,我的意思是,不是多重移位和监视边界。。。如下代码所示

/* 
// shifting 128 bit data [pc2, pc1] to left, 
// and then assigning it to [rc2, rc1]:
*/
uint64_t au1, pc1, pc2, rc1, rc2;
rc1 = pc1 >> 63;\
au1 = pc2 << 1;\
rc2 = rc1 ^ au1;\
rc1 = pc1 << 1;\
/*
//将128位数据[pc2,pc1]向左移位,
//然后将其分配给[rc2,rc1]:
*/
uint64_t au1、pc1、pc2、rc1、rc2;
rc1=pc1>>63\

au1=pc2是和否。当然可以为512或1024位的数字分配内存,是的,您可以对它们执行任何操作。但是,不,ICC你不能用这样的数字写代码< A+B>代码>,而必须使用<代码>添加(a,b)< /> >(在C++中……)。汇编语言是实现非便携式高优化低级别操作的方法。我的建议是先用portable C编写它,然后测试它,如果你真的需要的话,用汇编语言重写一些部分(在分析之后看看它在哪里最有用)。假设你只针对x86,你可以用SSE执行128位位位操作,用AVX执行256位位操作。这不需要汇编程序-只需将Intrinsic与C结合使用即可。XOR是一条指令,您需要从XOR和其他逐位运算中为任何长度超过64位的运算生成算术运算。@u123如果您希望有人查看您的C代码以确定它是否可以加速,请随意发布。注意:xor和加法是不同的操作!你的加法是异或而不是加法,你的乘法是错误的