src/video/SDL_stretch.c
branchSDL-1.2
changeset 4108 3feb94233f90
parent 1849 b5a4ac87b98c
child 4109 cd2ab40f1219
equal deleted inserted replaced
4107:4e3b250c950e 4108:3feb94233f90
    39      (defined(__GNUC__) && defined(__i386__))) && SDL_ASSEMBLY_ROUTINES
    39      (defined(__GNUC__) && defined(__i386__))) && SDL_ASSEMBLY_ROUTINES
    40 #define USE_ASM_STRETCH
    40 #define USE_ASM_STRETCH
    41 #endif
    41 #endif
    42 
    42 
    43 #ifdef USE_ASM_STRETCH
    43 #ifdef USE_ASM_STRETCH
       
    44 
       
    45 /* OpenBSD has non-executable memory by default, so use mprotect() */
       
    46 #ifdef __OpenBSD__
       
    47 #define USE_MPROTECT
       
    48 #endif
       
    49 #ifdef USE_MPROTECT
       
    50 #include <sys/types.h>
       
    51 #include <sys/mman.h>
       
    52 #endif
    44 
    53 
    45 #if defined(_M_IX86) || defined(i386)
    54 #if defined(_M_IX86) || defined(i386)
    46 #define PREFIX16	0x66
    55 #define PREFIX16	0x66
    47 #define STORE_BYTE	0xAA
    56 #define STORE_BYTE	0xAA
    48 #define STORE_WORD	0xAB
    57 #define STORE_WORD	0xAB
    89 		break;
    98 		break;
    90 	    default:
    99 	    default:
    91 		SDL_SetError("ASM stretch of %d bytes isn't supported\n", bpp);
   100 		SDL_SetError("ASM stretch of %d bytes isn't supported\n", bpp);
    92 		return(-1);
   101 		return(-1);
    93 	}
   102 	}
       
   103 #ifdef USE_MPROTECT
       
   104 	mprotect(copy_row, sizeof(copy_row), PROT_READ|PROT_WRITE|PROT_EXEC);
       
   105 #endif
    94 	pos = 0x10000;
   106 	pos = 0x10000;
    95 	inc = (src_w << 16) / dst_w;
   107 	inc = (src_w << 16) / dst_w;
    96 	eip = copy_row;
   108 	eip = copy_row;
    97 	for ( i=0; i<dst_w; ++i ) {
   109 	for ( i=0; i<dst_w; ++i ) {
    98 		while ( pos >= 0x10000L ) {
   110 		while ( pos >= 0x10000L ) {