janwas
623e649acb
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.
51 lines
1.0 KiB
NASM
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
|