Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- long SumProductArrayIndex(int[] array0, int[] array1) {
- long sum = 0;
- for (int i = 0; i < array0.Length; ++i) {
- sum += array0[i] * array1[i];
- }
- return sum;
- }
- long SumProductArrayIndexRef1(int[] array0, int[] array1) {
- long sum = 0;
- ref int ref1 = ref MemoryMarshal.GetArrayDataReference(array1);
- for (int i = 0; i < array0.Length; ++i) {
- sum += array0[i] * Unsafe.Add(ref ref1, i);;
- }
- return sum;
- }
- long SumProductSpanIndex(ReadOnlySpan<int> span0, ReadOnlySpan<int> span1) {
- long sum = 0;
- for (int i = 0; i < span0.Length; ++i) {
- sum += span0[i] * span1[i];
- }
- return sum;
- }
- long SumProductSpanIndexRef1(ReadOnlySpan<int> span0, ReadOnlySpan<int> span1) {
- long sum = 0;
- ref int ref1 = ref MemoryMarshal.GetReference(span1);
- for (int i = 0; i < span0.Length; ++i) {
- sum += span0[i] * Unsafe.Add(ref ref1, i);
- }
- return sum;
- }
- long SumProductFixedIncrement(int[] array0, int[] array1) {
- long sum = 0;
- fixed (int* vp0 = array0) {
- fixed (int* vp1 = array1) {
- int* vpp0 = vp0;
- int* vpp1 = vp1;
- int len = array0.Length;
- for (int i = 0; i < len; ++i) {
- sum += *vpp0 * *vpp1;
- ++vpp0;
- ++vpp1;
- }
- }
- }
- return sum;
- }
- long SumProductFixedIndex(int[] array0, int[] array1) {
- long sum = 0;
- fixed (int* vp0 = array0) {
- fixed (int* vp1 = array1) {
- int len = array0.Length;
- for (int i = 0; i < len; ++i) {
- sum += vp0[i] + vp1[i];
- }
- }
- }
- return sum;
- }
- long SumProductPtrIncrement(int* ptr0, int* ptr1, int length) {
- long sum = 0;
- int* vpp0 = ptr0;
- int* vpp1 = ptr1;
- for (int i = 0; i < length; ++i) {
- sum += *vpp0 * *vpp1;
- ++vpp0;
- ++vpp1;
- }
- return sum;
- }
- long SumProductPtrIndex(int* ptr0, int* ptr1, int length) {
- long sum = 0;
- int* vpp0 = ptr0;
- int* vpp1 = ptr1;
- for (int i = 0; i < length; ++i) {
- sum += vpp0[i] + vpp1[i];
- }
- return sum;
- }
- long SumProductRefIncrement(int[] array0, int[] array1) {
- long sum = 0;
- ref int vr0 = ref MemoryMarshal.GetArrayDataReference(array0);
- ref int vr1 = ref MemoryMarshal.GetArrayDataReference(array1);
- int length = array0.Length;
- for (int i = 0; i < length; ++i) {
- sum += vr0 * vr1;
- vr0 = ref Unsafe.Add(ref vr0, 1);
- vr1 = ref Unsafe.Add(ref vr1, 1);
- }
- return sum;
- }
- long SumProductRefIndex(int[] array0, int[] array1) {
- long sum = 0;
- ref int vr0 = ref MemoryMarshal.GetArrayDataReference(array0);
- ref int vr1 = ref MemoryMarshal.GetArrayDataReference(array1);
- int length = array0.Length;
- for (int i = 0; i < length; ++i) {
- sum += Unsafe.Add(ref vr0, i) * Unsafe.Add(ref vr1, i);
- }
- return sum;
- }
- long SumProductSpanRefIncrement(ReadOnlySpan<int> span0, ReadOnlySpan<int> span1) {
- long sum = 0;
- ref int vr0 = ref MemoryMarshal.GetReference(span0);
- ref int vr1 = ref MemoryMarshal.GetReference(span1);
- int length = span0.Length;
- for (int i = 0; i < length; ++i) {
- sum += vr0 * vr1;
- vr0 = ref Unsafe.Add(ref vr0, 1);
- vr1 = ref Unsafe.Add(ref vr1, 1);
- }
- return sum;
- }
- long SumProductSpanRefIndex(ReadOnlySpan<int> span0, ReadOnlySpan<int> span1) {
- long sum = 0;
- ref int vr0 = ref MemoryMarshal.GetReference(span0);
- ref int vr1 = ref MemoryMarshal.GetReference(span1);
- int length = span0.Length;
- for (int i = 0; i < length; ++i) {
- sum += Unsafe.Add(ref vr0, i) * Unsafe.Add(ref vr1, i);
- }
- return sum;
- }
- ---
- SumProductArrayIndex|4_0 (Int32[], Int32[])
- L0000 sub rsp, 0x28
- L0004 xor eax, eax
- L0006 xor r8d, r8d
- L0009 mov r9d, [rcx+8]
- L000d test r9d, r9d
- L0010 jle short L006c
- L0012 test rdx, rdx
- L0015 setne r10b
- L0019 movzx r10d, r10b
- L001d test r10b, 1
- L0021 je short L004a
- L0023 cmp [rdx+8], r9d
- L0027 jl short L004a
- L0029 movsxd r10, r8d
- L002c mov r11d, [rcx+r10*4+0x10]
- L0031 imul r11d, [rdx+r10*4+0x10]
- L0037 movsxd r10, r11d
- L003a add r10, rax
- L003d mov rax, r10
- L0040 inc r8d
- L0043 cmp r9d, r8d
- L0046 jg short L0029
- L0048 jmp short L006c
- L004a movsxd r10, r8d
- L004d mov r11d, [rcx+r10*4+0x10]
- L0052 cmp r8d, [rdx+8]
- L0056 jae short L0071
- L0058 imul r11d, [rdx+r10*4+0x10]
- L005e movsxd r10, r11d
- L0061 add rax, r10
- L0064 inc r8d
- L0067 cmp r9d, r8d
- L006a jg short L004a
- L006c add rsp, 0x28
- L0070 ret
- L0071 call 0x00007ffdbff0abc0
- L0076 int3
- SumProductArrayIndexRef1|4_1 (Int32[], Int32[])
- L0000 xor eax, eax
- L0002 cmp [rdx], edx
- L0004 add rdx, 0x10
- L0008 xor r8d, r8d
- L000b mov r9d, [rcx+8]
- L000f test r9d, r9d
- L0012 jle short L002f
- L0014 movsxd r10, r8d
- L0017 mov r11d, [rcx+r10*4+0x10]
- L001c imul r11d, [rdx+r10*4]
- L0021 movsxd r10, r11d
- L0024 add rax, r10
- L0027 inc r8d
- L002a cmp r9d, r8d
- L002d jg short L0014
- L002f ret
- SumProductSpanIndex|4_2 (ReadOnlySpan <Int32>, ReadOnlySpan <Int32>)
- L0000 push rsi
- L0001 sub rsp, 0x20
- L0005 mov r8, [rcx]
- L0008 mov ecx, [rcx+8]
- L000b xor eax, eax
- L000d xor r9d, r9d
- L0010 test ecx, ecx
- L0012 jle short L003a
- L0014 mov r10d, [rdx+8]
- L0018 mov rdx, [rdx]
- L001b movsxd r11, r9d
- L001e mov esi, [r8+r11*4]
- L0022 cmp r9d, r10d
- L0025 jae short L0040
- L0027 imul esi, [rdx+r11*4]
- L002c movsxd r11, esi
- L002f add rax, r11
- L0032 inc r9d
- L0035 cmp r9d, ecx
- L0038 jl short L001b
- L003a add rsp, 0x20
- L003e pop rsi
- L003f ret
- L0040 call 0x00007ffdbff0abc0
- L0045 int3
- SumProductSpanIndexRef1|4_3 (ReadOnlySpan <Int32>, ReadOnlySpan <Int32>)
- L0000 mov rax, [rcx]
- L0003 mov ecx, [rcx+8]
- L0006 xor r8d, r8d
- L0009 mov rdx, [rdx]
- L000c xor r9d, r9d
- L000f test ecx, ecx
- L0011 jle short L002d
- L0013 movsxd r10, r9d
- L0016 mov r11d, [rax+r10*4]
- L001a imul r11d, [rdx+r10*4]
- L001f movsxd r10, r11d
- L0022 add r8, r10
- L0025 inc r9d
- L0028 cmp r9d, ecx
- L002b jl short L0013
- L002d mov rax, r8
- L0030 ret
- SumProductFixedIncrement|4_4 (Int32[], Int32[])
- L0000 sub rsp, 0x38
- L0004 xor eax, eax
- L0006 mov [rsp+0x30], rax
- L000b mov [rsp+0x28], rax
- L0010 xor eax, eax
- L0012 mov [rsp+0x30], rcx
- L0017 test rcx, rcx
- L001a je short L0028
- L001c mov r8, [rsp+0x30]
- L0021 cmp dword ptr [r8+8], 0
- L0026 jne short L002d
- L0028 xor r8d, r8d
- L002b jmp short L0042
- L002d mov r8, [rsp+0x30]
- L0032 cmp dword ptr [r8+8], 0
- L0037 jbe short L00a7
- L0039 mov r8, [rsp+0x30]
- L003e add r8, 0x10
- L0042 mov [rsp+0x28], rdx
- L0047 test rdx, rdx
- L004a je short L0057
- L004c mov rdx, [rsp+0x28]
- L0051 cmp dword ptr [rdx+8], 0
- L0055 jne short L005b
- L0057 xor edx, edx
- L0059 jmp short L006f
- L005b mov rdx, [rsp+0x28]
- L0060 cmp dword ptr [rdx+8], 0
- L0064 jbe short L00a7
- L0066 mov rdx, [rsp+0x28]
- L006b add rdx, 0x10
- L006f mov ecx, [rcx+8]
- L0072 xor r9d, r9d
- L0075 test ecx, ecx
- L0077 jle short L0096
- L0079 mov r10d, [r8]
- L007c imul r10d, [rdx]
- L0080 movsxd r10, r10d
- L0083 add rax, r10
- L0086 add r8, 4
- L008a add rdx, 4
- L008e inc r9d
- L0091 cmp r9d, ecx
- L0094 jl short L0079
- L0096 xor edx, edx
- L0098 mov [rsp+0x28], rdx
- L009d mov [rsp+0x30], rdx
- L00a2 add rsp, 0x38
- L00a6 ret
- L00a7 call 0x00007ffdbff0abc0
- L00ac int3
- SumProductFixedIndex|4_5 (Int32[], Int32[])
- L0000 sub rsp, 0x38
- L0004 xor eax, eax
- L0006 mov [rsp+0x30], rax
- L000b mov [rsp+0x28], rax
- L0010 xor eax, eax
- L0012 mov [rsp+0x30], rcx
- L0017 test rcx, rcx
- L001a je short L0028
- L001c mov r8, [rsp+0x30]
- L0021 cmp dword ptr [r8+8], 0
- L0026 jne short L002d
- L0028 xor r8d, r8d
- L002b jmp short L0042
- L002d mov r8, [rsp+0x30]
- L0032 cmp dword ptr [r8+8], 0
- L0037 jbe short L00a3
- L0039 mov r8, [rsp+0x30]
- L003e add r8, 0x10
- L0042 mov [rsp+0x28], rdx
- L0047 test rdx, rdx
- L004a je short L0057
- L004c mov rdx, [rsp+0x28]
- L0051 cmp dword ptr [rdx+8], 0
- L0055 jne short L005b
- L0057 xor edx, edx
- L0059 jmp short L006f
- L005b mov rdx, [rsp+0x28]
- L0060 cmp dword ptr [rdx+8], 0
- L0064 jbe short L00a3
- L0066 mov rdx, [rsp+0x28]
- L006b add rdx, 0x10
- L006f mov ecx, [rcx+8]
- L0072 xor r9d, r9d
- L0075 test ecx, ecx
- L0077 jle short L0092
- L0079 movsxd r10, r9d
- L007c mov r11d, [r8+r10*4]
- L0080 add r11d, [rdx+r10*4]
- L0084 movsxd r10, r11d
- L0087 add rax, r10
- L008a inc r9d
- L008d cmp r9d, ecx
- L0090 jl short L0079
- L0092 xor edx, edx
- L0094 mov [rsp+0x28], rdx
- L0099 mov [rsp+0x30], rdx
- L009e add rsp, 0x38
- L00a2 ret
- L00a3 call 0x00007ffdbff0abc0
- L00a8 int3
- SumProductPtrIncrement|4_6 (Int32*, Int32*, Int32)
- L0000 xor eax, eax
- L0002 xor r9d, r9d
- L0005 test r8d, r8d
- L0008 jle short L0027
- L000a mov r10d, [rcx]
- L000d imul r10d, [rdx]
- L0011 movsxd r10, r10d
- L0014 add rax, r10
- L0017 add rcx, 4
- L001b add rdx, 4
- L001f inc r9d
- L0022 cmp r9d, r8d
- L0025 jl short L000a
- L0027 ret
- SumProductPtrIndex|4_7 (Int32*, Int32*, Int32)
- L0000 xor eax, eax
- L0002 xor r9d, r9d
- L0005 test r8d, r8d
- L0008 jle short L0023
- L000a movsxd r10, r9d
- L000d mov r11d, [rcx+r10*4]
- L0011 add r11d, [rdx+r10*4]
- L0015 movsxd r10, r11d
- L0018 add rax, r10
- L001b inc r9d
- L001e cmp r9d, r8d
- L0021 jl short L000a
- L0023 ret
- SumProductRefIncrement|4_8 (Int32[], Int32[])
- L0000 xor eax, eax
- L0002 cmp [rcx], ecx
- L0004 lea r8, [rcx+0x10]
- L0008 cmp [rdx], edx
- L000a add rdx, 0x10
- L000e mov ecx, [rcx+8]
- L0011 xor r9d, r9d
- L0014 test ecx, ecx
- L0016 jle short L0035
- L0018 mov r10d, [r8]
- L001b imul r10d, [rdx]
- L001f movsxd r10, r10d
- L0022 add rax, r10
- L0025 add r8, 4
- L0029 add rdx, 4
- L002d inc r9d
- L0030 cmp r9d, ecx
- L0033 jl short L0018
- L0035 ret
- SumProductRefIndex|4_9 (Int32[], Int32[])
- L0000 xor eax, eax
- L0002 cmp [rcx], ecx
- L0004 lea r8, [rcx+0x10]
- L0008 cmp [rdx], edx
- L000a add rdx, 0x10
- L000e mov ecx, [rcx+8]
- L0011 xor r9d, r9d
- L0014 test ecx, ecx
- L0016 jle short L0032
- L0018 movsxd r10, r9d
- L001b mov r11d, [r8+r10*4]
- L001f imul r11d, [rdx+r10*4]
- L0024 movsxd r10, r11d
- L0027 add rax, r10
- L002a inc r9d
- L002d cmp r9d, ecx
- L0030 jl short L0018
- L0032 ret
- SumProductSpanRefIncrement|4_10 (ReadOnlySpan <Int32>, ReadOnlySpan <Int32>)
- L0000 xor eax, eax
- L0002 mov r8, [rcx]
- L0005 mov rdx, [rdx]
- L0008 mov ecx, [rcx+8]
- L000b xor r9d, r9d
- L000e test ecx, ecx
- L0010 jle short L002f
- L0012 mov r10d, [r8]
- L0015 imul r10d, [rdx]
- L0019 movsxd r10, r10d
- L001c add rax, r10
- L001f add r8, 4
- L0023 add rdx, 4
- L0027 inc r9d
- L002a cmp r9d, ecx
- L002d jl short L0012
- L002f ret
- SumProductSpanRefIndex|4_11 (ReadOnlySpan <Int32>, ReadOnlySpan <Int32>)
- L0000 xor eax, eax
- L0002 mov r8, [rcx]
- L0005 mov rdx, [rdx]
- L0008 mov ecx, [rcx+8]
- L000b xor r9d, r9d
- L000e test ecx, ecx
- L0010 jle short L002c
- L0012 movsxd r10, r9d
- L0015 mov r11d, [r8+r10*4]
- L0019 imul r11d, [rdx+r10*4]
- L001e movsxd r10, r11d
- L0021 add rax, r10
- L0024 inc r9d
- L0027 cmp r9d, ecx
- L002a jl short L0012
- L002c ret
Advertisement
Add Comment
Please, Sign In to add comment