Ceos
26.07.2018, 13:55
Also da der XC16 kein popcount kennt, wollte ich mir ein simples ASM script machen:
static inline uint8_t popcount(uint32_t input, uint8_t max){
asm(...
1. welches den übergebenen wert in ein register (8bit reichen) kopiert
2. in einer schleife "max"-mal das register nach rechts durchschiebt
3. das carry bei jedem schieben auf ein anderes register aufaddiert
4. und dann im return das aufaddierte register zurück gibt
Jetzt fehlen mir aber fast alle grundlagen, z.B. welche w0-w14 oder W0-W14 ich dafür nutzen darf ohne schaden anzurichten
wie ich den shift mache und dabei das carry möglichst effektiv auf das andere register aufaddiere
die MC doku ist leider extremst ausschweifend und kommt mit beispielen die erwarten dass man das dokument vollständig durchließt, wofür ich leider nicht mal eben 2 wochen zeit aufbringen kann
daher hofe ich auf einen crashkurs in welche register ich "vergewaltigen" darf ohne den C-Code rund herum zu stören und wie ich das carry bit effektiv aufaddiere
static inline uint8_t popcount(uint32_t input, uint8_t max){
asm(...
1. welches den übergebenen wert in ein register (8bit reichen) kopiert
2. in einer schleife "max"-mal das register nach rechts durchschiebt
3. das carry bei jedem schieben auf ein anderes register aufaddiert
4. und dann im return das aufaddierte register zurück gibt
Jetzt fehlen mir aber fast alle grundlagen, z.B. welche w0-w14 oder W0-W14 ich dafür nutzen darf ohne schaden anzurichten
wie ich den shift mache und dabei das carry möglichst effektiv auf das andere register aufaddiere
die MC doku ist leider extremst ausschweifend und kommt mit beispielen die erwarten dass man das dokument vollständig durchließt, wofür ich leider nicht mal eben 2 wochen zeit aufbringen kann
daher hofe ich auf einen crashkurs in welche register ich "vergewaltigen" darf ohne den C-Code rund herum zu stören und wie ich das carry bit effektiv aufaddiere