1
0
forked from 0ad/0ad
0ad/source/graphics/Color_asm.asm
janwas 623e649acb # big refactoring in CPU-specific code, fix for dual core vs. HT detection
all cpu-related stuff is now defined in cpu.h (with cpu_ prefix and
fully encapsulated). fix quite brittle core/HT unit/package detection.
implement mkdir on VC8, where it is deprecated
add strdup on MacOSX
move ia32 code into separate subdir. functions implemented in asm are
called ia32_asm_*.
add some unix versions of sysdep functions (cannot test them)
timer: fix for amd64 linux

This was SVN commit r4995.
2007-04-25 18:19:35 +00:00

51 lines
1.0 KiB
NASM

%include "../lib/sysdep/ia32/ia32.inc"
;-------------------------------------------------------------------------------
; Color conversion (SSE)
;-------------------------------------------------------------------------------
; extern "C" u32 ConvertRGBColorTo4ub(const RGBColor& color)
[section .data]
align 16
zero:
dd 0.0
twofivefive:
dd 255.0
__SECT__
align 16
global sym(sse_ConvertRGBColorTo4ub)
sym(sse_ConvertRGBColorTo4ub):
mov eax, [esp+4]
; xmm0, 1, 2 = R, G, B
movss xmm4, [zero]
movss xmm0, [eax+8]
movss xmm1, [eax+4]
movss xmm2, [eax]
movss xmm5, [twofivefive]
; C = min(255, 255*max(C, 0)) ( == clamp(255*C, 0, 255) )
maxss xmm0, xmm4
maxss xmm1, xmm4
maxss xmm2, xmm4
mulss xmm0, xmm5
mulss xmm1, xmm5
mulss xmm2, xmm5
minss xmm0, xmm5
minss xmm1, xmm5
minss xmm2, xmm5
; convert to integer and combine channels using bit logic
cvtss2si eax, xmm0
cvtss2si ecx, xmm1
cvtss2si edx, xmm2
shl eax, 16
shl ecx, 8
or eax, 0xff000000
or edx, ecx
or eax, edx
ret