gpt4 book ai didi

c - 使用条件标志作为 GNU C 内联 asm 输出

转载 作者:太空狗 更新时间:2023-10-29 17:24:15 24 4
gpt4 key购买 nike

我正在编写一些代码,非常希望从内联 asm block 中获取条件标志输出,并将其用作在调用 C 代码中分支的条件。我不想存储标志(那将是无用且低效的;已经有更有效的方法来实现结果)而是直接使用标志。有没有办法用 GNU C 内联汇编约束来实现这一点?我对适用于多指令集架构的方法很感兴趣,目的是将其与架构的 LL/SC 样式原子生成的条件标志一起使用。当然,另一个明显的用例(与我正在做的不同)是允许外部 C 代码根据内联 asm 中操作的进位标志的结果分支。

最佳答案

从 x86 上的 GCC6 开始,您实际上可以使用 "=@ccCOND" 作为输出(其中 COND 是任何有效的 x86 条件代码)。

示例 originally from here , 根据 David 的建议清理:

int variable_test_bit(long n, volatile const unsigned long *addr)
{
int oldbit;
asm volatile("bt %[value],%[bit]"
: "=@ccc" (oldbit)
: [value] "m" (*addr), [bit] "Jr" (n));
return oldbit;
}

在使用它之前,您应该测试是否定义了 __GCC_ASM_FLAG_OUTPUTS__

Documentation at https://gcc.gnu.org .

关于c - 使用条件标志作为 GNU C 内联 asm 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com