@@ -263,10 +263,88 @@ SoftBlitPyGame(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst,
263263break ;
264264 }
265265case PYGAME_BLEND_ADD : {
266+ #if SDL_BYTEORDER == SDL_LIL_ENDIAN
267+ if (src -> format -> BytesPerPixel == 4 &&
268+ dst -> format -> BytesPerPixel == 4 &&
269+ src -> format -> Rmask == dst -> format -> Rmask &&
270+ src -> format -> Gmask == dst -> format -> Gmask &&
271+ src -> format -> Bmask == dst -> format -> Bmask &&
272+ !(src -> format -> Amask != 0 && dst -> format -> Amask != 0 &&
273+ src -> format -> Amask != dst -> format -> Amask )&&
274+ SDL_HasAVX2 ()&& (src != dst )) {
275+ blit_blend_rgb_add_avx2 (& info );
276+ break ;
277+ }
278+ #if defined(__SSE2__ )
279+ if (src -> format -> BytesPerPixel == 4 &&
280+ dst -> format -> BytesPerPixel == 4 &&
281+ src -> format -> Rmask == dst -> format -> Rmask &&
282+ src -> format -> Gmask == dst -> format -> Gmask &&
283+ src -> format -> Bmask == dst -> format -> Bmask &&
284+ !(src -> format -> Amask != 0 && dst -> format -> Amask != 0 &&
285+ src -> format -> Amask != dst -> format -> Amask )&&
286+ SDL_HasSSE2 ()&& (src != dst )) {
287+ blit_blend_rgb_add_sse2 (& info );
288+ break ;
289+ }
290+ #endif /* __SSE2__*/
291+ #if PG_ENABLE_ARM_NEON
292+ if (src -> format -> BytesPerPixel == 4 &&
293+ dst -> format -> BytesPerPixel == 4 &&
294+ src -> format -> Rmask == dst -> format -> Rmask &&
295+ src -> format -> Gmask == dst -> format -> Gmask &&
296+ src -> format -> Bmask == dst -> format -> Bmask &&
297+ !(src -> format -> Amask != 0 && dst -> format -> Amask != 0 &&
298+ src -> format -> Amask != dst -> format -> Amask )&&
299+ SDL_HasNEON ()&& (src != dst )) {
300+ blit_blend_rgb_add_sse2 (& info );
301+ break ;
302+ }
303+ #endif /* PG_ENABLE_ARM_NEON */
304+ #endif /* SDL_BYTEORDER == SDL_LIL_ENDIAN */
266305blit_blend_add (& info );
267306break ;
268307 }
269308case PYGAME_BLEND_SUB : {
309+ #if SDL_BYTEORDER == SDL_LIL_ENDIAN
310+ if (src -> format -> BytesPerPixel == 4 &&
311+ dst -> format -> BytesPerPixel == 4 &&
312+ src -> format -> Rmask == dst -> format -> Rmask &&
313+ src -> format -> Gmask == dst -> format -> Gmask &&
314+ src -> format -> Bmask == dst -> format -> Bmask &&
315+ !(src -> format -> Amask != 0 && dst -> format -> Amask != 0 &&
316+ src -> format -> Amask != dst -> format -> Amask )&&
317+ SDL_HasAVX2 ()&& (src != dst )) {
318+ blit_blend_rgb_sub_avx2 (& info );
319+ break ;
320+ }
321+ #if defined(__SSE2__ )
322+ if (src -> format -> BytesPerPixel == 4 &&
323+ dst -> format -> BytesPerPixel == 4 &&
324+ src -> format -> Rmask == dst -> format -> Rmask &&
325+ src -> format -> Gmask == dst -> format -> Gmask &&
326+ src -> format -> Bmask == dst -> format -> Bmask &&
327+ !(src -> format -> Amask != 0 && dst -> format -> Amask != 0 &&
328+ src -> format -> Amask != dst -> format -> Amask )&&
329+ SDL_HasSSE2 ()&& (src != dst )) {
330+ blit_blend_rgb_sub_sse2 (& info );
331+ break ;
332+ }
333+ #endif /* __SSE2__*/
334+ #if PG_ENABLE_ARM_NEON
335+ if (src -> format -> BytesPerPixel == 4 &&
336+ dst -> format -> BytesPerPixel == 4 &&
337+ src -> format -> Rmask == dst -> format -> Rmask &&
338+ src -> format -> Gmask == dst -> format -> Gmask &&
339+ src -> format -> Bmask == dst -> format -> Bmask &&
340+ !(src -> format -> Amask != 0 && dst -> format -> Amask != 0 &&
341+ src -> format -> Amask != dst -> format -> Amask )&&
342+ SDL_HasNEON ()&& (src != dst )) {
343+ blit_blend_rgb_sub_sse2 (& info );
344+ break ;
345+ }
346+ #endif /* PG_ENABLE_ARM_NEON */
347+ #endif /* SDL_BYTEORDER == SDL_LIL_ENDIAN */
270348blit_blend_sub (& info );
271349break ;
272350 }
@@ -323,10 +401,82 @@ SoftBlitPyGame(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst,
323401 }
324402
325403case PYGAME_BLEND_RGBA_ADD : {
404+ #if SDL_BYTEORDER == SDL_LIL_ENDIAN
405+ if (src -> format -> BytesPerPixel == 4 &&
406+ dst -> format -> BytesPerPixel == 4 &&
407+ src -> format -> Rmask == dst -> format -> Rmask &&
408+ src -> format -> Gmask == dst -> format -> Gmask &&
409+ src -> format -> Bmask == dst -> format -> Bmask &&
410+ info .src_blend != SDL_BLENDMODE_NONE &&
411+ SDL_HasAVX2 ()&& (src != dst )) {
412+ blit_blend_rgba_add_avx2 (& info );
413+ break ;
414+ }
415+ #if defined(__SSE2__ )
416+ if (src -> format -> BytesPerPixel == 4 &&
417+ dst -> format -> BytesPerPixel == 4 &&
418+ src -> format -> Rmask == dst -> format -> Rmask &&
419+ src -> format -> Gmask == dst -> format -> Gmask &&
420+ src -> format -> Bmask == dst -> format -> Bmask &&
421+ info .src_blend != SDL_BLENDMODE_NONE &&
422+ SDL_HasSSE2 ()&& (src != dst )) {
423+ blit_blend_rgba_add_sse2 (& info );
424+ break ;
425+ }
426+ #endif /* __SSE2__*/
427+ #if PG_ENABLE_ARM_NEON
428+ if (src -> format -> BytesPerPixel == 4 &&
429+ dst -> format -> BytesPerPixel == 4 &&
430+ src -> format -> Rmask == dst -> format -> Rmask &&
431+ src -> format -> Gmask == dst -> format -> Gmask &&
432+ src -> format -> Bmask == dst -> format -> Bmask &&
433+ info .src_blend != SDL_BLENDMODE_NONE &&
434+ SDL_HasNEON ()&& (src != dst )) {
435+ blit_blend_rgba_add_sse2 (& info );
436+ break ;
437+ }
438+ #endif /* PG_ENABLE_ARM_NEON */
439+ #endif /* SDL_BYTEORDER == SDL_LIL_ENDIAN */
326440blit_blend_rgba_add (& info );
327441break ;
328442 }
329443case PYGAME_BLEND_RGBA_SUB : {
444+ #if SDL_BYTEORDER == SDL_LIL_ENDIAN
445+ if (src -> format -> BytesPerPixel == 4 &&
446+ dst -> format -> BytesPerPixel == 4 &&
447+ src -> format -> Rmask == dst -> format -> Rmask &&
448+ src -> format -> Gmask == dst -> format -> Gmask &&
449+ src -> format -> Bmask == dst -> format -> Bmask &&
450+ info .src_blend != SDL_BLENDMODE_NONE &&
451+ SDL_HasAVX2 ()&& (src != dst )) {
452+ blit_blend_rgba_sub_avx2 (& info );
453+ break ;
454+ }
455+ #if defined(__SSE2__ )
456+ if (src -> format -> BytesPerPixel == 4 &&
457+ dst -> format -> BytesPerPixel == 4 &&
458+ src -> format -> Rmask == dst -> format -> Rmask &&
459+ src -> format -> Gmask == dst -> format -> Gmask &&
460+ src -> format -> Bmask == dst -> format -> Bmask &&
461+ info .src_blend != SDL_BLENDMODE_NONE &&
462+ SDL_HasSSE2 ()&& (src != dst )) {
463+ blit_blend_rgba_sub_sse2 (& info );
464+ break ;
465+ }
466+ #endif /* __SSE2__*/
467+ #if PG_ENABLE_ARM_NEON
468+ if (src -> format -> BytesPerPixel == 4 &&
469+ dst -> format -> BytesPerPixel == 4 &&
470+ src -> format -> Rmask == dst -> format -> Rmask &&
471+ src -> format -> Gmask == dst -> format -> Gmask &&
472+ src -> format -> Bmask == dst -> format -> Bmask &&
473+ info .src_blend != SDL_BLENDMODE_NONE &&
474+ SDL_HasNEON ()&& (src != dst )) {
475+ blit_blend_rgba_sub_sse2 (& info );
476+ break ;
477+ }
478+ #endif /* PG_ENABLE_ARM_NEON */
479+ #endif /* SDL_BYTEORDER == SDL_LIL_ENDIAN */
330480blit_blend_rgba_sub (& info );
331481break ;
332482 }