Mein memset Replacement ist gestern erstmal fertig geworden und ich bin recht zufrieden damit.
Ich hatte das schon mal vor einem Jahr angefangen, weil ich ausprobiert hatte, ob man den "movem.l" nicht für sowas benutzen könnte. Ich war total begeistert von meiner genialen Idee und wie schnell das war. Als ich dann aber gegen das originale memset getestet hatte, war ich etwas schockiert. Meine geniale Idee war wohl doch nicht so genial und schnell wie gedacht, denn memset war schneller. Darauf habe ich es dann sein gelassen.
Jetzt bin ich es nochmal angegangen, weil ich die Funktion brauche und diesmal hats geklappt. Meine Version ist schneller.
Bei kleinen Grössen (bis ca. 20 Bytes) bin ich fast 60% schneller. Bei mittleren Grössen sinds dann ca. 10-30%, bei ca. 128 Bytes sind es immer noch ~8%. Logischerweise konvergiert dass dann, da bei sehr grossen Blöcken (z.B. 10KB) die Geschwindigkeit annähernd gleich wird (aber trotzdem noch etwas schneller). Ist aber zu erwarten, da das Setup im Vergleich zum eigentlichen Fill-Loop immer weniger ins Gewicht fält.
Falls es jemand ausprobieren will, der Code ist hier: https://github.com/skeetor/amiga-utils, derzeit noch im "development" Branch. Da gibts im Project Verzeichniss dann auch ein Projekt TestMemfill, welches prüft ob es keine Bufferoverflows gibt und die Geschwindigkeit zu memset vergleicht.