如何在GCC中编写.syntax统一UAL ARMv7内联汇编?

2023-12-12

我想编写统一的程序集来摆脱烦人的问题#在我的文字前面,如下所述:ARM 汇编中的立即值是否需要哈希?

这是一个最小的非统一代码#:

#include <assert.h>
#include <inttypes.h>

int main(void) {
    uint32_t io = 0;
    __asm__ (
        "add %0, %0, #1;"
        : "+r" (io)
        :
        :
    );
    assert(io == 1);
}

它可以在 QEMU 下编译并运行良好:

arm-linux-gnueabihf-gcc -c -ggdb3 -march=armv7-a -pedantic -std=c99 -Wall -Wextra \
  -fno-pie -no-pie -marm -o 'tmp.o' 'tmp.c'

如果我尝试删除#,然后代码失败并显示:

/tmp/user/20321/ccoBzpSK.s: Assembler messages:
/tmp/user/20321/ccoBzpSK.s:51: Error: shift expression expected -- `add r3,r3,1'

正如预期的那样,因为非统一似乎是默认的。

如何使其发挥作用?

我找到了一个有前途的选择:

gcc -masm-syntax-unified

但添加它并没有帮助。

如果我改写:

".syntax unified; add %0, %0, #1;"

然后它就起作用了,但我必须为每个__asm__这是不切实际的。

UI还发现,没有-marm,那么它确实使用统一汇编,但它生成拇指代码,这是我不想要的。

也许这个错误是问题的根本原因:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88648

在arm-linux-gnueabi-gcc 5.4.0、Ubuntu 18.04 中测试。


开发人员很快再次回复了该问题:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88648#c3并在以下位置提交了补丁:https://github.com/gcc-mirror/gcc/commit/2fd2b9b8425f9fc4ad98d48a0ca41b921dd75bd9(8.2.0 后)修复-masm-syntax-unified。惊人的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在GCC中编写.syntax统一UAL ARMv7内联汇编? 的相关文章

  • 如何使用 #pragma 在 G++ 中启用优化

    我想在没有命令行参数的情况下启用 g 优化 我知道 GCC 可以通过写来做到这一点 pragma GCC optimize 2 在我的代码中 但它似乎在 G 中不起作用 此页面可能有帮助 http gcc gnu org onlinedoc
  • 列出 C 常量/宏

    有没有办法使GNU C 预处理器 cpp 或其他一些工具 列出给定点上的所有可用宏及其值C file 我正在寻找特定于系统的宏 同时移植一个已经精通 UNIX 的程序并加载一堆稀疏的 UNIX 系统文件 只是想知道是否有比寻找定义更简单的方
  • gcc总是做这种优化吗? (公共子表达式消除)

    作为示例 假设表达式sys gt pot atoms item gt P kind mass在循环内求值 循环只改变item 因此表达式可以简化为atoms item gt P kind mass通过将变量定义为atoms sys gt p
  • Linux 的 gcc __attribute__((selectany)) 替代方案?

    我想知道是否有替代方案 attribute selectany 在Linux中 我想定义这样的东西 char a qwe zxc 并将其包含在许多链接在一起的 c 文件中 因此链接器将看到 a 的多个定义 因此不会链接 我读过这个属性 se
  • 使用 gcc 的中间 GIMPLE 格式

    根据本文 http en wikipedia org wiki Intermediate languagegcc 在生成代码之前使用多种中间格式 我读到 GIMPLE 格式使用三个地址代码 这似乎是最容易使用的中间语言 但我需要更多细节 因
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • 软件预取手动指令合理的场景

    我读过有关 x86 和 x86 64 Intel 的内容gcc提供特殊的预取指令 include
  • Fedora 21 带 clang,不带 gcc

    你能 合理地 让 Fedora 21 变得只有 llvm clang libc libc abi 吗 我发现有些东西暗示不可以 但它们都已经有 3 岁了 从那时起 llvm clang 已经取得了长足的进步 通过全新安装 我尝试了 yum
  • 分析 ELF 部分和符号大小的工具

    我需要一种方法来分析 ARM 的 GCC 编译器的输出文件 我正在为裸机进行编译 并且我非常关心大小 我可以用arm none eabi objdump由交叉编译器提供 但如果存在用于此任务的工具 则解析输出并不是我渴望做的事情 您知道存在
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • 带有适用于 MS-Windows 的工具链的预构建 MIPS 交叉编译器

    我在我的 Linux 机器上使用 MIPS 交叉编译器 效果很好 现在我需要在 Windows 上编译相同的应用程序 我正在网上搜索一些适用于 MS Windows 的预构建 MIPS 交叉编译器 带有工具链 但没有成功 由于我不确定该怎么
  • INT_MIN % -1 是否会产生未定义的行为?

    gcc 生成浮动代码 引发SIGFPE对于以下代码 include
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor

随机推荐

  • 使用 InputBox 将额外的搜索文本添加到 MediaWiki 搜索查询

    我们正在使用InputBox扩大 我们希望有一个使用两个复选框的搜索功能 如下所示 因此 用户可以选择任一 一个或两个引用页面上特定文本的复选框 也就是说 如果用户选择 平台 1 0 则搜索将返回页面上带有 平台 1 0 的页面 实际上 它
  • FtpWebrequest - 文件名包含德语“Umlaute”,例如 ä,ö

    我尝试根据 FtpWebrequest 通过 FTP 获取文件 当文件名包含德语变音符号 如 时 下载失败 Code FtpWebRequest request2 FtpWebRequest WebRequest Create ftp re
  • std::cout 不在 for 循环内工作

    我是 C 的新手 现在我正在从名为 C 的书中学习加速C 我完成了第三章 向量 我来到了这个练习 编写一个程序来计算每个不同单词在其输入中出现的次数 经过一番思考后 我开始着手做这件事 我想测试该程序 但 std cout 不起作用 我放c
  • Array.fill(Array) 通过引用而不是通过值创建副本[重复]

    这个问题在这里已经有答案了 我正在尝试使用创建 6 x 12 矩阵Array fill let m Array 6 fill Array 12 fill 0 虽然这有效 但问题是内部数组实际上都引用相同的Array object let m
  • 频谱图及其是什么

    我很想知道右上角的数字 http en wikipedia org wiki Spectrogram 是生成的 脚本 以及如何分析它 即它传达什么信息 我希望能用最少的数学术语得到简化的答案 谢谢 该图沿水平轴显示时间 沿垂直轴显示频率 用
  • 如何通过代码输入日期类型打开窗口

    span t date span
  • H2DB 的默认 URL 和凭据?

    我在 springBoot 应用程序中添加了 H2DB 以进行单元测试 在 application test properties 中我刚刚添加了 spring datasource name h2db spring h2 console
  • 两列之间的排序差异

    我有两列 购买王子和销售价格 我想计算它们之间的差异 之后我想订购结果 这样我就可以看到所有的利润率 我可以只用一条 SELECT 语句来完成吗 Thanks SELECT sale price buy price AS profit FR
  • 如何在 iOS 中的 UITextView 中添加toggleBoldface 选项?

    我希望将toggleBoldface toggleItalics 和toggleUnderline 添加到UITextView 的编辑选项中 如何才能做到这一点 最好使用 Swift 启用文本视图allowsEditingTextAttri
  • 单击文本时就像“Ctrl+A”一样选择文本吗?

    我想在单击或双击时选择段落中的文本 p 标签 不是高亮 就像用鼠标划出一个选择区域来选择要选择的文字一样 我在页面上有几个段落和 rar 文件链接地址 我想在单击其中之一时选择所有文本 我认为文本框可以这样工作 但我喜欢它位于段落或链接标记
  • 将 2 个 matlab 图合并为 1 - 如何使用 copyobj 使用颜色、线宽等

    我想加载 2 个数字并将它们合并为一个 我知道我可以通过将一个图形复制粘贴到另一个图形来完成此操作 但是通过脚本吗 I saw this 但它产生了 2 个数字 我如何将它们合并为一个 例如使用 Hold on 另外 我可以更改一张图中的轴
  • 将 .txt 文件中的整数读入 numpy 数组

    我正在尝试从简单的 text 数组中读取 4 个整数 如本问题所述genfromtxt 从空格分隔的 txt 文件中读取整数 但我想要它作为 2D numpy 数组 def read data data np genfromtxt Skin
  • 创建 JWT 令牌时出错

    当我正在从使用传统标头身份验证方法到智威汤逊令牌方法 我用了下面的例子发现here 但是 我收到以下错误 Error calling Login errorCode PARTNER AUTHENTICATION FAILED message
  • 如何高效地使用Enum对象作为Map数据结构中的键?

    是否有更高效 更专业的 Map 集合实现 其中 Enum 对象可以用作键 Yes EnumMap正是如此 的有效实施Map接口 其中键类型必须是枚举 来自API documentation Class EnumMap
  • javascript 预加载任何在 Chrome 中不起作用的图像

    我对网页设计相当陌生 我刚刚创建了以下网站http www janewaltonwatercolours co uk 除了一些小故障之外 它适用于所有浏览器 然而 在 Chrome 中 我用于预加载图像的 javascript 函数无法正常
  • 如何“取消设置”事件

    如果我在 Designer cs 页面中设置了组合框单击事件 然后在程序运行期间的某个时刻 基于某些条件 我不再希望设置组合框单击事件 如何 取消设置 它 我尝试过comboboxname Click null 并尝试将其设置为另一个不执行
  • 我如何在 ClearCase 中列出推荐的基线

    我目前正在编写一个脚本 该脚本必须检查集成流的推荐基线 因此我知道的唯一参数是流名称 我想知道是否有办法在 Linux 上使用cleartool 来做到这一点 bash 脚本 这是我的视频 And this is the Stream 您可
  • 使用 #define-d 列表作为 C 预处理器宏的输入

    在一个示例项目中 我定义了宏 define FOO x y x y 这效果非常好 例如 FOO 42 1337 被评估为1379 但是 我现在想使用另一个 define define SAMPLE 42 1337 当我现在打电话时FOO S
  • 没有mac机的Xamarin ios应用程序

    我已经在 Windows 上下载了带有 Visual Studio 2017 的 xamarin 但没有 mac 机器作为 mac 代理 我有 iphone 手机用于测试 有没有办法在 iphone 上构建和测试 Xamarin ios 应
  • 如何在GCC中编写.syntax统一UAL ARMv7内联汇编?

    我想编写统一的程序集来摆脱烦人的问题 在我的文字前面 如下所述 ARM 汇编中的立即值是否需要哈希 这是一个最小的非统一代码 include