我一直使用Google搜索了很長時間,但仍然找不到解決方案。我希望有人能幫助我。inline asm在XCode for Simulator中編譯但未能編譯爲設備
我有如下三個一字排列的ASM功能:
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);
}
他們都在XCode中編譯成功的模擬器,但是當我切換到建立設備故障 - 4.1(iPhone版)。我得到的消息是「在asm中不可能的約束」。我相信問題是上述彙編代碼不適用於基於ARM的cpu。有人可以闡明如何重新編寫代碼,以便編譯爲iPhone cpu嗎?它可以是彙編或純C代碼。提前致謝!
利奧
你想做什麼? – 2010-12-10 19:15:25
只是猜測,但你發佈的程序集是x86和iOS設備是基於ARM的,所以你可能需要編寫ARM程序集來做你想做的事情。 – 2010-12-12 09:44:10
@Dean。你是完全正確的,那實際上是我的問題。如何重新編寫ARM cpu的代碼?你有什麼主意嗎?如果您能夠在使用ARM程序集或純C代碼重新編寫代碼的過程中對此有所瞭解,我們將非常感激。 – user538220 2010-12-13 15:42:07