Apple AS e ARM / Thumb ADDS instrução

Estou trabalhando em um projeto de iPhone / iPad e quero atualizar o registro de status durante algumas (não todas) operações aritméticas. Por padrão, o Xcode usa 'Compile for Thumb' e não quero alterá-l

O seguinte código de montagem em linha do GCC funciona bem no ARM, mas resulta em um erro de compilação no Thumb: 'instrução não suportada no modo Thumb16 - adiciona r6, r4, r5'. O problema está na atualização do registro de status. (Também sei quemovcs estrcs precisará ser alterado

O Thumb possui uma instrução ADD que define Overflow (V) ou Carry (C) no CPSR? Caso contrário, existem soluções alternativas em nível de montagem específicas para o polegar para testar estouros e carregamentos?

Jeff

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"
);

...

EDIT: Os registros também precisam ser movidos para aproveitar oARM ABI na Application Binary Interface (ABI) para a arquitetura ARM.

questionAnswers(3)

yourAnswerToTheQuestion