183 |
} |
} |
184 |
#if ARCH_X86 |
#if ARCH_X86 |
185 |
case ASM_X86_MMX_SSE: { |
case ASM_X86_MMX_SSE: { |
186 |
int result; |
int result = 0; |
187 |
__asm__ __volatile__ ( |
__asm__ __volatile__ ( |
188 |
"movss (%2), %%xmm0 # load LoopEnd\n\t" |
"movss (%2), %%xmm0 # load LoopEnd\n\t" |
189 |
"movss (%1), %%xmm1 # load Pos\n\t" |
"movss (%1), %%xmm1 # load Pos\n\t" |
190 |
"comiss %%xmm0, %%xmm1 # LoopEnd <> Pos\n\t" |
"comiss %%xmm0, %%xmm1 # LoopEnd <> Pos\n\t" |
|
"movl $0,%%eax # result = 0\n\t" |
|
191 |
"jb 1f # jump if no work needs to be done\n\t" |
"jb 1f # jump if no work needs to be done\n\t" |
192 |
"movss (%3), %%xmm2 # load LoopSize\n\t" |
"movss (%3), %%xmm2 # load LoopSize\n\t" |
193 |
"subss %%xmm0, %%xmm1 # Pos - LoopEnd\n\t" |
"subss %%xmm0, %%xmm1 # Pos - LoopEnd\n\t" |
202 |
//done with fmodf |
//done with fmodf |
203 |
"addss %%xmm0, %%xmm3 # add LoopStart\n\t" |
"addss %%xmm0, %%xmm3 # add LoopStart\n\t" |
204 |
"movss %%xmm3, (%1) # update Pos\n\t" |
"movss %%xmm3, (%1) # update Pos\n\t" |
205 |
"movl $1,%%eax # result = 1\n\t" |
"movl $1, (%0) # result = 1\n\t" |
206 |
".balign 16 \n\t" |
".balign 16 \n\t" |
207 |
"1:\n\t" |
"1:\n\t" |
208 |
: "=a" (result) /* %0 */ |
:: "r" (&result), /* %0 */ |
209 |
: "r" (vPos), /* %1 */ |
"r" (vPos), /* %1 */ |
210 |
"r" (&LoopEnd), /* %2 */ |
"r" (&LoopEnd), /* %2 */ |
211 |
"r" (&LoopSize), /* %3 */ |
"r" (&LoopSize), /* %3 */ |
212 |
"r" (&LoopStart) /* %4 */ |
"r" (&LoopStart) /* %4 */ |