inline-assembly相关内容

可能被覆盖的值的内联汇编约束

我正在调试一些汇编代码,在阅读了一些文档后,我不确定我是否 100% 理解约束.我想知道是否有人可以让我直截了当.如果我有以下代码(arm32): int foo(int in1, int *ptr1) {输入输出1=123;asm 易变的 (" cmp %[in1], #0;"" bne 1b;""dmb;""mov %[out1], #0;""1: strex %[in1], [%[ptr1 ..
发布时间:2021-11-17 22:03:52 其他开发

ARMv8 浮点输出内联汇编

对于两个整数相加,我写: int sum;asm volatile("add %0, x3, x4" : "=r"(sum) : :); 我怎样才能用两个浮点数来做到这一点?我试过了: 浮点数;asm volatile("fadd %0, s3, s4" : "=r"(sum) : :); 但它给了我一个错误: 错误:操作数 1 应该是 SIMD 向量寄存器 -- `fadd x0, ..
发布时间:2021-11-17 22:01:22 其他开发

ARM 系统调用作为 C++ 模板

我需要在我的 newlib 存根中调用一些系统调用,当前的实现使用 C 宏,随着时间的推移,这些宏变得不可读且看起来很糟糕.(而且我讨厌宏...)但是,我使用 C++ 模板的实现仅适用于一个参数: template 内联 RETTYPE 系统调用(PARAM1 p1){寄存器 PARAM1 r0 asm("r0") = p1;asm volatile("svc %[nr]\n":“=r"(r0) ..
发布时间:2021-11-17 22:00:41 C/C++开发

在 GNU 的 C++ 代码中使用 C 头文件.包含内联汇编的错误:'asm' 中的不可能约束

我有一个奇怪的.我正在使用供应商的头文件开发嵌入式系统.我正在使用 GCC 4.6.3 编译文件.我想在我的代码中使用 C++,我有我无法弄清楚的错误.我正在运行一个供应商示例程序,我所做的只是将 main.c 文件的名称更改为 main.cpp.因此,我假设头文件正在由 C++ 编译器解释.其中之一包含以下几行: __attribute__((naked)) 静态 return_type 签名 ..
发布时间:2021-11-17 21:59:25 C/C++开发

ARM 内联汇编:退出系统调用并从内存中读取值

问题 我想在 Linux Android 设备上使用内联汇编在 ARM 中执行退出系统调用,并且我想从内存中的某个位置读取退出值. 示例 不提供这个额外的参数,调用的宏看起来像: #define ASM_EXIT() __asm__("mov %r0, #1\n\t"\“mov %r7, #1\n\t"\“swi #0") 这很好用.为了接受一个论点,我将其调整为: #de ..
发布时间:2021-11-17 21:56:40 服务器开发

以编程方式导致未定义指令异常

我想为我的测试夹具的测试引发 ARM Cortex-M3 未定义指令异常.IAR 编译器支持这样的内联汇编: asm("udf.w #0"); 不幸的是,GNU CC 内联汇编器不知道 NXP LPC177x8x 的这个操作码.它写入诊断信息: ccw3kZ46.s:404: 错误:错误指令 `udf.w #0' 如何创建导致未定义指令异常的函数? 解决方案 以 Masta ..
发布时间:2021-11-17 21:51:53 其他开发

mrc p15 指令在 ARM 内联汇编中有什么作用?

ARM 汇编中的这一行是做什么的? mrc p15, 0, %0, c9, c13, 0"::“r"(柜台) 什么是p15?通常寄存器以 r 为前缀,例如 r15. :: 的符号是什么,作用是什么或c9,c1? 解决方案 虽然 MRC 是通用协处理器互操作指令,cp15 是 控制处理器 - 所有现代 ARM CPU 都有,ARM 已经使用它来扩展片上单元的指令集,例如缓存、MMU ..
发布时间:2021-11-17 21:49:09 其他开发

如何在 arm 内联汇编中访问局部 C 变量?

我想访问内联臂程序集中在 C 中声明的局部变量.我该怎么做? 全局变量可以这样访问, int temp = 0;功能(){__asm(".global temp\n\t""LDR R2,=temp\n\t""LDR R2, [R2, #0]\n\t");} 但是我如何访问局部变量呢?我尝试将局部变量的“.global"更改为“.local",但它产生了错误(对“temp"的未定义引用). ..
发布时间:2021-11-17 21:44:06 其他开发

ARM 和 NEON 可以并行工作吗?

这是参考问题:Neon Intrinsics 的校验和代码实现 将链接中列出的子问题作为单独的单独问题打开.因为不能在单线程中提出多个问题. 无论如何都要回答这个问题: ARM 和 NEON(就 arm cortex-a8 架构而言)真的可以并行工作吗?我怎样才能做到这一点? 有人可以指点我或分享一些使用ARM-NEON互操作的示例实现(伪代码/算法/代码,而不是理论实现论 ..
发布时间:2021-11-17 21:42:45 其他开发

括号中的 g++ 内联汇编不匹配

g++ 向我抱怨以下代码中缺少括号: 1 2 3v v v__asm__ volatile("inb %1, %0" : "=a" (result) : "Nd" (portnumber) );^ ^ ^1 2 3 如您所见,括号是匹配的,并且有三个左括号和三个右括号. 还有更多信息,我正在关注 youtube 教程 解决方案 您在输出之前有一个额外的 :,因此您最终在输出声明 ..
发布时间:2021-09-29 19:37:43 C/C++开发

如何在 x86_64 上准确地对未对齐的访问速度进行基准测试?

在一个答案中,我已经说过未对齐的访问几乎与长时间对齐访问的速度相同(在 x86/x86_64 上).我没有任何数字来支持这个说法,所以我为它创建了一个基准. 您是否发现此基准测试有任何缺陷?你能改进它吗(我的意思是,增加 GB/秒,以便更好地反映事实)? #include #include 模板 __attribute__((noinline))void loop32(con ..
发布时间:2021-09-29 19:29:08 其他开发

是否可以在函数中获取由返回值初始化的变量的内存地址?

我一直在研究 C 中的内联汇编以及调用堆栈的工作原理,但我一直无法弄清楚是否可以检索请求函数返回值的变量的地址,从函数内. int hypothetical_func(){/*..... 一些程序集从调用堆栈中获取“int a"的地址?...*/返回 5;}int main(){int a = hypothetical_func();} 这可能吗? 解决方案 NO.int 在寄存器中返 ..
发布时间:2021-07-09 20:51:16 其他开发

vmovaps'的分段错误

我编写了一个代码,在Xeon Phi intel协处理器上使用具有(512位长向量)的KNC指令添加两个数组.但是,我在内联汇编部分中有细分部分. 这是我的代码: int main(int argc,char * argv []){我const int length = 65536;const int AVXLength =长度/16;float * A =(float *)aligne ..
发布时间:2021-05-29 22:33:57 服务器开发

为什么我的& == r&(var)输出没有选择与& quot; a& quot(var)输入相同的寄存器?

我正在学习如何使用 __ asm__ volatile 在GCC中提出了一个问题.我想实现一个执行原子比较和交换并返回先前存储在目标中的值的函数. 为什么"= a"(预期)输出约束起作用,但是"= r"(预期)约束使得编译器生成的代码不能工作吗? 案例1. #include#include#includeuint6 ..
发布时间:2021-05-16 18:35:22 其他开发