FIX FIX! evil mmx code! missing decls! thanks dragan - mej ::)
SVN revision: 2487
This commit is contained in:
parent
784415ca0a
commit
e8c7419bf8
130
src/asm_blend.S
130
src/asm_blend.S
|
@ -73,7 +73,6 @@ m000V0V0V: .byte 127, 0, 127, 0, 127, 0, 0, 0
|
||||||
mI0000000: .byte 0, 0, 0, 0, 0, 0, 0, 64
|
mI0000000: .byte 0, 0, 0, 0, 0, 0, 0, 64
|
||||||
m0VVV0VVV: .byte 127, 127, 127, 0, 127, 127, 127, 0
|
m0VVV0VVV: .byte 127, 127, 127, 0, 127, 127, 127, 0
|
||||||
|
|
||||||
|
|
||||||
/*\ MMX register use:
|
/*\ MMX register use:
|
||||||
|*| %mm1 = Source value
|
|*| %mm1 = Source value
|
||||||
|*| %mm2 = Destination value
|
|*| %mm2 = Destination value
|
||||||
|
@ -179,6 +178,67 @@ __imlib_mmx_blend_rgba_to_rgb:
|
||||||
LEAVE
|
LEAVE
|
||||||
|
|
||||||
|
|
||||||
|
__imlib_mmx_copy_rgba_to_rgb:
|
||||||
|
ENTER
|
||||||
|
|
||||||
|
movq m0XXX0XXX, %mm5
|
||||||
|
movq mX000X000, %mm6
|
||||||
|
|
||||||
|
decl %edx
|
||||||
|
js .end_copy_rgb
|
||||||
|
decl %ebx
|
||||||
|
js .end_copy_rgb
|
||||||
|
.for_loop_y_copy_rgb:
|
||||||
|
/*\ Load width \*/
|
||||||
|
movl %ebx, %ecx
|
||||||
|
|
||||||
|
/*\ Check for oddness \*/
|
||||||
|
sarl $1, %ecx
|
||||||
|
jc .for_loop_x_copy_rgb
|
||||||
|
|
||||||
|
/*\ Load source and destination \*/
|
||||||
|
movd (%esi, %ecx, 8), %mm1
|
||||||
|
movd (%edi, %ecx, 8), %mm2
|
||||||
|
|
||||||
|
/*\ Clear alpha channel of source, get alpha of destination \*/
|
||||||
|
pand %mm5, %mm1
|
||||||
|
pand %mm6, %mm2
|
||||||
|
|
||||||
|
/*\ d = d | s, and save \*/
|
||||||
|
por %mm1, %mm2
|
||||||
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
decl %ecx
|
||||||
|
js .skip_x_copy_rgb
|
||||||
|
|
||||||
|
.for_loop_x_copy_rgb:
|
||||||
|
/*\ Load source and destination \*/
|
||||||
|
movq (%esi, %ecx, 8), %mm1
|
||||||
|
movq (%edi, %ecx, 8), %mm2
|
||||||
|
|
||||||
|
/*\ Clear alpha channel of source \*/
|
||||||
|
pand %mm5, %mm1
|
||||||
|
pand %mm6, %mm2
|
||||||
|
|
||||||
|
/*\ d = d | s, and save \*/
|
||||||
|
por %mm1, %mm2
|
||||||
|
movq %mm2, (%edi, %ecx, 8)
|
||||||
|
|
||||||
|
decl %ecx
|
||||||
|
jns .for_loop_x_copy_rgb
|
||||||
|
.skip_x_copy_rgb:
|
||||||
|
|
||||||
|
/*\ Add row widths \*/
|
||||||
|
movl sw, %ecx
|
||||||
|
leal (%esi, %ecx, 4), %esi
|
||||||
|
movl dw, %ecx
|
||||||
|
leal (%edi, %ecx, 4), %edi
|
||||||
|
decl %edx
|
||||||
|
jns .for_loop_y_copy_rgb
|
||||||
|
|
||||||
|
.end_copy_rgb:
|
||||||
|
LEAVE
|
||||||
|
|
||||||
|
|
||||||
__imlib_mmx_blend_rgba_to_rgba:
|
__imlib_mmx_blend_rgba_to_rgba:
|
||||||
ENTER
|
ENTER
|
||||||
|
|
||||||
|
@ -245,66 +305,6 @@ __imlib_mmx_blend_rgba_to_rgba:
|
||||||
LEAVE
|
LEAVE
|
||||||
|
|
||||||
|
|
||||||
__imlib_mmx_copy_rgba_to_rgb:
|
|
||||||
ENTER
|
|
||||||
|
|
||||||
movq m0XXX0XXX, %mm5
|
|
||||||
movq mX000X000, %mm6
|
|
||||||
|
|
||||||
decl %edx
|
|
||||||
js .end_copy_rgb
|
|
||||||
decl %ebx
|
|
||||||
js .end_copy_rgb
|
|
||||||
.for_loop_y_copy_rgb:
|
|
||||||
/*\ Load width \*/
|
|
||||||
movl %ebx, %ecx
|
|
||||||
|
|
||||||
/*\ Check for oddness \*/
|
|
||||||
sarl $1, %ecx
|
|
||||||
jc .for_loop_x_copy_rgb
|
|
||||||
|
|
||||||
/*\ Load source and destination \*/
|
|
||||||
movd (%esi, %ecx, 8), %mm1
|
|
||||||
movd (%edi, %ecx, 8), %mm2
|
|
||||||
|
|
||||||
/*\ Clear alpha channel of source, get alpha of destination \*/
|
|
||||||
pand %mm5, %mm1
|
|
||||||
pand %mm6, %mm2
|
|
||||||
|
|
||||||
/*\ d = d | s, and save \*/
|
|
||||||
por %mm1, %mm2
|
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
|
||||||
jz .skip_x_copy_rgb
|
|
||||||
|
|
||||||
.for_loop_x_copy_rgb:
|
|
||||||
/*\ Load source and destination \*/
|
|
||||||
movq (%esi, %ecx, 8), %mm1
|
|
||||||
movq (%edi, %ecx, 8), %mm2
|
|
||||||
|
|
||||||
/*\ Clear alpha channel of source \*/
|
|
||||||
pand %mm5, %mm1
|
|
||||||
pand %mm6, %mm2
|
|
||||||
|
|
||||||
/*\ d = d | s, and save \*/
|
|
||||||
por %mm1, %mm2
|
|
||||||
movq %mm2, (%edi, %ecx, 8)
|
|
||||||
|
|
||||||
decl %ecx
|
|
||||||
jns .for_loop_x_copy_rgb
|
|
||||||
.skip_x_copy_rgb:
|
|
||||||
|
|
||||||
/*\ Add row widths \*/
|
|
||||||
movl sw, %ecx
|
|
||||||
leal (%esi, %ecx, 4), %esi
|
|
||||||
movl dw, %ecx
|
|
||||||
leal (%edi, %ecx, 4), %edi
|
|
||||||
decl %edx
|
|
||||||
jns .for_loop_y_copy_rgb
|
|
||||||
|
|
||||||
.end_copy_rgb:
|
|
||||||
LEAVE
|
|
||||||
|
|
||||||
|
|
||||||
__imlib_mmx_copy_rgba_to_rgba:
|
__imlib_mmx_copy_rgba_to_rgba:
|
||||||
ENTER
|
ENTER
|
||||||
|
|
||||||
|
@ -324,6 +324,7 @@ __imlib_mmx_copy_rgba_to_rgba:
|
||||||
movd (%esi, %ecx, 8), %mm1
|
movd (%esi, %ecx, 8), %mm1
|
||||||
movd %mm1, (%edi, %ecx, 8)
|
movd %mm1, (%edi, %ecx, 8)
|
||||||
|
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_copy_rgba
|
jz .skip_x_copy_rgba
|
||||||
|
|
||||||
.for_loop_x_copy_rgba:
|
.for_loop_x_copy_rgba:
|
||||||
|
@ -369,6 +370,7 @@ __imlib_mmx_copy_rgb_to_rgba:
|
||||||
por %mm5, %mm1
|
por %mm5, %mm1
|
||||||
movd %mm1, (%edi, %ecx, 8)
|
movd %mm1, (%edi, %ecx, 8)
|
||||||
|
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_copy_rgb_rgba
|
jz .skip_x_copy_rgb_rgba
|
||||||
|
|
||||||
.for_loop_x_copy_rgb_rgba:
|
.for_loop_x_copy_rgb_rgba:
|
||||||
|
@ -535,6 +537,7 @@ __imlib_mmx_add_copy_rgba_to_rgb:
|
||||||
/*\ d = d + s, unsigned saturation, and save \*/
|
/*\ d = d + s, unsigned saturation, and save \*/
|
||||||
paddusb %mm1, %mm2
|
paddusb %mm1, %mm2
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_add_copy_rgb
|
jz .skip_x_add_copy_rgb
|
||||||
|
|
||||||
.for_loop_x_add_copy_rgb:
|
.for_loop_x_add_copy_rgb:
|
||||||
|
@ -587,6 +590,7 @@ __imlib_mmx_add_copy_rgba_to_rgba:
|
||||||
/*\ d = d + s, unsigned saturation, and save \*/
|
/*\ d = d + s, unsigned saturation, and save \*/
|
||||||
paddusb %mm1, %mm2
|
paddusb %mm1, %mm2
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_add_copy_rgba
|
jz .skip_x_add_copy_rgba
|
||||||
|
|
||||||
.for_loop_x_add_copy_rgba:
|
.for_loop_x_add_copy_rgba:
|
||||||
|
@ -756,6 +760,7 @@ __imlib_mmx_subtract_copy_rgba_to_rgb:
|
||||||
/*\ d = d - s, unsigned saturation, and save \*/
|
/*\ d = d - s, unsigned saturation, and save \*/
|
||||||
psubusb %mm1, %mm2
|
psubusb %mm1, %mm2
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_subtract_copy_rgb
|
jz .skip_x_subtract_copy_rgb
|
||||||
|
|
||||||
.for_loop_x_subtract_copy_rgb:
|
.for_loop_x_subtract_copy_rgb:
|
||||||
|
@ -816,6 +821,7 @@ __imlib_mmx_subtract_copy_rgba_to_rgba:
|
||||||
/*\ Negate result alphas \*/
|
/*\ Negate result alphas \*/
|
||||||
pxor %mm5, %mm2
|
pxor %mm5, %mm2
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_subtract_copy_rgba
|
jz .skip_x_subtract_copy_rgba
|
||||||
|
|
||||||
.for_loop_x_subtract_copy_rgba:
|
.for_loop_x_subtract_copy_rgba:
|
||||||
|
@ -1012,6 +1018,7 @@ __imlib_mmx_reshade_copy_rgba_to_rgb:
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
|
||||||
/*\ MMX ops don't set flags \*/
|
/*\ MMX ops don't set flags \*/
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_reshade_copy_rgb
|
jz .skip_x_reshade_copy_rgb
|
||||||
|
|
||||||
.for_loop_x_reshade_copy_rgb:
|
.for_loop_x_reshade_copy_rgb:
|
||||||
|
@ -1098,6 +1105,7 @@ __imlib_mmx_reshade_copy_rgba_to_rgba:
|
||||||
movd %mm2, (%edi, %ecx, 8)
|
movd %mm2, (%edi, %ecx, 8)
|
||||||
|
|
||||||
/*\ MMX ops don't set flags \*/
|
/*\ MMX ops don't set flags \*/
|
||||||
|
decl %ecx
|
||||||
jz .skip_x_reshade_copy_rgba
|
jz .skip_x_reshade_copy_rgba
|
||||||
|
|
||||||
.for_loop_x_reshade_copy_rgba:
|
.for_loop_x_reshade_copy_rgba:
|
||||||
|
|
11
src/blend.c
11
src/blend.c
|
@ -703,9 +703,7 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src,
|
||||||
if (blend)
|
if (blend)
|
||||||
blender = __imlib_BlendRGBToRGBA;
|
blender = __imlib_BlendRGBToRGBA;
|
||||||
else
|
else
|
||||||
/* guilty mmx code - bad - wrong - overwrites memeory! */
|
blender = __imlib_mmx_copy_rgba_to_rgba;
|
||||||
/* blender = __imlib_mmx_copy_rgba_to_rgba;*/
|
|
||||||
blender = __imlib_CopyRGBAToRGBA;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -717,8 +715,7 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src,
|
||||||
/* blender = __imlib_mmx_blend_rgba_to_rgba;*/
|
/* blender = __imlib_mmx_blend_rgba_to_rgba;*/
|
||||||
blender = __imlib_BlendRGBAToRGBA;
|
blender = __imlib_BlendRGBAToRGBA;
|
||||||
else
|
else
|
||||||
/* possibly evil mmx code */
|
blender = __imlib_mmx_copy_rgba_to_rgba;
|
||||||
/* blender = __imlib_mmx_copy_rgba_to_rgba;*/
|
|
||||||
blender = __imlib_CopyRGBAToRGBA;
|
blender = __imlib_CopyRGBAToRGBA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -727,9 +724,7 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src,
|
||||||
if (blend)
|
if (blend)
|
||||||
blender = __imlib_mmx_blend_rgba_to_rgb;
|
blender = __imlib_mmx_blend_rgba_to_rgb;
|
||||||
else
|
else
|
||||||
/* another possible candidate */
|
blender = __imlib_mmx_copy_rgba_to_rgb;
|
||||||
/* blender = __imlib_mmx_copy_rgba_to_rgb;*/
|
|
||||||
blender = __imlib_CopyRGBAToRGB;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OP_ADD:
|
case OP_ADD:
|
||||||
|
|
Loading…
Reference in New Issue