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.
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
Oh, sì, è un bug di Eclipse. Ho controllato la console, tutto ha funzionato bene. – Triang3l
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