|
|
| version 1.6, 2004/06/26 15:48:35 | version 1.7, 2004/07/02 15:02:38 |
|---|---|
| Line 658 snddrv_stop(void) | Line 658 snddrv_stop(void) |
| #if defined(GCC_CPU_ARCH_AMD64) | #if defined(GCC_CPU_ARCH_AMD64) |
| void PARTSCALL | void PARTSCALL |
| _saturation_s16(SINT16 *dst, const SINT32 *src, UINT size) | |
| { | |
| asm volatile ( | |
| "movq %0, %%rcx;" | |
| "movq %1, %%rdx;" | |
| "movl %2, %%ebx;" | |
| "shrl $1, %%ebx;" | |
| "je .ss16_ed;" | |
| ".ss16_lp:" | |
| "movl (%%rdx), %%eax;" | |
| "cmpl $0x000008000, %%eax;" | |
| "jl .ss16_min;" | |
| "movw $0x7fff, %%ax;" | |
| "jmp .ss16_set;" | |
| ".ss16_min:" | |
| "cmpl $0x0ffff8000, %%eax;" | |
| "jg .ss16_set;" | |
| "movw $0x8001, %%ax;" | |
| ".ss16_set:" | |
| "leal 4(%%rdx), %%edx;" | |
| "movw %%ax, (%%rcx);" | |
| "decl %%ebx;" | |
| "leal 2(%%rcx), %%ecx;" | |
| "jne .ss16_lp;" | |
| ".ss16_ed:" | |
| : /* output */ | |
| : "m" (dst), "m" (src), "m" (size) | |
| : "ebx"); | |
| } | |
| void PARTSCALL | |
| _saturation_s16x(SINT16 *dst, const SINT32 *src, UINT size) | |
| { | |
| asm volatile ( | |
| "movq %0, %%rcx;" | |
| "movq %1, %%rdx;" | |
| "movl %2, %%ebx;" | |
| "shrl $2, %%ebx;" | |
| "je .ss16x_ed;" | |
| ".ss16x_lp:" | |
| "movl (%%rdx), %%eax;" | |
| "cmpl $0x000008000, %%eax;" | |
| "jl .ss16xl_min;" | |
| "movw $0x7fff, %%ax;" | |
| "jmp .ss16xl_set;" | |
| ".ss16xl_min:" | |
| "cmpl $0x0ffff8000, %%eax;" | |
| "jg .ss16xl_set;" | |
| "movw $0x8001, %%ax;" | |
| ".ss16xl_set:" | |
| "movw %%ax, 2(%%rcx);" | |
| "movl 4(%%rdx), %%eax;" | |
| "cmpl $0x000008000, %%eax;" | |
| "jl .ss16xr_min;" | |
| "movw $0x7fff, %%ax;" | |
| "jmp .ss16xr_set;" | |
| ".ss16xr_min:" | |
| "cmpl $0x0ffff8000, %%eax;" | |
| "jg .ss16xr_set;" | |
| "mov $0x8001, %%ax;" | |
| ".ss16xr_set:" | |
| "movw %%ax, (%%rcx);" | |
| "leal 8(%%rdx), %%edx;" | |
| "decl %%ebx;" | |
| "leal 4(%%rcx), %%ecx;" | |
| "jne .ss16x_lp;" | |
| ".ss16x_ed:" | |
| : /* output */ | |
| : "m" (dst), "m" (src), "m" (size) | |
| : "ebx"); | |
| } | |
| void PARTSCALL | |
| saturation_s16mmx(SINT16 *dst, const SINT32 *src, UINT size) | saturation_s16mmx(SINT16 *dst, const SINT32 *src, UINT size) |
| { | { |