в списке рассылки Binutils.

отаю над проектом для iPhone / iPad и хочу обновить регистр состояния во время некоторых (не всех) арифметических операций. По умолчанию Xcode использует «Compile for Thumb», и я не хочу его менять.

Следующий код встроенной сборки GCC прекрасно работает в ARM, но приводит к ошибке компиляции в Thumb: «инструкция не поддерживается в режиме Thumb16 - добавляет r6, r4, r5». Проблема заключается в обновлении регистра статуса. (Я также знаю, чтоmovcs а такжеstrcs нужно будет поменять).

Есть ли у Thumb инструкция ADD, которая устанавливает переполнение (V) или перенос (C) в CPSR? Если нет, существуют ли специфичные для Thumb обходные пути на уровне сборки для проверки на переполнение и переносы?

Джефф

uint32_t result, a, b;
int no_carry = 1;
...

__asm__
(
  "ldr  r4, %[xa]   ;"  // R4 = a
  "ldr  r5, %[xb]   ;"  // R5 = b
  "adds r6, r4, r5  ;"  // R6 = R4 + R5, set status
  "movcs    r4, #0      ;"  // set overflow (if carry set)
  "strcs    r4, %[xc]   ;"  // store it (if carry set)
  "str  r6, %[xr]   ;"  // result = R6
  : [xr] "=m" (result), [xc] "=m" (no_carry)
  : [xa] "m" (a), [xb] "m" (b)
  : "r4", "r5", "r6"
);

...

РЕДАКТИРОВАТЬ: регистры также должны быть перемещены, чтобы воспользоватьсяARM ABI в прикладном двоичном интерфейсе (ABI) для архитектуры ARM.

Ответы на вопрос(3)

Ваш ответ на вопрос