Как указать верхнюю / нижнюю часть двойного слова операнда с помощью встроенной сборки llvm-gcc? - PullRequest
0 голосов
/ 26 ноября 2011

В 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 Ответ

0 голосов
/ 26 ноября 2011

Это не поддерживается в текущих версиях llvm-gcc или clang (компилятор Apple LLVM).В качестве обходного пути вы можете разделить 64-битное значение на две 32-битные переменные и повторно собрать 64-битное значение с помощью сдвигов и т. Д. Сгенерированный код должен выглядеть так же.

...