clang zumindest teilweise enttÀuschend

24/06/2015 - 16:50 von Helmut Schellong | Report spam
Ich betreibe nach langer Zeit wieder intensive private
C-Entwicklungen.
Im Beruf gcc 4.x für Coldfire.
Nun privat unter FreeBSD 10.1 clang.

Zwei Dinge kann ich berichten:

Die Doku zu clang ist sehr dünn.
Auch das Handbuch auf der Webseite.
Auch clang --help hilft da nicht.
Ich bin dazu übergegangen, die gcc-Doku zu lesen,
um clang-Optionen herauszufinden.

clang verwendet KEINE Sprungtabelle, falls die
case 3: case 4: case 5: .. case 66: case 67:
nicht um 1 steigend sind, sondern beispielsweise
alle(!) um 4 steigend sind.

jmpq *.LJTI4_0(,%rcx,8)

Vorstehend ein Tabellensprung - nur bei 1er-Steigung.
Vor etlichen Jahren (vielleicht 15) hat gcc schon
in Fàllen von 2 4 8 etc. %rcx 1 2 3 Bit >>geshiftet, um
die Distanz zu normieren.
clang zieht es leider vor, 50 Vergleiche zu machen,
if (s=) ...
if (s=) ...
...
if (s=T) ...
if (s=U) ...
bis die richtige Stelle erreicht ist.
Ich hatte einen 4er-Abstand, um bei 3 Werten
evtl. Bits 1 2 3 hinzuzufügen: case HULKO|2:
Dies Konzept kann ich mir abschminken.


Mit freundlichen Grüßen
Helmut Schellong var@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm
 

Lesen sie die antworten

#1 Helmut Schellong
27/06/2015 - 11:24 | Warnen spam
On 06/24/15 16:50, Helmut Schellong wrote:
[...]
clang verwendet KEINE Sprungtabelle, falls die


[...]

Es könnte sich für den einen oder anderen lohnen,
de.comp.lang.c zur Zeit zu verfolgen.

Denn:
Bei clang habe ich auch schon einen echten Bug entdeckt:

Innerhalb einer Funktion:
char rng[] = { ... };
auto char rng[] = { ... };

legt clang als statisches initialisiertes Objekt an!

Das ist ein Bug, da es gegen den C-Standard verstößt,
und Rekursivitàt fehlerhaft macht.

gcc initialisiert hier einzeln im Stack.



Mit freundlichen Grüßen
Helmut Schellong
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm

Ähnliche fragen