Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text:0000000141952270 ; __int64 __fastcall GameCross(__int64, unsigned __int8, unsigned __int64)
- .text:0000000141952270 GameCross proc near ; CODE XREF: sub_140125F30+63↑p
- .text:0000000141952270 ; sub_140142360+8D↑p ...
- .text:0000000141952270 000 4C 8B D9 mov r11, rcx
- .text:0000000141952273 000 0F B6 D2 movzx edx, dl
- .text:0000000141952276 000 49 B9 01 01 01 01 01 01 01 01 mov r9, 101010101010101h
- .text:0000000141952280 000 4C 0F AF CA imul r9, rdx
- .text:0000000141952284 000 49 83 F8 10 cmp r8, 10h ; switch 17 cases
- .text:0000000141952288 000 0F 86 F2 00 00 00 jbe loc_141952380
- .text:000000014195228E
- .text:000000014195228E def_14195239B: ; jumptable 000000014195239B default case
- .text:000000014195228E 000 66 49 0F 6E C1 movq xmm0, r9
- .text:0000000141952293 000 66 0F 60 C0 punpcklbw xmm0, xmm0
- .text:0000000141952297 000 49 81 F8 80 00 00 00 cmp r8, 80h ; '€'
- .text:000000014195229E 000 77 10 ja short loc_1419522B0
- .text:00000001419522A0 000 E9 6B 00 00 00 jmp loc_141952310
- .text:00000001419522A0 ; ---------------------------------------------------------------------------
- .text:00000001419522A5 000 66 66 66 0F 1F 84 00 00 00 00+ align 10h
- .text:00000001419522B0
- .text:00000001419522B0 loc_1419522B0: ; CODE XREF: GameCross+2E↑j
- .text:00000001419522B0 000 F6 05 D9 9E 70 00 02 test byte ptr cs:dword_14205C190, 2
- .text:00000001419522B7 000 75 97 jnz short sub_141952250
- .text:00000001419522B9 000 0F 11 01 movups xmmword ptr [rcx], xmm0
- .text:00000001419522BC 000 4C 03 C1 add r8, rcx
- .text:00000001419522BF 000 48 83 C1 10 add rcx, 10h
- .text:00000001419522C3 000 48 83 E1 F0 and rcx, 0FFFFFFFFFFFFFFF0h
- .text:00000001419522C7 000 4C 2B C1 sub r8, rcx
- .text:00000001419522CA 000 4D 8B C8 mov r9, r8
- .text:00000001419522CD 000 49 C1 E9 07 shr r9, 7
- .text:00000001419522D1 000 74 3D jz short loc_141952310
- .text:00000001419522D3 000 4C 3B 0D D6 E2 37 00 cmp r9, cs:qword_141CD05B0
- .text:00000001419522DA 000 0F 87 60 00 00 00 ja loc_141952340
- .text:00000001419522E0
- .text:00000001419522E0 loc_1419522E0: ; CODE XREF: GameCross+9A↓j
- .text:00000001419522E0 000 0F 29 01 movaps xmmword ptr [rcx], xmm0
- .text:00000001419522E3 000 0F 29 41 10 movaps xmmword ptr [rcx+10h], xmm0
- .text:00000001419522E7 000 48 81 C1 80 00 00 00 add rcx, 80h ; '€'
- .text:00000001419522EE 000 0F 29 41 A0 movaps xmmword ptr [rcx-60h], xmm0
- .text:00000001419522F2 000 0F 29 41 B0 movaps xmmword ptr [rcx-50h], xmm0
- .text:00000001419522F6 000 49 FF C9 dec r9
- .text:00000001419522F9 000 0F 29 41 C0 movaps xmmword ptr [rcx-40h], xmm0
- .text:00000001419522FD 000 0F 29 41 D0 movaps xmmword ptr [rcx-30h], xmm0
- .text:0000000141952301 000 0F 29 41 E0 movaps xmmword ptr [rcx-20h], xmm0
- .text:0000000141952305 000 66 0F 29 41 F0 movapd xmmword ptr [rcx-10h], xmm0
- .text:000000014195230A 000 75 D4 jnz short loc_1419522E0
- .text:000000014195230C 000 49 83 E0 7F and r8, 7Fh
- .text:0000000141952310
- .text:0000000141952310 loc_141952310: ; CODE XREF: GameCross+30↑j
- .text:0000000141952310 ; GameCross+61↑j ...
- .text:0000000141952310 000 4D 8B C8 mov r9, r8
- .text:0000000141952313 000 49 C1 E9 04 shr r9, 4
- .text:0000000141952317 000 74 13 jz short loc_14195232C
- .text:0000000141952319 000 0F 1F 80 00 00 00 00 nop dword ptr [rax+00000000h]
- .text:0000000141952320
- .text:0000000141952320 loc_141952320: ; CODE XREF: GameCross+BA↓j
- .text:0000000141952320 000 0F 11 01 movups xmmword ptr [rcx], xmm0
- .text:0000000141952323 000 48 83 C1 10 add rcx, 10h
- .text:0000000141952327 000 49 FF C9 dec r9
- .text:000000014195232A 000 75 F4 jnz short loc_141952320
- .text:000000014195232C
- .text:000000014195232C loc_14195232C: ; CODE XREF: GameCross+A7↑j
- .text:000000014195232C 000 49 83 E0 0F and r8, 0Fh
- .text:0000000141952330 000 74 06 jz short loc_141952338
- .text:0000000141952332 000 42 0F 11 44 01 F0 movups xmmword ptr [rcx+r8-10h], xmm0
- .text:0000000141952338
- .text:0000000141952338 loc_141952338: ; CODE XREF: GameCross+C0↑j
- .text:0000000141952338 000 49 8B C3 mov rax, r11
- .text:000000014195233B 000 C3 retn
- .text:000000014195233B ; ---------------------------------------------------------------------------
- .text:000000014195233C 000 0F 1F 40 00 align 20h
- .text:0000000141952340
- .text:0000000141952340 loc_141952340: ; CODE XREF: GameCross+6A↑j
- .text:0000000141952340 ; GameCross+F9↓j
- .text:0000000141952340 000 0F 2B 01 movntps xmmword ptr [rcx], xmm0
- .text:0000000141952343 000 0F 2B 41 10 movntps xmmword ptr [rcx+10h], xmm0
- .text:0000000141952347 000 48 81 C1 80 00 00 00 add rcx, 80h ; '€'
- .text:000000014195234E 000 0F 2B 41 A0 movntps xmmword ptr [rcx-60h], xmm0
- .text:0000000141952352 000 0F 2B 41 B0 movntps xmmword ptr [rcx-50h], xmm0
- .text:0000000141952356 000 49 FF C9 dec r9
- .text:0000000141952359 000 0F 2B 41 C0 movntps xmmword ptr [rcx-40h], xmm0
- .text:000000014195235D 000 0F 2B 41 D0 movntps xmmword ptr [rcx-30h], xmm0
- .text:0000000141952361 000 0F 2B 41 E0 movntps xmmword ptr [rcx-20h], xmm0
- .text:0000000141952365 000 0F 2B 41 F0 movntps xmmword ptr [rcx-10h], xmm0
- .text:0000000141952369 000 75 D5 jnz short loc_141952340
- .text:000000014195236B 000 0F AE F8 sfence
- .text:000000014195236E 000 49 83 E0 7F and r8, 7Fh
- .text:0000000141952372 000 EB 9C jmp short loc_141952310
- .text:0000000141952372 ; ---------------------------------------------------------------------------
- .text:0000000141952374 000 66 66 66 66 0F 1F 84 00 00 00+ align 20h
- .text:0000000141952380
- .text:0000000141952380 loc_141952380: ; CODE XREF: GameCross+18↑j
- .text:0000000141952380 000 49 8B D1 mov rdx, r9
- .text:0000000141952383 000 4C 8D 0D 76 DC 6A FE lea r9, cs:140000000h
- .text:000000014195238A 000 43 8B 84 81 00 50 A9 02 mov eax, ds:(jpt_14195239B - 140000000h)[r9+r8*4]
- .text:0000000141952392 000 4C 03 C8 add r9, rax
- .text:0000000141952395 000 49 03 C8 add rcx, r8
- .text:0000000141952398 000 49 8B C3 mov rax, r11
- .text:000000014195239B 000 41 FF E1 jmp r9 ; switch jump
- .text:000000014195239B ; ---------------------------------------------------------------------------
- .text:000000014195239E 000 66 90 align 20h
- .text:00000001419523A0
- .text:00000001419523A0 loc_1419523A0: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523A0 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523A0 000 48 89 51 F1 mov [rcx-0Fh], rdx ; jumptable 000000014195239B case 15
- .text:00000001419523A4
- .text:00000001419523A4 loc_1419523A4: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523A4 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523A4 000 89 51 F9 mov [rcx-7], edx ; jumptable 000000014195239B case 7
- .text:00000001419523A7
- .text:00000001419523A7 loc_1419523A7: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523A7 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523A7 000 66 89 51 FD mov [rcx-3], dx ; jumptable 000000014195239B case 3
- .text:00000001419523AB
- .text:00000001419523AB loc_1419523AB: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523AB ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523AB 000 88 51 FF mov [rcx-1], dl ; jumptable 000000014195239B case 1
- .text:00000001419523AE
- .text:00000001419523AE locret_1419523AE: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523AE ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523AE 000 C3 retn ; jumptable 000000014195239B case 0
- .text:00000001419523AE ; ---------------------------------------------------------------------------
- .text:00000001419523AF 000 90 align 10h
- .text:00000001419523B0
- .text:00000001419523B0 loc_1419523B0: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523B0 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523B0 000 48 89 51 F4 mov [rcx-0Ch], rdx ; jumptable 000000014195239B case 12
- .text:00000001419523B4
- .text:00000001419523B4 loc_1419523B4: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523B4 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523B4 000 89 51 FC mov [rcx-4], edx ; jumptable 000000014195239B case 4
- .text:00000001419523B7 000 C3 retn
- .text:00000001419523B8 ; ---------------------------------------------------------------------------
- .text:00000001419523B8
- .text:00000001419523B8 loc_1419523B8: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523B8 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523B8 000 48 89 51 F7 mov [rcx-9], rdx ; jumptable 000000014195239B case 9
- .text:00000001419523BC 000 88 51 FF mov [rcx-1], dl
- .text:00000001419523BF 000 C3 retn
- .text:00000001419523C0 ; ---------------------------------------------------------------------------
- .text:00000001419523C0
- .text:00000001419523C0 loc_1419523C0: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523C0 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523C0 000 48 89 51 F3 mov [rcx-0Dh], rdx ; jumptable 000000014195239B case 13
- .text:00000001419523C4
- .text:00000001419523C4 loc_1419523C4: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523C4 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523C4 000 89 51 FB mov [rcx-5], edx ; jumptable 000000014195239B case 5
- .text:00000001419523C7 000 88 51 FF mov [rcx-1], dl
- .text:00000001419523CA 000 C3 retn
- .text:00000001419523CA ; ---------------------------------------------------------------------------
- .text:00000001419523CB 000 0F 1F 44 00 00 align 10h
- .text:00000001419523D0
- .text:00000001419523D0 loc_1419523D0: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523D0 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523D0 000 48 89 51 F2 mov [rcx-0Eh], rdx ; jumptable 000000014195239B case 14
- .text:00000001419523D4
- .text:00000001419523D4 loc_1419523D4: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523D4 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523D4 000 89 51 FA mov [rcx-6], edx ; jumptable 000000014195239B case 6
- .text:00000001419523D7
- .text:00000001419523D7 loc_1419523D7: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523D7 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523D7 000 66 89 51 FE mov [rcx-2], dx ; jumptable 000000014195239B case 2
- .text:00000001419523DB 000 C3 retn
- .text:00000001419523DC ; ---------------------------------------------------------------------------
- .text:00000001419523DC
- .text:00000001419523DC loc_1419523DC: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523DC ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523DC 000 48 89 10 mov [rax], rdx ; jumptable 000000014195239B case 8
- .text:00000001419523DF 000 C3 retn
- .text:00000001419523E0 ; ---------------------------------------------------------------------------
- .text:00000001419523E0
- .text:00000001419523E0 loc_1419523E0: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523E0 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523E0 000 48 89 10 mov [rax], rdx ; jumptable 000000014195239B case 11
- .text:00000001419523E3 000 66 89 50 08 mov [rax+8], dx
- .text:00000001419523E7 000 88 50 0A mov [rax+0Ah], dl
- .text:00000001419523EA 000 C3 retn
- .text:00000001419523EA ; ---------------------------------------------------------------------------
- .text:00000001419523EB 000 0F 1F 44 00 00 align 10h
- .text:00000001419523F0
- .text:00000001419523F0 loc_1419523F0: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523F0 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523F0 000 48 89 10 mov [rax], rdx ; jumptable 000000014195239B case 10
- .text:00000001419523F3 000 66 89 50 08 mov [rax+8], dx
- .text:00000001419523F7 000 C3 retn
- .text:00000001419523F8 ; ---------------------------------------------------------------------------
- .text:00000001419523F8
- .text:00000001419523F8 loc_1419523F8: ; CODE XREF: GameCross+12B↑j
- .text:00000001419523F8 ; DATA XREF: _RDATA:jpt_14195239B↓o
- .text:00000001419523F8 000 48 89 10 mov [rax], rdx ; jumptable 000000014195239B case 16
- .text:00000001419523FB 000 48 89 50 08 mov [rax+8], rdx
- .text:00000001419523FF 000 C3 retn
- .text:00000001419523FF GameCross endp
- .text:00000001419523FF
- .text:00000001419523FF ; ---------------------
- __int64 __fastcall GameCross(__int64 a1, unsigned __int8 a2, unsigned __int64 a3)
- {
- __m128 v4; // xmm0
- char *v5; // r8
- float *v6; // rcx
- unsigned __int64 v7; // r9
- unsigned __int64 i; // r9
- unsigned __int64 v9; // r8
- __int64 result; // rax
- __int64 v11; // rdx
- v11 = 0x101010101010101i64 * a2;
- v6 = (float *)(a3 + a1);
- result = a1;
- switch ( a3 )
- {
- case 0ui64:
- return result;
- case 1ui64:
- goto LABEL_19;
- case 2ui64:
- goto LABEL_27;
- case 3ui64:
- goto LABEL_18;
- case 4ui64:
- goto LABEL_21;
- case 5ui64:
- goto LABEL_24;
- case 6ui64:
- goto LABEL_26;
- case 7ui64:
- goto LABEL_17;
- case 8ui64:
- *(_QWORD *)a1 = v11;
- return result;
- case 9ui64:
- *(_QWORD *)((char *)v6 - 9) = v11;
- *((_BYTE *)v6 - 1) = v11;
- return result;
- case 0xAui64:
- *(_QWORD *)a1 = v11;
- *(_WORD *)(a1 + 8) = v11;
- return result;
- case 0xBui64:
- *(_QWORD *)a1 = v11;
- *(_WORD *)(a1 + 8) = v11;
- *(_BYTE *)(a1 + 10) = v11;
- return result;
- case 0xCui64:
- *(_QWORD *)(v6 - 3) = v11;
- LABEL_21:
- *((_DWORD *)v6 - 1) = v11;
- return result;
- case 0xDui64:
- *(_QWORD *)((char *)v6 - 13) = v11;
- LABEL_24:
- *(_DWORD *)((char *)v6 - 5) = v11;
- *((_BYTE *)v6 - 1) = v11;
- return result;
- case 0xEui64:
- *(_QWORD *)((char *)v6 - 14) = v11;
- LABEL_26:
- *(_DWORD *)((char *)v6 - 6) = v11;
- LABEL_27:
- *((_WORD *)v6 - 1) = v11;
- return result;
- case 0xFui64:
- *(_QWORD *)((char *)v6 - 15) = v11;
- LABEL_17:
- *(_DWORD *)((char *)v6 - 7) = v11;
- LABEL_18:
- *(_WORD *)((char *)v6 - 3) = v11;
- LABEL_19:
- *((_BYTE *)v6 - 1) = v11;
- return result;
- case 0x10ui64:
- *(_QWORD *)a1 = v11;
- *(_QWORD *)(a1 + 8) = v11;
- return result;
- default:
- v4 = (__m128)_mm_unpacklo_epi8((__m128i)0x140000000ui64, (__m128i)0x140000000ui64);
- if ( a3 <= 0x80 )
- goto LABEL_8;
- if ( (dword_14205C190 & 2) != 0 )
- return sub_141952250(v6, v11);
- *(__m128 *)v6 = v4;
- v5 = (char *)v6 + a3;
- v6 = (float *)((unsigned __int64)(v6 + 4) & 0xFFFFFFFFFFFFFFF0ui64);
- a3 = v5 - (char *)v6;
- v7 = a3 >> 7;
- if ( a3 >> 7 )
- {
- if ( v7 > qword_141CD05B0 )
- {
- do
- {
- _mm_stream_ps(v6, v4);
- _mm_stream_ps(v6 + 4, v4);
- v6 += 32;
- _mm_stream_ps(v6 - 24, v4);
- _mm_stream_ps(v6 - 20, v4);
- --v7;
- _mm_stream_ps(v6 - 16, v4);
- _mm_stream_ps(v6 - 12, v4);
- _mm_stream_ps(v6 - 8, v4);
- _mm_stream_ps(v6 - 4, v4);
- }
- while ( v7 );
- _mm_sfence();
- a3 &= 0x7Fu;
- }
- else
- {
- do
- {
- *(__m128 *)v6 = v4;
- *((__m128 *)v6 + 1) = v4;
- v6 += 32;
- *((__m128 *)v6 - 6) = v4;
- *((__m128 *)v6 - 5) = v4;
- --v7;
- *((__m128 *)v6 - 4) = v4;
- *((__m128 *)v6 - 3) = v4;
- *((__m128 *)v6 - 2) = v4;
- *((__m128 *)v6 - 1) = v4;
- }
- while ( v7 );
- a3 &= 0x7Fu;
- }
- }
- LABEL_8:
- for ( i = a3 >> 4; i; --i )
- {
- *(__m128 *)v6 = v4;
- v6 += 4;
- }
- v9 = a3 & 0xF;
- if ( v9 )
- *(__m128 *)((char *)v6 + v9 - 16) = v4;
- return a1;
- }
- }
Add Comment
Please, Sign In to add comment