Ignore:
Timestamp:
Jun 30, 2008, 10:45:21 PM (17 years ago)
Author:
[email protected]
Message:

2008-06-30 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt.


Removed the "registerBase" abstraction. Since the register file never
reallocates, we can keep direct pointers into it, instead of
<registerBase, offset> tuples.


SunSpider says 0.8% faster.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/JSVariableObject.h

    r34838 r34906  
    3030#define JSVariableObject_h
    3131
     32#include "JSObject.h"
    3233#include "Register.h"
    3334#include "SymbolTable.h"
    3435#include "UnusedParam.h"
    35 #include "JSObject.h"
     36#include <wtf/OwnPtr.h>
    3637#include <wtf/UnusedParam.h>
    3738
     
    5556        virtual bool getPropertyAttributes(ExecState*, const Identifier& propertyName, unsigned& attributes) const;
    5657
    57         JSValue*& valueAt(int index) const { return registers()[index].u.jsValue; }
     58        JSValue*& valueAt(int index) const { return d->registers[index].u.jsValue; }
    5859
    5960    protected:
     
    6263        // size of a JSCell).
    6364        struct JSVariableObjectData {
    64             JSVariableObjectData(SymbolTable* symbolTable_, Register** registerBase_, int registerOffset_)
     65            JSVariableObjectData(SymbolTable* symbolTable_, Register* registers_)
    6566                : symbolTable(symbolTable_)
    66                 , registerBase(registerBase_)
    67                 , registerOffset(registerOffset_)
    68                 , registerArray(0)
     67                , registers(registers_)
     68                , registerArraySize(0)
    6969            {
    7070                ASSERT(symbolTable_);
    7171            }
    7272           
    73             ~JSVariableObjectData()
    74             {
    75                 delete registerArray;
    76             }
    77 
    7873            SymbolTable* symbolTable; // Maps name -> offset from "r" in register file.
    79 
    80             Register** registerBase; // Location where a pointer to the base of the register file is stored.
    81             int registerOffset; // Offset of "r", the register past the end of local storage.
    82 
    83             Register* registerArray; // Independent copy of registers that were once stored in the register file.
     74            Register* registers; // Pointers to the register past the end of local storage. (Local storage indexes are negative.)
     75            OwnPtr<Register> registerArray; // Independent copy of registers, used when a variable object copies its registers out of the register file.
     76            size_t registerArraySize;
    8477        };
    8578
     
    9588        }
    9689
    97         Register** registerBase() const { return d->registerBase; }
    98         Register* registers() const { return *registerBase() + d->registerOffset; }
    99        
    10090        void copyRegisterArray(Register* src, size_t count);
    10191        void setRegisterArray(Register* registerArray, size_t count);
Note: See TracChangeset for help on using the changeset viewer.