Как дела с игрой?
Вид для печати
Как дела с игрой?
Потихоньку переписываю свои библиотеки для работы с графикой.
вариант функции ABS (R0):
Может кому полезно будет или более интересный вариант предложит :)Код:MOV R0, R1
ASH #-15., R1
ADD R1, R0
XOR R1, R0
Код:TST R0
BPL 10$
NEG R0
10$:
Это очевидный вариант.Код:TST R0
BPL 10$
NEG R0
10$:
Нужно без ветвлений - "борьба за скорость" :)
Например при расчете AABB этих ABS будет много.
- - - Добавлено - - -
Скоро проверю в "реальной жизни" несколько вариантов.. там видно будет.
- - - Добавлено - - -Код:#4+R0(2000) empty 623 697 оп./сек
#4+R0(2000) 312 238 оп./сек -> 625 256 оп./сек
CMP (R0)+,(R0)+ empty 624 476 оп./сек
CMP (R0)+,(R0)+ 173 051 оп./сек -> 239 389 оп./сек
#2+R0(2000) empty 624 476 оп./сек
#2+R0(2000) 312 238 оп./сек -> 624 476 оп./сек
INC R0 INC R0 empty 624 476 оп./сек
INC R0 INC R0 390 086 оп./сек -> 1 039 290 оп./сек
TST (R0)+ empty 624 476 оп./сек
TST (R0)+ 270 808 оп./сек -> 478 169 оп./сек
CLR R0 - SOB R0, . empty 2 079 037 оп./сек
CLR R0 - SOB R0, . 5 оп./сек -> 5 оп./сек
ABS1 73 300 оп./сек
ABS2 345 979 оп./сек
.
Буковки голубеньким подкрась - реально ускорится
Заменил конструкцию:
на эквивалентнуюКод:MOV R3,R2
ASR R2
ASR R2
ASR R2
MUL #40.,R2 ;Y/8*40
ADD R3, R0 ; адрес под спрайтом в тайлбуфере
Код:BIC #7, R3
MOV R3,R2
ASL R3
ASL R3
ADD R2,R3
ADD R3, R0 ; адрес под спрайтом в тайлбуфере
Она не эквивалентная.
ADD R3, R0 после команды MUL, к R0 прибавляет не R2*5, а старшую часть умножения на 40., то, что за 16 бит из R2 вылезло.
У меня эквивалентный код получается такой:
- - - Добавлено - - -Код:mov R3, R2
bic #7, R2
clr R3
mov R2, -(SP)
asl R2
rol R3
asl R2
rol R3
add (SP)+, R2
adc R3
add R3, R0
Ну, либо в первом примере опечатка.