LGTM even though I hope the way the peephole stuff is written could be improved. It's growing a lot - it would be nice with some abstractions...
On Tue, Sep 23, 2008 at 3:23 PM, <[EMAIL PROTECTED]> wrote: > Reviewers: Kasper Lund, > > Description: > Added some peephole optimizaitions regarding push of immediate followed > by pop eax. > > Please review this at http://codereview.chromium.org/4212 > > Affected files: > M src/assembler-ia32.cc > > > Index: src/assembler-ia32.cc > =================================================================== > --- src/assembler-ia32.cc (revision 360) > +++ src/assembler-ia32.cc (working copy) > @@ -469,7 +469,48 @@ > } > 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] > > > --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---