我阅读了处理这类问题的不同主题,但我仍然没有答案。 这是我的问题:
在我的标题文件中,我有这个:
int cl, ch, _a = a, _b = b;\
__asm__ ("smull %0, %1, %2, %3\n"
"mov %0, %0, lsr %4\n"
"orr %0, %0, %1, lsl %5\n"
: "=&r" (cl), "=&r" (ch)
: "r" (_a), "r" (_b), "i" (r), "i" (32-(r)));
cl; })
在我的项目设置中,我确认以下这些选项已被确认 link text
但我有一个控制台错误:
{标准输入}:242:所选处理器不支持 - smull r0,r1,r2,r3'
{standard input}:244:unshifted register required --
orr r0,r0,r1,lsl#20'
你能帮帮我吗?
答案 0 :(得分:3)
你在为手臂编译文件吗?默认情况下,iPhone的代码是为拇指编译的(除非您正在进行浮点数学运算,否则通常更可取)。您列出的ASM是手臂。您将需要设置使用该标头编译为arm的任何文件,因为GCC不允许您在单个编译单元内切换后端。您可以通过取消选择“GCC 4.x代码生成”下的“Compile for Thumb”来更改它。
将整个项目编译为arm很可能会对内存使用和代理性能产生重大(负面)影响。通过像标题中的宏包含ASM将会在iPhone上变得非常混乱。一般来说,最好将所有ASM放在一个文件中并将该文件编译为arm,但是对于只有3个指令序列而言,它们可能不值得。