2013-08-27 4 views
8

Ich habe Probleme mit der Verwendung von NEON Intrinsics und Inline-Assembly in Android NDK. wenn kompiliert wie CNEON intrinsische Typen arbeiten in C, sondern werfen ungültige Argumente Fehler in C++

Zum Beispiel

NEON-Typen wie float32x4_t eine "ungültige Argumente" Fehler geben, wenn C++ Code mit GCC 4.6 und 4.8, jedoch kompilieren, wird der Code in Ordnung kompiliert, hier einige Code:

inline float32x4_t VectorAdd(float32x4_t a, float32x4_t b) 
{ 
    return vaddq_f32(a, b); 
} 

ich zwei Fehler hier:

  • 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.

Was ist auch seltsam ist, dass Funktionen, die nur NEON-Typen als Rückgabewerte (z. B. vld1q_f32 und meine abstrakte Wrapper davon) nicht unter dem Fehler leiden.

Ich habe den gleichen Code in GCC Explorer 4.6 und 4.5 versucht, und es gibt keinen Fehler, und korrekte und optimierte Montage wird generiert, funktioniert jedoch nicht mit Android NDK.

+4

Das könnte eine dumme Frage sein ... aber sind diese Eclipse-Indizierung Fehler oder sind sie Compilerfehler? I.e. Wenn Sie ndk-build von der Kommandozeile aus verwenden, erhalten Sie die genauen Fehler wie beschrieben? – krsteeve

+0

Oh, ja, es ist ein Eclipse Bug. Ich habe die Konsole überprüft, alles hat gut funktioniert. – Triang3l

+0

Leider gibt es einen bekannten Eclipse Indizierung Bug bei der Verwendung von CDT mit ADT - ich habe darüber in meiner Antwort hier gesprochen: http://StackOverflow.com/Questions/13924184/Migrate-A-Program-Toandroid-ndk/18277247#18277247 – krsteeve

Antwort

2

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