Цитата(__inline__ @ Jul 16 2018, 19:21)

Что будет быстрее: один LDR или 2 MOV ? К тому же LDR загрузит адрес, а не значение, а это уже 2 LDR:
LDR r0, =DATA00300706
LDR r1,[r0]
Это не так.
LDR Rx, =0x300706 говорит транслятору расположить вблизи этого места в кодовом сегменте (после LTORG) константу 0x300706 и считать её в Rx через косвенную адресацию по [PC, #...].
Типа сделать как:
Код
LDR Rx, ptrVal
...
DATA
ptrVal DC32 0x300706
Команда будет одна. Но вот быстрее она будет двух MOVW/MOVT - это ещё вопрос.
По идее можно попробовать написать просто: MOV Rx, #0x300706. Такой команды конечно нет, но некоторые трансляторы умные и заменяют такое на требуемую последовательность команд, возможно - наиболее оптимальную по их мнению.
Цитата(__inline__ @ Jul 16 2018, 17:54)

Знающие GCC ASM, подскажите пожалуйста, по переделке на ARM ASM, что загоняется в value1, value 2? И куда возвращаемый результат кладётся?
Я не знаток GCC ASM, но вроде там всё интуитивно понятно:
register u32 value1=yuv1,value2=yuv2; - эта запись явно назначает алиасные имена регистрам, которые содержат данные аргументы. Просто замените эти value1, value2, ... на регистры какие больше нравятся, и с которыми команды покороче будут.
И аргументы поступают в функцию и результат должен класться согласно соглашениям вызова используемым вашим компилятором. Прочитайте их в доке на компилятор.