kmillikin@chromium.org
65115c2857
Mark all loop conditions.
...
Previously we marked compare operations that occurred as for loop
conditions so as to avoid inlining the floating-point code for them.
Begin marking all expressions that occur as any loop condition
(because they are never dead code).
Review URL: http://codereview.chromium.org/1074009
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4227 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-23 13:36:38 +00:00
sgjesse@chromium.org
9240342ad6
Inline floating point compare
...
Inline floating point compare instead of calling the stub when the following conditions are met:
* Code is in a loop
* Compare is not a for loop condition
* Compare is not an equal comparison
This inlined code handles heap number to heap number and heap number to smi compare. It can also handle smi to smi compare, but whenever there is a chance of comparing two smis the smi compare is inlined before the inlined floating point compare. Support for non SSE2 hardware is included.
A new set of variants of the compare stub without the floating point comparison code is called if the inline comapre fails due to the operands not beeing heap numbers or smis.
The virtual frame has been extended with a branch taking two live results to be carried through to the destination. This makes this change much simpler as the inlined code have two live results in registers and a number of bailouts.
CompareStub::GetName needs to be updated as well. I will do that as a separate change.
Also inlined equality check if both operands can't be NaN. This can only provide positive equals if it is the same object.
Review URL: http://codereview.chromium.org/1117011
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4220 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-23 12:36:31 +00:00
kasperl@chromium.org
7d6a3b433f
Merge the partial_snapshots branch back into bleeding_edge. For
...
now, the custom call generator stuff is disabled.
Review URL: http://codereview.chromium.org/1094014
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4217 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-23 11:40:38 +00:00
kasperl@chromium.org
aa55407a70
Fix issue 656 on x86.
...
TBR=iposva@chromium.org
Review URL: http://codereview.chromium.org/1159004
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4212 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-23 06:40:29 +00:00
iposva@chromium.org
a1ec99c05d
- Remove function boilerplate objects and use SharedFunctionInfos in
...
their place.
- Add one field to the SharedFunctionInfo to remember the number of
literals used in this function.
Review URL: http://codereview.chromium.org/669240
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4211 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-23 06:04:44 +00:00
sgjesse@chromium.org
ef2e46d1cc
Use bit fields to calculate compare stub minor key
...
Review URL: http://codereview.chromium.org/1081010
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4208 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-22 14:31:28 +00:00
fschneider@chromium.org
03089b6644
Fix code generation for fast smi loops to support parameters as well.
...
This change fixes an assert we hit when we recognized a fast smi loop
with a parameter as the loop variable.
BUG=650
Review URL: http://codereview.chromium.org/1138003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4202 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-22 11:55:12 +00:00
fschneider@chromium.org
ebf9e6e8e2
Remove unused LivenessAnalyzer class.
...
Also remove unused attributes related to it from the ast.
Review URL: http://codereview.chromium.org/1117003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4194 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-19 12:54:35 +00:00
lrn@chromium.org
4db15f1235
Refactoring of RegExp interface to better support calling several times in a row.
...
Review URL: http://codereview.chromium.org/1114001
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4190 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-19 12:01:17 +00:00
fschneider@chromium.org
2726a4d4f9
Add debug code assertions where we expect smi inputs.
...
Review URL: http://codereview.chromium.org/998007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4187 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-19 07:43:03 +00:00
fschneider@chromium.org
ec974ddb50
Fix bug when generating a fast smi loop.
...
We may encounter an invalid frame after generating code
for the loop body in case the loop body ends in an unconditional
return. Before setting the type information for the loop variable
we need to check for a valid frame.
Review URL: http://codereview.chromium.org/1106002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4182 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-18 14:32:02 +00:00
fschneider@chromium.org
c5ce8e47ef
Update number info for count operations.
...
If the input of a ++ or -- operation is a smi, the
result is an Integer32. Otherwise it is a number.
Review URL: http://codereview.chromium.org/1075004
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4177 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-18 10:01:53 +00:00
fschneider@chromium.org
34faea85db
Add test cases for fast smi loops.
...
Review URL: http://codereview.chromium.org/1014007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4174 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-18 09:08:24 +00:00
fschneider@chromium.org
e090f46a55
Fix type propagation rules for count operation.
...
Also treat const-variables as not side-effect free.
Review URL: http://codereview.chromium.org/982009
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4172 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-17 16:39:29 +00:00
erik.corry@gmail.com
dda96b61c6
Fix formatting around * and &.
...
Review URL: http://codereview.chromium.org/1000007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4169 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-17 14:53:16 +00:00
whesse@chromium.org
64278854ba
Fix excessive stack usage by compiler due to local in recursive scope.
...
Review URL: http://codereview.chromium.org/1019006
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4160 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-17 12:27:32 +00:00
fschneider@chromium.org
3ca9367341
Fix bug in propagation of type information into registers.
...
The number type information of results has to be also copied when
calling ToRegister with a fixed register as destination.
Also fix an unbound label and a missing CpuFeatures scope.
Review URL: http://codereview.chromium.org/987003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4155 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-17 09:49:03 +00:00
kasperl@chromium.org
feefa06b35
Remove handle scope that caused debug mode assertion failures
...
because a handle was returned out of the destroyed scope.
Review URL: http://codereview.chromium.org/1029003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4152 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-17 08:53:21 +00:00
whesse@chromium.org
4751f36492
Use untagged int32 values in evaluation of side-effect free expressions.
...
Review URL: http://codereview.chromium.org/975001
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4148 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-16 16:07:19 +00:00
fschneider@chromium.org
9202e05016
Fix bug in the count operation where we statically know the input is a smi.
...
Even if we know that the input to a count operation is a smi we still need to check if the result overflowed (and becomes a heap number).
Also fix the smi loop analysis to take two border cases correctly into account.
Review URL: http://codereview.chromium.org/1040002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4147 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-16 16:03:40 +00:00
antonm@chromium.org
14547ef434
Just grow elements if they happen to be at the edge of new space.
...
Review URL: http://codereview.chromium.org/945002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4133 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-15 15:16:04 +00:00
ricow@chromium.org
cf3219bc4e
Added fast case for shift operations when the left parameter is a double and we know that the right parameter is a smi.
...
Review URL: http://codereview.chromium.org/955001
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4132 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-15 14:24:37 +00:00
whesse@chromium.org
7abbd29826
Add static analysis to AST expressions that records whether a negative zero will be treated identically to a positive zero in the expression's context. Use this flag to avoid some tests in inlined smi code.
...
Review URL: http://codereview.chromium.org/965001
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4130 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-15 14:03:36 +00:00
antonm@chromium.org
dca7574e6e
Some cosmetic issues.
...
Review URL: http://codereview.chromium.org/903004
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4122 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-12 18:27:31 +00:00
antonm@chromium.org
7f1eda50cc
Implement a custom call compiler for Array.pop.
...
Review URL: http://codereview.chromium.org/870007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4118 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-12 13:45:31 +00:00
sgjesse@chromium.org
16bfc31317
Fix issues with compiling V8 with LLVM Clang
...
Added this-> in some places where accessing a method on a templated base class.
Added #include <strings.h> for bit_cast, moved it to utils.h and renamed it to BitCast.
Patch by Evan Martin <evan@chromium.org>, see http://codereview.chromium.org/894001 and http://codereview.chromium.org/888003
Review URL: http://codereview.chromium.org/888005
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4111 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-12 10:20:01 +00:00
whesse@chromium.org
44d0112b71
Add SSE2 instructions to disassembler and movmskpd SSE2 instruction to assembler.
...
Review URL: http://codereview.chromium.org/865002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4110 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-12 08:36:01 +00:00
ager@chromium.org
d6e08a41f6
Probe number dictionaries in generated code on ia32.
...
With my previous change to limit memory for object literals, we get more slow-case elements and this makes up for the slowdown when loading from those slow-case elements.
The most complicated part here is the computation of the integer hash code. We might want to simplify the integer hash function.
Review URL: http://codereview.chromium.org/857003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4109 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-12 08:21:10 +00:00
antonm@chromium.org
de070ccfa6
First take on custom call generators.
...
Review URL: http://codereview.chromium.org/669061
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4108 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-11 16:24:31 +00:00
antonm@chromium.org
21af2c360a
Reland 4068 which wrapped Array methods into native builtins (reverted in 4075).
...
Review URL: http://codereview.chromium.org/857002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4104 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-11 13:13:21 +00:00
ager@chromium.org
ef371f3f24
Do not waste space for the fast-case elements backing storage for
...
object-literals with few elements but large element indices.
We can decide at parse time whether the created object literal should
have fast-case of slow-case elements.
Remove unused runtime function.
Review URL: http://codereview.chromium.org/805004
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-11 10:34:29 +00:00
fschneider@chromium.org
7d933936d3
Fix assigned variables analysis.
...
This change fixes a bug with the arguments object that occurred with
r4087 and r4088. The fix is not marking the arguments variable as trivial
since it can have side effects.
Review URL: http://codereview.chromium.org/851002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4099 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-11 10:28:40 +00:00
sgjesse@chromium.org
e5f27966dc
Add fuzzing support for inline runtime functions
...
The inline runtime functions are now included in the fuzzing of the natives. The chack for the expected number of arguments passed have been moved to the parser which will generate a syntax error if a runtime function (either C++ or inline) is called with a different number of arguments than expected.
Review URL: http://codereview.chromium.org/573056
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4096 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-11 09:27:12 +00:00
whesse@chromium.org
a77411bc70
Revert changes 4088 and 4087 to fix build.
...
Review URL: http://codereview.chromium.org/805005
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4089 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-10 20:41:11 +00:00
fschneider@chromium.org
0143d707a6
Add an assigned variables analysis.
...
This change adds a pass over the AST that computes the
set of assigned variables for locals and parameters for each expression.
The result of this analysis is used to for two purposes:
1. Recognize variables that are trivial subexpressions. A left sub-expression
of a binary operation is trivial if it is a local variable or a parameter
and it is not assigned in the right sub-expression. In the case of a
trivial left sub-expression we evaluate the right first.
Currently only binary operations and compare operations are considered
when finding trivial left sub-expressions.
2. Recogize certain simple for-loops with a constant trip count where the loop
variable is always within smi range. If the loop count variable is not
assigned in the body of the loop (except in the update expression the
for-loop). This allows omitting smi checks on operation using the loop
count variable.
Review URL: http://codereview.chromium.org/669155
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4087 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-10 17:19:22 +00:00
ager@chromium.org
5fd33c7527
Revert change to always call builtins for Array functions.
...
It causes regressions on test shell tests.
TBR=antonm@chromium.org
Review URL: http://codereview.chromium.org/819001
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4075 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-10 08:45:00 +00:00
antonm@chromium.org
52ec954dd2
Always invoke C++ ArrayPush builtin.
...
Now this builtin checks if it should go into fast case or resort to JS ArrayPush builtin.
Review URL: http://codereview.chromium.org/660298
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4068 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-09 15:43:04 +00:00
sgjesse@chromium.org
800b6df2a6
Correct handling of adding a string and a smal integer
...
The fast case of looking up the string convertion of the smi did not handle the case where left/reghe operands could be in eax/edx instead of edx/eax which is the default.
Also got rid of creating an internal frame for calling string and instead patched the argument on the stack and performed a tail call.
BUG=http://code.google.com/p/v8/issues/detail?id=636
TEST=test/mjsunit/regress/regress-636.js
Review URL: http://codereview.chromium.org/720001
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4061 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-09 09:40:35 +00:00
ricow@chromium.org
b60eba5fc5
Inline Math.sqrt().
...
Also changed name of GeneratePow and the %_ call name to follow convention based on MathSin and MathCos. Moved GeneratePow down to the other methods.
Review URL: http://codereview.chromium.org/661179
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4054 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-08 13:23:54 +00:00
vegorov@chromium.org
6b47d26217
Port of changes from r3842 (symbol table probing for two character strings) to x64 and arm
...
Review URL: http://codereview.chromium.org/661469
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4050 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-08 11:58:33 +00:00
erik.corry@gmail.com
00a44ae51a
Make more use of the NumberInfo data.
...
Makes NumberInfo into a real class.
Fix bug where NumberInfo was lost in ToRegister.
Allow 17 bits in safe Smis instead of 16.
Review URL: http://codereview.chromium.org/668151
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4046 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-05 23:54:13 +00:00
sgjesse@chromium.org
df4471c8f3
Fix stack tweaking in array allocation
...
When Array(0) or new Array(0) is handled by the generated code it is handled
by the same code as Array() and new Array(). For this to work the stack is
tweaked to remove the argument of value 0. However the argc was still passed
as 1 if a call to the runtime system was made.
When the stack is tweaked argc is also changed to 0.
BUG=634
TEST=test/mjsunittest/mjsunit/regress/regress-634.js
Review URL: http://codereview.chromium.org/668155
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4038 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-05 13:43:53 +00:00
ricow@chromium.org
d3cf6cbf75
Added new ia32 assembler instructions to the diassembler from Math.pow inline implementation.
...
Review URL: http://codereview.chromium.org/668056
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4020 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-04 12:51:49 +00:00
fschneider@chromium.org
b0e9a9203f
Remove a duplicated move instruction for store IC calls on ia32.
...
Review URL: http://codereview.chromium.org/661461
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4004 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-03 11:43:45 +00:00
antonm@chromium.org
bfe1f02c3f
Add cld before doing rep movs.
...
Review URL: http://codereview.chromium.org/661368
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3996 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-02 13:22:04 +00:00
antonm@chromium.org
38acad676a
Faster filling newly allocated arrays with the holes from the Array construction stub.
...
Review URL: http://codereview.chromium.org/661245
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3995 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-02 12:42:15 +00:00
erik.corry@gmail.com
c2106c13fc
Allow snapshots built without -DANDROID to work on Android.
...
Fix bug in fast code generator on ARM (can't use ip as scratch
in RecordWrite).
Activate normal-sized compilation cache on Android.
This is a port of 3938 from the partial snapshots branch.
Review URL: http://codereview.chromium.org/652227
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3992 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-02 11:54:11 +00:00
peter.rybin@gmail.com
aec90d099e
Enable GC update for pointers in GenerateKeyedLoadICDebugBreak
...
Review URL: http://codereview.chromium.org/660257
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3989 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-01 17:26:46 +00:00
kaznacheev@chromium.org
7d58852374
Implementing inline caches for binary operations (ia32).
...
This is a subset of a CL reviewed earlier(http://codereview.chromium.org/551093 ).
The register usage optimisation part has been reviewed and submitted separately.
Two fast cases supported: HeapNumber operands and String operands for ADD.
Review URL: http://codereview.chromium.org/553117
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3988 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-03-01 16:24:05 +00:00
vitalyr@chromium.org
dd7b55eb9f
Implemented one-char cache lookup in generated code.
...
This speeds up string,charAt(n) and string[n].
Review URL: http://codereview.chromium.org/660184
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3980 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2010-02-26 20:14:20 +00:00