当前位置: 首页 > 知识库问答 >
问题:

标志/EFLAGS是clobber列表的“CC”(条件控制)的一部分吗?

从劲
2023-03-14

这是扩展汇编程序中What is"=qm"的后续。

当使用RDRAND时,它设置(或取消设置)进位标志(CF

char rc;
unsigned int val;

__asm__ volatile(
    "rdrand %0 ; setc %1"
    : "=r" (val), "=qm" (rc)
);

// 1 = success, 0 = underflow
if(rc) {
    // use val
    ...
}

FLAGSEFLAGS寄存器是否被视为条件控制的一部分,以便将正确的信息传递给编译器?上面应该写成:

__asm__ volatile(
    "rdrand %0 ; setc %1"
    : "=r" (val), "=qm" (rc)
    :
    : "cc"
);

还是使用“cc”是虚假的?

我知道如果不需要的话使用它是无害的。从扩展ASM:

如果你的汇编指令可以改变条件码寄存器,将“cc”添加到被破坏的寄存器列表中。某些机器上的GCC将条件码表示为特定的硬件寄存器;“cc”用来命名这个寄存器。在其他机器上,条件代码的处理方式不同,指定“cc”没有任何作用。但是不管什么机器都有效。

如果它是虚假的,它适用于哪些架构?(我假设ARM和CPSR注册,但我可能搞错了)。


共有1个答案

常哲彦
2023-03-14
匿名用户

根据手册,是的- cc被撞毁。< code>RDRAND还包括SF、ZF、AF和PF套件

在实践中,gcc 假设__asm__块总是阻塞 [E|R]标志条件代码寄存器 x86.我没有参考文献,但是你可以在各种GNU软件包中使用的longlong.h文件这样的地方看到这个假设。

正如你所说,如果不使用,它是无害的。出于这个原因,您还可以包括它,因为它仍然提供语义意图,或者最坏的情况下提供注释。还要考虑到Clang和ICC实现了GCC asm语法,如果他们遵守“cc”clobber,而不是假定它,他们将符合文档,即使这不太可能。

 类似资料:
  • 使用时,它设置(或取消设置)进位标志(): 和寄存器是否被视为条件控制的一部分,以便将适当的信息传递给编译器?如果将上述内容写成: 还是的使用是虚假的? 如果它是假的,它适用于什么架构?(我推测ARM和寄存器,但我可能弄错了)。

  • 控制台-部门-列表 接口URL {youke-url}/console/Index.php?c=department&a=list&timestamp=1607677497&access_key=abc&sign=c7da8103312da8793af4f526a42cb6ebaa06cfd4 请求方式 POST Content-Type form-data 请求Query参数 参数 示例值 是否

  • 用法 列表控制分为如下四种: 状态 主操作(包括文本字符串) 次要操作 次要信息 列表标题的元素要容易分辨,首先要注意阅读顺序,所以,状态和主操作放在标题列表的左边。在这里,列表里面的文本内容也被认为是主操作的操作目标的一部分。 不要把两个展示图标和操作图标放在一起,比如复选框和头像 如果列表的主操作是做导航作用的,那么就不要使用icon。列表它本身以及它的上下文就已经可以让用户明白这个列表的用处

  • 标签: Shell 条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expression 和方括号([ ])之间必须有空格,否则会有语法错误。 if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。Shell 有三种 if … else 语句:

  • 控制台-部门-子部门列表 接口URL {youke-url}/console/Index.php?c=department&a=subInfo&timestamp=1607677497&access_key=abc&sign=327dcb64d8d1ba76b11297241199107014261e0a 请求方式 POST Content-Type form-data 请求Query参数 参数

  • 输入是按分数排序的,如下所示: 现在我需要在以下限制下从数组中选择10个得分最高的元素: 它们应该具有不同的 它们应该有不同的 同一。并且来自同一的任何子序列的长度不应大于2。 如果已经有一个选定的元素具有此,那么新元素将被丢弃。 如果已经有一个选定的元素具有这个,那么新元素将被丢弃。 如果已经有三个选定元素具有此,那么新元素将被丢弃。 如果在选定的尾部已经有两个元素具有此,那么新元素将被丢弃。