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

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

高玮
2023-03-14

使用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”的使用是虚假的?

如果它是假的,它适用于什么架构?(我推测ARM和cpsr寄存器,但我可能弄错了)。

共有1个答案

东方震博
2023-03-14

根据手册,是-cc被重击。rdrand也是SF、ZF、AF、PF<-0的集合。

在实践中,gcc假设__asm__块总是会破坏x86的[ER]flags条件代码寄存器。我没有引用,但您可以在各种GNU包中使用的longlong.h头等地方看到这个假设。

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

 类似资料:
  • 这是扩展汇编程序中What is"=qm"的后续。 当使用时,它设置(或取消设置)进位标志(

  • 控制台-部门-列表 接口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。 如果已经有一个选定的元素具有此,那么新元素将被丢弃。 如果已经有一个选定的元素具有这个,那么新元素将被丢弃。 如果已经有三个选定元素具有此,那么新元素将被丢弃。 如果在选定的尾部已经有两个元素具有此,那么新元素将被丢弃。