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