NewsWhat's New

Morphing Attributes

Morphing Attributes There is a possibility to select a subset of functions to be processed by Morpher. Such selection is ...

Articles, Oct. 24, 2011

ABI: problems of C++ programs compatibility at the binary interface level

Introduction The C++ language standard strictly defines semantics of all language constructs. However, it does not specify how these constructs ...

Articles, June 14, 2011

CFG arches meshing

features, March 15, 2010

Add to Cart

CFG arches meshing

archmesh

Description

This transformation pass adds artificial paths in the control flow graph, which are never taken. In order to increase the complexity of the transformation a set of artificial basic blocks are inserted as well (see meshBB's on the picture).

Transformed Code

See Appendix A. Demo for original sources.

	public _Process
.align 16
_Process proc near
push EBP
push EBX
push EDI
push ESI
sub ESP, 16
cmp DWORD PTR [ESP + 48], 0
mov EAX, 72
jle .LBB2_16
.LBB2_1: ; %bb.nph16
mov ECX, DWORD PTR [ESP + 44]
lea ECX, DWORD PTR [ECX - 1]
mov DWORD PTR [ESP], ECX
xor ECX, ECX
.align 16
.LBB2_2: ; %bb
mov DWORD PTR [ESP + 8], ECX
mov EDX, DWORD PTR [ESP + 36]
cvttsd2si EDX, QWORD PTR [EDX + 8*ECX]
and EAX, 72
mov ECX, EAX
or ECX, 166
cmp DWORD PTR [ESP + 44], 1
jle .LBB2_19
.LBB2_3: ; %bb.bb1_crit_edge
xor ESI, ESI
mov DWORD PTR [ESP + 12], EDX
.LBB2_4: ; %bb1
inc ESI
imul ECX, ESI, 80
add ECX, DWORD PTR [ESP + 36]
mov EAX, DWORD PTR [ESP + 8]
movsd XMM0, QWORD PTR [ECX + 8*EAX]
cvtsi2sd XMM1, EDX
ucomisd XMM1, XMM0
mov EDI, 2
ja .LBB2_17
.LBB2_5: ; %bb1.meshBB_crit_edge
mov EAX, EDI
.LBB2_6: ; %meshBB
and EAX, 2
cmp EDI, 2
lea ECX, DWORD PTR [EAX + 214]
jne .LBB2_11
.LBB2_7: ; %bb3
cvtsi2sd XMM1, DWORD PTR [ESP + 12]
xor ECX, ECX
ucomisd XMM0, XMM1
jbe .LBB2_12
.LBB2_8: ; %bb3.meshBB7_crit_edge
mov ECX, 16
mov EAX, ECX
.LBB2_9: ; %meshBB7
mov EBX, ESI
mov DWORD PTR [ESP + 4], EDX
cmp ECX, 16
mov EAX, 135
mov ESI, EDI
mov EDX, EBP
mov ECX, EAX
jne .LBB2_4
.LBB2_10: ; %bb4
cvttsd2si EBP, XMM0
mov ECX, 106
lea EDI, DWORD PTR [ECX - 100]
mov ESI, EBX
jmp .LBB2_5
.LBB2_11: ; %meshBB.bb5_crit_edge
mov DWORD PTR [ESP + 12], EBP
mov EDX, DWORD PTR [ESP + 4]
.LBB2_12: ; %bb5
xor EAX, EAX
cmp ESI, DWORD PTR [ESP]
mov ECX, 21
mov EDI, ESI
mov EBP, EDX
jne .LBB2_9
.LBB2_13: ; %bb5.bb7_crit_edge
mov ECX, EAX
.LBB2_14: ; %bb7
mov ECX, DWORD PTR [ESP + 12]
sub ECX, EDX
cvtsi2sd XMM0, ECX
mov EAX, DWORD PTR [ESP + 8]
mov ECX, DWORD PTR [ESP + 40]
movsd QWORD PTR [ECX + 8*EAX], XMM0
lea ECX, DWORD PTR [EAX + 1]
xor EDI, EDI
cmp ECX, DWORD PTR [ESP + 48]
mov EAX, 7
mov EBX, EDI
jne .LBB2_18
.LBB2_15: ; %bb7.return_crit_edge
mov EAX, EDI
.LBB2_16: ; %return
add ESP, 16
pop ESI
pop EDI
pop EBX
pop EBP
ret
.LBB2_17: ; %bb2
lea EAX, DWORD PTR [EDI + 249]
xor EAX, EDI
add EAX, 4294967066
cvttsd2si EDX, XMM0
mov EBX, EDI
.LBB2_18: ; %meshBB11
cmp EAX, 7
mov EAX, 237
je .LBB2_2
jmp .LBB2_7
.LBB2_19: ; %bb.bb7_crit_edge
mov DWORD PTR [ESP + 12], EDX
jmp .LBB2_14
_Process endp