Added some peephole optimizaitions regarding push of immediate followed

by pop eax.
Review URL: http://codereview.chromium.org/4212

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@366 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
sgjesse@chromium.org 2008-09-23 13:31:14 +00:00
parent d8eddaa0bd
commit b0a79ce164

View File

@ -469,7 +469,48 @@ void Assembler::pop(Register dst) {
}
return;
}
} else if (instr == 0x6a && dst.is(eax)) { // push of immediate 8 bit
byte imm8 = last_pc_[1];
if (imm8 == 0) {
// 6a00 push 0x0
// 58 pop eax
last_pc_[0] = 0x31;
last_pc_[1] = 0xc0;
// change to
// 31c0 xor eax,eax
last_pc_ = NULL;
return;
} else {
// 6a00 push 0xXX
// 58 pop eax
last_pc_[0] = 0xb8;
EnsureSpace ensure_space(this);
if ((imm8 & 0x80) != 0) {
EMIT(0xff);
EMIT(0xff);
EMIT(0xff);
// change to
// b8XXffffff mov eax,0xffffffXX
} else {
EMIT(0x00);
EMIT(0x00);
EMIT(0x00);
// change to
// b8XX000000 mov eax,0x000000XX
}
last_pc_ = NULL;
return;
}
} else if (instr == 0x68 && dst.is(eax)) { // push of immediate 32 bit
// 68XXXXXXXX push 0xXXXXXXXX
// 58 pop eax
last_pc_[0] = 0xb8;
last_pc_ = NULL;
// change to
// b8XXXXXXXX mov eax,0xXXXXXXXX
return;
}
// Other potential patterns for peephole:
// 0x712716 102 890424 mov [esp], eax
// 0x712719 105 8b1424 mov edx, [esp]