【问题标题】:how to execute qadd command in inline assembly in arm?如何在arm的内联汇编中执行qadd命令?
【发布时间】:2013-01-04 22:42:53
【问题描述】:

当我尝试使用qadd 命令编译内联程序集时出现错误。

错误:不能接受宽度后缀 -- `qadd r7,r7,r1'

我知道ARMv5TE支持qadd

这些 ARM 指令在 ARMv6 及更高版本中可用,而 E ARMv5T 的变种。

C/asm 代码:​​

inline int __qadd(int a, int b) {
    __asm__ (
            "qadd %0, %1, %2" : "=r" (a) : "r" (a), "r" (b));
    return a;
}

我的cpu特点是:

LOGI("__ARM_ARCH__='%d'", __ARM_ARCH__);
LOGI("__ARM_HAVE_5TE='%d'", __ARM_HAVE_5TE);

输出:

__ARM_ARCH__='5'
__ARM_HAVE_5TE='1'

我有下一个编译器标志:

LOCAL_CFLAGS += -std=c99 -ffast-math -march=armv5te

此外,我尝试替换 add 而不是 qadd - 效果很好,但 qadd 代码无法编译。

我做错了什么?谁能提供汇编中 qadd 命令的工作示例?

【问题讨论】:

  • 尝试额外的编译器开关 - -mtune=arm1136jf-s -mfloat-abi=softfp -mfpu=vfp?
  • @t0mm13b 在android.mk EXTRA_CFLAGS += -mtune=arm1136jf-s -mfloat-abi=softfp -mfpu=vfp,但运气不好,仍然出现错误。

标签: android c assembly arm inline-assembly


【解决方案1】:

解决方案在这里No qsort_r for Android (or how to disable force Thumb to use CLZ in Android ARM code)

在您的 Android.mk 文件中,将“.arm”添加到文件名中,它们将得到 编译为 ARM 模式而不是 Thumb 模式(例如 sort.c.arm)。我有过 在 Android 原生库中混合了 Thumb/ARM 代码,并且运行良好。

问题已结束。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多