Ich google seit einer langen Zeit, aber immer noch keine Lösung finden. Ich hoffe, dass mir jemand dabei helfen kann.Inline-Asm kompiliert in XCode für Simulator, konnte aber nicht kompilieren für Gerät
Ich habe drei Inline-asm Funktionen wie folgt:
static __inline__ int Bsf(uint32_t Operand) {
int eax;
asm __volatile__ (
"bsfl %0, %0" "\n\t"
: "=a" (eax)
: "0" (Operand)
);
return eax;
}
static __inline__ int Bsr(uint32_t Operand) {
int eax;
asm __volatile__ (
"bsrl %0, %0" "\n\t"
: "=a" (eax)
: "0" (Operand)
);
return eax;
}
static __inline__ uint64_t TimeStampCounter(void) {
uint32_t eax, edx;
asm __volatile__ (
"rdtsc" "\n\t"
: "=a" (eax), "=d" (edx)
:
);
return MAKE_LONG_LONG(eax, edx);
}
Sie alle erfolgreich in XCode für Simulator kompiliert, aber nicht, wenn ich für Geräte bauen geschaltet - 4.1 (für iPhone). Die Nachricht, die ich bekam, ist "unmögliche Einschränkung in asm". Ich glaube, das Problem ist der oben genannte Assembler-Code funktioniert nicht für ARM-basierte CPU. Kann jemand etwas Licht darüber schildern, wie man den Code neu schreibt, damit er für die iPhone-CPU kompiliert? Es kann entweder Assembly oder reiner C-Code sein. Danke im Voraus!
Leo
Was möchten Sie tun? –
Nur eine Vermutung, aber die Assembly, die Sie gepostet haben, ist x86 und iOS-Geräte sind ARM-basiert, so dass Sie wahrscheinlich die ARM-Assembly schreiben müssen, um das zu tun, was Sie wollen. –
@Dean. Du hast absolut recht, und das ist eigentlich meine Frage. Wie schreibe ich den Code für ARM-CPU neu? Hast du irgendeine Idee? Das würde sehr geschätzt werden, wenn Sie etwas Licht auf das Umschreiben in entweder ARM-Assembly oder reinem C-Code werfen könnten. – user538220