Commit Graph

99 Commits

Author SHA1 Message Date
shaver@mozilla.org
f298721bf2 update to isInt 2008-07-05 09:43:00 -04:00
shaver@mozilla.org
13b4f67ef5 merge 2008-07-05 09:34:19 -04:00
shaver@mozilla.org
92e9aa44c0 [mq]: simple-ops 2008-07-05 09:15:33 -04:00
Andreas Gal
2df2214a9e Introduce asInt and asDouble to check for the type of values based on the actual value since some 32-bit integers hide out in doubles. 2008-07-04 23:53:29 -07:00
Andreas Gal
cef5e9becc Make trace-code 32-bit clean and extend interpreter state to carry the current context (cx). The recorder still has to record a 31-bit int path through the loop, but the emitted code is able to stay in the tree even if values bump over to 32-bit ints. 2008-07-04 16:24:42 -07:00
Andreas Gal
e35d351b28 Added support for SET_VAR again. bitwise.js working now. 2008-07-04 15:21:56 -07:00
Andreas Gal
ab1dc289ba Fixed some stack handling and trace activation issues. We can run trace.js again. 2008-07-04 15:07:05 -07:00
Andreas Gal
5e9ca6ef0e Cleanup of stack handling. 2008-07-04 13:23:42 -07:00
Andreas Gal
9b8f5f75a8 Added back support for the instructions required to compile trace.js. 2008-07-04 03:06:18 -07:00
Andreas Gal
1503932551 Properly switch tracer on and off depending on loopEdge and abort signaling from trace recorder recording functions. 2008-07-04 01:10:57 -07:00
Andreas Gal
efb72df02a Re-integrate trace recording and trace activation infrastructure. Model more closely after Tamarin. 2008-07-04 00:51:30 -07:00
Andreas Gal
731614bfe9 Create a stub for each opcode in TraceRecorder and invoke them from the stubs that are pointed to by the recorder dispatch-table. 2008-07-03 23:57:57 -07:00
Andreas Gal
62d0c7bbfb Switch back to mozilla-central jsinter.cpp. Lets try a different approach to attach the tracer to the interpreter. 2008-07-03 22:08:13 -07:00
Andreas Gal
8f4707fd29 Added dmod builtin and flag broken builtins for removal (shaver). 2008-07-02 22:05:30 -07:00
Andreas Gal
6eb6314e75 Support recording of ValueToECMAInt32, ValueToECMAUint32 and ValueToBoolean. 2008-07-02 21:48:42 -07:00
Andreas Gal
2cd7b6993b VOIDs hang out in the BOOLEAN value space, so we have to treat them like a boolean on the trace. For ValuetoECMAInt32 all special boolean values except TRUE produce 0, and TRUE produces 1. Use a conditional move to implement this. 2008-07-02 19:11:07 -07:00
Andreas Gal
b137f2da3b Introduce a VMSideExitInfo structure (holds the exit typemap only for now). 2008-07-02 18:06:24 -07:00
Andreas Gal
523ba92b3d Use fragmento to track fragments and add proper trace activiation code. 2008-07-02 17:19:07 -07:00
Andreas Gal
47c6075eb2 Fix unstable trace rejection for optimized build. 2008-07-02 15:31:40 -07:00
Andreas Gal
7906238314 Fix type stability check. 2008-07-02 15:17:53 -07:00
Andreas Gal
6f3af33edf Add type stability check for loop variables. Rename readstack to import. 2008-07-02 15:14:43 -07:00
Andreas Gal
e70272bfab Removed attempt to imply ints into doubles on the fly. This can't work. Use proper float loads where needed and add some initial code for builtin functions. 2008-07-02 14:38:12 -07:00
Andreas Gal
8907cd354b Flag ints as type INT in the incoming context if its merely a double holding an int that was too large to fit into jsval directly. Along the side exits make sure we can properly box oversized ints (by casting them to doubles). The fetch_int/store_int paths still need fixing to ensure that values are merely passed through (prim_copy) instead of explicit casting or calling to ValueToECMAInt32 etc. 2008-07-02 02:53:24 -07:00
Andreas Gal
08bd8d4245 Generate proper overflow detection code. Requires a trivial fix in nanojit (included, pending review to be pushed upstream). 2008-07-02 00:13:05 -07:00
Andreas Gal
7eba55b32b Merge. 2008-07-01 19:44:24 -07:00
Andreas Gal
f3fba20c9c Create type maps during trace entry and in each side exit and store them in the LIR using LIR_skip. Use these type maps during trace entry and exit. 2008-07-01 19:43:10 -07:00
Brendan Eich
9d20e12316 snprintf takes sizeof buffer. 2008-07-01 15:58:47 -07:00
Andreas Gal
39891951f4 Merge. 2008-07-01 13:36:33 -07:00
shaver@mozilla.org
da72d620b9 fix frame offset calculation for args, I think also non-entry frames 2008-07-01 08:11:49 -04:00
shaver@mozilla.org
50d599cb99 label arg/var/stack/sp/state for easier trace-reading 2008-07-01 08:06:02 -04:00
Andreas Gal
d3e7a57a68 Fix deallocation bug in the recorder. We will have to lift more code Tamarin's Interpreter to stabilize the recording. 2008-07-01 02:37:07 -07:00
Andreas Gal
84274f1b33 Save the VM registers into markRegs at opcode entry and restore that state when ending or aborting recording. The same info is pushed into sideexit and used by guards. With this change we can eliminate the hack in MONITOR_BRANCH that had to adjust the stack pointer depending on the opcode type, and it also allows us to trace through the recently added boolean guard opcode fusing. This improves trace code quality, since only the pre-conditional check state is saved. The guard restores into that state, so the trace code doesn't have to emit the value of the conditional evaluation onto the stack, saving a handful ops. 2008-06-30 18:31:29 -07:00
Andreas Gal
87396e1870 Rework memory management, don't leak memory in the filter pipeline. 2008-06-30 18:08:32 -07:00
Andreas Gal
19b4bcdc69 Save the side exit state at entry in to the opcode (since we want to restart ops) and enable store filter. 2008-06-30 17:12:52 -07:00
Andreas Gal
7511e45275 Use #ifdef DEBUG instead of VERBOSE. 2008-06-30 11:44:47 -07:00
Andreas Gal
806d0de678 Must use (&gc) new otherwise memory doesn't get cleared (found by danderson). 2008-06-30 11:39:00 -07:00
Andreas Gal
5d1d997c9d Housekeeping (add comments, removed some dead code.) 2008-06-30 09:36:10 -07:00
Andreas Gal
d8d25140f9 Mockup of trace execution. Speedup is 10x for a tight loop. Keep in mind that this is a hack and the trace code is not optimized yet. 2008-06-29 23:02:22 -07:00
Andreas Gal
b1e24b8c98 Execute trace code. Boxing back the side exit state is not handled yet. 2008-06-29 20:56:06 -07:00
Andreas Gal
e267cb120c Fix native frame addressing (reported by vlad.) 2008-06-29 17:17:39 -07:00
Andreas Gal
253b2572b2 Initialize jump table when side-entering the interpreter. Keep track of cx and sp directly in the recorder instead of going through the tracker. 2008-06-29 13:53:40 -07:00
Andreas Gal
ef71223de2 Remember JSContext instead of trying to keep track of frame pointer. 2008-06-28 18:47:12 -07:00
Andreas Gal
628a1f6985 Cleanup trace abort/end code. 2008-06-28 18:19:21 -07:00
Andreas Gal
6df975a5b5 Rewritten frame management. Use cx->fp->regs chain instead of direct passing of those structures. 2008-06-28 17:14:06 -07:00
Andreas Gal
552425ee07 Hook up pc and sp to the tracer in order to generate proper PC/SP adjustment code. 2008-06-28 11:00:18 -07:00
Andreas Gal
1f37ae3e62 Small cleanups and licensing blurb housekeeping. 2008-06-28 09:58:15 -07:00
shaver@mozilla.org
4fc71515e0 Add guards for XML objects, and some tracer bits to accommodate them. 2008-06-27 23:58:06 -04:00
Andreas Gal
40f1a90a78 Move recorder initialization into TraceRecorder and encapsulate its state. 2008-06-27 18:06:50 -07:00
Andreas Gal
2c370239e5 Add a way to calculate the current size of the native frame. 2008-06-27 16:24:17 -07:00
Andreas Gal
afd5f3b1e3 Clarified argument names in guard code and explain better why we guard for overflow the way we do. 2008-06-27 07:28:10 -07:00