这是 GCC 中的错误还是我的代码错误?

2024-04-23

我有这个C代码:

int test(signed char anim_col)
{
    if (anim_col >= 31) {
        return 1;
    } else if (anim_col <= -15) {
        return -2;
    }
    return 0;
}

使用 Android NDK r4b 使用 -Os -mthumb 编译为以下拇指代码:

test:
    mov r3, #1
    cmp r0, #30
    bgt .L3
    mov r3, #0
    add r0, r0, #14
    bge .L3
    mov r3, #2
    neg r3, r3
.L3:
    mov r0, r3
    bx  lr

但随着最新的Android NDK r5 http://developer.android.com/sdk/ndk/index.html它编译成这个损坏的代码:

test:
    mov r3, #1
    cmp r0, #30
    bgt .L3
    lsl r0, r0, #24
    lsr r0, r0, #24
    mov r3, #0
    cmp r0, #127    @@ WTF?! should be <= -15 @@
    bls .L3
    mov r3, #2
    neg r3, r3
.L3:
    mov r0, r3
    bx  lr

这看起来……很奇怪。如果 anim_col 小于 0,它将返回 -2,而不是仅在小于或等于 -15 时返回 -2。重现此问题的完整命令行如下:

android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -c -o test.o -Os test.c --save-temps -mthumb

and

android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc -c -o test.o -Os test.c --save-temps -mthumb

这是一个已知的 GCC 错误吗?我很难相信,这在现实生活中不会发生!我的代码肯定是错误的吗?!


这是海湾合作委员会的错误! http://groups.google.com/group/android-ndk/msg/765e09c25d1e6bf3

As of NDK r5b http://developer.android.com/sdk/ndk/index.html,此错误已修复。

此版本的 NDK 不 包括与之前相比的任何新功能 r5。 r5b 版本解决了 r5 版本中存在以下问题:

  • 修复了一个编译器错误 arm-linux-androideabi-4.4.3 工具链。 之前生成的二进制文件无效 拇指指令序列 处理签名字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是 GCC 中的错误还是我的代码错误? 的相关文章

随机推荐

  • Mongoose 默认值是否应用于现有文档?

    如果我向 Mongoose 架构添加属性并为其指定默认值 现有文档在加载时是否会收到这些默认值 是的 但如果查询是lean 对于返回完整 Mongoose 文档对象的查询 Thing find 每当属性丢失时都会返回默认值 无论架构何时更改
  • 按日期字符串索引时间序列

    给定一个时间序列 s 使用日期时间索引 我希望能够通过日期字符串对时间序列进行索引 我是否误解了这应该如何运作 import pandas as pd url http ichart finance yahoo com table csvs
  • 错误:“us”中的 Dialogflow 服务器收到了对位于“europe-west2-dialogflow.googleapis.com”中的资源的请求。

    我想使用对话流检测意图 但由于某些原因 我的对话流代理所在区域是 europe west2 因此 为了指定位置 我使用 Dialogflow API 的 v2beta1 版本 如文档中所述 但它不起作用 我有以下错误Dialogflow s
  • Scala:研讨会建议

    我被邀请为 PHP 观众举办一个 Scala 研讨会 这些人中的很多人根本没有接触过函数式编程语言 所以我想知道如何以某种方式介绍他们 以便他们充分利用它 我听说很多人很难理解高阶函数等 你有什么经历 我不想用太先进的东西吓跑他们 也不想让
  • 删除 ImageView 会导致某些手机崩溃

    因此 出于某种原因 在我的 Samsung Galaxy S2 Android 版本 4 0 4 上尝试从relativelayout 中删除 ImageView 时 我得到了 NPE 这是运行的代码行 mainView removeVie
  • 多周期持久化、向量化、时间序列python

    我有一个包含每日值的 DataFrame 并且我正在使用各种方法来预测未来两周的值 作为一个基础的 天真的预测 我只想简单地说今天的价值是未来两周的最佳预测 例如 的值01 Jan 2012 is 100 那么我想要预测02 Jan 201
  • 在 RecyclerView android 中拖放期间面临位置值问题

    如何在 RecyclerView 适配器中拖放时获取新的位置值 拖放工作正常 但是当我设置 setOnClickListener 打开我的详细活动时 它给了我旧的位置值 例如 如果我拖动第二个项目 INDEX 1 并放在第一个项目的位置 I
  • 隐藏图中某些图形对象的 MATLAB 图例条目

    MATLAB 图例列出了绘图中的所有内容 包括您在绘图上放置的指南 绕过这个问题的软糖就是要做的 Plot Add legend Add guidelines 然而 MATLAB 将最新的行放在前面 这意味着指南将位于显示的数据之上 丑陋且
  • varchar 变量的字符串比较失败

    我无法理解为什么会得到以下结果 declare myVar1 varchar Friday declare myVar2 varchar 10 Friday select case when myVar1 Friday then yes e
  • UiAutomator getLastTraversedText()

    我试图使用 Android UiAutomator 测试 Android Webview 据我了解文档 http developer android com tools help uiautomator UiDevice html getL
  • Python 中匹配“中文+数字”模式的正则表达式

    在Python 3 3中 我想匹配下面的模式 但它总是失败 摄氏零下253 我使用了下面的正则表达式 x00 x47 x58 x7F 它不是排除除数字之外的所有 ascii 吗 根据您使用的编程语言 您可以使用以下内容 p Han p N
  • 如何在Linux中使用相对路径打开文件?

    我有一个程序 它使用相对路径 例如 打开文件 现在的问题是 当我从另一个目录执行程序时 相对路径不是相对于程序而是相对于工作目录 因此 如果我使用 path to program myprog 启动程序 它将无法找到该文件 有没有办法独立于
  • 你能检测到 UIViewController 何时被解除或弹出吗?

    每当我的视图控制器之一被解除 弹出 卸载时 我都需要在共享资源中执行一些清理 这可能是当用户点击该单个屏幕上的后退按钮时 或者调用 popToRootViewController 时 在这种情况下 理想情况下我能够清除弹出的每个控制器 显而
  • 创建子列表[重复]

    这个问题在这里已经有答案了 与列表扁平化相反 给定一个列表和长度 n 返回长度为 n 的子列表的列表 def sublist lst n sub result for i in lst sub i if len sub n result s
  • 禁用 RVM 还是使用未安装 RVM 的 Ruby?

    对于 Rails 应用程序 我安装了 Ruby 1 8 7 和 Rails 2 3 11 而且运行良好 之后我安装了 RVM 和 REE 因此 在运行 ruby 脚本 服务器时 它使用 REE 但现在我想使用较旧的 Ruby 1 8 7 它
  • 如何在intelliJ IDEA中分离spring上下文

    我在配置 IntelliJ IDEA 来开发 spring 和 Maven 支持的应用程序时遇到问题 应用程序有两个独立的弹簧配置 用于生产和测试目的 在 IDEA 的 Spring Facet props 中 我创建了两个不同的文件集 但
  • REngine 不调用 R Console

    从其中一个站点收集的代码 它不会从 REngine 调用 R Console 创建REngine后就断掉了 没有去try catch 问题 Rengine re new Rengine args true new TextConsole2
  • 助手在 Rails 3(.2) 中使用大量内存

    在将 Rails 2 应用程序迁移到 Rails 3 时 我遇到了内存使用量的巨大增加 经过一番研究 我发现帮助者是问题所在 取消注释视图中的任何助手会加快一切速度 我试图找到真正问题的事情 include all helpers fals
  • CSS:四个 div,第三个必须占据其余空间

    我在互联网上尝试了几种资源 也如此 但我根本无法解决这个问题 网页上只有四个浮动 div div 1 2 和 4 具有固定宽度 div 3 必须占据剩余的宽度 div 2 和 3 之间必须有填充 所有 div 必须具有 padding 0
  • 这是 GCC 中的错误还是我的代码错误?

    我有这个C代码 int test signed char anim col if anim col gt 31 return 1 else if anim col lt 15 return 2 return 0 使用 Android NDK