标签: armv6

ARM NEON汇编程序 - 使用和理解

我是汇编程序和NEON编程的新手.我的任务是使用NEON指令将部分算法从C转换为ARM Assembler.该算法采用int32数组,从该数组加载不同的值,执行一些位移和Xor并将结果写入另一个数组.稍后我将使用64位值的数组,但是现在我只是尝试重写代码.

C Pseudo code:

out_array[index] = shiftSome( in_array[index] ) ^ shiftSome( in_array[index] );
Run Code Online (Sandbox Code Playgroud)

以下是关于NEON指令的问题:

1.)如果我加载这样的寄存器:

vld1.32 d0, [r1]
Run Code Online (Sandbox Code Playgroud)

它会从内存加载32Bit还是2x32Bit来填充64Bit Neon D-Register?

2.)如何访问D-Register的2/4/8(i32,i16,i8)部分?

3.)我试图从数组加载不同的值与偏移量,但它似乎不起作用...我做错了什么...这是我的代码:(它是一个整数数组所以我m试图加载例如3元素,它应该具有64Bit = 8 Byte的偏移量

asm volatile(
"vld1.32 d0, [%0], #8 \n"     
"vst1.32 d0, [%1]" : : "r" (a), "r" (out): "d0", "r5");
Run Code Online (Sandbox Code Playgroud)

其中"a"是数组,"out"是指向整数的指针(用于调试).

4.)从数组加载一个值后,我需要将它移到右边,但它似乎不起作用:

vshr.u32 d0, d0, #24     // C code:   x >> 24;
Run Code Online (Sandbox Code Playgroud)

5.)是否可以只在霓虹灯寄存器中加载1个字节,这样我就不必移动/屏蔽某些东西只能得到我需要的一个字节?

6.)我需要使用内联汇编程序,但我不确定最后一行是什么:

input list : output list : what is this for?
Run Code Online (Sandbox Code Playgroud)

7.)你知道任何有关代码示例的NEON参考资料吗?

该程序应该在三星Galaxy S2,cortex-A9处理器上运行,如果这有任何区别.谢谢您的帮助.

- - - - - - - - …

assembly android arm neon armv6

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

从 Ada 中的地址 0x0 读取

我在裸板运行时上运行,从地址零读取数据是我软件中的一个有效用例。但是,运行时将地址 0x0 视为null,并在使用-O2. 代码在编译时按预期运行-O1

declare
  use System.Storage_Elements;
  type Byte_Array is array (Natural range 0 .. 3) of Interfaces.Unsigned_8;
  bytes : constant Byte_Array with Import, Convention => Ada, Address => To_Address(Integer_Address(16#00000000#));
begin
  -- Copy bytes to some other byte array in memory:
  other_bytes := bytes; -- Throws exception
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?


我的平台详情:

  • Ravenscar 小尺寸运行时移植到 Arm Cortex M1
  • 在 Microsemi RTG4 FPGA 中实例化的软核处理器上运行

失败详情:

之前的代码在我的运行时在memcpys-memcop.adb. 代码复制在下面,并带有一条注释报告失败的行。我不确定抛出的实际异常。我所能看到的就是最后一次使用信息调用处理程序的机会s-memcop.adb:52,下面对此进行了评论。

 40    function memcpy
 41      (Dest …
Run Code Online (Sandbox Code Playgroud)

null arm ada memory-address armv6

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

Xcode构建失败:没有规则来处理架构armv6的文件

在Xcode 4.5中构建我的iOS应用程序会导致每个源文件的依赖性分析警告:

warning: no rule to process file of type sourcecode.c.objc for architecture armv6
Run Code Online (Sandbox Code Playgroud)

这最终导致缺少二进制文件.任何想法在这里有什么问题?

构建设置:armv6 armv7有效体系结构和iOS 4.3部署目标.

xcode armv7 armv6 ios

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

iOS:iPhone 3GS或更年轻的设备是否需要armv7?

我有一个第三方库(ZBar)抱怨我在构建项目时使用armv7 arch(在终端中,使用xcodebuild),我必须在构建设置中将有效架构设置为armv6(仅限).

问题:设置为armv6的应用程序是否会在iPhone 3GS设备上运行?

architecture xcode armv7 armv6 ios

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

ARM体系结构和家族

我已经开始研究不同的基于ARM的目标,但我仍然缺少关于ARM内核,架构,指令集和核心系列的东西.在这里查看维基百科页面:http://en.wikipedia.org/wiki/ARM_architecture#ARM_cores 我看到每个架构都有多个ARM架构和多个系列.例如,对于ARMv6架构,有ARM11和ARM-Cortex-M系列.对于ARMv7和其他人来说也是如此.ARM11和ARM Cortex-M有什么区别,因为架构是相同的?ARM11和ARM Cortex-M是否支持相同的指令集,因为它们实现了相同的架构?

arm armv6

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

armv6,armv7的屏幕坐标系(IPhone开发)

我正在为iPhone/iPodTouch编写游戏(使用Cocos2d),我发现了一些奇怪的东西......

我需要检测播放器触摸的屏幕部分以执行某些操作.

例如:

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [touch locationInView:[touch view]];    
//DEBUG
CCLOG(@"Button pressed: X Location: %f",touchLocation.x);
CCLOG(@"Button pressed: Y Location: %f",touchLocation.y);
Run Code Online (Sandbox Code Playgroud)

...当touchLocation.x和touchLocation.y都在一定范围内时,我会做一些事情.

它在模拟器上工作得很好.当我为我的测试设备编译它时,使用armv7架构(优化)它也有效.但是当我使用armv6编译它时,启用了armv7架构(这是应用商店需要的),我注意到代码不再有效.CCLOG向我展示了我为armv6编译时使用的X,Y坐标系统,armv7与我仅为armv7(优化)编译时所使用的不同.

我怎样才能解决这个问题?是在设备上测试时使用armv6,armv7使用的坐标系的唯一方法......(这在模拟器上不起作用)?我无法上传iPhone的应用程序,只能编译为armv7(优化).:(

iphone xcode cocos2d-iphone armv7 armv6

0
推荐指数
1
解决办法
368
查看次数