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

Cloning of basic blocks

bbclone

Description

The pass clones some basic blocks and spreads the execution across these cloned basic blocks. Good as intermediate transformation.

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, 24
mov EAX, DWORD PTR [ESP + 56]
mov DWORD PTR [ESP + 4], EAX
test EAX, EAX
mov EAX, 142
jle .LBB2_23
.LBB2_1: ; %bb.nph16
mov ECX, DWORD PTR [ESP + 44]
lea ECX, DWORD PTR [ECX + 80]
mov DWORD PTR [ESP], ECX
mov ECX, DWORD PTR [ESP + 52]
lea ECX, DWORD PTR [ECX - 1]
mov DWORD PTR [ESP + 8], ECX
add AL, 144
movsx ECX, AL
xor EDX, EDX
mov DWORD PTR [ESP + 12], EDX
mov DL, AL
.LBB2_2: ; %bb
mov ESI, DWORD PTR [ESP + 12]
mov EAX, DWORD PTR [ESP + 44]
cvttsd2si EAX, QWORD PTR [EAX + ESI]
mov EDI, DWORD PTR [ESP]
lea ESI, DWORD PTR [EDI + ESI]
or ECX, 131
and ECX, 143
cmp DWORD PTR [ESP + 52], 1
jle .LBB2_24
.LBB2_3: ; %bb1.preheader
mov EDI, DWORD PTR [ESP + 8]
mov DWORD PTR [ESP + 16], EDI
mov DWORD PTR [ESP + 20], EAX
.align 16
.LBB2_4: ; %bb1
mov EBX, ECX
and EBX, 131
mov EDI, EBX
xor EDI, 70
movsd XMM0, QWORD PTR [ESI]
cvtsi2sd XMM1, EAX
ucomisd XMM1, XMM0
ja .LBB2_19
.LBB2_5: ; %bb1.bb3.bbcl.disp_crit_edge
mov EBP, EAX
jmp .LBB2_20
.LBB2_6: ; %bb3
add BL, 65
.LBB2_7: ; %bb3
cvtsi2sd XMM1, DWORD PTR [ESP + 20]
ucomisd XMM0, XMM1
jbe .LBB2_15
.LBB2_8: ; %bb3.bb4_crit_edge
mov DL, BL
.LBB2_9: ; %bb4
cvttsd2si EAX, XMM0
mov DWORD PTR [ESP + 20], EAX
mov EAX, 93
.LBB2_10: ; %bb5
add ESI, 80
dec DWORD PTR [ESP + 16]
mov ECX, 179
mov EAX, EBP
jne .LBB2_4
.LBB2_11: ; %bb5.bb7_crit_edge
mov EAX, EBP
xor ECX, ECX
.LBB2_12: ; %bb7
mov ECX, DWORD PTR [ESP + 20]
sub ECX, EAX
cvtsi2sd XMM0, ECX
mov ECX, DWORD PTR [ESP + 12]
mov EAX, DWORD PTR [ESP + 48]
movsd QWORD PTR [ECX + EAX], XMM0
add ECX, 8
mov DWORD PTR [ESP + 12], ECX
xor EAX, EAX
dec DWORD PTR [ESP + 4]
mov ECX, 140
jne .LBB2_2
.LBB2_13: ; %return
add ESP, 24
pop ESI
pop EDI
pop EBX
pop EBP
ret
.LBB2_14: ; %bb3.cl
xor BL, 249
jmp .LBB2_7
.LBB2_15: ; %bb3.bb5_crit_edge
movsx EAX, BL
mov DL, BL
jmp .LBB2_10
.LBB2_16: ; %bb3.cl7
mov DL, BL
add DL, 67
cvtsi2sd XMM1, DWORD PTR [ESP + 20]
ucomisd XMM0, XMM1
ja .LBB2_18
.LBB2_17: ; %bb3.cl7.bb5_crit_edge
mov EAX, EBX
jmp .LBB2_10
.LBB2_18: ; %bb3.cl7.bb4_crit_edge
mov BL, DL
jmp .LBB2_9
.LBB2_19: ; %bb2
cvttsd2si EBP, XMM0
add EDI, 4294967137
xor EDI, 69
mov EBX, EDI
.LBB2_20: ; %bb3.bbcl.disp
or EBX, 216
and EBX, 219
cmp DL, 28
je .LBB2_14
.LBB2_21: ; %bb3.bbcl.disp
cmp DL, 30
je .LBB2_16
.LBB2_22: ; %bb3.bbcl.disp
cmp DL, 34
je .LBB2_6
jmp .LBB2_4
.LBB2_23: ; %entry.return_crit_edge
mov ECX, EAX
jmp .LBB2_13
.LBB2_24: ; %bb.bb7_crit_edge
mov DWORD PTR [ESP + 20], EAX
jmp .LBB2_12
_Process endp