ARM Neon 汇编器 + C 如何传递和使用指针数组

Posted

技术标签:

【中文标题】ARM Neon 汇编器 + C 如何传递和使用指针数组【英文标题】:ARM Neon assembler + C how can I pass and use array of pointers 【发布时间】:2013-09-18 09:36:00 【问题描述】:

我有一个 C 函数,我想从传递给汇编程序部分的指针数组中加载数据。如何做到这一点?

float *pointerToBuffer

asm volatile (
   "vld1.32 q0,[%[buf]] \n\t" 
   : [buf]"+r"(ponterToBuffer)
);

如果变量是pointerToPointerToBuffer怎么办

【问题讨论】:

你想做什么? meta.stackexchange.com/a/66378/195751 this post help? asm("vld1.32 q0, %0" : : "m"(pointerToBuffer) : "memory"); 会。如果要传递地址/内存位置,请使用"m"(...) 约束,并保留一层括号。 【参考方案1】:

如果语法允许,我建议多使用一对括号:

asm volatile (
   "vld1.32 q0,[[%[buf]]] \n\t" 
   : [buf]"+r"(ponterToBuffer)
);

如果没有:

asm volatile (
   "ldr r1,[%[pointerToBuffer]] \n\t"
   "vld1.32 q0,[r1] \n\t"
);

【讨论】:

以上是关于ARM Neon 汇编器 + C 如何传递和使用指针数组的主要内容,如果未能解决你的问题,请参考以下文章

带有 NEON 的 ARM 汇编中的高级数学函数

如何使用 Neon Extension 有效地反转汇编语言 ARM 中的数组?

ARM NEON 汇编和浮点舍入

在 ARM Neon 程序集中使用 C 变量

使用 NEON 在 ARM 汇编中对四字向量中的所有元素求和

在 ARM Cortex A8 上的汇编中 XOR NEON 向量/寄存器的所有元素/通道(成对?)