Changes between Version 23 and Version 24 of squirrelfish
- Timestamp:
- Mar 30, 2008, 7:46:42 PM (17 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
squirrelfish
v23 v24 20 20 Investigating performance regressions caused by the introduction of new opcodes. In particular, a simple for loop with no body regresses about 25%. It seemed at first that this has to do with the fact that these instructions call arbitrary external functions, but some odd performance differences still occur without these calls. '''Done''': the regression seems to be related to inlining of large function bodies into Machine::privateExecute(). In order to solve this, we have to remove ALWAYS_INLINE from some larger functions, and move some opcodes out into individual functions marked NEVER_INLINE. This is suboptimal, and we still don't know the exact reason why it is happening, but hopefully it will be easy enough to work around for now. Geoff and I worked this out and he landed [http://trac.webkit.org/projects/webkit/changeset/31277 r31277], which fixes the problems we have seen thusfar. 21 21 22 Implementing all of the left-over binary and unary operations.23 24 22 Better 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. 25 23 24 Function-related nodes 25 26 26 '''Oliver is working on: 27 27 ''' … … 39 39 ''' 40 40 41 CommaNode (since it is needed for the var codegen for various SunSpider tests) 41 Dot nodes 42 42 43 43 '''You could take something from Geoff, or make something up yourself, or do one of these:''' 44 45 Leftover opcodes: 46 47 * ArgumentsNode 48 * ArrayNode 49 * AssignBracketNode 50 * AssignErrorNode 51 * BracketAccessorNode 52 * BreakpointCheckStatement 53 * CaseBlockNode 54 * CaseClauseNode 55 * ClauseListNode 56 * ConstDeclNode 57 * ConstStatementNode 58 * DeleteBracketNode 59 * DeleteDotNode 60 * DeleteResolveNode 61 * DeleteValueNode 62 * ElementNode 63 * EvalFunctionCallNode 64 * ForInNode 65 * FuncExprNode 66 * FunctionCallBracketNode 67 * FunctionCallDotNode 68 * FunctionCallValueNode 69 * InNode 70 * LocalVarDeleteNode 71 * LocalVarTypeOfNode 72 * NewExprNode 73 * ParameterNode 74 * PostDecBracketNode 75 * PostDecConstNode 76 * PostDecDotNode 77 * PostDecLocalVarNode 78 * PostDecResolveNode 79 * PostIncBracketNode 80 * PostIncDotNode 81 * PostfixErrorNode 82 * PreDecBracketNode 83 * PreDecConstNode 84 * PreDecDotNode 85 * PreDecLocalVarNode 86 * PreDecResolveNode 87 * PreIncBracketNode 88 * PreIncDotNode 89 * PrefixErrorNode 90 * PropertyNode 91 * ReadModifyBracketNode 92 * ReadModifyConstNode 93 * ReadModifyDotNode 94 * ReadModifyLocalVarNode 95 * ReadModifyResolveNode 96 * RegExpNode 97 * SwitchNode 98 * ThrowNode 99 * TryNode 100 * TypeOfResolveNode 101 * TypeOfValueNode 44 102 45 103 Optimize dynamic scopes that aren't closures not to save the environment on return