Lines Matching +full:high +full:- +full:performance
3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
10 // both inputs and the output are 64-bit unsigned integers.
14 // This is targeted at 32-bit x86 *only*, as this can be done directly in hardware
15 // on x86_64. The performance goal is ~40 cycles per divide, which is faster than
29 bsrl %ebx, %ecx // If the high word of b is zero, jump to
32 // High word of b is known to be non-zero on this branch
38 notl %ecx // bhi = (high word of b) << (31 - i) |
41 movl 12(%esp), %edx // Load the high and low words of a, and jump
42 movl 8(%esp), %eax // to [2] if the high word is larger than bhi
46 // High word of a is greater than or equal to (b >> (1 + i)) on this branch
48 divl %ebx // eax <-- qs, edx <-- r such that ahi:alo = bs*qs + r
59 sbbl %edx, %ecx // ECX:EBX = a - q*blo
62 subl %eax, %ecx // ECX:EBX = a - q*b
66 adcl 24(%esp), %ecx // ECX:EBX = a - (q-1)*b = result
75 2: // High word of a is greater than or equal to (b >> (1 + i)) on this branch
82 // Note that q is a number in (31-i).(1+i)
95 sbbl %edx, %ecx // ECX:EBX = a - q*blo
98 subl %eax, %ecx // ECX:EBX = a - q*b
102 adcl 24(%esp), %ecx // ECX:EBX = a - (q-1)*b = result
112 9: // High word of b is zero on this branch