Очередное небольшое выявление проблемных мест
макрооптимизатора.
Код:
SPF4
lib/ext/disasm.f
: a ROT ROT ;
SEE a VFX
572EF3 8B5500 MOV EDX , 0 [EBP] ( 004C8E10 8BD3 ) MOV EDX, EBX
572EF6 894500 MOV 0 [EBP] , EAX ( 004C8E12 8B5D00 ) MOV EBX, [EBP]
572EF9 8B4504 MOV EAX , 4 [EBP] ( 004C8E15 8B4D04 ) MOV ECX, [EBP+04]
572EFC 895504 MOV 4 [EBP] , EDX ( 004C8E18 894D00 ) MOV [EBP], ECX
572EFF 8B5500 MOV EDX , 0 [EBP] ( 004C8E1B 895504 ) MOV [EBP+04], EDX
572F02 894500 MOV 0 [EBP] , EAX ( 004C8E1E C3 ) NEXT,
572F05 8B4504 MOV EAX , 4 [EBP] ( 15 bytes, 6 instructions )
572F08 895504 MOV 4 [EBP] , EDX
572F0B C3 RET NEAR
END-CODE
: a BASE @ 16 BASE ! SWAP . BASE ! ;
8945FC MOV FC [EBP] , EAX ( 8B5618 ) MOV EDX, [ESI+18]
8B8738000000 MOV EAX , 38 [EDI] ( C7461810000000 ) MOV DWord Ptr [ESI+18], 00000010
8D8F38000000 LEA ECX , 38 [EDI] ( 8D6DFC ) LEA EBP, [EBP+-04]
C70110000000 MOV [ECX] , # 10 ( 895500 ) MOV [EBP], EDX
8B55FC MOV EDX , FC [EBP] ( E86F30F4FF ) CALL 0040BEC4 (.)
8945FC MOV FC [EBP] , EAX ( 895E18 ) MOV [ESI+18], EBX
8BC2 MOV EAX , EDX ( 8B5D00 ) MOV EBX, [EBP]
8D6DFC LEA EBP , FC [EBP] ( 8D6D04 ) LEA EBP, [EBP+04]
E81035FEFF CALL 556428 ( . ) ( C3 ) NEXT,
8BD0 MOV EDX , EAX
8D8738000000 LEA EAX , 38 [EDI]
8910 MOV [EAX] , EDX
8B4500 MOV EAX , 0 [EBP]
8D6D04 LEA EBP , 4 [EBP]
C3 RET NEAR
: a 0 2SWAP ;
572EF3 8945FC MOV FC [EBP] , EAX ( 8D6DFC ) LEA EBP, [EBP+-04]
572EF6 33C0 XOR EAX , EAX ( 8B5508 ) MOV EDX, [EBP+08]
572EF8 8B4DFC MOV ECX , FC [EBP] ( 895500 ) MOV [EBP], EDX
572EFB 8B5500 MOV EDX , 0 [EBP] ( 895D08 ) MOV [EBP+08], EBX
572EFE 8B5D04 MOV EBX , 4 [EBP] ( 8B5D04 ) MOV EBX, [EBP+04]
572F01 894D04 MOV 4 [EBP] , ECX ( C7450400000000) MOV DWord Ptr [EBP+04], 00000000
572F04 894500 MOV 0 [EBP] , EAX ( C3 ) NEXT,
572F07 895DFC MOV FC [EBP] , EBX
572F0A 8BC2 MOV EAX , EDX
572F0C 8D6DFC LEA EBP , FC [EBP]
572F0F C3 RET NEAR
P.S. Может стоит набрать статистику по качеству оптимизации
кода, например SPF4 и VFX на коротких (наиболее часто используемых) участках программы из цепочек примитивов?