Qual è il modo corretto per convertire un valore __int64
in un valore __m64
da utilizzare con SSE?Come convertire 'long long' (o __int64) in __m64
6
A
risposta
6
con GCC si può semplicemente utilizzare _mm_set_pi64x
:
#include <mmintrin.h>
__int64 i = 0x123456LL;
__m64 v = _mm_set_pi64x(i);
Nota che non tutti i compilatori hanno _mm_set_pi64x
definiti in mmintrin.h
. Per gcc è definito in questo modo:
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_set_pi64x (long long __i)
{
return (__m64) __i;
}
che suggerisce che si potrebbe forse basta usare un cast, se si preferisce, per esempio
__int64 i = 0x123456LL;
__m64 v = (__m64)i;
In mancanza di questo, se sei bloccato con un compilatore eccessivamente esigenti come ad esempio Visual C/C++, come ultima risorsa si può semplicemente utilizzare un sindacato e implementare una propria intrinseca:
#ifdef _MSC_VER // if Visual C/C++
__inline __m64 _mm_set_pi64x (const __int64 i) {
union {
__int64 i;
__m64 v;
} u;
u.i = i;
return u.v;
}
#endif
Nota che in senso stretto si tratta di UB, dal momento che stiamo scrivendo una variante di un sindacato e la lettura da un altro, ma dovrebbe funzionare in questo caso.
Problemi correlati
- 1. Come convertire Long in Int in Kotlin?
- 2. Come convertire unsigned long in stringa
- 3. Oracle: LONG o CLOB?
- 4. Python type long vs C 'long long'
- 5. Come convertire la stringa in long
- 6. C++ doppia a long long
- 7. (lldb) Stampa unsigned long long in hex
- 8. C#: Come convertire da long a ulong
- 9. unsigned long long int pow
- 10. Divide Long Long Number in percentuale
- 11. C++: long long int vs long int vs int64_t
- 12. Perché non è common_type <long, unsigned long> :: type = long long?
- 13. Come convertire 'unsigned long' in string in java
- 14. LONG Blob innodb o MyISAM
- 15. Il GCC supporta long long int?
- 16. Come convertire std: wstring in tipo numerico (int, long, float)?
- 17. Come convertire un long in int in Java vs. swift?
- 18. Come posso convertire da int a Long in Java?
- 19. Doppio a `unsigned long long` provoca memoria (pila?) La corruzione
- 20. Long primitive o AtomicLong per un contatore?
- 21. Dimensioni di "long long" nella macchina a 128 bit?
- 22. Come convertire/eseguire il cast da long a String?
- 23. La differenza tra unsigned long e UINT64
- 24. cpp: eclipse non riconosce il tipo 'long long'
- 25. Funzione hash per un paio di long long?
- 26. long long è 8 byte, ma ottengo un overflow intero?
- 27. Wrap long lines in Python
- 28. Long type 64bit linux
- 29. Long Negation Bar in LaTeX
- 30. Wrap long lines in .vimrc
Eh? https://www.google.com/search?q=_mm_set_pi64 – Mehrdad
Dai un'occhiata a 'mmintrin.h' –
http://pastebin.com/4bwAbbLZ? – Mehrdad