libv8 3.3.10.4 → 3.5.10.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
|
@@ -94,7 +94,7 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
94
94
|
void DoDeferredNumberTagD(LNumberTagD* instr);
|
|
95
95
|
void DoDeferredTaggedToI(LTaggedToI* instr);
|
|
96
96
|
void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr);
|
|
97
|
-
void DoDeferredStackCheck(
|
|
97
|
+
void DoDeferredStackCheck(LStackCheck* instr);
|
|
98
98
|
void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
|
|
99
99
|
void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
|
|
100
100
|
void DoDeferredLInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
|
@@ -215,9 +215,11 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
215
215
|
|
|
216
216
|
Register ToRegister(int index) const;
|
|
217
217
|
XMMRegister ToDoubleRegister(int index) const;
|
|
218
|
-
Operand
|
|
219
|
-
|
|
220
|
-
|
|
218
|
+
Operand BuildFastArrayOperand(
|
|
219
|
+
LOperand* elements_pointer,
|
|
220
|
+
LOperand* key,
|
|
221
|
+
JSObject::ElementsKind elements_kind,
|
|
222
|
+
uint32_t offset);
|
|
221
223
|
|
|
222
224
|
// Specific math operations - used from DoUnaryMathOperation.
|
|
223
225
|
void EmitIntegerMathAbs(LUnaryMathOperation* instr);
|
|
@@ -246,10 +248,13 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
246
248
|
}
|
|
247
249
|
|
|
248
250
|
static Condition TokenToCondition(Token::Value op, bool is_unsigned);
|
|
249
|
-
void EmitGoto(int block
|
|
251
|
+
void EmitGoto(int block);
|
|
250
252
|
void EmitBranch(int left_block, int right_block, Condition cc);
|
|
251
253
|
void EmitCmpI(LOperand* left, LOperand* right);
|
|
252
|
-
void EmitNumberUntagD(Register input,
|
|
254
|
+
void EmitNumberUntagD(Register input,
|
|
255
|
+
XMMRegister result,
|
|
256
|
+
bool deoptimize_on_undefined,
|
|
257
|
+
LEnvironment* env);
|
|
253
258
|
|
|
254
259
|
// Emits optimized code for typeof x == "y". Modifies input register.
|
|
255
260
|
// Returns the condition on which a final split to
|
|
@@ -78,13 +78,13 @@ void LInstruction::VerifyCall() {
|
|
|
78
78
|
ASSERT(Output() == NULL ||
|
|
79
79
|
LUnallocated::cast(Output())->HasFixedPolicy() ||
|
|
80
80
|
!LUnallocated::cast(Output())->HasRegisterPolicy());
|
|
81
|
-
for (UseIterator it(this); it.
|
|
82
|
-
LUnallocated* operand = LUnallocated::cast(it.
|
|
81
|
+
for (UseIterator it(this); !it.Done(); it.Advance()) {
|
|
82
|
+
LUnallocated* operand = LUnallocated::cast(it.Current());
|
|
83
83
|
ASSERT(operand->HasFixedPolicy() ||
|
|
84
84
|
operand->IsUsedAtStart());
|
|
85
85
|
}
|
|
86
|
-
for (TempIterator it(this); it.
|
|
87
|
-
LUnallocated* operand = LUnallocated::cast(it.
|
|
86
|
+
for (TempIterator it(this); !it.Done(); it.Advance()) {
|
|
87
|
+
LUnallocated* operand = LUnallocated::cast(it.Current());
|
|
88
88
|
ASSERT(operand->HasFixedPolicy() ||!operand->HasRegisterPolicy());
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -113,21 +113,18 @@ void LInstruction::PrintTo(StringStream* stream) {
|
|
|
113
113
|
template<int R, int I, int T>
|
|
114
114
|
void LTemplateInstruction<R, I, T>::PrintDataTo(StringStream* stream) {
|
|
115
115
|
stream->Add("= ");
|
|
116
|
-
inputs_.
|
|
116
|
+
for (int i = 0; i < inputs_.length(); i++) {
|
|
117
|
+
if (i > 0) stream->Add(" ");
|
|
118
|
+
inputs_[i]->PrintTo(stream);
|
|
119
|
+
}
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
|
|
120
123
|
template<int R, int I, int T>
|
|
121
124
|
void LTemplateInstruction<R, I, T>::PrintOutputOperandTo(StringStream* stream) {
|
|
122
|
-
results_.
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
template<typename T, int N>
|
|
127
|
-
void OperandContainer<T, N>::PrintOperandsTo(StringStream* stream) {
|
|
128
|
-
for (int i = 0; i < N; i++) {
|
|
125
|
+
for (int i = 0; i < results_.length(); i++) {
|
|
129
126
|
if (i > 0) stream->Add(" ");
|
|
130
|
-
|
|
127
|
+
results_[i]->PrintTo(stream);
|
|
131
128
|
}
|
|
132
129
|
}
|
|
133
130
|
|
|
@@ -270,12 +267,6 @@ void LClassOfTestAndBranch::PrintDataTo(StringStream* stream) {
|
|
|
270
267
|
}
|
|
271
268
|
|
|
272
269
|
|
|
273
|
-
void LTypeofIs::PrintDataTo(StringStream* stream) {
|
|
274
|
-
InputAt(0)->PrintTo(stream);
|
|
275
|
-
stream->Add(" == \"%s\"", *hydrogen()->type_literal()->ToCString());
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
|
|
279
270
|
void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) {
|
|
280
271
|
stream->Add("if typeof ");
|
|
281
272
|
InputAt(0)->PrintTo(stream);
|
|
@@ -345,13 +336,6 @@ void LCallNew::PrintDataTo(StringStream* stream) {
|
|
|
345
336
|
}
|
|
346
337
|
|
|
347
338
|
|
|
348
|
-
void LClassOfTest::PrintDataTo(StringStream* stream) {
|
|
349
|
-
stream->Add("= class_of_test(");
|
|
350
|
-
InputAt(0)->PrintTo(stream);
|
|
351
|
-
stream->Add(", \"%o\")", *hydrogen()->class_name());
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
|
|
355
339
|
void LAccessArgumentsAt::PrintDataTo(StringStream* stream) {
|
|
356
340
|
arguments()->PrintTo(stream);
|
|
357
341
|
|
|
@@ -393,8 +377,7 @@ void LChunk::MarkEmptyBlocks() {
|
|
|
393
377
|
LLabel* label = LLabel::cast(first_instr);
|
|
394
378
|
if (last_instr->IsGoto()) {
|
|
395
379
|
LGoto* goto_instr = LGoto::cast(last_instr);
|
|
396
|
-
if (
|
|
397
|
-
label->IsRedundant() &&
|
|
380
|
+
if (label->IsRedundant() &&
|
|
398
381
|
!label->is_loop_header()) {
|
|
399
382
|
bool can_eliminate = true;
|
|
400
383
|
for (int i = first + 1; i < last && can_eliminate; ++i) {
|
|
@@ -445,6 +428,15 @@ void LStoreKeyedFastElement::PrintDataTo(StringStream* stream) {
|
|
|
445
428
|
}
|
|
446
429
|
|
|
447
430
|
|
|
431
|
+
void LStoreKeyedFastDoubleElement::PrintDataTo(StringStream* stream) {
|
|
432
|
+
elements()->PrintTo(stream);
|
|
433
|
+
stream->Add("[");
|
|
434
|
+
key()->PrintTo(stream);
|
|
435
|
+
stream->Add("] <- ");
|
|
436
|
+
value()->PrintTo(stream);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
|
|
448
440
|
void LStoreKeyedGeneric::PrintDataTo(StringStream* stream) {
|
|
449
441
|
object()->PrintTo(stream);
|
|
450
442
|
stream->Add("[");
|
|
@@ -803,6 +795,11 @@ LInstruction* LChunkBuilder::DoBlockEntry(HBlockEntry* instr) {
|
|
|
803
795
|
}
|
|
804
796
|
|
|
805
797
|
|
|
798
|
+
LInstruction* LChunkBuilder::DoSoftDeoptimize(HSoftDeoptimize* instr) {
|
|
799
|
+
return AssignEnvironment(new LDeoptimize);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
|
|
806
803
|
LInstruction* LChunkBuilder::DoDeoptimize(HDeoptimize* instr) {
|
|
807
804
|
return AssignEnvironment(new LDeoptimize);
|
|
808
805
|
}
|
|
@@ -843,11 +840,11 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
|
|
|
843
840
|
}
|
|
844
841
|
|
|
845
842
|
ASSERT(instr->representation().IsInteger32());
|
|
846
|
-
ASSERT(instr->
|
|
847
|
-
ASSERT(instr->
|
|
848
|
-
LOperand* left = UseRegisterAtStart(instr->
|
|
843
|
+
ASSERT(instr->left()->representation().IsInteger32());
|
|
844
|
+
ASSERT(instr->right()->representation().IsInteger32());
|
|
845
|
+
LOperand* left = UseRegisterAtStart(instr->left());
|
|
849
846
|
|
|
850
|
-
HValue* right_value = instr->
|
|
847
|
+
HValue* right_value = instr->right();
|
|
851
848
|
LOperand* right = NULL;
|
|
852
849
|
int constant_value = 0;
|
|
853
850
|
if (right_value->IsConstant()) {
|
|
@@ -984,18 +981,7 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
|
|
984
981
|
if (FLAG_stress_environments && !instr->HasEnvironment()) {
|
|
985
982
|
instr = AssignEnvironment(instr);
|
|
986
983
|
}
|
|
987
|
-
|
|
988
|
-
ASSERT(instr->IsControl());
|
|
989
|
-
HTest* test = HTest::cast(current);
|
|
990
|
-
instr->set_hydrogen_value(test->value());
|
|
991
|
-
HBasicBlock* first = test->FirstSuccessor();
|
|
992
|
-
HBasicBlock* second = test->SecondSuccessor();
|
|
993
|
-
ASSERT(first != NULL && second != NULL);
|
|
994
|
-
instr->SetBranchTargets(first->block_id(), second->block_id());
|
|
995
|
-
} else {
|
|
996
|
-
instr->set_hydrogen_value(current);
|
|
997
|
-
}
|
|
998
|
-
|
|
984
|
+
instr->set_hydrogen_value(current);
|
|
999
985
|
chunk_->AddInstruction(instr, current_block_);
|
|
1000
986
|
}
|
|
1001
987
|
current_instruction_ = old_current;
|
|
@@ -1036,104 +1022,21 @@ LEnvironment* LChunkBuilder::CreateEnvironment(HEnvironment* hydrogen_env) {
|
|
|
1036
1022
|
|
|
1037
1023
|
|
|
1038
1024
|
LInstruction* LChunkBuilder::DoGoto(HGoto* instr) {
|
|
1039
|
-
|
|
1040
|
-
instr->include_stack_check());
|
|
1041
|
-
return (instr->include_stack_check())
|
|
1042
|
-
? AssignPointerMap(result)
|
|
1043
|
-
: result;
|
|
1025
|
+
return new LGoto(instr->FirstSuccessor()->block_id());
|
|
1044
1026
|
}
|
|
1045
1027
|
|
|
1046
1028
|
|
|
1047
|
-
LInstruction* LChunkBuilder::
|
|
1029
|
+
LInstruction* LChunkBuilder::DoBranch(HBranch* instr) {
|
|
1048
1030
|
HValue* v = instr->value();
|
|
1049
|
-
if (
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
HClassOfTest* compare = HClassOfTest::cast(v);
|
|
1053
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1054
|
-
return new LClassOfTestAndBranch(UseTempRegister(compare->value()),
|
|
1055
|
-
TempRegister());
|
|
1056
|
-
} else if (v->IsCompare()) {
|
|
1057
|
-
HCompare* compare = HCompare::cast(v);
|
|
1058
|
-
Token::Value op = compare->token();
|
|
1059
|
-
HValue* left = compare->left();
|
|
1060
|
-
HValue* right = compare->right();
|
|
1061
|
-
Representation r = compare->GetInputRepresentation();
|
|
1062
|
-
if (r.IsInteger32()) {
|
|
1063
|
-
ASSERT(left->representation().IsInteger32());
|
|
1064
|
-
ASSERT(right->representation().IsInteger32());
|
|
1065
|
-
return new LCmpIDAndBranch(UseRegisterAtStart(left),
|
|
1066
|
-
UseOrConstantAtStart(right));
|
|
1067
|
-
} else if (r.IsDouble()) {
|
|
1068
|
-
ASSERT(left->representation().IsDouble());
|
|
1069
|
-
ASSERT(right->representation().IsDouble());
|
|
1070
|
-
return new LCmpIDAndBranch(UseRegisterAtStart(left),
|
|
1071
|
-
UseRegisterAtStart(right));
|
|
1072
|
-
} else {
|
|
1073
|
-
ASSERT(left->representation().IsTagged());
|
|
1074
|
-
ASSERT(right->representation().IsTagged());
|
|
1075
|
-
bool reversed = op == Token::GT || op == Token::LTE;
|
|
1076
|
-
LOperand* left_operand = UseFixed(left, reversed ? rax : rdx);
|
|
1077
|
-
LOperand* right_operand = UseFixed(right, reversed ? rdx : rax);
|
|
1078
|
-
LCmpTAndBranch* result = new LCmpTAndBranch(left_operand, right_operand);
|
|
1079
|
-
return MarkAsCall(result, instr);
|
|
1080
|
-
}
|
|
1081
|
-
} else if (v->IsIsSmi()) {
|
|
1082
|
-
HIsSmi* compare = HIsSmi::cast(v);
|
|
1083
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1084
|
-
return new LIsSmiAndBranch(Use(compare->value()));
|
|
1085
|
-
} else if (v->IsIsUndetectable()) {
|
|
1086
|
-
HIsUndetectable* compare = HIsUndetectable::cast(v);
|
|
1087
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1088
|
-
return new LIsUndetectableAndBranch(UseRegisterAtStart(compare->value()),
|
|
1089
|
-
TempRegister());
|
|
1090
|
-
} else if (v->IsHasInstanceType()) {
|
|
1091
|
-
HHasInstanceType* compare = HHasInstanceType::cast(v);
|
|
1092
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1093
|
-
return new LHasInstanceTypeAndBranch(UseRegisterAtStart(compare->value()));
|
|
1094
|
-
} else if (v->IsHasCachedArrayIndex()) {
|
|
1095
|
-
HHasCachedArrayIndex* compare = HHasCachedArrayIndex::cast(v);
|
|
1096
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1097
|
-
return new LHasCachedArrayIndexAndBranch(
|
|
1098
|
-
UseRegisterAtStart(compare->value()));
|
|
1099
|
-
} else if (v->IsIsNull()) {
|
|
1100
|
-
HIsNull* compare = HIsNull::cast(v);
|
|
1101
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1102
|
-
// We only need a temp register for non-strict compare.
|
|
1103
|
-
LOperand* temp = compare->is_strict() ? NULL : TempRegister();
|
|
1104
|
-
return new LIsNullAndBranch(UseRegisterAtStart(compare->value()), temp);
|
|
1105
|
-
} else if (v->IsIsObject()) {
|
|
1106
|
-
HIsObject* compare = HIsObject::cast(v);
|
|
1107
|
-
ASSERT(compare->value()->representation().IsTagged());
|
|
1108
|
-
return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()));
|
|
1109
|
-
} else if (v->IsCompareJSObjectEq()) {
|
|
1110
|
-
HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v);
|
|
1111
|
-
return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()),
|
|
1112
|
-
UseRegisterAtStart(compare->right()));
|
|
1113
|
-
} else if (v->IsCompareSymbolEq()) {
|
|
1114
|
-
HCompareSymbolEq* compare = HCompareSymbolEq::cast(v);
|
|
1115
|
-
return new LCmpSymbolEqAndBranch(UseRegisterAtStart(compare->left()),
|
|
1116
|
-
UseRegisterAtStart(compare->right()));
|
|
1117
|
-
} else if (v->IsInstanceOf()) {
|
|
1118
|
-
HInstanceOf* instance_of = HInstanceOf::cast(v);
|
|
1119
|
-
LInstanceOfAndBranch* result =
|
|
1120
|
-
new LInstanceOfAndBranch(UseFixed(instance_of->left(), rax),
|
|
1121
|
-
UseFixed(instance_of->right(), rdx));
|
|
1122
|
-
return MarkAsCall(result, instr);
|
|
1123
|
-
} else if (v->IsTypeofIs()) {
|
|
1124
|
-
HTypeofIs* typeof_is = HTypeofIs::cast(v);
|
|
1125
|
-
return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()));
|
|
1126
|
-
} else if (v->IsIsConstructCall()) {
|
|
1127
|
-
return new LIsConstructCallAndBranch(TempRegister());
|
|
1128
|
-
} else if (v->IsConstant()) {
|
|
1031
|
+
if (v->EmitAtUses()) {
|
|
1032
|
+
ASSERT(v->IsConstant());
|
|
1033
|
+
ASSERT(!v->representation().IsDouble());
|
|
1129
1034
|
HBasicBlock* successor = HConstant::cast(v)->ToBoolean()
|
|
1130
1035
|
? instr->FirstSuccessor()
|
|
1131
1036
|
: instr->SecondSuccessor();
|
|
1132
1037
|
return new LGoto(successor->block_id());
|
|
1133
|
-
} else {
|
|
1134
|
-
Abort("Undefined compare before branch");
|
|
1135
|
-
return NULL;
|
|
1136
1038
|
}
|
|
1039
|
+
return AssignEnvironment(new LBranch(UseRegister(v)));
|
|
1137
1040
|
}
|
|
1138
1041
|
|
|
1139
1042
|
|
|
@@ -1165,7 +1068,7 @@ LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) {
|
|
|
1165
1068
|
LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal(
|
|
1166
1069
|
HInstanceOfKnownGlobal* instr) {
|
|
1167
1070
|
LInstanceOfKnownGlobal* result =
|
|
1168
|
-
new LInstanceOfKnownGlobal(UseFixed(instr->
|
|
1071
|
+
new LInstanceOfKnownGlobal(UseFixed(instr->left(), rax),
|
|
1169
1072
|
FixedTemp(rdi));
|
|
1170
1073
|
return MarkAsCall(DefineFixed(result, rax), instr);
|
|
1171
1074
|
}
|
|
@@ -1191,6 +1094,11 @@ LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
|
|
|
1191
1094
|
}
|
|
1192
1095
|
|
|
1193
1096
|
|
|
1097
|
+
LInstruction* LChunkBuilder::DoThisFunction(HThisFunction* instr) {
|
|
1098
|
+
return instr->HasNoUses() ? NULL : DefineAsRegister(new LThisFunction);
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
|
|
1194
1102
|
LInstruction* LChunkBuilder::DoContext(HContext* instr) {
|
|
1195
1103
|
return instr->HasNoUses() ? NULL : DefineAsRegister(new LContext);
|
|
1196
1104
|
}
|
|
@@ -1481,88 +1389,83 @@ LInstruction* LChunkBuilder::DoPower(HPower* instr) {
|
|
|
1481
1389
|
}
|
|
1482
1390
|
|
|
1483
1391
|
|
|
1484
|
-
LInstruction* LChunkBuilder::
|
|
1392
|
+
LInstruction* LChunkBuilder::DoCompareGeneric(HCompareGeneric* instr) {
|
|
1485
1393
|
Token::Value op = instr->token();
|
|
1394
|
+
ASSERT(instr->left()->representation().IsTagged());
|
|
1395
|
+
ASSERT(instr->right()->representation().IsTagged());
|
|
1396
|
+
bool reversed = (op == Token::GT || op == Token::LTE);
|
|
1397
|
+
LOperand* left = UseFixed(instr->left(), reversed ? rax : rdx);
|
|
1398
|
+
LOperand* right = UseFixed(instr->right(), reversed ? rdx : rax);
|
|
1399
|
+
LCmpT* result = new LCmpT(left, right);
|
|
1400
|
+
return MarkAsCall(DefineFixed(result, rax), instr);
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
|
|
1404
|
+
LInstruction* LChunkBuilder::DoCompareIDAndBranch(
|
|
1405
|
+
HCompareIDAndBranch* instr) {
|
|
1486
1406
|
Representation r = instr->GetInputRepresentation();
|
|
1487
1407
|
if (r.IsInteger32()) {
|
|
1488
1408
|
ASSERT(instr->left()->representation().IsInteger32());
|
|
1489
1409
|
ASSERT(instr->right()->representation().IsInteger32());
|
|
1490
1410
|
LOperand* left = UseRegisterAtStart(instr->left());
|
|
1491
1411
|
LOperand* right = UseOrConstantAtStart(instr->right());
|
|
1492
|
-
return
|
|
1493
|
-
} else
|
|
1412
|
+
return new LCmpIDAndBranch(left, right);
|
|
1413
|
+
} else {
|
|
1414
|
+
ASSERT(r.IsDouble());
|
|
1494
1415
|
ASSERT(instr->left()->representation().IsDouble());
|
|
1495
1416
|
ASSERT(instr->right()->representation().IsDouble());
|
|
1496
1417
|
LOperand* left = UseRegisterAtStart(instr->left());
|
|
1497
1418
|
LOperand* right = UseRegisterAtStart(instr->right());
|
|
1498
|
-
return
|
|
1499
|
-
} else {
|
|
1500
|
-
ASSERT(instr->left()->representation().IsTagged());
|
|
1501
|
-
ASSERT(instr->right()->representation().IsTagged());
|
|
1502
|
-
bool reversed = (op == Token::GT || op == Token::LTE);
|
|
1503
|
-
LOperand* left = UseFixed(instr->left(), reversed ? rax : rdx);
|
|
1504
|
-
LOperand* right = UseFixed(instr->right(), reversed ? rdx : rax);
|
|
1505
|
-
LCmpT* result = new LCmpT(left, right);
|
|
1506
|
-
return MarkAsCall(DefineFixed(result, rax), instr);
|
|
1419
|
+
return new LCmpIDAndBranch(left, right);
|
|
1507
1420
|
}
|
|
1508
1421
|
}
|
|
1509
1422
|
|
|
1510
1423
|
|
|
1511
|
-
LInstruction* LChunkBuilder::
|
|
1512
|
-
|
|
1424
|
+
LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
|
|
1425
|
+
HCompareObjectEqAndBranch* instr) {
|
|
1513
1426
|
LOperand* left = UseRegisterAtStart(instr->left());
|
|
1514
1427
|
LOperand* right = UseRegisterAtStart(instr->right());
|
|
1515
|
-
|
|
1516
|
-
return DefineAsRegister(result);
|
|
1428
|
+
return new LCmpObjectEqAndBranch(left, right);
|
|
1517
1429
|
}
|
|
1518
1430
|
|
|
1519
1431
|
|
|
1520
|
-
LInstruction* LChunkBuilder::
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
LOperand* right = UseRegisterAtStart(instr->right());
|
|
1524
|
-
LCmpSymbolEq* result = new LCmpSymbolEq(left, right);
|
|
1525
|
-
return DefineAsRegister(result);
|
|
1432
|
+
LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch(
|
|
1433
|
+
HCompareConstantEqAndBranch* instr) {
|
|
1434
|
+
return new LCmpConstantEqAndBranch(UseRegisterAtStart(instr->value()));
|
|
1526
1435
|
}
|
|
1527
1436
|
|
|
1528
1437
|
|
|
1529
|
-
LInstruction* LChunkBuilder::
|
|
1438
|
+
LInstruction* LChunkBuilder::DoIsNullAndBranch(HIsNullAndBranch* instr) {
|
|
1530
1439
|
ASSERT(instr->value()->representation().IsTagged());
|
|
1531
|
-
LOperand*
|
|
1532
|
-
|
|
1533
|
-
return DefineAsRegister(new LIsNull(value));
|
|
1440
|
+
LOperand* temp = instr->is_strict() ? NULL : TempRegister();
|
|
1441
|
+
return new LIsNullAndBranch(UseRegisterAtStart(instr->value()), temp);
|
|
1534
1442
|
}
|
|
1535
1443
|
|
|
1536
1444
|
|
|
1537
|
-
LInstruction* LChunkBuilder::
|
|
1445
|
+
LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) {
|
|
1538
1446
|
ASSERT(instr->value()->representation().IsTagged());
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
return DefineAsRegister(new LIsObject(value));
|
|
1447
|
+
return new LIsObjectAndBranch(UseRegisterAtStart(instr->value()));
|
|
1542
1448
|
}
|
|
1543
1449
|
|
|
1544
1450
|
|
|
1545
|
-
LInstruction* LChunkBuilder::
|
|
1451
|
+
LInstruction* LChunkBuilder::DoIsSmiAndBranch(HIsSmiAndBranch* instr) {
|
|
1546
1452
|
ASSERT(instr->value()->representation().IsTagged());
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
return DefineAsRegister(new LIsSmi(value));
|
|
1453
|
+
return new LIsSmiAndBranch(Use(instr->value()));
|
|
1550
1454
|
}
|
|
1551
1455
|
|
|
1552
1456
|
|
|
1553
|
-
LInstruction* LChunkBuilder::
|
|
1457
|
+
LInstruction* LChunkBuilder::DoIsUndetectableAndBranch(
|
|
1458
|
+
HIsUndetectableAndBranch* instr) {
|
|
1554
1459
|
ASSERT(instr->value()->representation().IsTagged());
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
return DefineAsRegister(new LIsUndetectable(value));
|
|
1460
|
+
return new LIsUndetectableAndBranch(UseRegisterAtStart(instr->value()),
|
|
1461
|
+
TempRegister());
|
|
1558
1462
|
}
|
|
1559
1463
|
|
|
1560
1464
|
|
|
1561
|
-
LInstruction* LChunkBuilder::
|
|
1465
|
+
LInstruction* LChunkBuilder::DoHasInstanceTypeAndBranch(
|
|
1466
|
+
HHasInstanceTypeAndBranch* instr) {
|
|
1562
1467
|
ASSERT(instr->value()->representation().IsTagged());
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
return DefineAsRegister(new LHasInstanceType(value));
|
|
1468
|
+
return new LHasInstanceTypeAndBranch(UseRegisterAtStart(instr->value()));
|
|
1566
1469
|
}
|
|
1567
1470
|
|
|
1568
1471
|
|
|
@@ -1575,17 +1478,17 @@ LInstruction* LChunkBuilder::DoGetCachedArrayIndex(
|
|
|
1575
1478
|
}
|
|
1576
1479
|
|
|
1577
1480
|
|
|
1578
|
-
LInstruction* LChunkBuilder::
|
|
1579
|
-
|
|
1481
|
+
LInstruction* LChunkBuilder::DoHasCachedArrayIndexAndBranch(
|
|
1482
|
+
HHasCachedArrayIndexAndBranch* instr) {
|
|
1580
1483
|
ASSERT(instr->value()->representation().IsTagged());
|
|
1581
|
-
|
|
1582
|
-
return DefineAsRegister(new LHasCachedArrayIndex(value));
|
|
1484
|
+
return new LHasCachedArrayIndexAndBranch(UseRegisterAtStart(instr->value()));
|
|
1583
1485
|
}
|
|
1584
1486
|
|
|
1585
1487
|
|
|
1586
|
-
LInstruction* LChunkBuilder::
|
|
1587
|
-
|
|
1588
|
-
return
|
|
1488
|
+
LInstruction* LChunkBuilder::DoClassOfTestAndBranch(
|
|
1489
|
+
HClassOfTestAndBranch* instr) {
|
|
1490
|
+
return new LClassOfTestAndBranch(UseTempRegister(instr->value()),
|
|
1491
|
+
TempRegister());
|
|
1589
1492
|
}
|
|
1590
1493
|
|
|
1591
1494
|
|
|
@@ -1595,16 +1498,16 @@ LInstruction* LChunkBuilder::DoJSArrayLength(HJSArrayLength* instr) {
|
|
|
1595
1498
|
}
|
|
1596
1499
|
|
|
1597
1500
|
|
|
1598
|
-
LInstruction* LChunkBuilder::
|
|
1501
|
+
LInstruction* LChunkBuilder::DoFixedArrayBaseLength(
|
|
1502
|
+
HFixedArrayBaseLength* instr) {
|
|
1599
1503
|
LOperand* array = UseRegisterAtStart(instr->value());
|
|
1600
|
-
return DefineAsRegister(new
|
|
1504
|
+
return DefineAsRegister(new LFixedArrayBaseLength(array));
|
|
1601
1505
|
}
|
|
1602
1506
|
|
|
1603
1507
|
|
|
1604
|
-
LInstruction* LChunkBuilder::
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
return DefineAsRegister(new LExternalArrayLength(array));
|
|
1508
|
+
LInstruction* LChunkBuilder::DoElementsKind(HElementsKind* instr) {
|
|
1509
|
+
LOperand* object = UseRegisterAtStart(instr->value());
|
|
1510
|
+
return DefineAsRegister(new LElementsKind(object));
|
|
1608
1511
|
}
|
|
1609
1512
|
|
|
1610
1513
|
|
|
@@ -1616,8 +1519,9 @@ LInstruction* LChunkBuilder::DoValueOf(HValueOf* instr) {
|
|
|
1616
1519
|
|
|
1617
1520
|
|
|
1618
1521
|
LInstruction* LChunkBuilder::DoBoundsCheck(HBoundsCheck* instr) {
|
|
1619
|
-
return AssignEnvironment(new LBoundsCheck(
|
|
1620
|
-
|
|
1522
|
+
return AssignEnvironment(new LBoundsCheck(
|
|
1523
|
+
UseRegisterOrConstantAtStart(instr->index()),
|
|
1524
|
+
Use(instr->length())));
|
|
1621
1525
|
}
|
|
1622
1526
|
|
|
1623
1527
|
|
|
@@ -1634,6 +1538,11 @@ LInstruction* LChunkBuilder::DoThrow(HThrow* instr) {
|
|
|
1634
1538
|
}
|
|
1635
1539
|
|
|
1636
1540
|
|
|
1541
|
+
LInstruction* LChunkBuilder::DoUseConst(HUseConst* instr) {
|
|
1542
|
+
return NULL;
|
|
1543
|
+
}
|
|
1544
|
+
|
|
1545
|
+
|
|
1637
1546
|
LInstruction* LChunkBuilder::DoForceRepresentation(HForceRepresentation* bad) {
|
|
1638
1547
|
// All HForceRepresentation instructions should be eliminated in the
|
|
1639
1548
|
// representation change phase of Hydrogen.
|
|
@@ -1655,8 +1564,8 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
|
|
|
1655
1564
|
LOperand* value = UseRegister(instr->value());
|
|
1656
1565
|
bool needs_check = !instr->value()->type().IsSmi();
|
|
1657
1566
|
if (needs_check) {
|
|
1658
|
-
|
|
1659
|
-
|
|
1567
|
+
bool truncating = instr->CanTruncateToInt32();
|
|
1568
|
+
LOperand* xmm_temp = truncating ? NULL : FixedTemp(xmm1);
|
|
1660
1569
|
LTaggedToI* res = new LTaggedToI(value, xmm_temp);
|
|
1661
1570
|
return AssignEnvironment(DefineSameAsFirst(res));
|
|
1662
1571
|
} else {
|
|
@@ -1757,6 +1666,32 @@ LInstruction* LChunkBuilder::DoClampToUint8(HClampToUint8* instr) {
|
|
|
1757
1666
|
}
|
|
1758
1667
|
|
|
1759
1668
|
|
|
1669
|
+
LInstruction* LChunkBuilder::DoToInt32(HToInt32* instr) {
|
|
1670
|
+
HValue* value = instr->value();
|
|
1671
|
+
Representation input_rep = value->representation();
|
|
1672
|
+
LOperand* reg = UseRegister(value);
|
|
1673
|
+
if (input_rep.IsDouble()) {
|
|
1674
|
+
return AssignEnvironment(DefineAsRegister(new LDoubleToI(reg)));
|
|
1675
|
+
} else if (input_rep.IsInteger32()) {
|
|
1676
|
+
// Canonicalization should already have removed the hydrogen instruction in
|
|
1677
|
+
// this case, since it is a noop.
|
|
1678
|
+
UNREACHABLE();
|
|
1679
|
+
return NULL;
|
|
1680
|
+
} else {
|
|
1681
|
+
ASSERT(input_rep.IsTagged());
|
|
1682
|
+
LOperand* reg = UseRegister(value);
|
|
1683
|
+
// Register allocator doesn't (yet) support allocation of double
|
|
1684
|
+
// temps. Reserve xmm1 explicitly.
|
|
1685
|
+
LOperand* xmm_temp =
|
|
1686
|
+
CpuFeatures::IsSupported(SSE3)
|
|
1687
|
+
? NULL
|
|
1688
|
+
: FixedTemp(xmm1);
|
|
1689
|
+
return AssignEnvironment(
|
|
1690
|
+
DefineSameAsFirst(new LTaggedToI(reg, xmm_temp)));
|
|
1691
|
+
}
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
|
|
1760
1695
|
LInstruction* LChunkBuilder::DoReturn(HReturn* instr) {
|
|
1761
1696
|
return new LReturn(UseFixed(instr->value(), rax));
|
|
1762
1697
|
}
|
|
@@ -1885,21 +1820,35 @@ LInstruction* LChunkBuilder::DoLoadKeyedFastElement(
|
|
|
1885
1820
|
ASSERT(instr->representation().IsTagged());
|
|
1886
1821
|
ASSERT(instr->key()->representation().IsInteger32());
|
|
1887
1822
|
LOperand* obj = UseRegisterAtStart(instr->object());
|
|
1888
|
-
LOperand* key =
|
|
1823
|
+
LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
|
1889
1824
|
LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key);
|
|
1890
|
-
return AssignEnvironment(
|
|
1825
|
+
return AssignEnvironment(DefineAsRegister(result));
|
|
1826
|
+
}
|
|
1827
|
+
|
|
1828
|
+
|
|
1829
|
+
LInstruction* LChunkBuilder::DoLoadKeyedFastDoubleElement(
|
|
1830
|
+
HLoadKeyedFastDoubleElement* instr) {
|
|
1831
|
+
ASSERT(instr->representation().IsDouble());
|
|
1832
|
+
ASSERT(instr->key()->representation().IsInteger32());
|
|
1833
|
+
LOperand* elements = UseRegisterAtStart(instr->elements());
|
|
1834
|
+
LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
|
1835
|
+
LLoadKeyedFastDoubleElement* result =
|
|
1836
|
+
new LLoadKeyedFastDoubleElement(elements, key);
|
|
1837
|
+
return AssignEnvironment(DefineAsRegister(result));
|
|
1891
1838
|
}
|
|
1892
1839
|
|
|
1893
1840
|
|
|
1894
1841
|
LInstruction* LChunkBuilder::DoLoadKeyedSpecializedArrayElement(
|
|
1895
1842
|
HLoadKeyedSpecializedArrayElement* instr) {
|
|
1896
|
-
|
|
1843
|
+
JSObject::ElementsKind elements_kind = instr->elements_kind();
|
|
1897
1844
|
Representation representation(instr->representation());
|
|
1898
1845
|
ASSERT(
|
|
1899
|
-
(representation.IsInteger32() &&
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1846
|
+
(representation.IsInteger32() &&
|
|
1847
|
+
(elements_kind != JSObject::EXTERNAL_FLOAT_ELEMENTS) &&
|
|
1848
|
+
(elements_kind != JSObject::EXTERNAL_DOUBLE_ELEMENTS)) ||
|
|
1849
|
+
(representation.IsDouble() &&
|
|
1850
|
+
((elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) ||
|
|
1851
|
+
(elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS))));
|
|
1903
1852
|
ASSERT(instr->key()->representation().IsInteger32());
|
|
1904
1853
|
LOperand* external_pointer = UseRegister(instr->external_pointer());
|
|
1905
1854
|
LOperand* key = UseRegisterOrConstant(instr->key());
|
|
@@ -1908,7 +1857,7 @@ LInstruction* LChunkBuilder::DoLoadKeyedSpecializedArrayElement(
|
|
|
1908
1857
|
LInstruction* load_instr = DefineAsRegister(result);
|
|
1909
1858
|
// An unsigned int array load might overflow and cause a deopt, make sure it
|
|
1910
1859
|
// has an environment.
|
|
1911
|
-
return (
|
|
1860
|
+
return (elements_kind == JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS) ?
|
|
1912
1861
|
AssignEnvironment(load_instr) : load_instr;
|
|
1913
1862
|
}
|
|
1914
1863
|
|
|
@@ -1941,21 +1890,38 @@ LInstruction* LChunkBuilder::DoStoreKeyedFastElement(
|
|
|
1941
1890
|
}
|
|
1942
1891
|
|
|
1943
1892
|
|
|
1893
|
+
LInstruction* LChunkBuilder::DoStoreKeyedFastDoubleElement(
|
|
1894
|
+
HStoreKeyedFastDoubleElement* instr) {
|
|
1895
|
+
ASSERT(instr->value()->representation().IsDouble());
|
|
1896
|
+
ASSERT(instr->elements()->representation().IsTagged());
|
|
1897
|
+
ASSERT(instr->key()->representation().IsInteger32());
|
|
1898
|
+
|
|
1899
|
+
LOperand* elements = UseRegisterAtStart(instr->elements());
|
|
1900
|
+
LOperand* val = UseTempRegister(instr->value());
|
|
1901
|
+
LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
|
1902
|
+
|
|
1903
|
+
return new LStoreKeyedFastDoubleElement(elements, key, val);
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
|
|
1944
1907
|
LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement(
|
|
1945
1908
|
HStoreKeyedSpecializedArrayElement* instr) {
|
|
1946
1909
|
Representation representation(instr->value()->representation());
|
|
1947
|
-
|
|
1910
|
+
JSObject::ElementsKind elements_kind = instr->elements_kind();
|
|
1948
1911
|
ASSERT(
|
|
1949
|
-
(representation.IsInteger32() &&
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1912
|
+
(representation.IsInteger32() &&
|
|
1913
|
+
(elements_kind != JSObject::EXTERNAL_FLOAT_ELEMENTS) &&
|
|
1914
|
+
(elements_kind != JSObject::EXTERNAL_DOUBLE_ELEMENTS)) ||
|
|
1915
|
+
(representation.IsDouble() &&
|
|
1916
|
+
((elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) ||
|
|
1917
|
+
(elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS))));
|
|
1953
1918
|
ASSERT(instr->external_pointer()->representation().IsExternal());
|
|
1954
1919
|
ASSERT(instr->key()->representation().IsInteger32());
|
|
1955
1920
|
|
|
1956
1921
|
LOperand* external_pointer = UseRegister(instr->external_pointer());
|
|
1957
|
-
bool val_is_temp_register =
|
|
1958
|
-
|
|
1922
|
+
bool val_is_temp_register =
|
|
1923
|
+
elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS ||
|
|
1924
|
+
elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS;
|
|
1959
1925
|
LOperand* val = val_is_temp_register
|
|
1960
1926
|
? UseTempRegister(instr->value())
|
|
1961
1927
|
: UseRegister(instr->value());
|
|
@@ -2018,8 +1984,8 @@ LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) {
|
|
|
2018
1984
|
|
|
2019
1985
|
|
|
2020
1986
|
LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) {
|
|
2021
|
-
LOperand* string =
|
|
2022
|
-
LOperand* index =
|
|
1987
|
+
LOperand* string = UseTempRegister(instr->string());
|
|
1988
|
+
LOperand* index = UseTempRegister(instr->index());
|
|
2023
1989
|
LStringCharCodeAt* result = new LStringCharCodeAt(string, index);
|
|
2024
1990
|
return AssignEnvironment(AssignPointerMap(DefineAsRegister(result)));
|
|
2025
1991
|
}
|
|
@@ -2081,6 +2047,10 @@ LInstruction* LChunkBuilder::DoParameter(HParameter* instr) {
|
|
|
2081
2047
|
|
|
2082
2048
|
LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) {
|
|
2083
2049
|
int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width.
|
|
2050
|
+
if (spill_index > LUnallocated::kMaxFixedIndex) {
|
|
2051
|
+
Abort("Too many spill slots needed for OSR");
|
|
2052
|
+
spill_index = 0;
|
|
2053
|
+
}
|
|
2084
2054
|
return DefineAsSpilled(new LUnknownOSRValue, spill_index);
|
|
2085
2055
|
}
|
|
2086
2056
|
|
|
@@ -2122,13 +2092,14 @@ LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) {
|
|
|
2122
2092
|
}
|
|
2123
2093
|
|
|
2124
2094
|
|
|
2125
|
-
LInstruction* LChunkBuilder::
|
|
2126
|
-
return
|
|
2095
|
+
LInstruction* LChunkBuilder::DoTypeofIsAndBranch(HTypeofIsAndBranch* instr) {
|
|
2096
|
+
return new LTypeofIsAndBranch(UseTempRegister(instr->value()));
|
|
2127
2097
|
}
|
|
2128
2098
|
|
|
2129
2099
|
|
|
2130
|
-
LInstruction* LChunkBuilder::
|
|
2131
|
-
|
|
2100
|
+
LInstruction* LChunkBuilder::DoIsConstructCallAndBranch(
|
|
2101
|
+
HIsConstructCallAndBranch* instr) {
|
|
2102
|
+
return new LIsConstructCallAndBranch(TempRegister());
|
|
2132
2103
|
}
|
|
2133
2104
|
|
|
2134
2105
|
|
|
@@ -2164,7 +2135,12 @@ LInstruction* LChunkBuilder::DoSimulate(HSimulate* instr) {
|
|
|
2164
2135
|
|
|
2165
2136
|
|
|
2166
2137
|
LInstruction* LChunkBuilder::DoStackCheck(HStackCheck* instr) {
|
|
2167
|
-
|
|
2138
|
+
if (instr->is_function_entry()) {
|
|
2139
|
+
return MarkAsCall(new LStackCheck, instr);
|
|
2140
|
+
} else {
|
|
2141
|
+
ASSERT(instr->is_backwards_branch());
|
|
2142
|
+
return AssignEnvironment(AssignPointerMap(new LStackCheck));
|
|
2143
|
+
}
|
|
2168
2144
|
}
|
|
2169
2145
|
|
|
2170
2146
|
|
|
@@ -2173,7 +2149,6 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
|
|
|
2173
2149
|
HConstant* undefined = graph()->GetConstantUndefined();
|
|
2174
2150
|
HEnvironment* inner = outer->CopyForInlining(instr->closure(),
|
|
2175
2151
|
instr->function(),
|
|
2176
|
-
HEnvironment::LITHIUM,
|
|
2177
2152
|
undefined,
|
|
2178
2153
|
instr->call_kind());
|
|
2179
2154
|
current_block_->UpdateEnvironment(inner);
|