如何解决取消设置asm中的最低设置位
以下是我提供的用于取消设置数字中最低1位的函数。
unset_lowest_bit:
# NUM & (NUM-1)
# All binary digits to the left of the first 1 will remain unchanged,so & itself=itself
# Any zeros to the right of the first 1 will stay zero,since anything & 0 = 0
# And finally,the first 1 will go to zero,since the -1 will eventually need to borrow
# Up to the first 1 digit
lea -1(%rdi),%rax
and %rdi,%rax
ret
除了不使用函数调用之外,这是否是取消设置最低位的好方法?还是有一条指令可以做到这一点(这似乎是一件很不标准的事情,所以找不到任何指令)。
解决方法
有一个指令,但是不在基本指令集中,它在BMI1中:blsr
BMI1由Haswell和更新版本在Intel方面实现(不包括Atom),而Jaguar&Piledriver和更新版本则由AMD方面实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。