- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我只注意到 Clang 编译了这个语句(当然没有任何优化):
--x; /* int x; */
进入:
addl $4294967295, %ecx ## imm = 0xFFFFFFFF
为什么?使用 addl
而不是“明显的” subl
有什么好处吗?或者它只是一个实现事实?
让我着迷的是这个:
x -= 1;
变成:
subl $1, %eax
clang 信息:
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)Target: x86_64-apple-darwin11.2.0Thread model: posix
最佳答案
此行为与 clang 处理预递减的方式有关,而不是像 sub-and-assign 这样的二元运算符。请注意,我将尝试在 clang 级别解释为什么您会看到此行为。我不知道为什么选择以这种方式实现它,但我想这只是为了便于实现。
我在这里引用的所有函数都可以在 lib/CodeGen/CGExprScalar.cpp
中的类 ScalarExprEmitter
中找到。
前/后递减/递增都由函数 EmitScalarPrePostIncDec
以相同的方式处理:LLVM add
指令使用 1
发出或 -1
作为第二个参数,具体取决于表达式分别是增量还是减量。
因此,
--x
在 LLVM IR 中最终会像这样
add i32 %x, -1
这很自然地转化为 x86 类似的东西
add $0xffffffff, %ecx
另一方面,二元运算符的处理方式各不相同。在你的情况下,
x -= 1
将由 EmitCompoundAssign
处理,后者又调用 EmitSub
。将发出类似于以下 LLVM IR 的内容:
sub i32 %x, 1
关于c - x86 addl 与 subl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127036/
每次我将 dev 分支与我的本地分支 merge 时,我都会收到以下错误: subl -n -w: subl: command not found error: There was a problem
嗨,我正在尝试为 sublime text 2( subl )设置终端快捷方式,但它不起作用。我正在按照 https://github.com/mhartl/rails_tutorial_sublim
我已经下载并安装了 Sublime text 2。我按照这里的说明进行操作:但我被困在这部分: 第一个任务是创建一个到 subl 的符号链接(symbolic link)。假设您已将 Sublime
设置和使用Sublime Text 2作为git编辑器在tmux session 中无法正确等待。 $ tmux $ export EDITOR="subl -w" $ git rebase HEAD
在终端中使用“subl”命令时遇到问题。它曾经工作正常,但最近当我运行它时,它确实打开了我想要的文件,但我无法编辑它们,而且 Sublime Text 并没有出现在我的 Mac 的顶部栏中,就好像它根
我在进行此设置时遇到困难。我修复了 .bash_profile,并使用 Sublime 网站上的以下命令创建了符号链接(symbolic link): ln -s "/Applications/Sub
我是 Mac 新手(Mountain Lion),尝试为终端设置“subl”命令,如下所述: The first task is to make a symlink to subl. Assuming
我经常使用 subl . 命令从终端打开 Sublime Text 中的文件夹(我通常使用 Terminator for Ubuntu)。但它有一些令人讨厌的地方。该过程必须继续运行,绑定(bind)
最近我在 Ubuntu 14.04 上安装了 Sublime Text 3。它工作正常,但是当我通过 启动它时须藤命令,sublime 以 windows 中的菜单而不是全局菜单开始,而它以常规模式以
我正在尝试从终端使用 Sublime Text,例如通过输入 subl。 我正在按照 Sublime Text 网站上的步骤进行操作: Setup The first task is to make
C 代码是: int rSum(int *Start, int Count) { if (Count <= 0) return 0; return *S
我只注意到 Clang 编译了这个语句(当然没有任何优化): --x; /* int x; */ 进入: addl $4294967295, %ecx ## imm = 0xFFFF
我使用 Windows 作为我的操作系统。 我的驱动器(f:) 文件夹如下所示: f:/ ----> myproject/ --------> db.sqlite3 --------> manage.
%edx 的值为 0x3,%eax 的值为 0x100。然后我们有指令:subl %edx, %eax%eax 的结果值是多少? 最佳答案 你有 movl $3, %edx movl $0x100,
我想提前道歉,这是一个新手问题!我花了过去 2 个小时试图找到解决方案。 我有两个问题(我确定相关)。 背景: 这是我的 $PATH 的样子: /Users/Sponsi/.rvm/gems/ruby
当我运行 subl 命令时,它只是暂停了一会儿,没有给我任何关于发生了什么的反馈,也没有打开。我目前在 Windows 10 上运行最新的 sublime text 3 版本。我已经将我的 subl.
我在 Mac 上安装了 Sublime Text 2,并在命令行上做了一个链接 as described in the docs . 从终端打开文件时,如下所示: $ subl foo.txt 一个
最近我们开始在我们的 OS X 构建中收到此警告。 ld: warning: could not create compact unwind for __Z10createMenuv: stack s
我是一名优秀的程序员,十分优秀!