forked from old/legacy-imlib2
merge PIC-happy code by PaX/Kevin Quinn/me
SVN revision: 16089
This commit is contained in:
parent
cfc76f12ed
commit
627e5b86d6
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue