Brendan Eich
9dd296d70a
Merge, in the name of all that which does not suck\!
2008-08-11 18:53:21 -07:00
David Anderson
9ce9cb42b5
Merge.
2008-08-11 18:49:34 -07:00
David Anderson
9c0315ccf7
Fragmento lifetime is now associated with the thread/runtime instead of the context.
2008-08-11 18:47:22 -07:00
Brendan Eich
7fbc9732fd
JSOP_LENGTH handles dependent strings now.
2008-08-11 18:41:06 -07:00
shaver@mozilla.org
6a35d8134e
implement JSOP_ADD(str, num)
2008-08-11 21:32:26 -04:00
David Anderson
c0b377bb8b
Fixed some explicit deallocation bugs that cropped up running in the browser.
2008-08-11 18:20:10 -07:00
Andreas Gal
ade8388ef5
Merge.
2008-08-11 18:03:31 -07:00
Andreas Gal
20318a6ce0
Trash tree if we see an obsolete treeinfo object on record.
2008-08-11 18:03:13 -07:00
Brendan Eich
5137a68ca5
Merge.
2008-08-11 17:54:59 -07:00
Brendan Eich
d004346b52
Object.prototype.{hasOwnProperty,propertyIsEnumerable}.
2008-08-11 17:47:05 -07:00
Brendan Eich
9849ef7434
Handle multi-level property cache hits; put BRANCH_EXIT on its own line so it stands out as the third param to guard in ifop.
2008-08-11 17:40:26 -07:00
David Anderson
c5a85f7524
Merge.
2008-08-11 16:14:29 -07:00
David Anderson
1b623f7d25
Added explicit deallocation (bug 443500, r=gal)
2008-08-11 16:01:21 -07:00
Andreas Gal
020e68ab1e
Remove default parameter for guard, specify MISMATCH_EXIT explicitly.
2008-08-11 15:40:04 -07:00
Andreas Gal
00e5631b45
Remove dead code, add a debug printf.
2008-08-11 15:23:37 -07:00
Andreas Gal
7bcf550b11
If we get a series of tree type mismatches, trash the tree (and all dependent trees in case of nesting.)
2008-08-11 15:16:34 -07:00
Andreas Gal
120117749e
Don't try to access the name of arguments beyond nargs (r=brendan).
2008-08-11 12:47:18 -07:00
Andreas Gal
285acf8b9c
Merge.
2008-08-11 11:43:59 -07:00
Andreas Gal
ca11b2e069
Don't use asprintf (446508).
2008-08-11 11:37:35 -07:00
Brendan Eich
13cfac8f97
Rework GCF_DONT_BLOCK to be cx->gcDontBlock, assert it's set, set before entering trace and clear on exit.
2008-08-11 11:18:16 -07:00
Brendan Eich
a56862bdff
Make js_ConcatStrings JS_FASTCALL and use directly as a built-in; remove gcflag param from it and from js_NewString.
2008-08-11 11:03:54 -07:00
Brendan Eich
56fac8fe90
Back out extra gcflag param change (859b9a23adbf), I set bad precedent and will back out previous such shortly. Want cx->gcflags instead.
2008-08-11 10:33:23 -07:00
Brendan Eich
fced00a77b
- Trace JSOP_NEWINIT/INITPROP/INITELEM/ENDINIT, which required extending the FastNewObject builtin to create a dense Array or a new Object (easy to discriminate on the constructor function's u.n.clasp member).
...
- Fix record_JSOP_SETELEM to avoid storing if a JSOP_POP that will be skipped follows.
2008-08-11 10:24:47 -07:00
shaver@mozilla.org
ee67ea9db4
extend js_NewObjectWithGivenProto to permit specifying additional new-thing flags (such as GCX_DONT_BLOCK)
2008-08-10 22:56:10 -04:00
Brendan Eich
0d83651633
- Skip dense array object, try prototype, in all JSOP_GET*PROP variants, interpreter and tracer.
...
- Test entry instead of retesting aobj->map->ops->getProperty == js_GetProperty in JSOP_CALLPROP.
- Handle object and null types as well as booleans in record_JSOP_NOT.
- Trivially implement JSOP_STRICT{EQ,NE} recording by forwarding to the non-strict record methods. This works so long as the latter trace only same-type operands and do no conversions.
2008-08-11 00:05:39 -07:00
Brendan Eich
43649cd01e
Record JSOP_LOOKUPSWITCH.
2008-08-10 23:20:24 -07:00
Brendan Eich
64fc3b0367
- Fix shapeless callee guarding to guard on function object value.
...
- Add JSOP_NULLTHIS to help the tracer guard shapeless callees (see trace-tests.js)
- Culled bogus record_JSOP_CALLGVAR left-over forwarding to record_JSOP_GETGVAR.
- Better shapeless callee tests.
2008-08-10 22:36:48 -07:00
Brendan Eich
a67dad8f4d
Reoptimize call and new based on shape guards and branded method-ful scopes -- no need to emit function-is-interpreted guards.
2008-08-10 15:26:39 -07:00
Brendan Eich
0099753ff4
Add Array (generic) join builtin, plus (not yet used) optional this-class guarding for builtins.
2008-08-10 14:50:31 -07:00
Brendan Eich
5bbc609a8b
Implement JSOP_OBJECT.
2008-08-10 12:01:03 -07:00
Brendan Eich
e5b0039eaa
Match native map guard specializations in tracer to interpreter, particularly to skip up the proto chain from a dense array in JSOP_CALLPROP (json2.js showed an abort here, pointing to the tracer/interpreter discrepancy).
2008-08-10 11:54:27 -07:00
Brendan Eich
18248a701c
Fix JSOP_FORLOCAL to push false when guarded conditions are false while recording (449961).
2008-08-10 10:42:21 -07:00
Brendan Eich
2991c66416
- Avoid unnecessary FASTCALL builtin wrappers for existing js_* library-private or friend functions, which could be (and now are) fastcall (JS_FASTCALL). A couple of builtins avoid name collisions by using js_Fast instead of just js_ as their name prefix.
...
- Use GCF_DONT_BLOCK from fastcall builtins that call into the GC allocator (mostly; a few places need help still, or better: need to avoid allocation).
- Cope with C clients of jscntxt.h and its include files (these hacks should go away).
- Naming convention and function definition line-break style nit-picks.
2008-08-10 00:39:18 -07:00
Brendan Eich
f2b84e6ea0
- Test JSVAL_BOOLEAN tag in TraceRecorder::record_JSOP_TYPEOF, assert no holes or other pseudo-booleans, to unify false/true/undefined testing.
...
- JS_NOT_REACHED("...") not JS_ASSERT(0 && "...").
-
2008-08-09 22:27:58 -07:00
shaver@mozilla.org
bd5846e102
JSOP_ANONFUNOBJ
2008-08-09 23:12:32 -04:00
shaver@mozilla.org
a937f98d5b
JSOP_TYPEOF and JSOP_TYPEOFEXPR
2008-08-09 22:54:01 -04:00
shaver@mozilla.org
c4ca6755bf
Builtin for String.prototype.concat (single int-arg version)
2008-08-09 22:15:21 -04:00
shaver@mozilla.org
3341bf1c11
Implement cmp for string-on-string.
...
Add < and > tests for strings.
Condition the top-level truthies test on a synthetic test name, so it can be
excluded.
2008-08-09 21:50:52 -04:00
Robert Sayre
c8dd484645
Bug 449978 – TM: trace some more builtins for string-validate-input
2008-08-09 21:47:52 -04:00
Robert Sayre
2ac505035a
Bug 449666 – TM: Assertion failure: JSSTRING_IS_FLAT during trace recording. r=brendan
2008-08-09 18:20:18 -04:00
shaver@mozilla.org
d431dd547d
improve naming of anonymous functions and excess args
2008-08-09 15:05:34 -04:00
Brendan Eich
c90cc76482
Prettier spacing knownNatives table.
2008-08-08 22:43:31 -07:00
Andreas Gal
36eb8da275
Merge.
2008-08-08 19:24:50 -07:00
Andreas Gal
66dd6aab15
Add an assert to protect against nested exits (not implemented yet.)
2008-08-08 19:23:28 -07:00
Brendan Eich
eaf4254c15
Merge from mozilla-central.
2008-08-08 18:58:04 -07:00
Andreas Gal
8244eafaff
Support calling of nested tree from within inlined frames. When we call a tree that tree expects to be the top-level tree, which means it assumes callDepth=0. If the call of the tree is within an inlined frame, thats not true (callDepth > 0). We adjust the native stack pointer accordingly before calling the tree, and then restore the value of the stack pointer after the call. Fancy stuff.
2008-08-08 18:52:08 -07:00
Andreas Gal
3f90159e8b
Remove ip from InterpState. Calculate the new pc after a trace side exit relative to lr->from->root->ip, which also works if we side exit on a different tree than we entered (which can happen in case of nested trees.)
2008-08-08 18:20:20 -07:00
Brendan Eich
f028f26f52
Merge.
2008-08-08 16:40:45 -07:00
Brendan Eich
072c7b59a5
Guard against shapeless callees, with tests (more to do here, can't break the unknown callee case yet, but it should be breakable).
2008-08-08 16:37:01 -07:00
Andreas Gal
c7be42f2f3
Add very preliminary nesting for trees. This is disabled by default. To enable set TRACEMONKEY=nesting in the environment.
2008-08-08 15:26:31 -07:00
Brendan Eich
de40e589da
Merge.
2008-08-08 14:45:27 -07:00
Brendan Eich
153e03bb32
Get operator new on interpreted functions working, along with JSOP_SETPROP on an unmutated object, or one of the right shape but where the setprop is adding the next property, and it's not in the object yet.
2008-08-08 14:38:44 -07:00
Andreas Gal
f2972efa5c
Remove tracking of outer trees and merging of globals since globals will be maintained centrally soon, not attached to trees.
2008-08-07 19:40:41 -07:00
Brendan Eich
43f60608f4
Fix bug 449627.
2008-08-07 18:12:31 -07:00
Andreas Gal
f77dcbe3f6
We don't deallocate JIT-related data structures when the JIT is shut down. Add a TODO for this.
2008-08-07 17:52:48 -07:00
Andreas Gal
2d0c9c41ab
Hand the script in when updating the oracle regarding global variable slots even if we don't use it right now. This will be useful for caching information across runtimes.
2008-08-07 17:43:13 -07:00
Andreas Gal
3ac96b066b
Use a typedef SlotList instead of Queue<uint16>.
2008-08-07 17:22:21 -07:00
Andreas Gal
a21818bc72
Teach typemaps how to capture the types of all slots in a slot list.
2008-08-07 17:20:49 -07:00
Andreas Gal
d9159ecfb2
When merging globals from inner trees to outer trees, make sure to push the expected type upstream as well.
2008-08-07 17:08:27 -07:00
Andreas Gal
afda8f7095
When we trash a tree, we have to trash all outer trees that call it as well.
2008-08-07 17:01:00 -07:00
Andreas Gal
d988d3523a
Recognize loop edges that hit a nested tree.
2008-08-07 16:41:20 -07:00
Andreas Gal
bbe7acfbaf
Fix typo (missing memcmp in statement).
2008-08-07 16:27:26 -07:00
Andreas Gal
600b9c3e14
Remove type-map hash code. A direct memcmp seems to be faster (probably some SSE magic behind it in gcc/glibc).
2008-08-07 16:26:56 -07:00
Andreas Gal
27e8ef817a
Factor out the code to capture the current stack type map and move around the type map method implementations to make sure they can see the FORALL macros.
2008-08-07 16:23:50 -07:00
Andreas Gal
01e3af1f79
We expect no interned globals in a new tree. Assert on that.
2008-08-07 15:44:11 -07:00
Andreas Gal
00b12bbaca
Always trash TreeInfo when we recompile. This avoids the much dreaded JS_ASSERT(insInt32) errors and we can do this now because the demotion information is provided by the oracle and no longer stored in the typemap directly.
2008-08-07 15:38:54 -07:00
Andreas Gal
95f5262e4f
Use an oracle to predict when slots are demotable. This allows trashing the TreeInfo* object in the root fragment more aggressively. Rebuild the stack type map at every compile to avert type map mismatches. Purge all global slot info when we re-record a tree.
2008-08-07 15:28:43 -07:00
Andreas Gal
e09041e2a5
If we run into an error during compilation, blacklist that fragment. If we run out of memory, flush the cache.
2008-08-06 22:26:20 -07:00
Andreas Gal
0fe0cf9a98
Flush JIT cache for all contexts. Clear nanojit error state when we start compiling.
2008-08-06 22:18:33 -07:00
Andreas Gal
e9733ceed9
Remove dead code.
2008-08-06 22:10:30 -07:00
Andreas Gal
9385e7842c
Add a helper to flush the JIT code cache (and the fragment lookup quick cache). On a global shape mismatch trash the entire cache (might be a bit overly aggressive). Similary, during GC flush the code cache.
2008-08-06 21:56:25 -07:00
Andreas Gal
d1a1a76121
Tracker outer trees for every tree and merge globals of inner trees into all outer trees as we register inner trees with outer trees.
2008-08-06 19:25:24 -07:00
Andreas Gal
3785f2a5af
Fix misleading debug text.
2008-08-06 19:04:41 -07:00
Andreas Gal
ff22344594
Fix tracing of code inside methods that were called with arity mismatch.
2008-08-06 18:51:26 -07:00
Brendan Eich
f23efc77b2
Replace bogus assertion with runtime test for correct abort test (getter or setter, given sprop hit from propcache).
2008-08-06 17:54:36 -07:00
Andreas Gal
d41941073e
Disable outerlining, to be replaced with nesting.
2008-08-06 17:34:06 -07:00
Andreas Gal
1bf2697257
Add a helper to emit a tree-call into the currently recording trace.
2008-08-06 16:24:29 -07:00
Andreas Gal
27de48d1f9
Cleanup stack offset calculation and eliminate the stack offset fiddling that was necessary for nanojit prior to adding the getTop hook.
2008-08-06 15:04:02 -07:00
Brendan Eich
0f1f29e9a4
Merge again, I lost to Andreas\!
2008-08-06 13:44:07 -07:00
Andreas Gal
2acb2afdec
Always trashing the tree on a type mismatch can't work since the first iteration comes in as undefined for loop-outputs and then kills the main tree that deals with the proper stable types. Have to find a different way to deal with this.
2008-08-06 13:41:04 -07:00
Andreas Gal
fcaab6d007
Pull recompile flag out of the state and pass in as argument. Trash the tree if a secondary trace can't be connected to the loop header. This is very aggressive and might need more tinkering. Trashing the tree on every mismatch doesn't seem to work well, so thats currently disabled.
2008-08-06 13:37:29 -07:00
Brendan Eich
6e215765df
- Add builtins to support for-in loops, both iterating and getting/setter properties by name using o[i] instead of o.p where i is 'p'.
...
- Record JSOP_ITER and JSOP_ENDITER, which must be handled since tracing could start in between them (and always will, until we nest or unless we outerline).
- Add a null state guard in JSOP_FORVAR's recorder method.
- Pick include order, indentation, and trailing space nits.
2008-08-06 13:36:29 -07:00
Andreas Gal
a253b66a09
If we stop recording, immediately attempt to trigger the tree.
2008-08-06 13:18:30 -07:00
Andreas Gal
141f71186c
Properly deal with trace entry with non-empty stack.
2008-08-06 12:38:17 -07:00
Andreas Gal
0ed65746a7
Split side exit handling from js_ExecuteTree.
2008-08-06 06:34:16 -07:00
Brendan Eich
03b511f9e4
- Use JSStackFrame* fp over, don't declare another JSStackFrame* f, in the FORALL macros and clones (f is canonical variable name for nanojit::Fragment*, fp for JSStackFrame*).
...
- Nit-pick include order (alphabetical within each group).
- Trailing space and indentation no-knock raid.
2008-08-03 22:55:28 -07:00
Brendan Eich
da42a8c6f7
Strength-reduced unsigned modulus in the fragment quick cache, don't use signed % which requires a branch and less-than-zero test.
2008-08-03 22:35:15 -07:00
Brendan Eich
df36d9e36f
Use INS_CONST to addName a few lir->insImm immediates.
2008-08-02 20:01:36 -07:00
Brendan Eich
5b9f299115
Fix TraceRecorder::ifop backward logic bug in the OBJECT case, and implement the STRING case. Add tests for truthy and falsy strings.
2008-08-02 16:51:22 -07:00
Brendan Eich
607e259b69
Fix return NULL in bool to return false.
2008-08-02 16:05:29 -07:00
Andreas Gal
3106dc8845
Use quick cache to bypass fragmento is possible.
2008-08-01 22:56:52 -07:00
Andreas Gal
12f1c06952
Factor out most of the remaining code in js_LoopEdge into js_RecordTree and move the code to attach new branches into js_ExecuteTree.
2008-08-01 22:47:15 -07:00
Andreas Gal
746cb91802
Factor out js_ContinueRecording from js_LoopEdge.
2008-08-01 22:39:52 -07:00
Andreas Gal
3fea3f5d53
Split up FORALL_SLOTS_IN_PENDING_FRAMES macro in a macro that processes a frame, and a macro that uses that macro to process all pending frames.
2008-08-01 22:27:39 -07:00
Brendan Eich
3691962a2f
Extend ifop to handle undefined tests; implement JSOP_OR and JSOP_AND (so much work\!).
2008-08-01 12:06:04 -07:00
Brendan Eich
dc1072fe55
Style police raid: function names start in column 1, with one blank line between functions.
2008-08-01 11:03:52 -07:00
Brendan Eich
2cfdd9a55a
1. Don't store thisp literally in state.rp, get it from argv[-1]. 2. Fix DEBUG localNames code.
2008-08-01 10:40:38 -07:00
Brendan Eich
8f837e0784
- Implement interpreter frame reconstruction (js_SynthesizeFrame).
...
- Fix MONITOR_BRANCH to restore frame-dependent interpreter locals (we want fewer of these if they can be removed with no perf loss).
- Fix FORALL_SLOTS_IN_PENDING_FRAMES not to scan argv in callee when it has scanned operand stack in caller.
- Fix import to take the localFrame from whose fun its localNames parameter was computed -- it was using cx->fp which is wrong when FORALL_SLOTS_IN_PENDING_FRAMES iterates other than the top of stack frame.
- A few interval tests that were double-ended are single-ended now.
- Add call.js mini-test (more cases needed).
2008-08-01 08:26:32 -07:00
Andreas Gal
4eba8e4012
Remove entryStackDepth. Calculate sp_adj relative to entryNativeStackSlots.
2008-08-01 02:33:54 -07:00
shaver@mozilla.org
3221386525
add specialized StringToInt32 and filter for it
2008-07-31 11:35:08 -07:00