Angle displacement of the pixel at coordinates x,y
Note: FilterFactory defines c2d(x,y) := atan2(y,x), but d := atan2(-y,-x)
Syntax
c2d(x,y)
Original Machine Code (in OPER resource) of Filter Factory 3.0 and 3.0.4 for Photoshop/Win32
| 58 | pop eax (param_y) | |
| 5B | pop ebx (param_x) | |
| 33 C9 | xor ecx,ecx | |
| 0B C0 | or eax,eax | |
| 7D 05 | jnl +$05 (@@1) | |
| F7 D8 | neg eax | |
| 80 C9 04 | or cl,$04 (4) | |
| @@1: | ||
| 0B DB | or ebx,ebx | |
| 7D 05 | jnl +$05 (@@2) | |
| F7 DB | neg ebx | |
| 80 C9 03 | or cl,$03 (3) | |
| @@2: | ||
| 3B C3 | cmp eax,ebx | |
| 7E 04 | jle +$04 (@@3) | |
| 80 F1 01 | xor cl,$01 (1) | |
| 93 | xchg eax,ebx | |
| @@3: | ||
| 0B C0 | or eax,eax | |
| 7E 1B | jle +$1b (@@4) | |
| C1 E0 0A | shl eax,$0a (10) | |
| 99 | cdq | |
| F7 F3 | div ebx | |
| 74 13 | jz +$13 (@@4) // C2D_LOOKUP[-1] will never be called. Good! | |
| 66 8B 84 47 76 0D 00 00 | mov ax,[edi+eax*2+$00000d76] (C2D_LOOKUP-$2) | ax=C2D_LOOKUP[eax-1]; |
| C1 E0 09 | shl eax,$09 (9) | |
| 99 | cdq | |
| BB 40 24 03 00 | mov ebx,$00032440 (205888) | |
| F7 FB | idiv ebx | |
| @@4: | ||
| 66 0F BA E1 00 | bt cx,$00 (0) | bit 0 set? |
| 73 07 | jnb +$07 (@@5) | if ((ecx & 0b1) != 0) goto @@5 |
| F7 D8 | neg eax | |
| 05 00 01 00 00 | add eax,$00000100 (256) | |
| @@5: | ||
| 66 0F BA E1 01 | bt cx,$01 (1) | bit 1 set? |
| 73 05 | jnb +$05 (@@6) | if ((ecx & 0b01) != 0) goto @@6 |
| 05 00 01 00 00 | add eax,$00000100 (256) | |
| @@6: | ||
| 66 0F BA E1 02 | bt cx,$02 (2) | bit 2 set? |
| 73 02 | jnb +$02 (@@7) | if ((ecx & 0b001) != 0) goto @@7 |
| F7 D8 | neg eax | |
| @@7: | ||
| 50 | push eax | |
int factory_c2d(int x, int y) {
int32_t aaa, bbb, ccc;
aaa = y;
bbb = x;
ccc = 0;
if (aaa < 0) {
aaa = -aaa;
ccc |= 0b0100;
}
if (bbb < 0) {
bbb = -bbb;
ccc |= 0b0011;
}
if (aaa > bbb) {
int xxx;
ccc ^= 0b0001;
xxx = aaa;
aaa = bbb;
bbb = xxx;
}
if (aaa > 0) {
aaa = aaa << 10;
aaa /= bbb;
if (aaa != 0) {
aaa = (aaa & 0xFFFF0000) | (C2D_LOOKUP[aaa - 1] & 0xFFFF);
aaa = aaa << 9;
bbb = 205888; // 205888/65536 == pi
aaa /= bbb;
}
}
if ((ccc & 0b0001) != 0) {
aaa = -aaa;
aaa += 256;
}
if ((ccc & 0b0010) != 0) {
aaa += 256;
}
if ((ccc & 0b0100) != 0) {
aaa = -aaa;
}
return aaa;
}