标签: cortex-a8

无法写入ARM寄存器R4:功能还是bug?

我最近在使用Assembly编程时遇到了ARM Cortex-A8的奇怪行为.每当我MOV进入R4,我的程序崩溃(下面的堆栈转储)

10-14 09:48:43.117: INFO/DEBUG(3048): Build fingerprint: 'google/soju/crespo:2.3.6/GRK39F/189904:user/release-keys'
10-14 09:48:43.121: INFO/DEBUG(3048): pid: 7082, tid: 7082  >>> neontests <<<
10-14 09:48:43.121: INFO/DEBUG(3048): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000001
10-14 09:48:43.125: INFO/DEBUG(3048):  r0 00000001  r1 afa025b6  r2 00000000  r3 bec77051
10-14 09:48:43.128: INFO/DEBUG(3048):  r4 00000001  r5 bec7704c  r6 00000001  r7 00000004
10-14 09:48:43.128: INFO/DEBUG(3048):  r8 00000005  r9 00000000  10 4214cca4  fp 800a5368
10-14 09:48:43.128: INFO/DEBUG(3048):  ip afa03110  sp bec77010  lr afa0133b  pc afd37b42  cpsr 60000030
10-14 09:48:43.132: …
Run Code Online (Sandbox Code Playgroud)

assembly android arm android-ndk cortex-a8

5
推荐指数
2
解决办法
917
查看次数

使用ARM NEON内在函数添加alpha和permute

我正在开发一个需要从RGB转换图像的iOS应用程序 - > BGRA相当快.如果可能的话,我想使用NEON内在函数.有没有比简单分配组件更快的方法?

void neonPermuteRGBtoBGRA(unsigned char* src, unsigned char* dst, int numPix)
{
    numPix /= 8; //process 8 pixels at a time

    uint8x8_t alpha = vdup_n_u8 (0xff);

    for (int i=0; i<numPix; i++)
    {
        uint8x8x3_t rgb  = vld3_u8 (src);
        uint8x8x4_t bgra;

        bgra.val[0] = rgb.val[2]; //these lines are slow
        bgra.val[1] = rgb.val[1]; //these lines are slow 
        bgra.val[2] = rgb.val[0]; //these lines are slow

        bgra.val[3] = alpha;

        vst4_u8(dst, bgra);

        src += 8*3;
        dst += 8*4;
    }


}
Run Code Online (Sandbox Code Playgroud)

arm intrinsics neon cortex-a8

5
推荐指数
2
解决办法
2299
查看次数

ARM和NEON可以并行工作吗?

这是参考问题: Intrinsics中Neon的校验和代码实现

打开链接中列出的子问题作为单独的个别问题.因为多个问题不被要求作为单个线程的一部分.

无论如何回答这个问题:

可以ARMNEON(中的ARM Cortex-A8架构来说的),实际上是在并行工作?我怎样才能做到这一点?

有人可以指向我或分享一些使用ARM-NEON的互操作的示例实现(伪代码/算法/代码,而不是理论实现论文或会谈)吗?(使用intrinsics或inline-asm的实现都可以.)

arm simd inline-assembly neon cortex-a8

5
推荐指数
1
解决办法
2418
查看次数

为什么arm-linux-gcc在进入IRQ模式时只保留r0-r4

我正在使用基于ARM cortex-A8的S5PV210

当我声明这样的中断例程时:

void isr_routine(void)  __attribute__ ((interrupt ("IRQ")));
Run Code Online (Sandbox Code Playgroud)

并像这样编译

arm-linux-gcc -c -march=armv7-a -fpie -fno-builtin $< -o $@
Run Code Online (Sandbox Code Playgroud)

我知道gcc会通过推送一些寄存器为我切换上下文.在我知道这一点之前,我手动完成了.所以我很好奇gcc是如何做到的.拆解后,我找到了如下代码

PUSH     {r0-r4,r11,r12,lr}
Run Code Online (Sandbox Code Playgroud)

这与我关于如何切换上下文的概念背道而驰.在Arm cortex-A8官方文档中,明确表示r0-r12由用户模式和IRQ模式共享.但是用户模式中的lr独立于IRQ模式.所以,我曾经像这样切换上下文

PUSH     {r0-r12}
Run Code Online (Sandbox Code Playgroud)

可以吗?为什么gcc推送lr注册,为什么gcc不推r5-r10 rigsters?

c assembly gcc arm cortex-a8

5
推荐指数
1
解决办法
407
查看次数

ARM-NEON如何同步?

就ARM Cortex-A8而言,当NEON执行其指令时,ARM模块是等待还是继续运行?这种同步是如何实现的?如果ARM和NEON正在处理相同的数据/代码段,ARM和NEON内核如何同步?

embedded arm simd neon cortex-a8

4
推荐指数
1
解决办法
516
查看次数

(ARM ASSEMBLY)MSR CPSR_C,#0x13不起作用

我正在为ARM Cortex A9处理器编写裸机代码(无操作系统).

我需要读取一个只能在管理员模式下访问的寄存器(多处理器关联寄存器,MPIDR).

当我处于用户模式并尝试执行以下指令(进入管理程序模式)时,调试器没有任何反应.

MSR CPSR_C, #0x13
Run Code Online (Sandbox Code Playgroud)

如果我尝试读取MPIDR寄存器,我的程序将进入未定义模式

请你知道我错过了什么吗?

当我使用调试器窗口,并强制CPSR寄存器的五个第一位到b10011,它工作,我去主管.

assembly arm cortex-a8

4
推荐指数
1
解决办法
2636
查看次数

是否可以使用Mali OpenCL SDK在ARM CPU(Cortex-a7)上执行OpenCL代码?

Mali OpenCL SDK允许在Mali GPU上执行opencl代码.
是否可以使用Mali OpenCL SDK在ARM CPU(Cortex-a7)上执行OpenCL代码?

arm opencl cortex-a8 mali

4
推荐指数
1
解决办法
3804
查看次数

如何获取寄存器的地址:ARM Cortex A8?

我想获得ARM Cortex a8的协处理器寄存器的物理地址,比如c9-用户使能寄存器(USEREN).

我怎么才能得到它 ?

谢谢 !!

arm cpu-registers cortex-a8

3
推荐指数
1
解决办法
750
查看次数

Neon:float32x4_t 向量中最多四个浮点值

我想找出一个 32x4 向量中四个值中的最大值。

我有一个类型的向量float32x4_t

float32x4_t maxR = {10.21,10.25,23.5,24.86} //FOR EXAMPLE
Run Code Online (Sandbox Code Playgroud)

我想在这四个中找出最大值(10.21,10.25,23.5,24.86),有没有这样做的说明?

我正在考虑使用vpmax_f32内在函数,但得出的结论是这是错误的,因为返回类型float32x2_t再次是向量类型。那么,谁能告诉我这个操作的方法吗?

arm simd neon cortex-a8

3
推荐指数
1
解决办法
2298
查看次数

Android JNI makefile:在哪里设置CFLAGS?

我很难搞清楚如何告诉Android在我的本机C代码中使用Cortex-A8上的VFP进行浮点运算.我知道我需要设置的编译器标志.问题是我在哪里做?有人可以指导我完成整个过程吗?

我正在使用Eclipse.我使用Cygwin来运行ndk-build.我的程序有效,所以我肯定得到了程序.问题是我告诉Android使用VFP的位置(在哪个文件中)?命令是这样的CFLAGS += -mfpu=vfp.当我将此代码插入Android.mk时,没有任何反应.

android makefile android-ndk cortex-a8

2
推荐指数
1
解决办法
8936
查看次数