我发现很难找到在 Apple Silicon 上运行的良好、完整的汇编示例,特别是对于 SIMD 类型的操作,而不是不完整的、过于通用的片段。
出于我自己的好奇心,我想在 M2 机器上写一个例子......
- 采用一系列数字(首先内置于汇编文件中)
- 将它们累积为一个结果(使用 SIMD 指令)
- 将结果输出到 stdout
我有以下源代码,在一个名为test.s
...的文件中。
.global _start
.align 2
_start:
;;; Load numbers into x0
ldr x0, numbers
;;; Load elements from array in x0 into dedicated Neon register
ld1 { v0. 4s }, [x0]
;;; Accumulate elements in vector using dedicated Neon instruction
addv s0, v0.4s
;;; Prepare formatted string
adrp x0, format@page
add x0, x0, format@pageoff
;;; Add result to the stack for printing
str s0, [sp, #-16]!
;;; Print string
bl _printf
mov x16, #1
svc 0
numbers: .word 1, 2, 3, 4
format: .asciz "Answer: %u.\n"
...,使用以下命令进行组装和链接...
as -g -arch arm64 -o test.o test.s
ld -o test test.o -lSystem -syslibroot `xcrun -sdk macosx --show-sdk-path` -e _start -arch arm64
10
我本来期望在运行程序时得到答案,但我得到的却不是这个。
我做错了什么?