2013-08-27 9 views
8

Ho problemi con l'uso di intrinseci NEON e l'assembly inline in Android NDK.I tipi intrinseci NEON funzionano in C ma generano errori di argomenti non validi in C++

tipi NEON come float32x4_t danno un errore "argomenti non valido" quando si compila il codice C++ con GCC 4.6 e 4.8, tuttavia, il codice viene compilato bene se compilato come C

Ad esempio, ecco qualche codice:

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

ottengo due errori qui:

  • Nella funzione stessa: Invalid arguments ' Candidates are: ? vaddq_f32(?, ?) '.
  • Dove si chiama la funzione: Invalid arguments ' Candidates are: ? VectorAdd(?, ?) '.

Tutti i tipi di NEON sono visualizzati come? nel messaggio di errore, mentre i tipi non-NEON sono visualizzati correttamente.

Ciò che è strano è che le funzioni che utilizzano solo i tipi NEON come valori di ritorno (ad esempio, vld1q_f32 e il mio wrapper astratto di esso) non soffrono dell'errore.

Ho provato lo stesso codice in GCC Explorer 4.6 e 4.5 e non vi sono errori e viene generato un assembly corretto e ottimizzato, tuttavia non funziona con Android NDK.

+4

Questa potrebbe essere una domanda stupida ... ma sono questi errori di indicizzazione di eclissi o sono errori del compilatore? Cioè se usi ndk-build dalla riga di comando ottieni gli errori esatti come descritto? – krsteeve

+0

Oh, sì, è un bug di Eclipse. Ho controllato la console, tutto ha funzionato bene. – Triang3l

+0

Sfortunatamente c'è un errore di indicizzazione di eclissi noto quando si usa CDT con ADT - Ne ho parlato nella mia risposta qui: http://stackoverflow.com/questions/13924184/migrate-a-c-program-to-android-ndk/18277247#18277247 – krsteeve

risposta

2

Come soluzione temporanea, in Window/Preferences/C/C++/Code Analysis, impostare la severità degli errori "Argomenti non validi" su Warning, in modo che questi errori fasulli non impediscano il lancio dell'applicazione.