Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3062.0
- Raytracer2.Benchmarking.CircleTest.Intersection()
- for (int j = 0, l = n; j < l; j++)
- ^^^^^^^^^
- xor edi,edi
- for (int j = 0, l = n; j < l; j++)
- ^^^^^
- mov ebx,dword ptr [rsi+20h]
- for (int j = 0, l = n; j < l; j++)
- ^^^^^
- test ebx,ebx
- jle M00_L01
- rs[j].Intersect(c);
- ^^^^^^^^^^^^^^^^^^^
- M00_L00
- mov rcx,qword ptr [rsi+8]
- cmp edi,dword ptr [rcx+8]
- jae 00007ffe`3aa65f8f
- movsxd rdx,edi
- lea rdx,[rdx+rdx*4]
- lea rcx,[rcx+rdx*4+10h]
- mov rdx,qword ptr [rsi+10h]
- call Raytracer2.Primitives.Infinite.Ray.Intersect(Raytracer2.Primitives.Circle)
- for (int j = 0, l = n; j < l; j++)
- ^^^
- inc edi
- cmp edi,ebx
- jl M00_L00
- }
- ^
- M00_L01
- add rsp,20h
- Raytracer2.Primitives.Infinite.Ray.Intersect(Raytracer2.Primitives.Circle)
- float dx = this.direction.X;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- lea rax,[rsi+8]
- mov rcx,rax
- vmovss xmm1,dword ptr [rcx]
- vmovss xmm2,dword ptr [rsi+4]
- cmp dword ptr [rsi],esi
- vmovss xmm3,dword ptr [rax+4]
- lea rax,[rdx+10h]
- mov rcx,rax
- vmovss xmm4,dword ptr [rcx]
- vmovss xmm5,dword ptr [rax+4]
- vmovss xmm6,dword ptr [rdx+8]
- vsubss xmm0,xmm0,xmm4
- vsubss xmm2,xmm2,xmm5
- float r = 2 * p * dx;
- ^^^^^^^^^^^^^^^^^^^^^
- vmovaps xmm4,xmm2
- vmulss xmm4,xmm4,dword ptr [00007ffe`3aa66138]
- vmulss xmm4,xmm4,xmm3
- vmovaps xmm5,xmm1
- vmulss xmm5,xmm5,xmm1
- vmulss xmm3,xmm3,xmm3
- vaddss xmm3,xmm3,xmm5
- vmovaps xmm5,xmm0
- vmulss xmm5,xmm5,dword ptr [00007ffe`3aa6613c]
- vmulss xmm5,xmm5,xmm1
- vmovaps xmm1,xmm5
- vaddss xmm1,xmm1,xmm4
- float c = p * p + q * q - cr * cr;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmulss xmm0,xmm0,xmm0
- vmulss xmm2,xmm2,xmm2
- vaddss xmm0,xmm0,xmm2
- vmulss xmm6,xmm6,xmm6
- vsubss xmm0,xmm0,xmm6
- float DSqrt = b * b - 4 * a * c;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovaps xmm2,xmm1
- vmulss xmm2,xmm2,xmm1
- vmovaps xmm4,xmm3
- vmulss xmm4,xmm4,dword ptr [00007ffe`3aa66140]
- vmulss xmm4,xmm4,xmm0
- vmovaps xmm0,xmm2
- vsubss xmm0,xmm0,xmm4
- if (DSqrt < 0)
- ^^^^^^^^^^^^^^
- vxorps xmm2,xmm2,xmm2
- vucomiss xmm2,xmm0
- jbe M01_L00
- { return false; }
- ^^^^^^^^^^^^^
- xor eax,eax
- vmovaps xmm6,xmmword ptr [rsp+20h]
- add rsp,30h
- pop rsi
- ret
- float D = (float)Math.Sqrt(DSqrt);
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- M01_L00
- vcvtss2sd xmm0,xmm0,xmm0
- vsqrtsd xmm0,xmm0,xmm0
- vcvtsd2ss xmm0,xmm0,xmm0
- float t0 = (-b + D) / (2 * a);
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovss xmm2,dword ptr [00007ffe`3aa66144]
- vxorps xmm2,xmm2,xmm1
- vaddss xmm2,xmm2,xmm0
- vmulss xmm3,xmm3,dword ptr [00007ffe`3aa66148]
- vdivss xmm2,xmm2,xmm3
- float t1 = (-b - D) / (2 * a);
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovss xmm4,dword ptr [00007ffe`3aa66144]
- vxorps xmm1,xmm1,xmm4
- vsubss xmm1,xmm1,xmm0
- vdivss xmm1,xmm1,xmm3
- vmovaps xmm0,xmm2
- call System.Math.Min(Single, Single)
- if(ti > 0 && ti < t)
- ^^^^^^^^^^^^^^^^^^^^
- vxorps xmm1,xmm1,xmm1
- vucomiss xmm0,xmm1
- jbe M01_L01
- vmovss xmm1,dword ptr [rsi+10h]
- vucomiss xmm1,xmm0
- jbe M01_L01
- t = ti;
- ^^^^^^^
- vmovss dword ptr [rsi+10h],xmm0
- return true;
- ^^^^^^^^^^^^
- mov eax,1
- vmovaps xmm6,xmmword ptr [rsp+20h]
- add rsp,30h
- pop rsi
- ret
- return false;
- ^^^^^^^^^^^^^
- M01_L01
- xor eax,eax
- .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3062.0
- Raytracer2.Benchmarking.CircleTest.IntersectionPacked()
- for (int j = 0, l = n / 8; j < l; j++)
- ^^^^^^^^^
- xor edi,edi
- for (int j = 0, l = n / 8; j < l; j++)
- ^^^^^^^^^
- mov edx,dword ptr [rsi+20h]
- mov ecx,edx
- sar ecx,1Fh
- and ecx,7
- add ecx,edx
- mov ebx,ecx
- sar ebx,3
- for (int j = 0, l = n / 8; j < l; j++)
- ^^^^^
- test ebx,ebx
- jle M00_L01
- lea rbp,[rsi+28h]
- rps[j].Intersect(cp);
- ^^^^^^^^^^^^^^^^^^^^^
- M00_L00
- mov rdx,qword ptr [rsi+18h]
- cmp edi,dword ptr [rdx+8]
- jae 00007ffe`3aa75fd7
- movsxd rcx,edi
- imul rcx,rcx,0A0h
- lea r14,[rdx+rcx+10h]
- lea r15,[rsp+80h]
- lea rcx,[rsp+20h]
- mov rdx,rbp
- mov r8d,60h
- call clr+0x1350
- mov rcx,r14
- mov rdx,r15
- lea r8,[rsp+20h]
- call Raytracer2.Primitives.Infinite.RayPack.Intersect(Raytracer2.Primitives.CirclePack)
- for (int j = 0, l = n / 8; j < l; j++)
- ^^^
- inc edi
- cmp edi,ebx
- jl M00_L00
- }
- ^
- M00_L01
- add rsp,0A8h
- Raytracer2.Primitives.Infinite.RayPack.Intersect(Raytracer2.Primitives.CirclePack)
- Vector ox = this.origin.x;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovupd ymm1,ymmword ptr [rsi]
- Vector dx = this.direction.x;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovupd ymm6,ymmword ptr [rsi+40h]
- Vector oy = this.origin.y;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovupd ymm0,ymmword ptr [rsi+20h]
- vmovupd ymm7,ymmword ptr [rsi+60h]
- vmovupd ymm2,ymmword ptr [r8]
- vmovupd ymm3,ymmword ptr [r8+20h]
- vmovupd ymm8,ymmword ptr [r8+40h]
- vsubps ymm9,ymm1,ymm2
- vsubps ymm10,ymm0,ymm3
- Vector r = 2 * p * dx;
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- lea rcx,[rsp+0E0h]
- vmovupd ymmword ptr [rsp+40h],ymm9
- vmovss xmm1,dword ptr [00007ffe`3aa76ab8]
- lea r8,[rsp+40h]
- vextractf128 xmm11,ymm9,1
- vextractf128 xmm12,ymm10,1
- vextractf128 xmm13,ymm6,1
- vextractf128 xmm14,ymm7,1
- vextractf128 xmm15,ymm8,1
- call System.Numerics.Vector`1[[System.Single, mscorlib]].op_Multiply(Single, System.Numerics.Vector`1)
- vinsertf128 ymm8,ymm8,xmm15,1
- vinsertf128 ymm7,ymm7,xmm14,1
- vinsertf128 ymm6,ymm6,xmm13,1
- vinsertf128 ymm10,ymm10,xmm12,1
- vinsertf128 ymm9,ymm9,xmm11,1
- lea rcx,[rsp+0C0h]
- vmovupd ymmword ptr [rsp+40h],ymm10
- vmovss xmm1,dword ptr [00007ffe`3aa76abc]
- lea r8,[rsp+40h]
- vextractf128 xmm11,ymm9,1
- vextractf128 xmm12,ymm10,1
- vextractf128 xmm13,ymm6,1
- vextractf128 xmm14,ymm7,1
- vextractf128 xmm15,ymm8,1
- call System.Numerics.Vector`1[[System.Single, mscorlib]].op_Multiply(Single, System.Numerics.Vector`1)
- vinsertf128 ymm8,ymm8,xmm15,1
- vinsertf128 ymm7,ymm7,xmm14,1
- vinsertf128 ymm6,ymm6,xmm13,1
- vinsertf128 ymm10,ymm10,xmm12,1
- vinsertf128 ymm9,ymm9,xmm11,1
- vmovupd ymm1,ymmword ptr [rsp+0C0h]
- vmulps ymm1,ymm1,ymm7
- vmulps ymm0,ymm6,ymm6
- vmulps ymm7,ymm7,ymm7
- vaddps ymm7,ymm0,ymm7
- vmulps ymm9,ymm9,ymm9
- vmulps ymm10,ymm10,ymm10
- vaddps ymm9,ymm9,ymm10
- vmulps ymm8,ymm8,ymm8
- vsubps ymm9,ymm9,ymm8
- vmovupd ymm0,ymmword ptr [rsp+0E0h]
- vmulps ymm0,ymm0,ymm6
- vaddps ymm6,ymm0,ymm1
- lea rcx,[rsp+0A0h]
- vmovupd ymmword ptr [rsp+40h],ymm7
- vmovss xmm1,dword ptr [00007ffe`3aa76ac0]
- lea r8,[rsp+40h]
- vextractf128 xmm8,ymm6,1
- vextractf128 xmm10,ymm7,1
- vextractf128 xmm11,ymm9,1
- call System.Numerics.Vector`1[[System.Single, mscorlib]].op_Multiply(Single, System.Numerics.Vector`1)
- vinsertf128 ymm9,ymm9,xmm11,1
- vinsertf128 ymm7,ymm7,xmm10,1
- vinsertf128 ymm6,ymm6,xmm8,1
- vmulps ymm1,ymm6,ymm6
- vmovupd ymm0,ymmword ptr [rsp+0A0h]
- vmulps ymm0,ymm0,ymm9
- vsubps ymm1,ymm1,ymm0
- mov rcx,qword ptr [13465D10h]
- vmovupd ymm0,ymmword ptr [rcx+8]
- vmovaps ymm8,ymm0
- vcmpltps ymm8,ymm8,ymm1
- vsqrtps ymm9,ymm1
- vxorps ymm1,ymm1,ymm1
- vsubps ymm10,ymm1,ymm6
- lea rcx,[rsp+80h]
- vmovupd ymmword ptr [rsp+40h],ymm7
- vmovss xmm1,dword ptr [00007ffe`3aa76ac4]
- lea r8,[rsp+40h]
- vextractf128 xmm11,ymm6,1
- vextractf128 xmm12,ymm7,1
- vextractf128 xmm13,ymm10,1
- vextractf128 xmm14,ymm9,1
- vextractf128 xmm15,ymm8,1
- call System.Numerics.Vector`1[[System.Single, mscorlib]].op_Multiply(Single, System.Numerics.Vector`1)
- vinsertf128 ymm8,ymm8,xmm15,1
- vinsertf128 ymm9,ymm9,xmm14,1
- vinsertf128 ymm10,ymm10,xmm13,1
- vinsertf128 ymm7,ymm7,xmm12,1
- vinsertf128 ymm6,ymm6,xmm11,1
- vaddps ymm10,ymm10,ymm9
- vmovupd ymm1,ymmword ptr [rsp+80h]
- vdivps ymm10,ymm10,ymm1
- vxorps ymm1,ymm1,ymm1
- vsubps ymm1,ymm1,ymm6
- vsubps ymm6,ymm1,ymm9
- lea rcx,[rsp+60h]
- vmovupd ymmword ptr [rsp+40h],ymm7
- vmovss xmm1,dword ptr [00007ffe`3aa76ac8]
- lea r8,[rsp+40h]
- vextractf128 xmm7,ymm10,1
- vextractf128 xmm9,ymm6,1
- vextractf128 xmm11,ymm8,1
- call System.Numerics.Vector`1[[System.Single, mscorlib]].op_Multiply(Single, System.Numerics.Vector`1)
- vinsertf128 ymm8,ymm8,xmm11,1
- vinsertf128 ymm6,ymm6,xmm9,1
- vinsertf128 ymm10,ymm10,xmm7,1
- vmovupd ymm0,ymmword ptr [rsp+60h]
- vdivps ymm1,ymm6,ymm0
- Vector tm = Vector.ConditionalSelect(Vector.LessThan(t1, t0), t1, t0);
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovaps ymm0,ymm1
- vcmpltps ymm0,ymm0,ymm10
- vpand ymm0,ymm1,ymm0
- vcmpltps ymm1,ymm1,ymm10
- vpandn ymm1,ymm1,ymm10
- vpor ymm0,ymm0,ymm1
- Vector maskBiggerThanZero = Vector.GreaterThan(tm, Constants.zeros);
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- mov rax,qword ptr [13465D10h]
- vmovupd ymm1,ymmword ptr [rax+8]
- vcmpltps ymm1,ymm1,ymm0
- Vector maskSmallerThanT = Vector.LessThan(tm, this.t);
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- vmovupd ymm2,ymmword ptr [rsi+80h]
- vmovaps ymm3,ymm0
- vcmpltps ymm3,ymm3,ymm2
- vpand ymm1,ymm1,ymm3
- vpand ymm1,ymm8,ymm1
- this.t = Vector.ConditionalSelect(
- ^^^^^^^
- mask, // the bit mask that allows us to choose.
- ^^^^^^^
- tm, // the smallest of the t's.
- ^^^^^^^
- t); // if the bit mask is false (0), then we get our original t.
- ^^^^^^^
- vpand ymm0,ymm0,ymm1
- vmovupd ymm2,ymmword ptr [rsi+80h]
- vpandn ymm3,ymm1,ymm2
- vpor ymm0,ymm0,ymm3
- vmovupd ymmword ptr [rsi+80h],ymm0
- return mask;
- ^^^^^^^^^^^^
- vmovupd ymmword ptr [rdi],ymm1
- mov rax,rdi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement