From 627e5b86d67f19aab75cdeb2ef167b8b98f09cda Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 10 Aug 2005 05:10:19 +0000 Subject: [PATCH] merge PIC-happy code by PaX/Kevin Quinn/me SVN revision: 16089 --- src/lib/asm_blend.S | 87 +++++++++++++++++---------------- src/lib/asm_blend_cmod.S | 103 +++++++++++++++++++++------------------ src/lib/asm_loadimmq.S | 77 +++++++++++++++++++++++++++++ src/lib/asm_rgba.S | 33 ++++++------- 4 files changed, 193 insertions(+), 107 deletions(-) create mode 100644 src/lib/asm_loadimmq.S diff --git a/src/lib/asm_blend.S b/src/lib/asm_blend.S index 3fb21f1..51175cc 100644 --- a/src/lib/asm_blend.S +++ b/src/lib/asm_blend.S @@ -85,21 +85,10 @@ .type PT_(imlib_mmx_reshade_copy_rgba_to_rgba,@function) .globl PR_(imlib_mmx_reshade_copy_rgb_to_rgba) .type PT_(imlib_mmx_reshade_copy_rgb_to_rgba,@function) - -/*\ Some useful masks \*/ -m0X000000: .byte 0, 0, 0, 0, 0, 0, 255, 0 -m10000000: .byte 0, 0, 0, 0, 0, 0, 0, 1 -m00XXXXXX: .byte 255, 255, 255, 255, 255, 255, 0, 0 -mVX000000: .byte 0, 0, 0, 0, 0, 0, 255, 127 -mV0000000: .byte 0, 0, 0, 0, 0, 0, 0, 128 -m0XXX0XXX: .byte 255, 255, 255, 0, 255, 255, 255, 0 -mX000X000: .byte 0, 0, 0, 255, 0, 0, 0, 255 -m10001000: .byte 0, 0, 0, 1, 0, 0, 0, 1 -m000V0V0V: .byte 127, 0, 127, 0, 127, 0, 0, 0 -mI0000000: .byte 0, 0, 0, 0, 0, 0, 0, 64 -m0VVV0VVV: .byte 127, 127, 127, 0, 127, 127, 127, 0 -c1: .word 0x1, 0x1, 0x1, 0x1 +#include "asm_loadimmq.S" + + /*\ MMX register use: |*| %mm1 = Source value |*| %mm2 = Destination value @@ -162,7 +151,8 @@ PR_(imlib_mmx_blend_rgba_to_rgb): ENTER pxor %mm4, %mm4 - movq c1, %mm5 + LOAD_IMMQ(c1, %mm5) + CLEANUP_IMMQ_LOADS(1) LOOP_START 1: @@ -218,9 +208,10 @@ PR_(imlib_mmx_blend_rgba_to_rgba): ENTER pxor %mm4, %mm4 - movq m0X000000, %mm5 - movq m00XXXXXX, %mm6 - movq c1, %mm7 + LOAD_IMMQ(m0X000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + LOAD_IMMQ(c1, %mm7) + CLEANUP_IMMQ_LOADS(3) LOOP_START 1: @@ -272,8 +263,9 @@ SIZE(imlib_mmx_blend_rgba_to_rgba) PR_(imlib_mmx_copy_rgba_to_rgb): ENTER - movq m0XXX0XXX, %mm5 - movq mX000X000, %mm6 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(mX000X000, %mm6) + CLEANUP_IMMQ_LOADS(2) /*\ Two at a time: last item is at %ecx = 0 \*/ subl $4, %esi @@ -342,7 +334,8 @@ SIZE(imlib_mmx_copy_rgba_to_rgba) PR_(imlib_mmx_copy_rgb_to_rgba): ENTER - movq mX000X000, %mm5 + LOAD_IMMQ(mX000X000, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -415,8 +408,9 @@ PR_(imlib_mmx_add_blend_rgba_to_rgba): ENTER pxor %mm4, %mm4 - movq mVX000000, %mm5 - movq m00XXXXXX, %mm6 + LOAD_IMMQ(mVX000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START 1: @@ -463,7 +457,8 @@ SIZE(imlib_mmx_add_blend_rgba_to_rgba) PR_(imlib_mmx_add_copy_rgba_to_rgb): ENTER - movq m0XXX0XXX, %mm5 + LOAD_IMMQ(m0XXX0XXX, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -533,7 +528,8 @@ SIZE(imlib_mmx_add_copy_rgba_to_rgba) PR_(imlib_mmx_add_copy_rgb_to_rgba): ENTER - movq mX000X000, %mm5 + LOAD_IMMQ(mX000X000, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -613,8 +609,9 @@ PR_(imlib_mmx_subtract_blend_rgba_to_rgba): ENTER pxor %mm4, %mm4 - movq mV0000000, %mm5 - movq m00XXXXXX, %mm6 + LOAD_IMMQ(mV0000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START 1: @@ -661,7 +658,8 @@ SIZE(imlib_mmx_subtract_blend_rgba_to_rgba) PR_(imlib_mmx_subtract_copy_rgba_to_rgb): ENTER - movq m0XXX0XXX, %mm5 + LOAD_IMMQ(m0XXX0XXX, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -699,7 +697,8 @@ SIZE(imlib_mmx_subtract_copy_rgba_to_rgb) PR_(imlib_mmx_subtract_copy_rgba_to_rgba): ENTER - movq mX000X000, %mm5 + LOAD_IMMQ(mX000X000, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -741,7 +740,8 @@ SIZE(imlib_mmx_subtract_copy_rgba_to_rgba) PR_(imlib_mmx_subtract_copy_rgb_to_rgba): ENTER - movq mX000X000, %mm5 + LOAD_IMMQ(mX000X000, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -780,7 +780,8 @@ PR_(imlib_mmx_reshade_blend_rgba_to_rgb): ENTER pxor %mm4, %mm4 - movq m000V0V0V, %mm6 + LOAD_IMMQ(m000V0V0V, %mm6) + CLEANUP_IMMQ_LOADS(1) LOOP_START 1: @@ -823,9 +824,10 @@ PR_(imlib_mmx_reshade_blend_rgba_to_rgba): ENTER pxor %mm4, %mm4 - movq mI0000000, %mm5 - movq m000V0V0V, %mm6 - movq m00XXXXXX, %mm7 + LOAD_IMMQ(mI0000000, %mm5) + LOAD_IMMQ(m000V0V0V, %mm6) + LOAD_IMMQ(m00XXXXXX, %mm7) + CLEANUP_IMMQ_LOADS(3) LOOP_START 1: @@ -875,8 +877,9 @@ PR_(imlib_mmx_reshade_copy_rgba_to_rgb): ENTER pxor %mm4, %mm4 - movq m0XXX0XXX, %mm5 - movq m0VVV0VVV, %mm6 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(m0VVV0VVV, %mm6) + CLEANUP_IMMQ_LOADS(2) subl $4, %esi subl $4, %edi @@ -939,8 +942,9 @@ PR_(imlib_mmx_reshade_copy_rgba_to_rgba): ENTER pxor %mm4, %mm4 - movq m0XXX0XXX, %mm5 - movq m0VVV0VVV, %mm6 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(m0VVV0VVV, %mm6) + CLEANUP_IMMQ_LOADS(2) subl $4, %esi subl $4, %edi @@ -1004,9 +1008,10 @@ PR_(imlib_mmx_reshade_copy_rgb_to_rgba): ENTER pxor %mm4, %mm4 - movq m0XXX0XXX, %mm5 - movq m0VVV0VVV, %mm6 - movq mX000X000, %mm7 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(m0VVV0VVV, %mm6) + LOAD_IMMQ(mX000X000, %mm7) + CLEANUP_IMMQ_LOADS(3) subl $4, %esi subl $4, %edi diff --git a/src/lib/asm_blend_cmod.S b/src/lib/asm_blend_cmod.S index 37eb06f..4a4fba6 100644 --- a/src/lib/asm_blend_cmod.S +++ b/src/lib/asm_blend_cmod.S @@ -112,21 +112,9 @@ .type PT_(imlib_mmx_reshade_copy_rgba_to_rgba_cmod,@function) .globl PR_(imlib_mmx_reshade_copy_rgb_to_rgba_cmod) .type PT_(imlib_mmx_reshade_copy_rgb_to_rgba_cmod,@function) - -/*\ Some useful masks \*/ -m0X000000: .byte 0, 0, 0, 0, 0, 0, 255, 0 -m10000000: .byte 0, 0, 0, 0, 0, 0, 0, 1 -m00XXXXXX: .byte 255, 255, 255, 255, 255, 255, 0, 0 -mVX000000: .byte 0, 0, 0, 0, 0, 0, 255, 127 -mV0000000: .byte 0, 0, 0, 0, 0, 0, 0, 128 -m0XXX0XXX: .byte 255, 255, 255, 0, 255, 255, 255, 0 -mX000X000: .byte 0, 0, 0, 255, 0, 0, 0, 255 -m10001000: .byte 0, 0, 0, 1, 0, 0, 0, 1 -m000V0V0V: .byte 127, 0, 127, 0, 127, 0, 0, 0 -mI0000000: .byte 0, 0, 0, 0, 0, 0, 0, 64 -m0VVV0VVV: .byte 127, 127, 127, 0, 127, 127, 127, 0 -c1: .word 0x1, 0x1, 0x1, 0x1 +#include "asm_loadimmq.S" + /*\ MMX register use: |*| %mm1 = Source value |*| %mm2 = Destination value @@ -364,7 +352,8 @@ PR_(imlib_mmx_blend_rgba_to_rgb_cmod): ENTER pxor %mm4, %mm4 - movq c1, %mm5 + LOAD_IMMQ(c1, %mm5) + CLEANUP_IMMQ_LOADS(1) LOOP_START 1: @@ -420,9 +409,10 @@ PR_(imlib_mmx_blend_rgba_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq m0X000000, %mm5 - movq m00XXXXXX, %mm6 - movq c1, %mm7 + LOAD_IMMQ(m0X000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + LOAD_IMMQ(c1, %mm7) + CLEANUP_IMMQ_LOADS(3) LOOP_START 1: @@ -475,7 +465,8 @@ PR_(imlib_mmx_blend_rgb_to_rgb_cmod): ENTER pxor %mm4, %mm4 - movq c1, %mm5 + LOAD_IMMQ(c1, %mm5) + CLEANUP_IMMQ_LOADS(1) /*\ Load alpha beforehand, as it's always amap(0xff) \*/ movzbl amap_ff, %eax @@ -519,9 +510,10 @@ PR_(imlib_mmx_blend_rgb_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq m0X000000, %mm5 - movq m00XXXXXX, %mm6 - movq c1, %mm7 + LOAD_IMMQ(m0X000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + LOAD_IMMQ(c1, %mm7) + CLEANUP_IMMQ_LOADS(3) LOOP_START 1: @@ -688,8 +680,9 @@ PR_(imlib_mmx_add_blend_rgba_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq mVX000000, %mm5 - movq m00XXXXXX, %mm6 + LOAD_IMMQ(mVX000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START 1: @@ -778,8 +771,9 @@ PR_(imlib_mmx_add_blend_rgb_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq mVX000000, %mm5 - movq m00XXXXXX, %mm6 + LOAD_IMMQ(mVX000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START 1: @@ -826,7 +820,8 @@ SIZE(imlib_mmx_add_blend_rgb_to_rgba_cmod) PR_(imlib_mmx_add_copy_rgba_to_rgb_cmod): ENTER - movq m0XXX0XXX, %mm5 + LOAD_IMMQ(m0XXX0XXX, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -970,8 +965,9 @@ PR_(imlib_mmx_subtract_blend_rgba_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq mV0000000, %mm5 - movq m00XXXXXX, %mm6 + LOAD_IMMQ(mV0000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START 1: @@ -1060,8 +1056,9 @@ PR_(imlib_mmx_subtract_blend_rgb_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq mV0000000, %mm5 - movq m00XXXXXX, %mm6 + LOAD_IMMQ(mV0000000, %mm5) + LOAD_IMMQ(m00XXXXXX, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START 1: @@ -1108,7 +1105,8 @@ SIZE(imlib_mmx_subtract_blend_rgb_to_rgba_cmod) PR_(imlib_mmx_subtract_copy_rgba_to_rgb_cmod): ENTER - movq m0XXX0XXX, %mm5 + LOAD_IMMQ(m0XXX0XXX, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -1146,7 +1144,8 @@ SIZE(imlib_mmx_subtract_copy_rgba_to_rgb_cmod) PR_(imlib_mmx_subtract_copy_rgba_to_rgba_cmod): ENTER - movq mX000X000, %mm5 + LOAD_IMMQ(mX000X000, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -1188,7 +1187,8 @@ SIZE(imlib_mmx_subtract_copy_rgba_to_rgba_cmod) PR_(imlib_mmx_subtract_copy_rgb_to_rgba_cmod): ENTER - movq mX000X000, %mm5 + LOAD_IMMQ(mX000X000, %mm5) + CLEANUP_IMMQ_LOADS(1) subl $4, %esi subl $4, %edi @@ -1227,7 +1227,8 @@ PR_(imlib_mmx_reshade_blend_rgba_to_rgb_cmod): ENTER pxor %mm4, %mm4 - movq m000V0V0V, %mm6 + LOAD_IMMQ(m000V0V0V, %mm6) + CLEANUP_IMMQ_LOADS(1) LOOP_START 1: @@ -1270,9 +1271,10 @@ PR_(imlib_mmx_reshade_blend_rgba_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq mI0000000, %mm5 - movq m000V0V0V, %mm6 - movq m00XXXXXX, %mm7 + LOAD_IMMQ(mI0000000, %mm5) + LOAD_IMMQ(m000V0V0V, %mm6) + LOAD_IMMQ(m00XXXXXX, %mm7) + CLEANUP_IMMQ_LOADS(3) LOOP_START 1: @@ -1322,7 +1324,8 @@ PR_(imlib_mmx_reshade_blend_rgb_to_rgb_cmod): ENTER pxor %mm4, %mm4 - movq m000V0V0V, %mm6 + LOAD_IMMQ(m000V0V0V, %mm6) + CLEANUP_IMMQ_LOADS(1) /*\ Load alpha beforehand, as it's always amap(0xff) \*/ movzbl amap_ff, %eax @@ -1365,9 +1368,10 @@ PR_(imlib_mmx_reshade_blend_rgb_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq mI0000000, %mm5 - movq m000V0V0V, %mm6 - movq m00XXXXXX, %mm7 + LOAD_IMMQ(mI0000000, %mm5) + LOAD_IMMQ(m000V0V0V, %mm6) + LOAD_IMMQ(m00XXXXXX, %mm7) + CLEANUP_IMMQ_LOADS(3) LOOP_START 1: @@ -1417,8 +1421,9 @@ PR_(imlib_mmx_reshade_copy_rgba_to_rgb_cmod): ENTER pxor %mm4, %mm4 - movq m0XXX0XXX, %mm5 - movq m0VVV0VVV, %mm6 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(m0VVV0VVV, %mm6) + CLEANUP_IMMQ_LOADS(2) subl $4, %esi subl $4, %edi @@ -1481,8 +1486,9 @@ PR_(imlib_mmx_reshade_copy_rgba_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq m0XXX0XXX, %mm5 - movq m0VVV0VVV, %mm6 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(m0VVV0VVV, %mm6) + CLEANUP_IMMQ_LOADS(2) subl $4, %esi subl $4, %edi @@ -1546,8 +1552,9 @@ PR_(imlib_mmx_reshade_copy_rgb_to_rgba_cmod): ENTER pxor %mm4, %mm4 - movq m0XXX0XXX, %mm5 - movq m0VVV0VVV, %mm6 + LOAD_IMMQ(m0XXX0XXX, %mm5) + LOAD_IMMQ(m0VVV0VVV, %mm6) + CLEANUP_IMMQ_LOADS(2) subl $4, %esi subl $4, %edi diff --git a/src/lib/asm_loadimmq.S b/src/lib/asm_loadimmq.S new file mode 100644 index 0000000..d9dd282 --- /dev/null +++ b/src/lib/asm_loadimmq.S @@ -0,0 +1,77 @@ +/*\ constants and macros for x86 assembly files. \*/ + + +/*\ Constants for asm_blend.S and asm_blend_cmod.S \*/ +/* m0X000000: .byte 0, 0, 0, 0, 0, 0, 255, 0 */ +#define m0X000000_H 0x00FF0000 +#define m0X000000_L 0x00000000 +/* m10000000: .byte 0, 0, 0, 0, 0, 0, 0, 1 */ +#define m10000000_H 0x01000000 +#define m10000000_L 0x00000000 +/* m00XXXXXX: .byte 255, 255, 255, 255, 255, 255, 0, 0 */ +#define m00XXXXXX_H 0x0000FFFF +#define m00XXXXXX_L 0xFFFFFFFF +/* mVX000000: .byte 0, 0, 0, 0, 0, 0, 255, 127 */ +#define mVX000000_H 0x7FFF0000 +#define mVX000000_L 0x00000000 +/* mV0000000: .byte 0, 0, 0, 0, 0, 0, 0, 128 */ +#define mV0000000_H 0x80000000 +#define mV0000000_L 0x00000000 +/* m0XXX0XXX: .byte 255, 255, 255, 0, 255, 255, 255, 0 */ +#define m0XXX0XXX_H 0x00FFFFFF +#define m0XXX0XXX_L 0x00FFFFFF +/* mX000X000: .byte 0, 0, 0, 255, 0, 0, 0, 255 */ +#define mX000X000_H 0xFF000000 +#define mX000X000_L 0xFF000000 +/* m10001000: .byte 0, 0, 0, 1, 0, 0, 0, 1 */ +#define m10001000_H 0x01000000 +#define m10001000_L 0x01000000 +/* m000V0V0V: .byte 127, 0, 127, 0, 127, 0, 0, 0 */ +#define m000V0V0V_H 0x0000007F +#define m000V0V0V_L 0x007F007F +/* mI0000000: .byte 0, 0, 0, 0, 0, 0, 0, 64 */ +#define mI0000000_H 0x40000000 +#define mI0000000_L 0x00000000 +/* m0VVV0VVV: .byte 127, 127, 127, 0, 127, 127, 127, 0 */ +#define m0VVV0VVV_H 0x007F7F7F +#define m0VVV0VVV_L 0x007F7F7F +/* c1: .word 0x1, 0x1, 0x1, 0x1 */ +#define c1_H 0x00010001 +#define c1_L 0x00010001 + + +/*\ Constants for asm_rgba.S \*/ +/* m_rb: .long 0x00f800f8, 0x00f800f8 */ +#define m_rb_H 0x00f800f8 +#define m_rb_L 0x00f800f8 +/* m_r: .long 0xf800f800, 0xf800f800 */ +#define m_r_H 0xf800f800 +#define m_r_L 0xf800f800 +/* m_g6: .long 0x0000fc00, 0x0000fc00 */ +#define m_g6_H 0x0000fc00 +#define m_g6_L 0x0000fc00 +/* m_g5: .long 0x0000f800, 0x0000f800 */ +#define m_g5_H 0x0000f800 +#define m_g5_L 0x0000f800 +/*\ Multiply constants to fake two shifts at once \*/ +/* mul_rgb565: .long 0x20000004, 0x20000004 */ +#define mul_rgb565_H 0x20000004 +#define mul_rgb565_L 0x20000004 +/* mul_bgr565: .long 0x00042000, 0x00042000 */ +#define mul_bgr565_H 0x00042000 +#define mul_bgr565_L 0x00042000 +/* mul_rgb555: .long 0x20000008, 0x20000008 */ +#define mul_rgb555_H 0x20000008 +#define mul_rgb555_L 0x20000008 +/* mul_bgr555: .long 0x00082000, 0x00082000 */ +#define mul_bgr555_H 0x00082000 +#define mul_bgr555_L 0x00082000 + + +/*\ Load an 8-byte constant to an mmx register \*/ +#define LOAD_IMMQ(mask, reg) \ + pushl $mask##_H ;\ + pushl $mask##_L ;\ + movq (%esp), reg +#define CLEANUP_IMMQ_LOADS(num_loaded) \ + addl $ num_loaded * 8, %esp diff --git a/src/lib/asm_rgba.S b/src/lib/asm_rgba.S index c6b0652..ba89617 100644 --- a/src/lib/asm_rgba.S +++ b/src/lib/asm_rgba.S @@ -55,16 +55,7 @@ .globl PR_(imlib_get_cpuid) .type PT_(imlib_get_cpuid,@function) -/*\ Some useful masks \*/ -m_rb: .long 0x00f800f8, 0x00f800f8 -m_r: .long 0xf800f800, 0xf800f800 -m_g6: .long 0x0000fc00, 0x0000fc00 -m_g5: .long 0x0000f800, 0x0000f800 -/*\ Multiply constants to fake two shifts at once \*/ -mul_rgb565: .long 0x20000004, 0x20000004 -mul_bgr565: .long 0x00042000, 0x00042000 -mul_rgb555: .long 0x20000008, 0x20000008 -mul_bgr555: .long 0x00082000, 0x00082000 +#include "asm_loadimmq.S" /*\ Common code \*/ /*\ Save registers, load common parameters \*/ @@ -114,18 +105,21 @@ mul_bgr555: .long 0x00082000, 0x00082000 PR_(imlib_mmx_bgr565_fast): - movq mul_bgr565, %mm7 /*\ This constant is the only difference \*/ + LOAD_IMMQ(mul_bgr565, %mm7) /*\ This constant is the only difference \*/ + CLEANUP_IMMQ_LOADS(1) jmp .rgb565_fast_entry SIZE(imlib_mmx_bgr565_fast) PR_(imlib_mmx_rgb565_fast): - movq mul_rgb565, %mm7 + LOAD_IMMQ(mul_rgb565, %mm7) + CLEANUP_IMMQ_LOADS(1) .rgb565_fast_entry: ENTER - movq m_rb, %mm5 - movq m_g6, %mm6 + LOAD_IMMQ(m_rb, %mm5) + LOAD_IMMQ(m_g6, %mm6) + CLEANUP_IMMQ_LOADS(1) LOOP_START @@ -193,18 +187,21 @@ SIZE(imlib_mmx_rgb565_fast) PR_(imlib_mmx_bgr555_fast): - movq mul_bgr555, %mm7 /*\ This constant is the only difference \*/ + LOAD_IMMQ(mul_bgr555, %mm7) /*\ This constant is the only difference \*/ + CLEANUP_IMMQ_LOADS(1) jmp .rgb555_fast_entry SIZE(imlib_mmx_bgr555_fast) PR_(imlib_mmx_rgb555_fast): - movq mul_rgb555, %mm7 + LOAD_IMMQ(mul_rgb555, %mm7) + CLEANUP_IMMQ_LOADS(1) .rgb555_fast_entry: ENTER - movq m_rb, %mm5 - movq m_g5, %mm6 + LOAD_IMMQ(m_rb, %mm5) + LOAD_IMMQ(m_g5, %mm6) + CLEANUP_IMMQ_LOADS(2) LOOP_START