Changeset 50254 in webkit for trunk/JavaScriptCore/jit/JIT.h


Ignore:
Timestamp:
Oct 28, 2009, 6:25:02 PM (16 years ago)
Author:
[email protected]
Message:

Improve for..in enumeration performance
https://bugs.webkit.org/show_bug.cgi?id=30887

Reviewed by Geoff Garen.

Improve indexing of an object with a for..in iterator by
identifying cases where get_by_val is being used with a iterator
as the subscript and replace it with a new get_by_pname
bytecode. get_by_pname then optimizes lookups that directly access
the base object.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/jit/JIT.h

    r50211 r50254  
    429429        void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, Structure* structure, size_t cachedOffset);
    430430        void compileGetDirectOffset(JSObject* base, RegisterID temp, RegisterID resultTag, RegisterID resultPayload, size_t cachedOffset);
     431        void compileGetDirectOffset(RegisterID base, RegisterID resultTag, RegisterID resultPayload, RegisterID structure, RegisterID offset);
    431432        void compilePutDirectOffset(RegisterID base, RegisterID valueTag, RegisterID valuePayload, Structure* structure, size_t cachedOffset);
    432433
     
    530531        void compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure, size_t cachedOffset);
    531532        void compileGetDirectOffset(JSObject* base, RegisterID temp, RegisterID result, size_t cachedOffset);
     533        void compileGetDirectOffset(RegisterID base, RegisterID result, RegisterID structure, RegisterID offset, RegisterID scratch);
    532534        void compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure, size_t cachedOffset);
    533535
     
    684686        void emit_op_get_by_id(Instruction*);
    685687        void emit_op_get_by_val(Instruction*);
     688        void emit_op_get_by_pname(Instruction*);
    686689        void emit_op_get_global_var(Instruction*);
    687690        void emit_op_get_scoped_var(Instruction*);
     
    773776        void emitSlow_op_get_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&);
    774777        void emitSlow_op_get_by_val(Instruction*, Vector<SlowCaseEntry>::iterator&);
     778        void emitSlow_op_get_by_pname(Instruction*, Vector<SlowCaseEntry>::iterator&);
    775779        void emitSlow_op_instanceof(Instruction*, Vector<SlowCaseEntry>::iterator&);
    776780        void emitSlow_op_jfalse(Instruction*, Vector<SlowCaseEntry>::iterator&);
Note: See TracChangeset for help on using the changeset viewer.