我试图使用NEON向量指令集来优化iOS上的图像格式转换。 我认为这将很好地映射,因为它处理了一堆类似的数据。 然而,我的尝试并没有那么好,只是实现了一个边缘的加速比天真的C实现: for(int i = 0; i < pixelCount; ++i, ++inPixel32) { const unsigned int r = ((*inPixel32 >> 0 ) & 0xFF); const unsigned int g = ((*inPixel32 >> 8 ) & 0xFF); const unsigned int b = ((*inPixel32 >> 16) & 0xFF); *outPixel16++ = ((r >> 3) << 11) | ((g >> […]
我试图把相当于asm{int 3} (或类似)到我的iPhone程序。 我的目标是让Xcode完全停留在违规行中,而不必调用调用堆栈(所以_Debugger听起来不像这样做,不是我可以find它是哪个框架…),并离开我能够恢复执行(这就是为什么我不喜欢assert )。 (我已经习惯了在其他系统上的这些行为,我想在iOS上重现它们。) 迄今为止我的最佳尝试是这样的: asm volatile("bkpt 1"); 这停止了有问题的线上的Xcode,但是当我尝试继续使用Cmd + Alt + P时,Xcode似乎再次运行BKPT 。 如果我使用Shift + Cmd + O,我只是得到这个: Watchdog has expired. Remote device was disconnected? Debugging session terminated. (不用说,远程设备仍然连接。) 我在iOS,Mac,ARM,gdb或gcc的asm方面没有太多的经验。 所以我已经被困住了 有什么办法让iOS和Xcode做我想做的事吗? (我不知道它是否有所作为,但根据指令大小来判断我的程序是ARM代码。) [这个问题最初出现在另一个标题下。 我编辑了它,希望能使事情更清楚。]
我通过使用CMake作为我的构build工具编译了一个C ++静态库,我想将它链接到我的iOS应用程序。 我在Xcode中创build了一个简单的'Empty'应用程序,并将名为libengine.a的库链接到它。 我试图编译我的iOS项目,链接器给了我这个警告: ignoring file /Users/…/build/engine/libengine.a, file was built for archive which is not the architecture being linked (i386): /Users/…/build/engine/libengine.a 据我了解,我需要编译我的库ARM处理器。 问题是我不知道如何。 我认为CMake真的缺乏好的教程。 无论如何,我的CMake脚本附在下面。 任何帮助将不胜感激。 谢谢,Tal。 这是我的主要CMake脚本: cmake_minimum_required(VERSION 2.8) project(movie-night) if (DEFINED PLATFORM) include(toolchains/ios.cmake) endif() add_definitions(-Wall) set(DEBUG) if (DEFINED DEBUG) add_definitions(-g) endif() if (DEFINED RELEASE) add_definitions(-O3) endif() add_subdirectory(engine) add_subdirectory(ui) add_subdirectory(test) 这是我的工具链/ ios.cmake文件: set(CMAKE_SYSTEM_NAME Darwin) […]
默认情况下,当我们启动iPhone模拟器,它只有几个应用程序安装。 是否可以在我的模拟器上安装其他系统应用程序(如电话,文本,地图等)或其他本地应用程序(如Facebook等)?
我正在尝试在汇编代码中混合使用ARM和THUMB指令。 例如,在下面的代码中我尝试使用这两种模式: .thumb @ .code 16 .section __TEXT,__text .globl mySymbol1 mySymbol1: …. .arm @ .code 32 .section __TEXT,__text .globl mySymbol2 mySymbol2: … 现在,根据我的理解,当我将这个代码编译成一个库并运行nm时, mysymbol1应该显示为arm和mysymbol2应该显示为拇指, 0000xxxx (__TEXT,__text) external mySymbol1 0000yyyy (__TEXT,__text) external [Thumb] mySymbol2 但是两者都显示为胳膊。 我在这里错过了什么? 我的汇编程序命令是: as -arch armv7 -o ao as
在iOS上默认是char签名还是未签名? (我以为这会是一个很好回答的问题,但奇怪的是谷歌没有任何用处!
在从Linux x86移植到iOS ARM(iPhone 4)的应用程序时,我发现浮点算术和小值的行为有所不同。 64位浮点数(double)小于[+/-] 2.2250738585072014E-308在IEEE 754-1985 / IEEE 754-2008标准中被称为非正规/非正规化/次正常数。 在iPhone 4上,这样的小数字被视为零(0),而在x86上,可以使用次正数来进行计算。 我无法find任何有关苹果Mac OS X手册页上的IEEE-754标准符合性的解释(3) 。 但是,由于堆栈溢出( 在浮点algorithm中的清零行为, iPhone上的Double vs float )的一些答案,我find了一些线索。 根据一些search,似乎沿着ARM内核使用的VFP (或NEON )math协处理器使用了Flush-To-Zero(FTZ)模式(例如,在输出端将低于正常值的值转换为0)和Denormals-Are-Zero DAZ)模式(例如,当用作input参数时,将低于正常值的值转换为0)来提供快速处理IEEE 754计算的硬件。 完整的IEEE754符合ARM支持代码 符合IEEE754标准的运行快速模式(仅限硬件) 关于FTZ和DAZ的一个很好的解释可以在IA-32的x87和SSE浮点协助中find:同花顺零(FTZ)和非正规零(DAZ) : FTZ和DAZ模式既处理发生无效浮点数据的情况,也处理下溢或非正常情况。 […]。 由保税区和DAZ处理的数量之间的差异非常微妙。 FTZ处理下溢情况,而DAZ处理非正常情况。 计算结果为非正常时,会发生下溢情况。 在这种情况下,FTZ模式将输出设置为零。 DAZ修正了非规范化被用作input的情况,既可以是常量,也可以是将无效内存读入寄存器。 DAZ模式在计算之前将计算的input设置为零。 然后可以说FTZ处理[输出],而DAZ处理[input]。 苹果开发者网站上关于FTZ的唯一的东西似乎在iOS ABI函数调用指南 : VFP状态寄存器| FPSCR | 特殊| 条件码位(28-31)和饱和位(0-4)不被函数调用保存。 exception控制(8-12),舍入模式(22-23)和清零(24)位只能由影响应用程序状态(包括框架API函数)的特定例程修改。 在函数入口和出口处,短向量长度(16-18)和步长(20-21)位必须为零。 所有其他位不能被修改。 根据ARM1176JZF-S技术参考手册,18.5操作模式 (第一个iPhone处理器),VFP可以被configuration为完全支持IEEE 754(亚正常算术),但在这种情况下,需要一些软件支持(陷入内核以软件计算)。 注意:我也读过Debian的ARM […]
如果有许多浮点操作正在进行,Applebuild议编译为ARM而不是拇指。 我的整个应用程序几乎是一个大的浮点操作。 以下是他们在“iOS应用程序开发stream程指南”中所说的内容: iOS设备支持两个指令集,ARM和Thumb。 Xcode默认使用Thumb指令,因为使用Thumb通常相对于ARM将代码大小减less约35%。 具有大量浮点代码的应用程序如果使用ARM指令而不是Thumb,则性能可能会更好。 您可以closures您的应用程序的Thumb,以便它编译为ARM,通过将编译为Thumb构build设置设置为否。 但是,我的编译设置中找不到任何“编译为Thumb”设置。 他们重新命名了吗? 或者现在Xcode 4无法使用?