Сложная головоломка, если кто-то хочет использовать «быстрые» инструкции. Я не могу придумать решение, но могу предложить еще пару «понятий»:
; If goal were to have value of zero if $80000000 and something else otherwise:
adds r0,r1,r1 ; Overflow only if $80000000
movvc r0,#whatever
; If goal were to have value of $80000000 if $80000000 and zero otherwise
subs r0,r1,#0 ; Overflow only if $80000000
movvc r0,#0 ; Or whatever
; If the goal were to have value of $7FFFFFFF if $80000000 and zero otherwise
adds r0,r1,r1,asr #31 ; Overflow only if $80000000
movvc r0,#0
; If carry were known to be set beforehand
addcs r0,r1,r1 ; Overflow only if $80000000 (value is 1)
movvc r0,#0
; If register r2 were known to hold #1
adds r0,r1,r1,asr #31
; If $80000000, MSB and carry set
sbc r0,r2,r0,lsr #31
Ни одно из них не является идеальным решением, но они интересны.