Ich mache ein kleines Projekt mit dem Android NDK, und ich muss einige Asm-Code für ARM-Architektur einfügen.Verwenden von Inline-ARM-Asm in Android NDK-Projekt
Alles außer der asm funktioniert gut, aber der Code asm sagt mir, dass
Operand 1 sollte eine ganze Zahl
wenn conpiling einfachen Code wie
asm("mov r0, r0");
Also, Was ist das Problem? Versucht mein Computer, für x86_64 anstelle von ARM zu kompilieren? Wenn ja, wie sollte ich das ändern?
Auch ich habe versucht, die x86_64 gleichwertig arm("mov rax, rax");
aber der Fehler ist der gleiche.
Für welche ABIs bauen Sie? – Michael
Versuchen Sie 'mov x0, x0'. Wenn es keinen Fehler gibt, ist das Problem, dass Sie 32-Bit-ARM-Assemblersprache mit der 64-Bit-ARM-Toolchain verwenden. Sie müssen entweder zu 32-Bit-Tools oder einer 64-Bit-Assemblersprache wechseln. Übrigens sollten Sie untersuchen, ob Sie wirklich Inline-Assembly verwenden müssen. Es ist schwer, richtig zu werden. Sehen Sie, wenn Sie nicht intrinsics verwenden können, um zu tun, was Sie stattdessen wünschen. –
Bei der Ausrichtung auf x86 ist die Standard-ASM-Syntax AT & T-Stil, also sollte 'asm (" mov% rax,% rax ");' als No-Op funktionieren. Verwenden Sie 'gcc -S', um eine asm-Ausgabedatei zu erzeugen. Suchen Sie nach '# APP' /' # NO_APP' um Ihren Code und sehen Sie, ob er wie der umgebende, vom Compiler generierte ASM aussieht. z.B. https://godbolt.org/g/h8JIEy –