Warum dekrementiert / erhöht arm-gcc den Stack-Zeiger, selbst wenn auf den Stack nie zugegriffen wird?

8

Beim Kompilieren dieses Programms mit arm-elf-gcc-4.5 -O3-marsch = armv7-a-mthumb -mfpu = neon -mfloat-abi = softfp:

%Vor%

... das ist was ich bekomme. Beachten Sie die zwei unbrauchbaren Anweisungen, die mit @ & lt; & lt; & lt;

markiert sind %Vor%

Auf den Stapel wird nie zugegriffen, aber der Stapelzeiger wird dekrementiert und dann um den gleichen Betrag erhöht. Warum?

Wenn ich den Originalcode so modifiziere, dass er am Ende des Prologs und am Anfang des Epilogs einen asm-Kommentar enthält, so:

%Vor%

Dann bekomme ich eine etwas andere Version:

%Vor%

Der Stapelzeiger-Dekrement / Inkrementierung ist eindeutig Teil des Prologs / Epilogs und passiert auch, wenn der Stapel nicht verwendet wird. Soll das einem Standard entsprechen oder ist es ein gcc-Optimierungsfehler?

BEARBEITEN: Compiler ist arm-elf-gcc-4.5 (GCC) 4.5.0, konfiguriert mit: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macsports.org_release_ports_cross_arm-elf- gcc / work / gcc-4.5.0 / konfigurieren --prefix = / opt / local --infodir = / opt / lokal / teilen / info --mandir = / opt / local / teilen / man --target = arm-elf --program-prefix = arm-elf- - programm-suffix = -4.5 --ohne-included-gettext --enable-obsolete --mit-newlib --disable -__ cxa_atexit --enable-multilib --enable-biendian --disable-libgfortran --with-gxx-include-dir = / opt / lokal / arm-elf / include / c ++ / 4.5.0 / --enable-sprachen = c, c ++, objc --build = x86_64-apple -darwin10 --enable-fpu

BEARBEITEN: Ich konnte das Problem mit der folgenden C-Quelle lokalisieren. Es passiert nur, wenn Arrays von Vektortypen als Provisorien verwendet werden, z. B. float32x4x2_t, das als struct { float32x4_t val[2]; } deklariert wird, selbst wenn diese Provisorien zu Registern gemacht werden. Ich glaube, das ist ein Fehler, also habe ich das gemeldet .

%Vor%     
jcayzac 10.05.2011, 02:16
quelle

1 Antwort

4

Es stellte sich heraus, dass es sich um einen Fehler handelte. Schließen Sie ihn also.

    
jcayzac 10.05.2011, 03:44
quelle

Tags und Links