Как указать верхнюю / нижнюю часть двойного слова операнда с помощью встроенной сборки llvm-gcc?
В GCC4.2(Xcode3) я использую%R0/%Q0, чтобы указать верхнюю / нижнюю часть операнда двойного слова во встроенной сборке. Но следующий код генерирует ошибку в llvm-gcc (Xcode4): ошибка: недопустимый операнд во встроенном asm: 'mov ${0:D}, $1
Может кто-нибудь указать мне решение?
long long v1 = 0;
long v2 = 1;
__asm__(
"mov %R0, %1\n\t"
: "=&r" (v1)
: "r" (v2)
);
1 ответ
Это не поддерживается в текущих версиях llvm-gcc или clang (компилятор Apple LLVM). В качестве обходного пути вы можете разделить 64-битное значение на две 32-битные переменные и повторно собрать 64-битное значение с помощью сдвигов и т. Д. Сгенерированный код должен выглядеть так же.