[INTRIN_X86]

- Add __stosq, __movsq, _bittest64

svn path=/branches/ros-amd64-bringup/; revision=46388
This commit is contained in:
Timo Kreuzer 2010-03-24 02:23:27 +00:00
parent 36a64ffd5c
commit a9fd1700ff

View file

@ -569,6 +569,18 @@ __INTRIN_INLINE void __stosd(unsigned long * Dest, const unsigned long Data, siz
);
}
#ifdef _M_AMD64
__INTRIN_INLINE void __stosq(unsigned __int64 * Dest, const unsigned __int64 Data, size_t Count)
{
__asm__ __volatile__
(
"rep; stosq" :
[Dest] "=D" (Dest), [Count] "=c" (Count) :
"[Dest]" (Dest), "a" (Data), "[Count]" (Count)
);
}
#endif
__INTRIN_INLINE void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count)
{
__asm__ __volatile__
@ -599,6 +611,18 @@ __INTRIN_INLINE void __movsd(unsigned long * Destination, const unsigned long *
);
}
#ifdef _M_AMD64
__INTRIN_INLINE void __movsq(unsigned long * Destination, const unsigned long * Source, size_t Count)
{
__asm__ __volatile__
(
"rep; movsq" :
[Destination] "=D" (Destination), [Source] "=S" (Source), [Count] "=c" (Count) :
"[Destination]" (Destination), "[Source]" (Source), "[Count]" (Count)
);
}
#endif
#if defined(_M_AMD64)
/*** GS segment addressing ***/
@ -791,6 +815,20 @@ __INTRIN_INLINE unsigned char _bittest(const long * const a, const long b)
return retval;
}
#ifdef _M_AMD64
__INTRIN_INLINE unsigned char _bittest64(const __int64 * const a, const __int64 b)
{
unsigned char retval;
if(__builtin_constant_p(b))
__asm__("bt %[b], %[a]; setb %b[retval]" : [retval] "=q" (retval) : [a] "mr" (*(a + (b / 64))), [b] "Ir" (b % 64));
else
__asm__("bt %[b], %[a]; setb %b[retval]" : [retval] "=q" (retval) : [a] "mr" (*a), [b] "r" (b));
return retval;
}
#endif
__INTRIN_INLINE unsigned char _bittestandcomplement(long * const a, const long b)
{
unsigned char retval;
@ -1420,4 +1458,4 @@ __INTRIN_INLINE void _mm_pause(void)
#endif /* KJK_INTRIN_X86_H_ */
/* EOF */
/* EOF */