问题标签 [armv8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
165 浏览

gcc - 适合初学者的 ARMv8 汇编编译器错误

我一直在尝试编译这个简单的 ARMv8 汇编代码。我已经按照讲师的示例进行了我的课程,但我仍然无法编译它。

我有讲师代码的副本,根据讲座幻灯片,我需要在控制台中输入的只是“gcc demo1.s -g -o demo1”

但是,当我在终端中键入此命令时,会出现两个我无法解决的错误代码。

主要的:

demo1.s:5:错误:“mov”的内存引用过多

demo1.s:6:错误:“添加”的内存引用过多

0 投票
1 回答
132 浏览

c++ - 未定义的参考在 arm chromebook 上编译 taskwarrior

我尝试在 termux 会话中的 armv81 chromebook 上构建 task-2.5.1。由于构建依赖关系,它不起作用,所以我安装了它们,然后解压缩并在一个新的目录中开始。当我跑步时,make VERBOSE=1我得到了一个undefined reference to __atomic_fetch_add_4链接...

我发现了关于 arm 构建中未定义引用的讨论。我尝试将 -latomic 添加到 CMakeFiles/task_executable.dir/link.txt 但它没有改变输出。

任何想法如何解决这一问题?

0 投票
1 回答
80 浏览

assembly - 套准印刷中的值作为不同的数字

所以今年春天我在大学学习计算机机械课程,我们在作业方面没有得到任何体面的帮助。

我有一个程序,它使用 add-shift 方法将两个二进制值相乘,该方法适用于任何符号的少量数字,但我需要它与分配的 B 部分的 2 个特定数字一起工作。

在调试时,我发现代码在寄存器中存储了正确的产品,但打印后显示的数字与寄存器中的数字不同。

抱歉,如果我发布了太多代码或没有发布足够的信息,请告诉我是否应该更改帖子的任何内容。

代码都是通过腻子连接到在Linux上运行的学校服务器完成的。

这是调试器显示寄存器 x3(存储 printf 格式的产品参数)在 print 语句之前立即保存正确数字的地方

这是在打印错误数字的打印语句之后

这是程序

没有错误信息

我试图计算的表达式是:

522133279 * 200 = 104 426 655 800

打印的值是 1 347 440 696,但该值来自在打印语句之前存储了正确值的寄存器

0 投票
0 回答
1123 浏览

linux - 在 arm-v8 程序集的插入排序代码中找不到分段错误

我生成了一个介于 0 到 256 之间的随机整数数组,我尝试使用插入排序对它们进行排序,但是在沿线的某个时刻我搞砸了,并得到一个错误“分段错误(核心转储)

我不知道我为什么会得到这个,但我相信这个问题与代表循环计数器的宏 j 有关。我已经为此工作了几个小时,并且已经坚持了一段时间。

编辑:使用调试器后,我将问题隔离为:

bl printf

就在它尝试打印第二个排序值的最后。

我尝试分配更多内存,最多 416 字节,我尝试移动 top2 循环标签(这是使用 j 作为计数器的循环),我得到的最远的是让程序打印第一个元素排序数组,然后给出错误

...

数组应该以它初始化的随机顺序打印,然后它应该打印数组顶部的值,然后它意味着以升序打印排序的数组。

我得到的确切错误信息是:

分段错误(核心转储)

这出现在它打印排序数组的第一个值之后

0 投票
1 回答
113 浏览

assembly - 如何声明数据向量

我在 ArmV8 中做一个汇编程序,它使用多个常量(浮点数),因此乘以某个值(也是浮点数)。为此,我想开发一个循环,它只处理一个包含常量的向量,每次递增地址以访问下一个常量,将其相乘等等,而不是一次又一次地重复相同的操作。虽然,我不确定如何在汇编程序中直接声明这个向量。

在 ArmV7 中,我做了这样的事情来达到这个目的:

但这仅适用于 ArmV7 中的单词,而我在 ArmV8 中使用双打。

0 投票
5 回答
1718 浏览

arm - AOSP 构建 TARGET_PRODUCT 失败

我正在尝试使用 AOSP 构建一个外部工具。我的操作系统是 Linux,发行版 ArchLinux (i3wm),但要编译 AOSP,我在 Docker 中使用 Ubuntu ( https://android.googlesource.com/platform/build/+/master/tools/docker )

第一步:

第二步:选择工具并构建

输出:

另一个工具

输出:

任何 aosp 通用目标都会发生这种情况:

我想在所有arch中编译一些二进制工具:arm、arm64、x86和x86_64。

为什么 aosp_arm-eng 不起作用?或者如何从非通用 aosp 目标更改 CPU 架构?

使用tapas不起作用。

0 投票
1 回答
439 浏览

arm - Armv8a NEON 内联汇编代码:如何将 16x8 位向量转换为四个 4x32 位(整数)向量?

我需要加载 8 位数组,然后使用 armv8a neon 内联 asm 代码将每个元素转换为 32 位整数。我已经用 armv7 做到了,但不知道如何在 v8a 中做到这一点......

我在 v7 中使用的代码是

如何使用 armv8a 霓虹灯代码完成此操作?或者如何将上面的代码转换为 armv8a?PS:就我而言,我只需要内联 asm 而不是内在函数......

谢谢您的帮助。

0 投票
1 回答
1853 浏览

macos - 在 mac os 上组装 armv8

我想在我的 mac 上组装 Aarch64 armv8 程序集,并最终使用 qemu 运行它,也许稍后在像 raspberry pi 2 或 4 这样的真实设备上运行它。我不知道如何组装我要编写的代码,gcc、llvm-gcc 和 clang 似乎不支持 -arch=armv8 标志或类似的东西。所以我不能为目标架构构建,我怎么能做到这一点?

我正在运行 mac os 10.14.5。我也不介意找到适用于最近的 ubuntu 版本的解决方案,因为我有一个用于 linux 开发的 VM。

0 投票
1 回答
762 浏览

assembly - 如何在 QEMU 中启用 MMU(虚拟机 a57 cpu)

我正在 QEMU 上编写一个裸机 ARMv8 程序,但是当我启用 MMU 时,它无法继续执行任何指令。

QEMU 选项是“-machine virt -cpu cortex-a57 -smp 1 -m 1G -nographic -serial mon:stdio -kernel a.bin”

这是我的代码https://github.com/zhulangpi/NBOS/blob/mmu/arch/start.S

我尝试将 0x4000 0000~0x7fbf ffff(DRAM) 映射到 0xffff 0000 0000 0000~0xffff 0000 3fbf ffff(总 1020MB)。

我使用 GDB 通过连接 QEMU 来调试二进制映像,当我启用 MMU 时,如果我执行下一条指令,它会显示:

0x400800c8 是 PA,对应的 VA(链接描述文件中的地址)是 0xffff 0000 0008 00c8。

我可以通过 GDB 中的虚拟地址正确访问内存,如下所示,

我如下配置MMU,

我希望正确访问内存和设备。或者有人可以向我展示如何在 qemu virt 机器中启用 mmu 的代码。

0 投票
1 回答
374 浏览

arm - ARM 汇编语言指令中的排列说明符(.16b,.8b) 是什么?

我想知道手臂组装说明中的排列说明符到底是什么。

我已经通过了 ARM TRM,我想如果它是用于计算的 Neon 寄存器的大小

例如 TBL Vd.Ta, {Vn.16B,Vn+1.16B }, Vm.Ta

这取自http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/TBL_advsimd_vector.html 他们提到 Ta 是值 16B 或 8B 的排列说明符

我想知道这意味着什么。(霓虹灯寄存器的大小..任何东西..)取自上面的链接