Bol som zvedavý, jednak ako bude mať tá ručne vyčačkaná ASM frame copy implementácia vo vzťahu k naivným C-čkovým a dvak, ako to pobeži na reálnom hw.:
https://pastebin.com/6fu6Bi7D
Prekladal som to prekladačom z TC++ 3.0 v DOSBoxe, pre porovnanie je tam inlajnutá aj tá Pavlova implementácia.
Na najstaršom funkčnom PC čo mám momentálne po ruke (Amstrad PPC 640, NEC V30 @ 8Mhz, 1987) to vyzerá takto:
C assign b far: 3.4 fps, 0.2 Mpxps C assign w far: 5.2 fps, 0.3 Mpxps C assign l far: 5.7 fps, 0.4 Mpxps C assign w near: 5.5 fps, 0.3 Mpxps C assign l near: 6.4 fps, 0.4 Mpxps C fmemcpy: 19.2 fps, 1.2 Mpxps ASM movsw: 22.3 fps, 1.4 Mpxps
(fmemcpy je interne implementovaná tiež pomocou rep movsw
, len teda šaškovanie so zásobníkom pri jej volaní zožerie nejaké cykly na každý riadok)
V30 je upgradnutá 8086, ak by to niekto chcel testnúť na niečom ešte bližšom pôvodnému XT s 8088 @ 4,77MHz, môžem posunúť binárku.