Magnitude displacement of the pixel at coordinates x,y
Syntax
c2m(x,y)
Original Machine Code (in OPER resource) of Filter Factory 3.0 and 3.0.4 for Photoshop/Win32
5B | pop ebx (param_y) | |
58 | pop eax (param_x) | |
8B D0 | mov edx,eax | |
C1 FA 1F | sar edx,$1f (31) | |
33 C2 | xor eax,edx | |
2B C2 | sub eax,edx | |
8B D3 | mov edx,ebx | |
C1 FA 1F | sar edx,$1f (31) | |
33 DA | xor ebx,edx | |
2B DA | sub ebx,edx | |
3B C3 | cmp eax,ebx | |
75 07 | jnz +$07 (@@1) | |
B8 0A 6A 00 00 | mov eax,$00006a0a (27146) | |
EB 11 | jmp +$11 (@@3) | |
@@1: | ||
7E 01 | jle +$01 (@@2) | |
93 | xchg eax,ebx | |
@@2: | ||
C1 E0 0A | shl eax,$0a (10) | |
99 | cdq | |
F7 F3 | div ebx | |
0F B7 84 47 78 15 00 00 | movzx eax,[edi+eax*2+$00001578] (C2M_LOOKUP) | |
@@3: | ||
F7 E3 | mul ebx | |
0F AC D0 10 | shrd eax,edx,$10 (16) | Shift EAX right by 16 bits Store lower 16 bits of EDX into the upper 16 bits of EAX |
03 C3 | add eax,ebx | |
50 | push eax |
int factory_c2m(int x, int y) { int32_t aaa, bbb; bbb = y < 0 ? -y : y; aaa = x < 0 ? -x : x; if (aaa == bbb) { aaa = 27146; // 27146/65536 == sqrt(2)-1 } else { if (aaa > bbb) { int xxx = aaa; aaa = bbb; bbb = xxx; } aaa = aaa << 10; aaa /= bbb; aaa = C2M_LOOKUP[aaa]; } aaa = ((int64_t)aaa * (int64_t)bbb) >> 16; aaa += bbb; return aaa; }