>> Immerhin bin ich es als Mensch ja auch, dass ich weiß wie ich per Hand
>> MMX optimiere wenn ich ein unsigned long long vor mir habe.
> Ja? Wie denn? Die MMX bietet keine 64bit-Operationen an. Es werden
> vielmehr mehrere kleinere Operationen (2 mit je 32 bit, 4 mit je 16 bit
> oder 8 mit je 8 bit) parallel ausgeführt.
Offenbar hast du noch nicht besonders viel mit MMX gemacht.
Es gibt unter anderem pand, por, pxor, psllq, psrlq usw, und das sind
sehr wohl 64Bit Operationen.
Aber zumindest hat mich dein Link auf die richtige Spur geführt:
> di __builtin_ia32_pand (di, di)
"di" ist wohl der Datentyp nachdem ich gesucht habe. Die Frage ist halt,
ob GCC dann auch wirklich MMX Optimierungen verwendet oder ob da nur ein
typedef unsigned long long dahintersteckt. Aber das seh ich ja dann
gleich ...
Explizit will ich eigentlich die MMX-Befehle nicht verwenden. Ich hatte
mir schon die Arbeit gemacht und 500 Zeilen Code nach MMX portiert, der
dann langsamer war, weil der GCC mit -O3 schon echt gut optimiert und
ich viele unvorhersehbare Speicherzugriffe auf eine Tabelle hatte, die
nicht in den Cache gepasst hat. Die Speicherzugriffe hat GCC recht gut
wegoptimiert.
Weil bei mir aber im Großen und Ganzen nur logische 64Bit-Operationen
(siehe oben) vorkommen hatte ich gehofft der GCC kapiert das und
verwendet selber MMX.
Wenn Interesse besteht poste ich dann das Ergebnis wenn ich es
ausprobiert hab.
Mfg
Gast