Changes between Version 2 and Version 3 of SquirrelFish


Ignore:
Timestamp:
Apr 20, 2008, 4:46:39 PM (17 years ago)
Author:
mjs@apple.com
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SquirrelFish

    v2 v3  
    22== !SquirrelFish ==
    33
     4SquirrelFish is an incremental rewrite of JavaScriptCore to turn it into a bytecode interpreter. It is a direct-dispatch register VM. Currently it is showing promising performance results, even at a fairly early stage, and we are working to fix the remaining blockers to merging to trunk.
     5
    46'''Blockers to merge to trunk'''
    57
    6 See SquirrelFishBlockers
    7 
    8 '''Major bits left over:'''
    9   * Getters and Setters
    10   * toString/valueOf
    11      * It occurs to me that these could both (s|g)etters and toString could be "trivially" handled through the standard js -> native -> js call model -- at least in the short-medium term
    12   * eval
    13 
    14 '''List of tasks in no order -- pick one, tell everyone what you're doing:
     8See SquirrelFishBlockers.
     9
     10'''Lost optimizations'''
     11
     12Some optimizations have been temporarily lost as part of the squirrelfish work. Other speedups seem to make up for them, so they could be restored either before or after merging back to trunk.
     13
     14 * optimized multiscope access [https://bugs.webkit.org/show_bug.cgi?id=18645 18645]
     15 * optimized access to global built-ins (originally done in [http://trac.webkit.org/projects/webkit/changeset/31226 r31226]) [https://bugs.webkit.org/show_bug.cgi?id=18646 18646]
     16 * static type inference of things like "numeric less than" and "string add" [https://bugs.webkit.org/show_bug.cgi?id=18647 18647]
     17
     18
     19
     20'''What people are working on:
    1521'''
    1622
     
    1824'''
    1925
    20 Re-entry into Machine::privateExecute:
    21   * More indirection in the register file
    22   * Don't overwrite nested register frames when re-entering global execution
    23   * Provide API for re-entering non-global execution (i.e., function callbacks)
    24 
    25 Arguments object
     26Fixing scope chain handling, JS regression test failures.
    2627
    2728'''Cameron is working on:
    2829'''
    2930
     31JS regression test failures.
     32
    3033Better code generation. We have been pondering whether to have a separate peephole optimization pass or to incorporate peephole optimization into code generation. Either way, we should look at some code generation algorithms based on tile matching. We also want to choose an approach that will be compatible with planned extensions, e.g. superinstructions.
    3134
    32 Constant pool GC
    33 
    3435'''Oliver is working on:
    3536'''
    3637
    37 Making VM throw exceptions for invalid behaviour; Finally blocks.
     38Getters & setters.
    3839
    3940'''Sam is working on (when he sees fit to do so):
     
    4344'''
    4445
    45 ScopeChain hackery
    46 
    47 '''You could take something from Geoff, or make something up yourself, or do one of these:'''
    48 
    49 Leftover opcodes:
    50 
    51  * ArgumentsNode
    52  * AssignErrorNode
    53  * BreakpointCheckStatement
    54  * ConstDeclNode
    55  * ConstStatementNode
    56  * ElementNode
    57  * EvalFunctionCallNode
    58  * ParameterNode
    59  * PostDecConstNode
    60  * PostfixErrorNode
    61  * PreDecConstNode
    62  * PrefixErrorNode
    63  * PropertyNode
    64  * ReadModifyConstNode
    65  * ThrowNode
    66  * TryNode
    67 
    68 Where SunSpider tests currently fail codegen:
    69 
    70  * 3d-cube: ungettableGetter
    71  * 3d-morph: ungettableGetter
    72  * 3d-raytrace: crash on failing toObject conversion for base of call (bad Args to constructor)
    73  * access-binary-trees: crash on failing toObject conversion for base of call (bad Args to constructor)
    74  * access-fannkuch: crash on failing toObject conversion for base of call (bad Args to constructor)
    75  * access-nbody: new expr (NBodySystem)
    76  * access-nsieve: ungettableGetter
    77  * bitops-3bit-bits-in-byte: SUCCESS
    78  * bitops-bits-in-byte: SUCCESS
    79  * bitops-bitwise-and: SUCCESS
    80  * bitops-nsieve-bits: ungettableGetter
    81  * controlflow-recursive: ungettableGetter
    82  * crypto-aes: crash on failing toObject conversion for base of call (bad Args to constructor)
    83  * crypto-md5: ungettableGetter
    84  * crypto-sha1: ungettableGetter
    85  * date-format-tofte: local eval - eval(ia[ij] + "()")
    86  * date-format-xparb: bracket call - this[func]()
    87  * math-cordic: ungettableGetter
    88  * math-partial-sums: crash on failing toObject conversion for base of call (bad Args to constructor)
    89  * math-spectral-norm: ungettableGetter
    90  * regexp-dna: regexp literal
    91  * string-base64: crash on failing toObject conversion for base of call (bad Args to constructor)
    92  * string-fasta: crash on failing toObject conversion for base of call (bad Args to constructor)
    93  * string-tagcloud: trying to get from a base register containing 0x0 (bad codegen?)
    94  * string-unpack-code: crash on failing toObject conversion for base of call (bad Args to constructor)
    95  * string-validate-input: regexp literal
    96 
    97 Harness failures:
    98 
    99  * sunspider-analyze-results: KJS::resolve SHOULD NEVER BE REACHED
    100  * sunspider-compare-results: SUCCESS (but not running yet)
    101  * sunspider-standalone-compare: KJS::resolve SHOULD NEVER BE REACHED
    102  * sunspider-standalone-driver: new expr (invoking Array constructor)
     46Organizing remaining blocker issues.
     47
     48'''Assorted notes, some of these may be obsolete'''
    10349
    10450Optimize dynamic scopes that aren't closures not to save the environment on return
     
    11359
    11460{{{
    115 optimized multiscope access
    116 optimized access to global built-ins (http://trac.webkit.org/projects/webkit/changeset/31226)
    117 static type inference of things like "numeric less than" and "string add"
    11861
    11962// WARNING: If code generation wants to optimize resolves to parent scopes,