NEON intrinsische Typen arbeiten in C, werfen aber ungültige Argumente in C ++

8

Ich habe Probleme mit der Verwendung von NEON-Intrinsics und Inline-Assemblierung in Android NDK.

NEON-Typen wie float32x4_t geben einen Fehler "ungültige Argumente" beim Kompilieren von C ++ - Code mit GCC 4.6 und 4.8, aber der Code kompiliert gut, wenn als C kompiliert.

Hier ist zum Beispiel ein Code:

%Vor%

Ich bekomme hier zwei Fehler:

  • In der Funktion selbst: Invalid arguments ' Candidates are: ? vaddq_f32(?, ?) ' .
  • Wo die Funktion aufgerufen wird: Invalid arguments ' Candidates are: ? VectorAdd(?, ?) ' .

Alle NEON-Typen werden als angezeigt? in der Fehlermeldung, während Nicht-NEON-Typen korrekt angezeigt werden.

Es ist auch seltsam, dass Funktionen, die nur NEON-Typen als Rückgabewerte verwenden (zB vld1q_f32 und mein abstrakter Wrapper davon), nicht unter dem Fehler leiden.

Ich habe den gleichen Code im GCC Explorer 4.6 und 4.5 ausprobiert, und es gibt keinen Fehler, und eine korrekte und optimierte Assemblierung wird jedoch generiert funktioniert es nicht mit Android NDK.

    
Triang3l 27.08.2013, 18:55
quelle

1 Antwort

2

Um dieses Problem zu umgehen, legen Sie in Windows / Einstellungen / C / C ++ / Codeanalyse den Schweregrad der Fehler "Ungültige Argumente" auf Warnung fest, damit diese gefälschten Fehler das Starten der Anwendung nicht verhindern.

    
r6144 21.12.2013, 19:08
quelle