if(N < word_size) {
dst[N] = 1; // as in Nth bit of dst = 1
}
else {
dst[word_size - 1:0] = 0
}
// rsi has length
L(keep_searching):
movq %(rdi), %rax
testq %rax, %rax
jnz L(found)
subq $64, rsi
jbe L(done) // this done will return origional value of rsi
addq $8, %rdi
jmp L(keep_searching)
谢了!
几个版本,是工作良好的我为32位。如果我使用MMX@PeterCordes指出PLLSQ
正是我想要的。
uint64_t __attribute__((noinline, noclone)) shift(uint64_t cnt) {
uint64_t ret = 0;
asm volatile(
"cmpq $32, %[cnt]\n\t"
"setbe %b[ret]\n\t"
"shlxq %[cnt], %[ret], %[ret]\n\t"
: [ ret ] "+r"(ret)
: [ cnt ] "r"(cnt)
: "cc");
return ret;
}
uint64_t __attribute__((noinline, noclone)) shift2(uint64_t cnt) {
uint64_t ret = 0, tmp = 0;
asm volatile(
"leaq -33(%[cnt]), %[tmp]\n\t"
"movl $1, %k[ret]\n\t"
"shlxq %[cnt], %[ret], %[ret]\n\t"
"sarq $63, %[tmp]\n\t"
"andq %[tmp], %[ret]\n\t"
: [ ret ] "+r"(ret), [ tmp ] "+r"(tmp), [ cnt ] "+r"(cnt)
:
: "cc");
return ret;
}
uint64_t __attribute__((noinline, noclone)) shift3(uint64_t cnt) {
uint64_t ret, tmp;
asm volatile(
"leaq -33(%[cnt]), %[tmp]\n\t"
"btsq %[cnt], %[ret]\n\t"
"sarq $63, %[tmp]\n\t"
"andq %[tmp], %[ret]\n\t"
: [ ret ] "+r"(ret), [ tmp ] "+r"(tmp), [ cnt ] "+r"(cnt)
:
: "cc");
return ret;
}
还没有核实,但是
mov rax, 1 // common
mov rdx, 0 // common
cmp rcx, 64
shlxq rbx, rax, rcx
cmova rbx, rdx
可能比建议的替代方案性能稍好,因为比较和移位现在是独立的,可以并行执行。
编辑
安装: qemu虚拟机 android-x86_64 网卡参数:-net nic -net tap 装完进入系统: 手工配ip ping 报错 Network is unreachable 我曾经见过安卓平板上可以插rj45网线
问题内容: 我正在尝试在x86_64上编译glibc(作为次要的,不是系统的替代品)2.6,并试图使其生成32位对象。当我给它一个标准配置时,它可以很好地编译,生成通常的64位库对象。一些信息: 07:32:21 \ EST 2010 x86_64 x86_64 x86_64 GNU/Linux 除其他外,我尝试了以下方法: 尝试1: 尝试2: 配置成功,但是会导致一系列编译错误,如下所示: 如果
问题内容: 我想像gdb一样获得类似输出。但是我想直接通过这样做。我的平台是Linux,x86;以及后来的x86_64。 现在,我只想从堆栈中读取返回地址,而无需转换为符号名称。 因此,对于测试程序,通过以下方式进行编译: 我将启动一个程序,并从一开始就连接到测试程序。然后,我将执行PTRACE_CONT并等待信号。当测试程序会做一次自杀;信号将被传送到我的程序。这时我想读取返回地址,它们就像(因
Linux,全称GNU/Linux,是一套免费使用和自由传播的类 UNIX 操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年第一次释出,它主要受到 Minix 和 Unix 思想的启发。
问题内容: 我可以用吗: 代替 后者似乎太冗长。有区别吗? 问题答案: 该声明 将调用(请参阅特殊方法名称文档)并使用该函数的返回值。总结如下: 要求执行真值测试和内置操作;应该返回或,或者它们的整数等效值或。如果未定义此方法,则调用该方法(如果已定义),并且如果其结果为非零,则将该对象视为true。如果一个类既未定义,也未定义,则其所有实例均被视为true。 另一方面, 仅 将参考与进行比较以查
本文向大家介绍knockout.js 如果/如果不是,包括了knockout.js 如果/如果不是的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用if绑定来确定是否应创建节点的子元素。 if绑定的逆是ifnot 相当于 有时,您无需创建容器就无法控制元素的存在(通常是针对中的<li>元素<ul>或中的<option>元素<select>) 淘汰赛可使用基于注释标签的无容器控制流语法来实现