Commit Graph

441 Commits

Author SHA1 Message Date
Andreas Gal
5495ccf586 Abort trace is STOP is leaving the recording context. 2008-07-18 19:15:49 -07:00
Andreas Gal
47ae25da20 Make entryFrame/entryRegs relative to the tree entry since we only adjust ip/sp/rp when exiting from the tree, not in between fragments. 2008-07-18 16:21:22 -07:00
Andreas Gal
a8b127d5af Adjust ip/sp/rp in the interpreter recovery code, not on the trace. 2008-07-18 15:35:59 -07:00
Andreas Gal
1c9c67b6a1 Write all the debug output to stdout (we can't easily make everything go to stderr, so this way at least it all goes into the same place.) 2008-07-18 14:13:31 -07:00
Andreas Gal
89b50ed124 Rework some of David's changes. Make sure we don't modify the tree until we are ready to attach the new fragment. Share lirbufs between tree branches. 2008-07-18 14:11:01 -07:00
David Anderson
4770d4b3e0 Got side exits seemingly working, added if.js to trace-test.js 2008-07-18 10:33:17 -07:00
shaver@mozilla.org
61d58bad87 Handle more operand types in ifop(). 2008-07-18 08:01:51 -07:00
shaver@mozilla.org
983e9cdb83 Better diagnostic info for trace abort. 2008-07-18 07:59:37 -07:00
shaver@mozilla.org
3eaeae50b5 lookup/find, but do not fill prop cache from recorder 2008-07-18 00:46:18 -07:00
shaver@mozilla.org
7078a99d21 When PROPERTY_CACHE_TEST misses, fall back to doing our own lookup via js_GetPropertyHelper. 2008-07-17 23:57:56 -07:00
Brendan Eich
84c0998916 Warning elimination. 2008-07-17 18:30:54 -07:00
Andreas Gal
f94180fbe2 Make sure we compile again if we reject a trace by decrementing hits. 2008-07-17 18:15:55 -07:00
Andreas Gal
f58160134a Fix hot loop triggering. 2008-07-17 18:10:47 -07:00
shaver@mozilla.org
859ec6fbb6 can't easily find real names for globals, so just number them 2008-07-17 17:33:18 -07:00
Andreas Gal
dded69f2a3 Merge. 2008-07-17 17:13:41 -07:00
Andreas Gal
19ed222624 Disable trees for the time being. 2008-07-17 17:12:28 -07:00
Andreas Gal
43fbfbfe1e Add if.js example for trees. 2008-07-17 16:38:09 -07:00
Andreas Gal
dbf2dc54bd Add the beginning of support for trees. 2008-07-17 16:20:13 -07:00
shaver@mozilla.org
3db81baa04 Label globals and locals with their source-names in trace.
Show line number on abort.
2008-07-17 15:09:48 -07:00
Andreas Gal
f91ca871ac Add js_IsLoopExit that indicates whether a side exit is likely to continue the loop or not. 2008-07-17 14:58:09 -07:00
Andreas Gal
3df09fb85c Cleanup recorder activation, use a single hot loop threshold (10). 2008-07-17 13:42:58 -07:00
Andreas Gal
954c5830e1 Added statistics and a js_DestroyJIT hook. Also use debug_only and not verbose_only as #ifdef DEBUG shortcut. 2008-07-17 10:22:40 -07:00
Andreas Gal
bfb3e457f1 Fix signature of insCall in the FuncFilter and remove f2i(i2f) elimination since we shouldn't really ever hit it. 2008-07-17 03:24:17 -07:00
Andreas Gal
e12047397c Move up addName to make sure it gets inline in non-debug mode. 2008-07-17 02:02:48 -07:00
shaver
87eacb1139 Add setprop and tests for setprop and cleanup labling code for debug mode (m=gal). 2008-07-17 02:00:23 -07:00
Andreas Gal
9d6fa41738 Cleanup trace abort handling. 2008-07-17 01:29:41 -07:00
Andreas Gal
3fa6978605 Merge. 2008-07-17 00:48:30 -07:00
Andreas Gal
3cd2b84ec4 Fixed ASSERT JS_DOUBLE != JS_VOID issue. If the root fragment fails to compile, trash the type-map and re-capture it when we try to re-compile. 2008-07-17 00:48:10 -07:00
shaver@mozilla.org
acde4fceb0 JSOP_LENGTH 2008-07-16 23:53:14 -07:00
Andreas Gal
6cfd498b7c Increase code cache size. 2008-07-16 23:47:57 -07:00
Andreas Gal
ad6b349616 Merge. 2008-07-16 23:39:12 -07:00
Andreas Gal
e2a0438e22 Fix f2i(i2f) filter (broken since the last TT sync, argument order changed from right to left to left to right). 2008-07-16 23:38:39 -07:00
Brendan Eich
13d6469f9b Prefer getarg;length, etc. to getargprop. 2008-07-16 23:33:04 -07:00
Andreas Gal
83ac88d4c7 Don't clear out arguments, clear out variables at method entry. 2008-07-16 23:04:50 -07:00
Andreas Gal
b243a8350a Better naming of the after_JSOP_CALL event (EnterFrame). 2008-07-16 23:00:59 -07:00
Andreas Gal
2442099090 Notify the recorder when a new frame was created by JSOP_CALL. 2008-07-16 22:58:06 -07:00
Andreas Gal
2379d6dcde Initialize arguments to void and write JSVAL_HOLE's value onto the native stack, not its boxed representation. 2008-07-16 22:25:56 -07:00
Andreas Gal
df5005a322 Hand in typemap the recorder is supposed to use (preparation for side exit compilation and trees). 2008-07-16 21:49:42 -07:00
Andreas Gal
def4afc614 Move the allocation of the LIR buffer and the FragmentInfo data structure creation (which includes typemap and interned global calculation) into loopedge. 2008-07-16 21:41:03 -07:00
Andreas Gal
af95344998 Make JSOP_CALLNAME tell us why it doesn't like to trace. 2008-07-16 19:00:14 -07:00
Andreas Gal
74f767e62b Fix generation of VOID immediates and initialize rval after the new frame was setup by CALL. 2008-07-16 17:44:44 -07:00
Andreas Gal
db7e41ed40 Add generic recorder hooks that are called before and after all opcodes as we trace. We might want to instead just move to pre_OP and post_OP. 2008-07-16 17:29:08 -07:00
Andreas Gal
c041bad939 Don't intern global function objects onto the native frame since we rarely ever need them anyway (we call them via the property cache). 2008-07-16 15:48:51 -07:00
Andreas Gal
7f119dc35a Enable CALLNAME and add test case for it so we can call global functions. 2008-07-16 15:40:35 -07:00
Andreas Gal
c7714a3ad5 Make sure this/argv[-1] is set fpr CALLVAR and CALLARG. 2008-07-16 15:13:27 -07:00
Andreas Gal
04ea9e0e09 Enable inlining for calls. Deep bailouts (from within side exits) are generated but are not allowed to be ever taken (for now). 2008-07-16 15:01:55 -07:00
Andreas Gal
43b7ba1be4 Don't use a builtin for this. For functions its interned in the native frame. For global this we read from fp->thisp. Restore jsinterp.cpp and jsinterp.h (no longer need COMPUTE_THIS exposed). 2008-07-16 14:36:50 -07:00
David Anderson
5dca2ad552 Synced nanojit with TT tip. 2008-07-16 14:21:31 -07:00
shaver@mozilla.org
ef9a5dc216 fix GETXPROP; thanks to brendan for playing chewbacca 2008-07-16 13:10:17 -04:00
shaver@mozilla.org
f8c80ec490 CALLARG, CALLVAR 2008-07-15 23:37:57 -04:00
shaver@mozilla.org
4937938676 fix scalpel left in nativeFrameSlots from aborted thisp addition to frame 2008-07-15 23:20:53 -04:00
shaver@mozilla.org
21a3ec3485 implement JSOP_MOD 2008-07-15 23:19:29 -04:00
shaver@mozilla.org
3a4c348313 Trace JSOP_THIS and JSOP_THISPROP.
Rename getprop to get_prop, just because.
Extract COMPUTE_THIS to jsinterp.h as JS_COMPUTE_THIS for reuse in tracer.
2008-07-15 21:37:00 -04:00
Andreas Gal
21490a6e41 Fix uncomplete range check for slot numbers of interned globals. 2008-07-15 17:10:52 -07:00
Andreas Gal
cd739bdb35 Strict aliasing cleanup. 2008-07-15 16:14:00 -07:00
Andreas Gal
3aeb53f580 Add a few consts to char* pointers to pacify gcc 4.2. 2008-07-15 16:04:08 -07:00
shaver@mozilla.org
3693365174 rename getpropfromval, it burns mine eyes 2008-07-15 18:29:42 -04:00
Andreas Gal
1b783425aa Assign blame where blame is due. 2008-07-15 15:05:16 -07:00
Andreas Gal
cbf4813605 Merge. 2008-07-15 13:14:05 -07:00
Andreas Gal
a81b83090e Sync with TT. 2008-07-15 13:06:05 -07:00
shaver@mozilla.org
919139d11b initialize dslots_ins 2008-07-15 13:40:11 -04:00
Brendan Eich
3ccdb62685 Propagate error exceptions from TraceRecorder ctor; fiddle/trim space. 2008-07-15 10:26:15 -07:00
shaver@mozilla.org
7d7ece76a8 GETVARPROP, GETARGPROP, GETXPROP 2008-07-15 13:17:51 -04:00
shaver@mozilla.org
409bb7f29d more ABORT_TRACE instrumentation (some should be asserts?) 2008-07-15 09:07:54 -04:00
Andreas Gal
5848fd6694 Generate a list of interned global slots (gslots) when we process the tree header. This list is then used whenever we iterate over the native frame. This is faster and safer than looking up properties in the global object every time. 2008-07-15 01:53:39 -07:00
Andreas Gal
84608819b9 Remove state exposing accessor functions from recorder and instead hand in that state via the constructor into ExitFilter. 2008-07-15 01:27:14 -07:00
Andreas Gal
1693476391 Guard in FragmentInfo on the shape of the global object. Don't check for the shape of the global object on the trace. 2008-07-15 01:08:13 -07:00
Andreas Gal
bac6ed12f4 Store list of interned global slots in struct FragmentInfo 2008-07-15 01:03:49 -07:00
Andreas Gal
9f761173f0 Added a callstack that will track the pc of the call that caused a function call to be inlined. This is necessary to recover from deep side exits inside inline functions. The callstack is subject to store elimination, so unnecessary stores to the stack will go dead automatically during compilation (i.e. if we inline a function that doesn't have side exits.) 2008-07-14 19:12:50 -07:00
Andreas Gal
df84a21add Fix warnings. 2008-07-14 17:52:38 -07:00
Andreas Gal
e59427d0f7 Use JS_GetGlobalForObject to get the global object. Walking back the call chain is not equivalent and not safe. 2008-07-14 16:40:38 -07:00
shaver@mozilla.org
0180d69fd8 fix our aliasing idiocy by extending jsdpun, add Math.sqrt, add strict-aliasing to our Makefile.ref flags 2008-07-14 18:22:05 -04:00
Brendan Eich
815146e0e4 Non-null prop from js_LookupProperty means found, so must unlock obj2 (now pobj) in all such cases. 2008-07-14 00:13:31 -07:00
Andreas Gal
4a598274f5 Clean up shaver's cleanup. 2008-07-13 22:02:42 -07:00
Andreas Gal
28e3ed165f Fixed printing of integer incoming values in DEBUG mode. 2008-07-13 21:53:35 -07:00
shaver@mozilla.org
0f64113822 merge, and fix locking and logic for FORALL_SLOTS 2008-07-14 00:51:43 -04:00
shaver@mozilla.org
4779e69591 make JSOP_CALL builtin specialization data-driven 2008-07-14 00:28:31 -04:00
Andreas Gal
8750e39409 Skip properties that were not found by LookupProperty. 2008-07-13 21:17:56 -07:00
Andreas Gal
30c7f0493e Reserve space for every global property that the current script has an atom for instead of trying to rely on ngvars. 2008-07-13 21:14:34 -07:00
Brendan Eich
044d6f9c93 Merge. 2008-07-12 23:44:23 -07:00
shaver@mozilla.org
46b4c7def2 fix the secondary map-native guard 2008-07-13 00:09:24 -04:00
Brendan Eich
ba3c776fc2 js_ for library-extern names like math_sin. 2008-07-12 12:35:36 -07:00
shaver@mozilla.org
6b30961e58 Guard against subzero array indices 2008-07-12 09:04:58 -04:00
Andreas Gal
3ccfc13098 Demote fneg to neg if input is known to be an integer (untested). 2008-07-12 00:34:10 -07:00
Andreas Gal
223f4f23f7 Merge. 2008-07-12 00:28:28 -07:00
Andreas Gal
b5e654f120 5 hours of debugging, and 9 keystrokes to fix it. That was one expensive bug. shaver's reduced fannkuch example works now. I think independently of this one we don't check properly for index underflow in dense arrays. Shaver is going to have to take a look at that (this fix makes fannkuch indexes not become negative, but doesn't explain why we crash so hard if they do become negative). 2008-07-12 00:27:21 -07:00
shaver@mozilla.org
b7dac1100d add JSOP_NEG and tests 2008-07-12 00:20:48 -04:00
shaver@mozilla.org
fd5ac5b844 add Math.cos and Math.pow to the specialized-call party, and add tests 2008-07-12 00:03:33 -04:00
shaver@mozilla.org
d180a6755d I will remember that stacked values are not boxed.
I will remember that stacked values are not boxed.
I will remember that stacked values are not boxed.
I will remember that stacked values are not boxed.
2008-07-11 23:04:29 -04:00
shaver@mozilla.org
9c69964575 Specialized tracing of Math.sin, as a proof of concept. Doesn't quite work due to regalloc mismatch, but close! 2008-07-11 22:59:09 -04:00
shaver@mozilla.org
8ffe777b5a Incomplete stab at CALLPROP, added ABORT_TRACE for better diagnostics, make math_sin non-static in preparation for specializing call. 2008-07-11 20:59:10 -04:00
Andreas Gal
3e39ec9d3b Print meaningful filename/line-number info for trace entry/exit. 2008-07-11 13:57:16 -07:00
Andreas Gal
8c6dbda691 Report the source location when recording a trace. 2008-07-11 13:45:38 -07:00
Andreas Gal
b222836a73 Don't demote u2f conversions and sink the type cast into the side exit type map, because this loses the sign bit for unsigned values. We could fix this by adding an explicit unsigned type to the map, but for now I think we should stick to int/double only since there is the risk of fanning out trees. Crypto doesn't seem to use ush all that much so we should be ok performance-wise. 2008-07-11 13:18:29 -07:00
Andreas Gal
cd0b213cec Poking around in the arm code, trying to make it not die miserabily with BUILD_OPT=1. 2008-07-11 00:46:44 -07:00
Andreas Gal
3f31810cee Still trying to get the ARM register updating right. 2008-07-11 00:31:48 -07:00
Andreas Gal
5d93de0225 Trying to make arm work. Flying blind here. 2008-07-10 22:35:06 -07:00
Andreas Gal
bde4b2e588 Adjust sp/ip for ARM. Very useful when trying to run on ARM. 2008-07-10 22:29:06 -07:00
shaver@mozilla.org
6bb689e6c3 some ARM stuff 2008-07-11 01:27:06 -04:00
Andreas Gal
fe9354b377 Merge (no, really, can someone teach Mercurial to not do this?). 2008-07-10 22:12:04 -07:00
Andreas Gal
41ded9b128 Output the value if we can't enter a trace because of a type mismatch. 2008-07-10 22:10:02 -07:00
Brendan Eich
a17263a036 1. Fix !JS_THREADED_INTERP bugs in BRANCH and recording switch case generation.
2. Rename TraceRecorder op methods to record_JSOP_xxx to avoid shadowing JSOP_*
   enumerators used inside jsopcode.h macros -- death to ::JSOP_*!
3. Added atoms TraceRecorder member for giant literal pool scripts.
4. Condition assert in TraceRecorder::test_property_cache_direct_slot to avoid
   false positive when executing function code accessing a global.
2008-07-10 21:55:09 -07:00
Andreas Gal
cc38ec5e21 Don't crash when expecting an int32 as double box in unbox but getting something else (and better debug output). 2008-07-10 21:23:32 -07:00
Andreas Gal
4cba5853d4 Merge. 2008-07-10 20:35:40 -07:00
Andreas Gal
4e34cfc559 IFEQ and IFNE are identical for us. We just expect the same boolean on the stack and side exit if not. 2008-07-10 20:35:19 -07:00
shaver@mozilla.org
66b22a063c use a type that windows knows about for offset computation 2008-07-10 22:17:41 -04:00
shaver@mozilla.org
795a6bbef1 try to get alloca on Windows; remind me to strip these flailing commits before we merge 2008-07-10 22:10:48 -04:00
shaver@mozilla.org
03ad7cdff2 my turn to merge; had to happen eventually 2008-07-10 21:44:41 -04:00
Andreas Gal
ca4e6419ee shaver's favorite operating system of choice doesn't like templates, so de-template tracker since we use it with LInsp only anyway. 2008-07-10 18:42:04 -07:00
shaver@mozilla.org
0695011b26 try to make alloca work for Windows 2008-07-10 21:37:49 -04:00
David Anderson
1bfa0a2b0e Actually fixed ifeq/ifne fusion now. 2008-07-10 17:54:19 -07:00
Andreas Gal
4a0541e2ae nanojit doesn't support loads with non-constant offsets so don't do that 2008-07-10 17:41:24 -07:00
Andreas Gal
16eda7e83e Merge. 2008-07-10 17:05:13 -07:00
Andreas Gal
e6cb4750e2 Steal the reference to cx from the BoxDouble call instead of observing the load. 2008-07-10 17:03:59 -07:00
Andreas Gal
4ad95932a2 Fixed the setelem a[i] bug. 2008-07-10 16:55:37 -07:00
shaver@mozilla.org
60c7caba17 Unlike software developers, g++ doesn't like variable-sized arrays. Have some alloca! 2008-07-10 16:48:42 -04:00
David Anderson
8282c44200 Fixed guarding of eq+ifeq/ifne fusions and enabled tracing JSOP_GOTO (no-op) 2008-07-10 13:35:17 -07:00
Andreas Gal
1b8705e646 Root all strings and objects first when unboxing. Then box values that might trigger the GC (doubles/ints). This probably needs some performance tuning over time. 2008-07-10 13:24:49 -07:00
Andreas Gal
222a958b75 Merge. 2008-07-10 09:24:59 -07:00
Andreas Gal
ed0cfa6ce8 Don't concede an inch to ISO C++. Substract the size of array[1] from the overall struct size when allocating. 2008-07-10 09:22:01 -07:00
shaver@mozilla.org
0b4c4a7782 fix compilation, but possibly not logic, of shared-object defense 2008-07-10 08:05:25 -04:00
Andreas Gal
bdeea1b3cb Prime the page cache during VM startup. This makes us eat the page cache allocation overhead there instead of during the first use. This is just a hotfix. We still need a rewrite of the page cache. 2008-07-09 23:47:17 -07:00
Andreas Gal
0a93e4dd69 Assert if no gvar is allocated for an undeclared global. 2008-07-09 18:51:08 -07:00
Andreas Gal
40a15bccc7 Merge. 2008-07-09 18:25:36 -07:00
Andreas Gal
ef76c5d316 varobj is not passed through the chain. Make sure to use global->varobj for gvar access. 2008-07-09 18:25:10 -07:00
Brendan Eich
31b11b4e90 Merge. 2008-07-09 17:58:19 -07:00
Andreas Gal
4617cc628c Fixed name/setname code to just track the value move instead of touching memory since we have global variables in our native frame now. We have to fix the page cache issues before we can benchmark this. 2008-07-09 17:15:27 -07:00
Brendan Eich
8d88185086 Condition fp->arg*/*vars usage on fp->callee, not fp->down. 2008-07-09 17:10:42 -07:00
Andreas Gal
9a72a1d41d Add verbose native stack frame printing. 2008-07-09 17:09:22 -07:00
Brendan Eich
ab59004c84 Memoize implicit gvars in the interpreter, on assignment (JSOP_BINDNAME/JSOP_SETNAME); fix recoder l/r operand order bug. 2008-07-09 16:37:31 -07:00
Brendan Eich
20a5a9ef31 1. Fix inc to address the right result stack slot; 2. Require via assertions that the interpreter memoize implicit gvars (patch to do that next; bitwise-and will assert until that lands). 2008-07-09 15:15:32 -07:00
Brendan Eich
2210ed4a21 Remove unnecessary JSOp cast. 2008-07-09 13:46:46 -07:00
Brendan Eich
d8cf234b33 Memoize global name gets and sets as if they refer to a declared gvar. 2008-07-09 11:42:31 -07:00
Andreas Gal
626026b70a Merge. 2008-07-09 10:06:24 -07:00
Andreas Gal
202ec610da Removed assert that compares nativeFrameSlots to nativeFrameOffset since nativeFrameOffset is undefined in case sp is at sp+depth, so the assert sometimes randomly bites. Also fixed typo in cmp(). trace-test.js compiles now. 2008-07-09 10:05:59 -07:00
Brendan Eich
cffa8d2279 Tweak a few interval tests, eliminate casts, space patrol. 2008-07-09 09:59:51 -07:00
Andreas Gal
05554d05b3 Stricter typing of the tracker code path which now only accepts jsval as suggested by Brendan. 2008-07-09 00:29:23 -07:00
Andreas Gal
19a2dcb6f5 Fixed bug in nativeFrameSlots and use an assert to compare the result with nativeFrameOffset (which is slower, but more precise). 2008-07-09 00:26:01 -07:00
Andreas Gal
1c24e264ad Removed numMapEntries since typeMap is not really part of the SideExit struct yet anyway. 2008-07-09 00:13:35 -07:00
Andreas Gal
d6b834b98a Move builtin[] table in jsbuiltin.cpp 2008-07-08 23:48:06 -07:00
Andreas Gal
5ee8b4abd7 Housekeeping. Remove a few warnings during BUILT_OPT and spelling in comments. 2008-07-08 22:40:07 -07:00
Andreas Gal
216f33a0bb sp_adj is now maintained in bytes, not words, so +8 is now the magic value to point to the top of the stack. All stores above that watermark are eliminated by StackFilter in nanojit. 2008-07-08 21:03:30 -07:00
Andreas Gal
c9ee018202 Merge. 2008-07-08 20:20:24 -07:00
shaver@mozilla.org
815f787a8a merge 2008-07-08 23:14:47 -04:00
Andreas Gal
ade00cfeb0 Removed bogus debug printfs. 2008-07-08 20:09:15 -07:00
Andreas Gal
795edf3334 Fixed frame walking FORALL_PENDING_FRAME_SLOTS and add 4 to sp in getTop (hotfix, not the right way to do it.) 2008-07-08 20:06:54 -07:00
shaver@mozilla.org
4fcad3cb1e rval tracking and JSOP_POPV 2008-07-08 22:21:25 -04:00
Andreas Gal
4d84965bb8 Merge. 2008-07-08 19:17:15 -07:00
Andreas Gal
8e439abde3 Use more efficient address mode for LIR_load if possible and removed bogus printf. 2008-07-08 19:16:56 -07:00
shaver@mozilla.org
ff2b728cfd protect printf with DEBUG 2008-07-08 21:22:46 -04:00