mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
More Watcom optimizations.
This commit is contained in:
parent
d3bc84a2f7
commit
0323560b49
File diff suppressed because it is too large
Load Diff
|
@ -121,6 +121,9 @@ def main(argv):
|
||||||
return []
|
return []
|
||||||
o = olines[pos][1:3]
|
o = olines[pos][1:3]
|
||||||
assert len(m[i]) == 2, (i, m)
|
assert len(m[i]) == 2, (i, m)
|
||||||
|
if o[1] == "*DEL*":
|
||||||
|
pos += 1
|
||||||
|
continue
|
||||||
m0 = match(m[i][0], o[0])
|
m0 = match(m[i][0], o[0])
|
||||||
m1 = match(m[i][1], o[1])
|
m1 = match(m[i][1], o[1])
|
||||||
if not m0 or not m1:
|
if not m0 or not m1:
|
||||||
|
@ -181,8 +184,13 @@ def main(argv):
|
||||||
if v[:2] == [1, 2]: # external 2-byte
|
if v[:2] == [1, 2]: # external 2-byte
|
||||||
if k in ["__LMUL", "__U4M",]:
|
if k in ["__LMUL", "__U4M",]:
|
||||||
s = [
|
s = [
|
||||||
|
["mov", "bx,word ptr [bx]"],
|
||||||
["xor", "cx,cx"],
|
["xor", "cx,cx"],
|
||||||
]
|
]
|
||||||
|
dpos = omatch(i - 2, s[-2:])
|
||||||
|
if 0 and dpos:
|
||||||
|
orewrite_inst(i, "M_LMUL_dxax_00bx_ptr", "", dpos)
|
||||||
|
continue
|
||||||
dpos = omatch(i - 1, s[-1:])
|
dpos = omatch(i - 1, s[-1:])
|
||||||
if dpos:
|
if dpos:
|
||||||
orewrite_inst(i, "M_LMUL_dxax_00bx", "", dpos)
|
orewrite_inst(i, "M_LMUL_dxax_00bx", "", dpos)
|
||||||
|
@ -243,9 +251,35 @@ def main(argv):
|
||||||
dpos2 = omatch(i + 1, s2)
|
dpos2 = omatch(i + 1, s2)
|
||||||
dpos3 = omatch(i + 1, s3)
|
dpos3 = omatch(i + 1, s3)
|
||||||
if dpos1 and (dpos2 or dos3):
|
if dpos1 and (dpos2 or dos3):
|
||||||
m = "M_shld_8_bp %s %s" % (dpos1[-2][2].group(1), dpos1[-1][2].group(1))
|
bp_dx, bp_ax = dpos1[-1][2].group(1), dpos1[-2][2].group(1)
|
||||||
|
m = "M_shld_8_bp %s %s" % (bp_dx, bp_ax)
|
||||||
orewrite_inst(i, m, "", dpos1)
|
orewrite_inst(i, m, "", dpos1)
|
||||||
continue
|
continue
|
||||||
|
s1 = [
|
||||||
|
["mov", r"^word ptr \[bp([+-]\d+)\],si$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-]\d+)\],di$"],
|
||||||
|
["mov", r"^c[lx],0xb$"],
|
||||||
|
["shr", r"^word ptr \[bp([+-]\d+)\],1$"],
|
||||||
|
["rcr", r"^word ptr \[bp([+-]\d+)\],1$"],
|
||||||
|
]
|
||||||
|
s2 = [
|
||||||
|
["mov", r"^bx,word ptr"],
|
||||||
|
["mov", r"^bx,word ptr"],
|
||||||
|
["mov", r"^ax,word ptr \[bp([+-]\d+)\]$"],
|
||||||
|
["mov", r"^dx,word ptr \[bp([+-]\d+)\]$"],
|
||||||
|
]
|
||||||
|
dpos1 = omatch(i - 5, s1[-5:])
|
||||||
|
dpos2 = omatch(i + 1, s2)
|
||||||
|
if dpos1 and dpos2:
|
||||||
|
bp_dx, bp_ax = dpos1[-2][2].group(1), dpos1[-1][2].group(1)
|
||||||
|
bp_di, bp_si = dpos1[-4][2].group(1), dpos1[-5][2].group(1)
|
||||||
|
assert bp_dx == dpos2[-1][2].group(1)
|
||||||
|
assert bp_ax == dpos2[-2][2].group(1)
|
||||||
|
assert bp_dx == bp_di
|
||||||
|
assert bp_ax == bp_si
|
||||||
|
m = "M_shrd_11_disi_bp %s %s" % (bp_dx, bp_ax)
|
||||||
|
orewrite_inst(i, m, "", dpos1 + dpos2[-2:])
|
||||||
|
continue
|
||||||
#
|
#
|
||||||
if inst in [
|
if inst in [
|
||||||
"call", "ja", "jae", "jb", "jbe", "jcxz", "je",
|
"call", "ja", "jae", "jb", "jbe", "jcxz", "je",
|
||||||
|
|
|
@ -86,13 +86,10 @@
|
||||||
//xor cx, cx // FIXME - do we need this ?
|
//xor cx, cx // FIXME - do we need this ?
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro M_shld_8_bp l h
|
.macro M_shld_8_bp h l
|
||||||
mov dx, word ptr[bp+h]
|
mov dx, word ptr[bp+h]
|
||||||
mov ax, word ptr[bp+l]
|
mov ax, word ptr[bp+l]
|
||||||
mov dh, dl
|
M_shld_8
|
||||||
mov dl, ah
|
|
||||||
mov ah, al
|
|
||||||
xor al, al
|
|
||||||
mov word ptr[bp+h], dx
|
mov word ptr[bp+h], dx
|
||||||
mov word ptr[bp+l], ax
|
mov word ptr[bp+l], ax
|
||||||
.endm
|
.endm
|
||||||
|
@ -100,7 +97,7 @@
|
||||||
|
|
||||||
// shld: dx:ax >>= 11
|
// shld: dx:ax >>= 11
|
||||||
.macro M_shrd_11
|
.macro M_shrd_11
|
||||||
#if 1
|
#if 0
|
||||||
mov al, ah
|
mov al, ah
|
||||||
mov ah, dl
|
mov ah, dl
|
||||||
mov dl, dh
|
mov dl, dh
|
||||||
|
@ -112,6 +109,7 @@
|
||||||
shr dx
|
shr dx
|
||||||
rcr ax
|
rcr ax
|
||||||
#else
|
#else
|
||||||
|
// WARNING: this trashes "bx" !
|
||||||
mov cl, 11
|
mov cl, 11
|
||||||
mov bx, dx // save dx
|
mov bx, dx // save dx
|
||||||
shr ax, cl
|
shr ax, cl
|
||||||
|
@ -123,6 +121,22 @@
|
||||||
//xor cx, cx // FIXME - do we need this ?
|
//xor cx, cx // FIXME - do we need this ?
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro M_shrd_11_bp h l
|
||||||
|
mov dx, word ptr[bp+h]
|
||||||
|
mov ax, word ptr[bp+l]
|
||||||
|
M_shrd_11
|
||||||
|
mov word ptr[bp+h], dx
|
||||||
|
mov word ptr[bp+l], ax
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro M_shrd_11_disi_bp h l
|
||||||
|
mov dx, di
|
||||||
|
mov ax, si
|
||||||
|
M_shrd_11
|
||||||
|
mov word ptr[bp+h], dx
|
||||||
|
mov word ptr[bp+l], ax
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
// shld: dx:ax <<= cl; trashes cl and register "r1" (bx, di, si or bp)
|
// shld: dx:ax <<= cl; trashes cl and register "r1" (bx, di, si or bp)
|
||||||
// REQUIRED: 0 <= cl <= 15
|
// REQUIRED: 0 <= cl <= 15
|
||||||
|
@ -202,7 +216,7 @@ section LZMA_DEC00
|
||||||
|
|
||||||
push ds
|
push ds
|
||||||
mov bp, sp
|
mov bp, sp
|
||||||
#if 1
|
#if 0
|
||||||
// DEBUG - check for enough stack
|
// DEBUG - check for enough stack
|
||||||
lea bx, [bp + lzma_stack_adjust - 256]
|
lea bx, [bp + lzma_stack_adjust - 256]
|
||||||
cmp bp, bx
|
cmp bp, bx
|
||||||
|
@ -286,5 +300,4 @@ section LZMA_DEC31
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// vi:ts=4:et
|
// vi:ts=4:et
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -45,26 +45,26 @@ Idx Name Size VMA LMA File off Algn Flags
|
||||||
40 N2E64K02 0000000b 00000000 00000000 00000290 2**0 CONTENTS, READONLY
|
40 N2E64K02 0000000b 00000000 00000000 00000290 2**0 CONTENTS, READONLY
|
||||||
41 NRV2EEX9 00000004 00000000 00000000 0000029b 2**0 CONTENTS, READONLY
|
41 NRV2EEX9 00000004 00000000 00000000 0000029b 2**0 CONTENTS, READONLY
|
||||||
42 LZMA_DEC99 00000000 00000000 00000000 0000029f 2**0 CONTENTS, READONLY
|
42 LZMA_DEC99 00000000 00000000 00000000 0000029f 2**0 CONTENTS, READONLY
|
||||||
43 LZMA_DEC00 00000043 00000000 00000000 0000029f 2**0 CONTENTS, RELOC, READONLY
|
43 LZMA_DEC00 0000003b 00000000 00000000 0000029f 2**0 CONTENTS, RELOC, READONLY
|
||||||
44 LZMA_DEC10 00001197 00000000 00000000 000002e2 2**0 CONTENTS, READONLY
|
44 LZMA_DEC10 000011a4 00000000 00000000 000002da 2**0 CONTENTS, READONLY
|
||||||
45 LZMA_DEC20 00001197 00000000 00000000 00001479 2**0 CONTENTS, READONLY
|
45 LZMA_DEC20 000011a4 00000000 00000000 0000147e 2**0 CONTENTS, READONLY
|
||||||
46 LZMA_DEC30 00000006 00000000 00000000 00002610 2**0 CONTENTS, RELOC, READONLY
|
46 LZMA_DEC30 00000006 00000000 00000000 00002622 2**0 CONTENTS, RELOC, READONLY
|
||||||
47 LZMA_DEC31 00000007 00000000 00000000 00002616 2**0 CONTENTS, RELOC, READONLY
|
47 LZMA_DEC31 00000007 00000000 00000000 00002628 2**0 CONTENTS, RELOC, READONLY
|
||||||
48 EXEMAIN5 00000001 00000000 00000000 0000261d 2**0 CONTENTS, READONLY
|
48 EXEMAIN5 00000001 00000000 00000000 0000262f 2**0 CONTENTS, READONLY
|
||||||
49 EXEADJUS 00000007 00000000 00000000 0000261e 2**0 CONTENTS, READONLY
|
49 EXEADJUS 00000007 00000000 00000000 00002630 2**0 CONTENTS, READONLY
|
||||||
50 EXENOADJ 00000002 00000000 00000000 00002625 2**0 CONTENTS, READONLY
|
50 EXENOADJ 00000002 00000000 00000000 00002637 2**0 CONTENTS, READONLY
|
||||||
51 EXERELO1 0000001e 00000000 00000000 00002627 2**0 CONTENTS, RELOC, READONLY
|
51 EXERELO1 0000001e 00000000 00000000 00002639 2**0 CONTENTS, RELOC, READONLY
|
||||||
52 EXEREL9A 00000012 00000000 00000000 00002645 2**0 CONTENTS, RELOC, READONLY
|
52 EXEREL9A 00000012 00000000 00000000 00002657 2**0 CONTENTS, RELOC, READONLY
|
||||||
53 EXERELO2 00000004 00000000 00000000 00002657 2**0 CONTENTS, READONLY
|
53 EXERELO2 00000004 00000000 00000000 00002669 2**0 CONTENTS, READONLY
|
||||||
54 EXEREBIG 00000002 00000000 00000000 0000265b 2**0 CONTENTS, RELOC, READONLY
|
54 EXEREBIG 00000002 00000000 00000000 0000266d 2**0 CONTENTS, RELOC, READONLY
|
||||||
55 EXERELO3 00000002 00000000 00000000 0000265d 2**0 CONTENTS, RELOC, READONLY
|
55 EXERELO3 00000002 00000000 00000000 0000266f 2**0 CONTENTS, RELOC, READONLY
|
||||||
56 EXEMAIN8 00000003 00000000 00000000 0000265f 2**0 CONTENTS, READONLY
|
56 EXEMAIN8 00000003 00000000 00000000 00002671 2**0 CONTENTS, READONLY
|
||||||
57 DEVICEEND 00000013 00000000 00000000 00002662 2**0 CONTENTS, READONLY
|
57 DEVICEEND 00000013 00000000 00000000 00002674 2**0 CONTENTS, READONLY
|
||||||
58 EXESTACK 00000006 00000000 00000000 00002675 2**0 CONTENTS, RELOC, READONLY
|
58 EXESTACK 00000006 00000000 00000000 00002687 2**0 CONTENTS, RELOC, READONLY
|
||||||
59 EXESTASP 00000003 00000000 00000000 0000267b 2**0 CONTENTS, RELOC, READONLY
|
59 EXESTASP 00000003 00000000 00000000 0000268d 2**0 CONTENTS, RELOC, READONLY
|
||||||
60 EXEJUMPF 00000005 00000000 00000000 0000267e 2**0 CONTENTS, RELOC, READONLY
|
60 EXEJUMPF 00000005 00000000 00000000 00002690 2**0 CONTENTS, RELOC, READONLY
|
||||||
61 EXERCSPO 00000004 00000000 00000000 00002683 2**0 CONTENTS, RELOC, READONLY
|
61 EXERCSPO 00000004 00000000 00000000 00002695 2**0 CONTENTS, RELOC, READONLY
|
||||||
62 EXERETIP 00000006 00000000 00000000 00002687 2**0 CONTENTS, RELOC, READONLY
|
62 EXERETIP 00000006 00000000 00000000 00002699 2**0 CONTENTS, RELOC, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
||||||
00000000 l d EXEENTRY 00000000 EXEENTRY
|
00000000 l d EXEENTRY 00000000 EXEENTRY
|
||||||
|
@ -255,15 +255,14 @@ OFFSET TYPE VALUE
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC00]:
|
RELOCATION RECORDS FOR [LZMA_DEC00]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
00000005 R_386_16 lzma_stack_adjust
|
00000005 R_386_16 lzma_stack_adjust
|
||||||
0000000d R_386_16 lzma_stack_adjust
|
0000000d R_386_16 lzma_u_len_hi
|
||||||
00000015 R_386_16 lzma_u_len_hi
|
00000011 R_386_16 lzma_u_len
|
||||||
00000019 R_386_16 lzma_u_len
|
0000001b R_386_16 lzma_c_len_hi
|
||||||
00000023 R_386_16 lzma_c_len_hi
|
0000001f R_386_16 lzma_c_len
|
||||||
00000027 R_386_16 lzma_c_len
|
0000002b R_386_16 lzma_properties_hi
|
||||||
00000033 R_386_16 lzma_properties_hi
|
00000031 R_386_16 lzma_properties
|
||||||
00000039 R_386_16 lzma_properties
|
00000036 R_386_PC16 LZMA_DEC10
|
||||||
0000003e R_386_PC16 LZMA_DEC10
|
00000039 R_386_PC16 LZMA_DEC30
|
||||||
00000041 R_386_PC16 LZMA_DEC30
|
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC30]:
|
RELOCATION RECORDS FOR [LZMA_DEC30]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
|
|
Loading…
Reference in New Issue
Block a user