Commit 5f55b90c authored by Sam Lantinga's avatar Sam Lantinga

Fixed linking x64 with Visual Studio 2010.

parent 57a49884
...@@ -123,7 +123,7 @@ SDL_AddTouch(const SDL_Touch * touch, char *name) ...@@ -123,7 +123,7 @@ SDL_AddTouch(const SDL_Touch * touch, char *name)
SDL_OutOfMemory(); SDL_OutOfMemory();
return -1; return -1;
} }
*SDL_touchPads[index] = *touch; SDL_memcpy(SDL_touchPads[index], touch, sizeof(*touch));
/* we're setting the touch properties */ /* we're setting the touch properties */
length = 0; length = 0;
......
...@@ -35,6 +35,43 @@ ...@@ -35,6 +35,43 @@
__declspec(selectany) int _fltused = 1; __declspec(selectany) int _fltused = 1;
#endif #endif
/* The optimizer on Visual Studio 2010 generates memcpy() calls */
#if _MSC_VER == 1600 && defined(_WIN64) && !defined(_DEBUG)
#include <intrin.h>
#pragma function(memcpy)
void * memcpy ( void * destination, const void * source, size_t num )
{
const Uint8 *src = (const Uint8 *)source;
Uint8 *dst = (Uint8 *)destination;
size_t i;
/* All WIN64 architectures have SSE, right? */
if (!((uintptr_t) src & 15) && !((uintptr_t) dst & 15)) {
__m128 values[4];
for (i = num / 64; i--;) {
_mm_prefetch(src, _MM_HINT_NTA);
values[0] = *(__m128 *) (src + 0);
values[1] = *(__m128 *) (src + 16);
values[2] = *(__m128 *) (src + 32);
values[3] = *(__m128 *) (src + 48);
_mm_stream_ps((float *) (dst + 0), values[0]);
_mm_stream_ps((float *) (dst + 16), values[1]);
_mm_stream_ps((float *) (dst + 32), values[2]);
_mm_stream_ps((float *) (dst + 48), values[3]);
src += 64;
dst += 64;
}
num &= 63;
}
while (num--) {
*dst++ = *src++;
}
return destination;
}
#endif /* _MSC_VER == 1600 && defined(_WIN64) && !defined(_DEBUG) */
#ifdef _M_IX86 #ifdef _M_IX86
void void
...@@ -697,7 +734,7 @@ RETZERO: ...@@ -697,7 +734,7 @@ RETZERO:
/* *INDENT-ON* */ /* *INDENT-ON* */
} }
#endif /* _WIN64 */ #endif /* _M_IX86 */
#endif /* MSC_VER */ #endif /* MSC_VER */
......
...@@ -1247,10 +1247,11 @@ UILess_ReleaseSinks(SDL_VideoData *videodata) ...@@ -1247,10 +1247,11 @@ UILess_ReleaseSinks(SDL_VideoData *videodata)
static void * static void *
StartDrawToBitmap(HDC hdc, HBITMAP *hhbm, int width, int height) StartDrawToBitmap(HDC hdc, HBITMAP *hhbm, int width, int height)
{ {
BITMAPINFO info = {0}; BITMAPINFO info;
BITMAPINFOHEADER *infoHeader = &info.bmiHeader; BITMAPINFOHEADER *infoHeader = &info.bmiHeader;
BYTE *bits = NULL; BYTE *bits = NULL;
if (hhbm) { if (hhbm) {
SDL_zero(info);
infoHeader->biSize = sizeof(BITMAPINFOHEADER); infoHeader->biSize = sizeof(BITMAPINFOHEADER);
infoHeader->biWidth = width; infoHeader->biWidth = width;
infoHeader->biHeight = -1 * SDL_abs(height); infoHeader->biHeight = -1 * SDL_abs(height);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment