19 LOBYTE(eax) = *(u8 *)esi; esi += 1; // lods
20 LOBYTE(eax) = *(u8 *)(ebx + LOBYTE(eax)); // xlat
21 *(u8 *)edi = eax; edi += 1; // stos
22 LOWORD(eax) = *(u16 *)esi; esi += 2; // lods
23 LOWORD(eax) = -(s16)(u16)eax;
24 *(u16 *)edi = eax; edi += 2; // stos
25 eax = *(u32 *)esi; esi += 4; // lods
26 *(u32 *)edi = eax; edi += 4; // stos
27 *(u8 *)edi = *(u8 *)esi; edi += 1; esi += 1; // movs
28 cond_z = (*(u16 *)esi == *(u16 *)edi); esi += 2; edi += 2; // cmps
29 cond_z = ((u8)eax == *(u8 *)edi); edi += 1; // scas
32 *(u8 *)edi = eax; edi -= 1; // stos
33 *(u16 *)edi = eax; edi -= 2; // stos
34 *(u32 *)edi = eax; edi -= 4; // stos
35 edx = (s32)eax >> 31; // cdq
36 if (ecx) eax = __builtin_ffs(ecx) - 1; // bsf
37 tmp64 = ((u64)edx << 32) | eax;
38 tmp64 = (s64)tmp64 << LOBYTE(ecx);
39 edx = tmp64 >> 32; eax = tmp64; // allshl
41 tmp64 = ((u64)edx << 32) | eax;
42 tmp64 = (s64)tmp64 >> LOBYTE(ecx);
43 edx = tmp64 >> 32; eax = tmp64; // allshr
44 eax = __builtin_bswap32(eax);
46 tmp64 = (u64)eax + ecx;
49 cond_z = (eax == 0); // add64
51 cond_c = *(u8 *)esi < *(u8 *)edi;
52 cond_z = (*(u8 *)esi == *(u8 *)edi); esi += 1, edi += 1;
54 if (cond_z != 0) break;
56 LOBYTE(ecx) = (!cond_z);
57 LOBYTE(ecx) += (u8)ecx + cond_c;