Prozessorgeflüster

Oh Graus, schon wieder ein Bug - diesmal trifft es den Cyrix-Prozessor 6x86MX. Unser schon im vorigen Geflüster angedeuteter Verdacht hat sich leider bestätigt: Bei den P6-Befehlen hat sich noch eine bösartige Wanze eingeschlichen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Andreas Stiller

Den von uns FCOM-Bug getauften Prozessorfehler entdeckten wir bei einem der in c't 15/97 vorgestellten SPEC- 95-Benchmarks (129.compress). Wenn man ihn mit der P6-Option (-G6) des Intel-C-Compilers kompiliert und auf dem C6x86MX laufen läßt, erhält man ab und zu falsche Ergebnisse. Entgegen meiner ersten Vermutung sind jedoch nicht die speziellen bedingten Ladebefehle des P6-Prozessors für das Desaster verantwortlich - die erzeugt der Compiler gar nicht (warum eigentlich nicht?).

Der Fehler betrifft vielmehr den FCOMI-Befehl (und seine `Kollegen´ FUCOMI, FCOMIP, FUCOMIP). Mit diesen Befehlen kann der P6 wesentlich eleganter und schneller als seine Vorgänger die Flags bei Gleitkommabefehlen direkt setzen. Jene müssen nämlich mühsam die Gleitkomma-Flags erst per FSTAW ins AX-Register laden und dann mit SAHF ins Flag-Register. Beim 6x86MX kann offenbar gelegentlich ein Interrupt dazwischenfunken und die Flags durcheinanderbringen - Verrechner sind die Folge. Zumindest unter NT läßt sich der Fehler leicht reproduzieren. Unser Testprogramm FCOMTEST vergleicht in einer Endlosschleife zwei Zufallszahlen miteinander und setzt die Vergleichsflags einmal klassisch und einmal via FCOMPI. Es kann viele Millionen Durchläufe dauern, aber irgendwann stellen sich Unterschiede ein. Rege Mausbewegung erhöht die Fehlerwahrscheinlichkeit.

Der Fehler betrifft sowohl Revision 3 als auch Revision 4. Wir haben ihn inzwischen Cyrix gemeldet und warten noch auf eine Reaktion. (as)