Monday, October 1, 2012

ARM rulezzzz...

Чем больше куришь нюансы ARM, тем больше понимаешь какой это рулезный ассемблер. Например за счёт condition code suffixes можно делать просто чумовые оптимизации! Вот взять псевдокод:
int gcd(int a, int b)
{
  while (a != b) do
  { 
    if (a > b)
       a = a - b;
    else
       b = b - a;
   }
   return a;
}
Можно его конечно реализовать так:
gcd
 CMP r0, r1
 BEQ end
 BLT less
 SUB r0, r0, r1
 B   gcd
less
 SUB r1, r1, r0
 B   gcd
end
Я бы так и сделал, потому что привык к ассемблеру для x86-64 где никаких condition code suffixes нету. Но! В ARM можно же и так:
gcd
 CMP   r0, r1
 SUBGT r0, r0, r1
 SUBLT r1, r1, r0
 BNE   gcd
Ну не офигеть ли как красиво, а?

P.S. На всякий случай сообщаю что пример взять из официальной документации, т.е. я на самом деле не такой крутой оптимизатор как может показаться неосведомлённым читателям.

No comments:

Post a Comment