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
|
@@ -108,7 +108,7 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
108
108
|
void DoDeferredNumberTagI(LNumberTagI* instr);
|
|
109
109
|
void DoDeferredTaggedToI(LTaggedToI* instr);
|
|
110
110
|
void DoDeferredMathAbsTaggedHeapNumber(LUnaryMathOperation* instr);
|
|
111
|
-
void DoDeferredStackCheck(
|
|
111
|
+
void DoDeferredStackCheck(LStackCheck* instr);
|
|
112
112
|
void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
|
|
113
113
|
void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
|
|
114
114
|
void DoDeferredLInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
|
@@ -148,7 +148,7 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
148
148
|
HGraph* graph() const { return chunk_->graph(); }
|
|
149
149
|
|
|
150
150
|
Register scratch0() { return r9; }
|
|
151
|
-
DwVfpRegister double_scratch0() { return
|
|
151
|
+
DwVfpRegister double_scratch0() { return d15; }
|
|
152
152
|
|
|
153
153
|
int GetNextEmittedBlock(int block);
|
|
154
154
|
LInstruction* GetNextInstruction();
|
|
@@ -261,11 +261,12 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
static Condition TokenToCondition(Token::Value op, bool is_unsigned);
|
|
264
|
-
void EmitGoto(int block
|
|
264
|
+
void EmitGoto(int block);
|
|
265
265
|
void EmitBranch(int left_block, int right_block, Condition cc);
|
|
266
266
|
void EmitCmpI(LOperand* left, LOperand* right);
|
|
267
267
|
void EmitNumberUntagD(Register input,
|
|
268
268
|
DoubleRegister result,
|
|
269
|
+
bool deoptimize_on_undefined,
|
|
269
270
|
LEnvironment* env);
|
|
270
271
|
|
|
271
272
|
// Emits optimized code for typeof x == "y". Modifies input register.
|
|
@@ -279,7 +280,6 @@ class LCodeGen BASE_EMBEDDED {
|
|
|
279
280
|
// true and false label should be made, to optimize fallthrough.
|
|
280
281
|
Condition EmitIsObject(Register input,
|
|
281
282
|
Register temp1,
|
|
282
|
-
Register temp2,
|
|
283
283
|
Label* is_not_object,
|
|
284
284
|
Label* is_object);
|
|
285
285
|
|
|
@@ -254,7 +254,6 @@ void LGapResolver::EmitMove(int index) {
|
|
|
254
254
|
} else {
|
|
255
255
|
ASSERT(destination->IsStackSlot());
|
|
256
256
|
ASSERT(!in_cycle_); // Constant moves happen after all cycles are gone.
|
|
257
|
-
MemOperand destination_operand = cgen_->ToMemOperand(destination);
|
|
258
257
|
__ mov(kSavedValueRegister, source_operand);
|
|
259
258
|
__ str(kSavedValueRegister, cgen_->ToMemOperand(destination));
|
|
260
259
|
}
|
|
@@ -265,8 +264,7 @@ void LGapResolver::EmitMove(int index) {
|
|
|
265
264
|
__ vmov(cgen_->ToDoubleRegister(destination), source_register);
|
|
266
265
|
} else {
|
|
267
266
|
ASSERT(destination->IsDoubleStackSlot());
|
|
268
|
-
|
|
269
|
-
__ vstr(source_register, destination_operand);
|
|
267
|
+
__ vstr(source_register, cgen_->ToMemOperand(destination));
|
|
270
268
|
}
|
|
271
269
|
|
|
272
270
|
} else if (source->IsDoubleStackSlot()) {
|
|
@@ -91,7 +91,7 @@ void MacroAssembler::Jump(intptr_t target, RelocInfo::Mode rmode,
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
|
|
94
|
-
void MacroAssembler::Jump(
|
|
94
|
+
void MacroAssembler::Jump(Address target, RelocInfo::Mode rmode,
|
|
95
95
|
Condition cond) {
|
|
96
96
|
ASSERT(!RelocInfo::IsCodeTarget(rmode));
|
|
97
97
|
Jump(reinterpret_cast<intptr_t>(target), rmode, cond);
|
|
@@ -118,10 +118,8 @@ int MacroAssembler::CallSize(Register target, Condition cond) {
|
|
|
118
118
|
void MacroAssembler::Call(Register target, Condition cond) {
|
|
119
119
|
// Block constant pool for the call instruction sequence.
|
|
120
120
|
BlockConstPoolScope block_const_pool(this);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
#endif
|
|
124
|
-
|
|
121
|
+
Label start;
|
|
122
|
+
bind(&start);
|
|
125
123
|
#if USE_BLX
|
|
126
124
|
blx(target, cond);
|
|
127
125
|
#else
|
|
@@ -129,34 +127,29 @@ void MacroAssembler::Call(Register target, Condition cond) {
|
|
|
129
127
|
mov(lr, Operand(pc), LeaveCC, cond);
|
|
130
128
|
mov(pc, Operand(target), LeaveCC, cond);
|
|
131
129
|
#endif
|
|
132
|
-
|
|
133
|
-
#ifdef DEBUG
|
|
134
|
-
int post_position = pc_offset();
|
|
135
|
-
CHECK_EQ(pre_position + CallSize(target, cond), post_position);
|
|
136
|
-
#endif
|
|
130
|
+
ASSERT_EQ(CallSize(target, cond), SizeOfCodeGeneratedSince(&start));
|
|
137
131
|
}
|
|
138
132
|
|
|
139
133
|
|
|
140
134
|
int MacroAssembler::CallSize(
|
|
141
|
-
|
|
135
|
+
Address target, RelocInfo::Mode rmode, Condition cond) {
|
|
142
136
|
int size = 2 * kInstrSize;
|
|
143
137
|
Instr mov_instr = cond | MOV | LeaveCC;
|
|
144
|
-
|
|
138
|
+
intptr_t immediate = reinterpret_cast<intptr_t>(target);
|
|
139
|
+
if (!Operand(immediate, rmode).is_single_instruction(mov_instr)) {
|
|
145
140
|
size += kInstrSize;
|
|
146
141
|
}
|
|
147
142
|
return size;
|
|
148
143
|
}
|
|
149
144
|
|
|
150
145
|
|
|
151
|
-
void MacroAssembler::Call(
|
|
146
|
+
void MacroAssembler::Call(Address target,
|
|
152
147
|
RelocInfo::Mode rmode,
|
|
153
148
|
Condition cond) {
|
|
154
149
|
// Block constant pool for the call instruction sequence.
|
|
155
150
|
BlockConstPoolScope block_const_pool(this);
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
#endif
|
|
159
|
-
|
|
151
|
+
Label start;
|
|
152
|
+
bind(&start);
|
|
160
153
|
#if USE_BLX
|
|
161
154
|
// On ARMv5 and after the recommended call sequence is:
|
|
162
155
|
// ldr ip, [pc, #...]
|
|
@@ -168,7 +161,7 @@ void MacroAssembler::Call(intptr_t target,
|
|
|
168
161
|
// we have to do it explicitly.
|
|
169
162
|
positions_recorder()->WriteRecordedPositions();
|
|
170
163
|
|
|
171
|
-
mov(ip, Operand(target, rmode));
|
|
164
|
+
mov(ip, Operand(reinterpret_cast<int32_t>(target), rmode));
|
|
172
165
|
blx(ip, cond);
|
|
173
166
|
|
|
174
167
|
ASSERT(kCallTargetAddressOffset == 2 * kInstrSize);
|
|
@@ -176,82 +169,36 @@ void MacroAssembler::Call(intptr_t target,
|
|
|
176
169
|
// Set lr for return at current pc + 8.
|
|
177
170
|
mov(lr, Operand(pc), LeaveCC, cond);
|
|
178
171
|
// Emit a ldr<cond> pc, [pc + offset of target in constant pool].
|
|
179
|
-
mov(pc, Operand(target, rmode), LeaveCC, cond);
|
|
172
|
+
mov(pc, Operand(reinterpret_cast<int32_t>(target), rmode), LeaveCC, cond);
|
|
180
173
|
ASSERT(kCallTargetAddressOffset == kInstrSize);
|
|
181
174
|
#endif
|
|
182
|
-
|
|
183
|
-
#ifdef DEBUG
|
|
184
|
-
int post_position = pc_offset();
|
|
185
|
-
CHECK_EQ(pre_position + CallSize(target, rmode, cond), post_position);
|
|
186
|
-
#endif
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
int MacroAssembler::CallSize(
|
|
191
|
-
byte* target, RelocInfo::Mode rmode, Condition cond) {
|
|
192
|
-
return CallSize(reinterpret_cast<intptr_t>(target), rmode);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
void MacroAssembler::Call(
|
|
197
|
-
byte* target, RelocInfo::Mode rmode, Condition cond) {
|
|
198
|
-
#ifdef DEBUG
|
|
199
|
-
int pre_position = pc_offset();
|
|
200
|
-
#endif
|
|
201
|
-
|
|
202
|
-
ASSERT(!RelocInfo::IsCodeTarget(rmode));
|
|
203
|
-
Call(reinterpret_cast<intptr_t>(target), rmode, cond);
|
|
204
|
-
|
|
205
|
-
#ifdef DEBUG
|
|
206
|
-
int post_position = pc_offset();
|
|
207
|
-
CHECK_EQ(pre_position + CallSize(target, rmode, cond), post_position);
|
|
208
|
-
#endif
|
|
175
|
+
ASSERT_EQ(CallSize(target, rmode, cond), SizeOfCodeGeneratedSince(&start));
|
|
209
176
|
}
|
|
210
177
|
|
|
211
178
|
|
|
212
|
-
int MacroAssembler::CallSize(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
void MacroAssembler::CallWithAstId(Handle<Code> code,
|
|
219
|
-
RelocInfo::Mode rmode,
|
|
220
|
-
unsigned ast_id,
|
|
221
|
-
Condition cond) {
|
|
222
|
-
#ifdef DEBUG
|
|
223
|
-
int pre_position = pc_offset();
|
|
224
|
-
#endif
|
|
225
|
-
|
|
226
|
-
ASSERT(rmode == RelocInfo::CODE_TARGET_WITH_ID);
|
|
227
|
-
ASSERT(ast_id != kNoASTId);
|
|
228
|
-
ASSERT(ast_id_for_reloc_info_ == kNoASTId);
|
|
229
|
-
ast_id_for_reloc_info_ = ast_id;
|
|
230
|
-
// 'code' is always generated ARM code, never THUMB code
|
|
231
|
-
Call(reinterpret_cast<intptr_t>(code.location()), rmode, cond);
|
|
232
|
-
|
|
233
|
-
#ifdef DEBUG
|
|
234
|
-
int post_position = pc_offset();
|
|
235
|
-
CHECK_EQ(pre_position + CallSize(code, rmode, cond), post_position);
|
|
236
|
-
#endif
|
|
179
|
+
int MacroAssembler::CallSize(Handle<Code> code,
|
|
180
|
+
RelocInfo::Mode rmode,
|
|
181
|
+
unsigned ast_id,
|
|
182
|
+
Condition cond) {
|
|
183
|
+
return CallSize(reinterpret_cast<Address>(code.location()), rmode, cond);
|
|
237
184
|
}
|
|
238
185
|
|
|
239
186
|
|
|
240
187
|
void MacroAssembler::Call(Handle<Code> code,
|
|
241
188
|
RelocInfo::Mode rmode,
|
|
189
|
+
unsigned ast_id,
|
|
242
190
|
Condition cond) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
#endif
|
|
246
|
-
|
|
191
|
+
Label start;
|
|
192
|
+
bind(&start);
|
|
247
193
|
ASSERT(RelocInfo::IsCodeTarget(rmode));
|
|
194
|
+
if (rmode == RelocInfo::CODE_TARGET && ast_id != kNoASTId) {
|
|
195
|
+
SetRecordedAstId(ast_id);
|
|
196
|
+
rmode = RelocInfo::CODE_TARGET_WITH_ID;
|
|
197
|
+
}
|
|
248
198
|
// 'code' is always generated ARM code, never THUMB code
|
|
249
|
-
Call(reinterpret_cast<
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
int post_position = pc_offset();
|
|
253
|
-
CHECK_EQ(pre_position + CallSize(code, rmode, cond), post_position);
|
|
254
|
-
#endif
|
|
199
|
+
Call(reinterpret_cast<Address>(code.location()), rmode, cond);
|
|
200
|
+
ASSERT_EQ(CallSize(code, rmode, ast_id, cond),
|
|
201
|
+
SizeOfCodeGeneratedSince(&start));
|
|
255
202
|
}
|
|
256
203
|
|
|
257
204
|
|
|
@@ -298,14 +245,20 @@ void MacroAssembler::Call(Label* target) {
|
|
|
298
245
|
}
|
|
299
246
|
|
|
300
247
|
|
|
248
|
+
void MacroAssembler::Push(Handle<Object> handle) {
|
|
249
|
+
mov(ip, Operand(handle));
|
|
250
|
+
push(ip);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
|
|
301
254
|
void MacroAssembler::Move(Register dst, Handle<Object> value) {
|
|
302
255
|
mov(dst, Operand(value));
|
|
303
256
|
}
|
|
304
257
|
|
|
305
258
|
|
|
306
|
-
void MacroAssembler::Move(Register dst, Register src) {
|
|
259
|
+
void MacroAssembler::Move(Register dst, Register src, Condition cond) {
|
|
307
260
|
if (!dst.is(src)) {
|
|
308
|
-
mov(dst, src);
|
|
261
|
+
mov(dst, src, LeaveCC, cond);
|
|
309
262
|
}
|
|
310
263
|
}
|
|
311
264
|
|
|
@@ -330,7 +283,8 @@ void MacroAssembler::And(Register dst, Register src1, const Operand& src2,
|
|
|
330
283
|
!src2.must_use_constant_pool() &&
|
|
331
284
|
CpuFeatures::IsSupported(ARMv7) &&
|
|
332
285
|
IsPowerOf2(src2.immediate() + 1)) {
|
|
333
|
-
ubfx(dst, src1, 0,
|
|
286
|
+
ubfx(dst, src1, 0,
|
|
287
|
+
WhichPowerOf2(static_cast<uint32_t>(src2.immediate()) + 1), cond);
|
|
334
288
|
|
|
335
289
|
} else {
|
|
336
290
|
and_(dst, src1, src2, LeaveCC, cond);
|
|
@@ -438,20 +392,6 @@ void MacroAssembler::Usat(Register dst, int satpos, const Operand& src,
|
|
|
438
392
|
}
|
|
439
393
|
|
|
440
394
|
|
|
441
|
-
void MacroAssembler::SmiJumpTable(Register index, Vector<Label*> targets) {
|
|
442
|
-
// Empty the const pool.
|
|
443
|
-
CheckConstPool(true, true);
|
|
444
|
-
add(pc, pc, Operand(index,
|
|
445
|
-
LSL,
|
|
446
|
-
Instruction::kInstrSizeLog2 - kSmiTagSize));
|
|
447
|
-
BlockConstPoolBefore(pc_offset() + (targets.length() + 1) * kInstrSize);
|
|
448
|
-
nop(); // Jump table alignment.
|
|
449
|
-
for (int i = 0; i < targets.length(); i++) {
|
|
450
|
-
b(targets[i]);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
|
|
455
395
|
void MacroAssembler::LoadRoot(Register destination,
|
|
456
396
|
Heap::RootListIndex index,
|
|
457
397
|
Condition cond) {
|
|
@@ -654,19 +594,36 @@ void MacroAssembler::Ldrd(Register dst1, Register dst2,
|
|
|
654
594
|
ASSERT_EQ(0, dst1.code() % 2);
|
|
655
595
|
ASSERT_EQ(dst1.code() + 1, dst2.code());
|
|
656
596
|
|
|
597
|
+
// V8 does not use this addressing mode, so the fallback code
|
|
598
|
+
// below doesn't support it yet.
|
|
599
|
+
ASSERT((src.am() != PreIndex) && (src.am() != NegPreIndex));
|
|
600
|
+
|
|
657
601
|
// Generate two ldr instructions if ldrd is not available.
|
|
658
602
|
if (CpuFeatures::IsSupported(ARMv7)) {
|
|
659
603
|
CpuFeatures::Scope scope(ARMv7);
|
|
660
604
|
ldrd(dst1, dst2, src, cond);
|
|
661
605
|
} else {
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
606
|
+
if ((src.am() == Offset) || (src.am() == NegOffset)) {
|
|
607
|
+
MemOperand src2(src);
|
|
608
|
+
src2.set_offset(src2.offset() + 4);
|
|
609
|
+
if (dst1.is(src.rn())) {
|
|
610
|
+
ldr(dst2, src2, cond);
|
|
611
|
+
ldr(dst1, src, cond);
|
|
612
|
+
} else {
|
|
613
|
+
ldr(dst1, src, cond);
|
|
614
|
+
ldr(dst2, src2, cond);
|
|
615
|
+
}
|
|
616
|
+
} else { // PostIndex or NegPostIndex.
|
|
617
|
+
ASSERT((src.am() == PostIndex) || (src.am() == NegPostIndex));
|
|
618
|
+
if (dst1.is(src.rn())) {
|
|
619
|
+
ldr(dst2, MemOperand(src.rn(), 4, Offset), cond);
|
|
620
|
+
ldr(dst1, src, cond);
|
|
621
|
+
} else {
|
|
622
|
+
MemOperand src2(src);
|
|
623
|
+
src2.set_offset(src2.offset() - 4);
|
|
624
|
+
ldr(dst1, MemOperand(src.rn(), 4, PostIndex), cond);
|
|
625
|
+
ldr(dst2, src2, cond);
|
|
626
|
+
}
|
|
670
627
|
}
|
|
671
628
|
}
|
|
672
629
|
}
|
|
@@ -679,15 +636,26 @@ void MacroAssembler::Strd(Register src1, Register src2,
|
|
|
679
636
|
ASSERT_EQ(0, src1.code() % 2);
|
|
680
637
|
ASSERT_EQ(src1.code() + 1, src2.code());
|
|
681
638
|
|
|
639
|
+
// V8 does not use this addressing mode, so the fallback code
|
|
640
|
+
// below doesn't support it yet.
|
|
641
|
+
ASSERT((dst.am() != PreIndex) && (dst.am() != NegPreIndex));
|
|
642
|
+
|
|
682
643
|
// Generate two str instructions if strd is not available.
|
|
683
644
|
if (CpuFeatures::IsSupported(ARMv7)) {
|
|
684
645
|
CpuFeatures::Scope scope(ARMv7);
|
|
685
646
|
strd(src1, src2, dst, cond);
|
|
686
647
|
} else {
|
|
687
648
|
MemOperand dst2(dst);
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
649
|
+
if ((dst.am() == Offset) || (dst.am() == NegOffset)) {
|
|
650
|
+
dst2.set_offset(dst2.offset() + 4);
|
|
651
|
+
str(src1, dst, cond);
|
|
652
|
+
str(src2, dst2, cond);
|
|
653
|
+
} else { // PostIndex or NegPostIndex.
|
|
654
|
+
ASSERT((dst.am() == PostIndex) || (dst.am() == NegPostIndex));
|
|
655
|
+
dst2.set_offset(dst2.offset() - 4);
|
|
656
|
+
str(src1, MemOperand(dst.rn(), 4, PostIndex), cond);
|
|
657
|
+
str(src2, dst2, cond);
|
|
658
|
+
}
|
|
691
659
|
}
|
|
692
660
|
}
|
|
693
661
|
|
|
@@ -734,6 +702,23 @@ void MacroAssembler::VFPCompareAndLoadFlags(const DwVfpRegister src1,
|
|
|
734
702
|
vmrs(fpscr_flags, cond);
|
|
735
703
|
}
|
|
736
704
|
|
|
705
|
+
void MacroAssembler::Vmov(const DwVfpRegister dst,
|
|
706
|
+
const double imm,
|
|
707
|
+
const Condition cond) {
|
|
708
|
+
ASSERT(CpuFeatures::IsEnabled(VFP3));
|
|
709
|
+
static const DoubleRepresentation minus_zero(-0.0);
|
|
710
|
+
static const DoubleRepresentation zero(0.0);
|
|
711
|
+
DoubleRepresentation value(imm);
|
|
712
|
+
// Handle special values first.
|
|
713
|
+
if (value.bits == zero.bits) {
|
|
714
|
+
vmov(dst, kDoubleRegZero, cond);
|
|
715
|
+
} else if (value.bits == minus_zero.bits) {
|
|
716
|
+
vneg(dst, kDoubleRegZero, cond);
|
|
717
|
+
} else {
|
|
718
|
+
vmov(dst, imm, cond);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
737
722
|
|
|
738
723
|
void MacroAssembler::EnterFrame(StackFrame::Type type) {
|
|
739
724
|
// r0-r3: preserved
|
|
@@ -956,9 +941,9 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
|
956
941
|
Handle<Code> adaptor =
|
|
957
942
|
isolate()->builtins()->ArgumentsAdaptorTrampoline();
|
|
958
943
|
if (flag == CALL_FUNCTION) {
|
|
959
|
-
call_wrapper.BeforeCall(CallSize(adaptor
|
|
944
|
+
call_wrapper.BeforeCall(CallSize(adaptor));
|
|
960
945
|
SetCallKind(r5, call_kind);
|
|
961
|
-
Call(adaptor
|
|
946
|
+
Call(adaptor);
|
|
962
947
|
call_wrapper.AfterCall();
|
|
963
948
|
b(done);
|
|
964
949
|
} else {
|
|
@@ -1048,7 +1033,8 @@ void MacroAssembler::InvokeFunction(Register fun,
|
|
|
1048
1033
|
|
|
1049
1034
|
void MacroAssembler::InvokeFunction(JSFunction* function,
|
|
1050
1035
|
const ParameterCount& actual,
|
|
1051
|
-
InvokeFlag flag
|
|
1036
|
+
InvokeFlag flag,
|
|
1037
|
+
CallKind call_kind) {
|
|
1052
1038
|
ASSERT(function->is_compiled());
|
|
1053
1039
|
|
|
1054
1040
|
// Get the function and setup the context.
|
|
@@ -1063,9 +1049,9 @@ void MacroAssembler::InvokeFunction(JSFunction* function,
|
|
|
1063
1049
|
// code field in the function to allow recompilation to take effect
|
|
1064
1050
|
// without changing any of the call sites.
|
|
1065
1051
|
ldr(r3, FieldMemOperand(r1, JSFunction::kCodeEntryOffset));
|
|
1066
|
-
InvokeCode(r3, expected, actual, flag);
|
|
1052
|
+
InvokeCode(r3, expected, actual, flag, NullCallWrapper(), call_kind);
|
|
1067
1053
|
} else {
|
|
1068
|
-
InvokeCode(code, expected, actual, RelocInfo::CODE_TARGET, flag);
|
|
1054
|
+
InvokeCode(code, expected, actual, RelocInfo::CODE_TARGET, flag, call_kind);
|
|
1069
1055
|
}
|
|
1070
1056
|
}
|
|
1071
1057
|
|
|
@@ -1083,9 +1069,9 @@ void MacroAssembler::IsInstanceJSObjectType(Register map,
|
|
|
1083
1069
|
Register scratch,
|
|
1084
1070
|
Label* fail) {
|
|
1085
1071
|
ldrb(scratch, FieldMemOperand(map, Map::kInstanceTypeOffset));
|
|
1086
|
-
cmp(scratch, Operand(
|
|
1072
|
+
cmp(scratch, Operand(FIRST_NONCALLABLE_SPEC_OBJECT_TYPE));
|
|
1087
1073
|
b(lt, fail);
|
|
1088
|
-
cmp(scratch, Operand(
|
|
1074
|
+
cmp(scratch, Operand(LAST_NONCALLABLE_SPEC_OBJECT_TYPE));
|
|
1089
1075
|
b(gt, fail);
|
|
1090
1076
|
}
|
|
1091
1077
|
|
|
@@ -1116,7 +1102,13 @@ void MacroAssembler::DebugBreak() {
|
|
|
1116
1102
|
void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
1117
1103
|
HandlerType type) {
|
|
1118
1104
|
// Adjust this code if not the case.
|
|
1119
|
-
|
|
1105
|
+
STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
|
|
1106
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
|
|
1107
|
+
STATIC_ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize);
|
|
1108
|
+
STATIC_ASSERT(StackHandlerConstants::kContextOffset == 2 * kPointerSize);
|
|
1109
|
+
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 3 * kPointerSize);
|
|
1110
|
+
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
|
|
1111
|
+
|
|
1120
1112
|
// The pc (return address) is passed in register lr.
|
|
1121
1113
|
if (try_location == IN_JAVASCRIPT) {
|
|
1122
1114
|
if (type == TRY_CATCH_HANDLER) {
|
|
@@ -1124,14 +1116,10 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
|
1124
1116
|
} else {
|
|
1125
1117
|
mov(r3, Operand(StackHandler::TRY_FINALLY));
|
|
1126
1118
|
}
|
|
1127
|
-
|
|
1128
|
-
&& StackHandlerConstants::kFPOffset == 2 * kPointerSize
|
|
1129
|
-
&& StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
|
1130
|
-
stm(db_w, sp, r3.bit() | fp.bit() | lr.bit());
|
|
1119
|
+
stm(db_w, sp, r3.bit() | cp.bit() | fp.bit() | lr.bit());
|
|
1131
1120
|
// Save the current handler as the next handler.
|
|
1132
1121
|
mov(r3, Operand(ExternalReference(Isolate::k_handler_address, isolate())));
|
|
1133
1122
|
ldr(r1, MemOperand(r3));
|
|
1134
|
-
ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
1135
1123
|
push(r1);
|
|
1136
1124
|
// Link this handler as the new current one.
|
|
1137
1125
|
str(sp, MemOperand(r3));
|
|
@@ -1141,16 +1129,13 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
|
1141
1129
|
// The frame pointer does not point to a JS frame so we save NULL
|
|
1142
1130
|
// for fp. We expect the code throwing an exception to check fp
|
|
1143
1131
|
// before dereferencing it to restore the context.
|
|
1144
|
-
mov(
|
|
1145
|
-
mov(r6, Operand(
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
&& StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
|
1149
|
-
stm(db_w, sp, r6.bit() | ip.bit() | lr.bit());
|
|
1132
|
+
mov(r5, Operand(StackHandler::ENTRY)); // State.
|
|
1133
|
+
mov(r6, Operand(Smi::FromInt(0))); // Indicates no context.
|
|
1134
|
+
mov(r7, Operand(0, RelocInfo::NONE)); // NULL frame pointer.
|
|
1135
|
+
stm(db_w, sp, r5.bit() | r6.bit() | r7.bit() | lr.bit());
|
|
1150
1136
|
// Save the current handler as the next handler.
|
|
1151
1137
|
mov(r7, Operand(ExternalReference(Isolate::k_handler_address, isolate())));
|
|
1152
1138
|
ldr(r6, MemOperand(r7));
|
|
1153
|
-
ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
1154
1139
|
push(r6);
|
|
1155
1140
|
// Link this handler as the new current one.
|
|
1156
1141
|
str(sp, MemOperand(r7));
|
|
@@ -1159,7 +1144,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
|
1159
1144
|
|
|
1160
1145
|
|
|
1161
1146
|
void MacroAssembler::PopTryHandler() {
|
|
1162
|
-
|
|
1147
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
1163
1148
|
pop(r1);
|
|
1164
1149
|
mov(ip, Operand(ExternalReference(Isolate::k_handler_address, isolate())));
|
|
1165
1150
|
add(sp, sp, Operand(StackHandlerConstants::kSize - kPointerSize));
|
|
@@ -1168,39 +1153,40 @@ void MacroAssembler::PopTryHandler() {
|
|
|
1168
1153
|
|
|
1169
1154
|
|
|
1170
1155
|
void MacroAssembler::Throw(Register value) {
|
|
1156
|
+
// Adjust this code if not the case.
|
|
1157
|
+
STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
|
|
1158
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
|
|
1159
|
+
STATIC_ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize);
|
|
1160
|
+
STATIC_ASSERT(StackHandlerConstants::kContextOffset == 2 * kPointerSize);
|
|
1161
|
+
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 3 * kPointerSize);
|
|
1162
|
+
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
|
|
1171
1163
|
// r0 is expected to hold the exception.
|
|
1172
1164
|
if (!value.is(r0)) {
|
|
1173
1165
|
mov(r0, value);
|
|
1174
1166
|
}
|
|
1175
1167
|
|
|
1176
|
-
// Adjust this code if not the case.
|
|
1177
|
-
STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
|
|
1178
|
-
|
|
1179
1168
|
// Drop the sp to the top of the handler.
|
|
1180
1169
|
mov(r3, Operand(ExternalReference(Isolate::k_handler_address, isolate())));
|
|
1181
1170
|
ldr(sp, MemOperand(r3));
|
|
1182
1171
|
|
|
1183
|
-
// Restore the next handler
|
|
1184
|
-
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
1172
|
+
// Restore the next handler.
|
|
1185
1173
|
pop(r2);
|
|
1186
1174
|
str(r2, MemOperand(r3));
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
//
|
|
1192
|
-
//
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset), ne);
|
|
1175
|
+
|
|
1176
|
+
// Restore context and frame pointer, discard state (r3).
|
|
1177
|
+
ldm(ia_w, sp, r3.bit() | cp.bit() | fp.bit());
|
|
1178
|
+
|
|
1179
|
+
// If the handler is a JS frame, restore the context to the frame.
|
|
1180
|
+
// (r3 == ENTRY) == (fp == 0) == (cp == 0), so we could test any
|
|
1181
|
+
// of them.
|
|
1182
|
+
cmp(r3, Operand(StackHandler::ENTRY));
|
|
1183
|
+
str(cp, MemOperand(fp, StandardFrameConstants::kContextOffset), ne);
|
|
1184
|
+
|
|
1198
1185
|
#ifdef DEBUG
|
|
1199
1186
|
if (emit_debug_code()) {
|
|
1200
1187
|
mov(lr, Operand(pc));
|
|
1201
1188
|
}
|
|
1202
1189
|
#endif
|
|
1203
|
-
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
|
1204
1190
|
pop(pc);
|
|
1205
1191
|
}
|
|
1206
1192
|
|
|
@@ -1208,8 +1194,12 @@ void MacroAssembler::Throw(Register value) {
|
|
|
1208
1194
|
void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
|
|
1209
1195
|
Register value) {
|
|
1210
1196
|
// Adjust this code if not the case.
|
|
1211
|
-
STATIC_ASSERT(StackHandlerConstants::kSize ==
|
|
1212
|
-
|
|
1197
|
+
STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
|
|
1198
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
|
|
1199
|
+
STATIC_ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize);
|
|
1200
|
+
STATIC_ASSERT(StackHandlerConstants::kContextOffset == 2 * kPointerSize);
|
|
1201
|
+
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 3 * kPointerSize);
|
|
1202
|
+
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
|
|
1213
1203
|
// r0 is expected to hold the exception.
|
|
1214
1204
|
if (!value.is(r0)) {
|
|
1215
1205
|
mov(r0, value);
|
|
@@ -1234,7 +1224,6 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
|
|
|
1234
1224
|
bind(&done);
|
|
1235
1225
|
|
|
1236
1226
|
// Set the top handler address to next handler past the current ENTRY handler.
|
|
1237
|
-
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
1238
1227
|
pop(r2);
|
|
1239
1228
|
str(r2, MemOperand(r3));
|
|
1240
1229
|
|
|
@@ -1256,26 +1245,17 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
|
|
|
1256
1245
|
|
|
1257
1246
|
// Stack layout at this point. See also StackHandlerConstants.
|
|
1258
1247
|
// sp -> state (ENTRY)
|
|
1248
|
+
// cp
|
|
1259
1249
|
// fp
|
|
1260
1250
|
// lr
|
|
1261
1251
|
|
|
1262
|
-
//
|
|
1263
|
-
|
|
1264
|
-
ldm(ia_w, sp, r2.bit() | fp.bit()); // r2: discarded state.
|
|
1265
|
-
// Before returning we restore the context from the frame pointer if
|
|
1266
|
-
// not NULL. The frame pointer is NULL in the exception handler of a
|
|
1267
|
-
// JS entry frame.
|
|
1268
|
-
cmp(fp, Operand(0, RelocInfo::NONE));
|
|
1269
|
-
// Set cp to NULL if fp is NULL.
|
|
1270
|
-
mov(cp, Operand(0, RelocInfo::NONE), LeaveCC, eq);
|
|
1271
|
-
// Restore cp otherwise.
|
|
1272
|
-
ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset), ne);
|
|
1252
|
+
// Restore context and frame pointer, discard state (r2).
|
|
1253
|
+
ldm(ia_w, sp, r2.bit() | cp.bit() | fp.bit());
|
|
1273
1254
|
#ifdef DEBUG
|
|
1274
1255
|
if (emit_debug_code()) {
|
|
1275
1256
|
mov(lr, Operand(pc));
|
|
1276
1257
|
}
|
|
1277
1258
|
#endif
|
|
1278
|
-
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
|
1279
1259
|
pop(pc);
|
|
1280
1260
|
}
|
|
1281
1261
|
|
|
@@ -1357,6 +1337,100 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
|
|
|
1357
1337
|
}
|
|
1358
1338
|
|
|
1359
1339
|
|
|
1340
|
+
void MacroAssembler::LoadFromNumberDictionary(Label* miss,
|
|
1341
|
+
Register elements,
|
|
1342
|
+
Register key,
|
|
1343
|
+
Register result,
|
|
1344
|
+
Register t0,
|
|
1345
|
+
Register t1,
|
|
1346
|
+
Register t2) {
|
|
1347
|
+
// Register use:
|
|
1348
|
+
//
|
|
1349
|
+
// elements - holds the slow-case elements of the receiver on entry.
|
|
1350
|
+
// Unchanged unless 'result' is the same register.
|
|
1351
|
+
//
|
|
1352
|
+
// key - holds the smi key on entry.
|
|
1353
|
+
// Unchanged unless 'result' is the same register.
|
|
1354
|
+
//
|
|
1355
|
+
// result - holds the result on exit if the load succeeded.
|
|
1356
|
+
// Allowed to be the same as 'key' or 'result'.
|
|
1357
|
+
// Unchanged on bailout so 'key' or 'result' can be used
|
|
1358
|
+
// in further computation.
|
|
1359
|
+
//
|
|
1360
|
+
// Scratch registers:
|
|
1361
|
+
//
|
|
1362
|
+
// t0 - holds the untagged key on entry and holds the hash once computed.
|
|
1363
|
+
//
|
|
1364
|
+
// t1 - used to hold the capacity mask of the dictionary
|
|
1365
|
+
//
|
|
1366
|
+
// t2 - used for the index into the dictionary.
|
|
1367
|
+
Label done;
|
|
1368
|
+
|
|
1369
|
+
// Compute the hash code from the untagged key. This must be kept in sync
|
|
1370
|
+
// with ComputeIntegerHash in utils.h.
|
|
1371
|
+
//
|
|
1372
|
+
// hash = ~hash + (hash << 15);
|
|
1373
|
+
mvn(t1, Operand(t0));
|
|
1374
|
+
add(t0, t1, Operand(t0, LSL, 15));
|
|
1375
|
+
// hash = hash ^ (hash >> 12);
|
|
1376
|
+
eor(t0, t0, Operand(t0, LSR, 12));
|
|
1377
|
+
// hash = hash + (hash << 2);
|
|
1378
|
+
add(t0, t0, Operand(t0, LSL, 2));
|
|
1379
|
+
// hash = hash ^ (hash >> 4);
|
|
1380
|
+
eor(t0, t0, Operand(t0, LSR, 4));
|
|
1381
|
+
// hash = hash * 2057;
|
|
1382
|
+
mov(t1, Operand(2057));
|
|
1383
|
+
mul(t0, t0, t1);
|
|
1384
|
+
// hash = hash ^ (hash >> 16);
|
|
1385
|
+
eor(t0, t0, Operand(t0, LSR, 16));
|
|
1386
|
+
|
|
1387
|
+
// Compute the capacity mask.
|
|
1388
|
+
ldr(t1, FieldMemOperand(elements, NumberDictionary::kCapacityOffset));
|
|
1389
|
+
mov(t1, Operand(t1, ASR, kSmiTagSize)); // convert smi to int
|
|
1390
|
+
sub(t1, t1, Operand(1));
|
|
1391
|
+
|
|
1392
|
+
// Generate an unrolled loop that performs a few probes before giving up.
|
|
1393
|
+
static const int kProbes = 4;
|
|
1394
|
+
for (int i = 0; i < kProbes; i++) {
|
|
1395
|
+
// Use t2 for index calculations and keep the hash intact in t0.
|
|
1396
|
+
mov(t2, t0);
|
|
1397
|
+
// Compute the masked index: (hash + i + i * i) & mask.
|
|
1398
|
+
if (i > 0) {
|
|
1399
|
+
add(t2, t2, Operand(NumberDictionary::GetProbeOffset(i)));
|
|
1400
|
+
}
|
|
1401
|
+
and_(t2, t2, Operand(t1));
|
|
1402
|
+
|
|
1403
|
+
// Scale the index by multiplying by the element size.
|
|
1404
|
+
ASSERT(NumberDictionary::kEntrySize == 3);
|
|
1405
|
+
add(t2, t2, Operand(t2, LSL, 1)); // t2 = t2 * 3
|
|
1406
|
+
|
|
1407
|
+
// Check if the key is identical to the name.
|
|
1408
|
+
add(t2, elements, Operand(t2, LSL, kPointerSizeLog2));
|
|
1409
|
+
ldr(ip, FieldMemOperand(t2, NumberDictionary::kElementsStartOffset));
|
|
1410
|
+
cmp(key, Operand(ip));
|
|
1411
|
+
if (i != kProbes - 1) {
|
|
1412
|
+
b(eq, &done);
|
|
1413
|
+
} else {
|
|
1414
|
+
b(ne, miss);
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
bind(&done);
|
|
1419
|
+
// Check that the value is a normal property.
|
|
1420
|
+
// t2: elements + (index * kPointerSize)
|
|
1421
|
+
const int kDetailsOffset =
|
|
1422
|
+
NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
|
|
1423
|
+
ldr(t1, FieldMemOperand(t2, kDetailsOffset));
|
|
1424
|
+
tst(t1, Operand(Smi::FromInt(PropertyDetails::TypeField::mask())));
|
|
1425
|
+
b(ne, miss);
|
|
1426
|
+
|
|
1427
|
+
// Get the value at the masked, scaled index and return.
|
|
1428
|
+
const int kValueOffset =
|
|
1429
|
+
NumberDictionary::kElementsStartOffset + kPointerSize;
|
|
1430
|
+
ldr(result, FieldMemOperand(t2, kValueOffset));
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
|
|
1360
1434
|
void MacroAssembler::AllocateInNewSpace(int object_size,
|
|
1361
1435
|
Register result,
|
|
1362
1436
|
Register scratch1,
|
|
@@ -1676,6 +1750,16 @@ void MacroAssembler::CompareRoot(Register obj,
|
|
|
1676
1750
|
}
|
|
1677
1751
|
|
|
1678
1752
|
|
|
1753
|
+
void MacroAssembler::CheckFastElements(Register map,
|
|
1754
|
+
Register scratch,
|
|
1755
|
+
Label* fail) {
|
|
1756
|
+
STATIC_ASSERT(JSObject::FAST_ELEMENTS == 0);
|
|
1757
|
+
ldrb(scratch, FieldMemOperand(map, Map::kBitField2Offset));
|
|
1758
|
+
cmp(scratch, Operand(Map::kMaximumBitField2FastElementValue));
|
|
1759
|
+
b(hi, fail);
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
|
|
1679
1763
|
void MacroAssembler::CheckMap(Register obj,
|
|
1680
1764
|
Register scratch,
|
|
1681
1765
|
Handle<Map> map,
|
|
@@ -1772,7 +1856,7 @@ void MacroAssembler::TryGetFunctionPrototype(Register function,
|
|
|
1772
1856
|
|
|
1773
1857
|
void MacroAssembler::CallStub(CodeStub* stub, Condition cond) {
|
|
1774
1858
|
ASSERT(allow_stub_calls()); // Stub calls are not allowed in some stubs.
|
|
1775
|
-
Call(stub->GetCode(), RelocInfo::CODE_TARGET, cond);
|
|
1859
|
+
Call(stub->GetCode(), RelocInfo::CODE_TARGET, kNoASTId, cond);
|
|
1776
1860
|
}
|
|
1777
1861
|
|
|
1778
1862
|
|
|
@@ -1782,7 +1866,8 @@ MaybeObject* MacroAssembler::TryCallStub(CodeStub* stub, Condition cond) {
|
|
|
1782
1866
|
{ MaybeObject* maybe_result = stub->TryGetCode();
|
|
1783
1867
|
if (!maybe_result->ToObject(&result)) return maybe_result;
|
|
1784
1868
|
}
|
|
1785
|
-
|
|
1869
|
+
Handle<Code> code(Code::cast(result));
|
|
1870
|
+
Call(code, RelocInfo::CODE_TARGET, kNoASTId, cond);
|
|
1786
1871
|
return result;
|
|
1787
1872
|
}
|
|
1788
1873
|
|
|
@@ -2369,10 +2454,12 @@ void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id,
|
|
|
2369
2454
|
GetBuiltinEntry(r2, id);
|
|
2370
2455
|
if (flag == CALL_FUNCTION) {
|
|
2371
2456
|
call_wrapper.BeforeCall(CallSize(r2));
|
|
2457
|
+
SetCallKind(r5, CALL_AS_METHOD);
|
|
2372
2458
|
Call(r2);
|
|
2373
2459
|
call_wrapper.AfterCall();
|
|
2374
2460
|
} else {
|
|
2375
2461
|
ASSERT(flag == JUMP_FUNCTION);
|
|
2462
|
+
SetCallKind(r5, CALL_AS_METHOD);
|
|
2376
2463
|
Jump(r2);
|
|
2377
2464
|
}
|
|
2378
2465
|
}
|
|
@@ -2456,6 +2543,9 @@ void MacroAssembler::AssertFastElements(Register elements) {
|
|
|
2456
2543
|
LoadRoot(ip, Heap::kFixedArrayMapRootIndex);
|
|
2457
2544
|
cmp(elements, ip);
|
|
2458
2545
|
b(eq, &ok);
|
|
2546
|
+
LoadRoot(ip, Heap::kFixedDoubleArrayMapRootIndex);
|
|
2547
|
+
cmp(elements, ip);
|
|
2548
|
+
b(eq, &ok);
|
|
2459
2549
|
LoadRoot(ip, Heap::kFixedCOWArrayMapRootIndex);
|
|
2460
2550
|
cmp(elements, ip);
|
|
2461
2551
|
b(eq, &ok);
|
|
@@ -2518,12 +2608,9 @@ void MacroAssembler::Abort(const char* msg) {
|
|
|
2518
2608
|
void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
|
|
2519
2609
|
if (context_chain_length > 0) {
|
|
2520
2610
|
// Move up the chain of contexts to the context containing the slot.
|
|
2521
|
-
ldr(dst, MemOperand(cp, Context::SlotOffset(Context::
|
|
2522
|
-
// Load the function context (which is the incoming, outer context).
|
|
2523
|
-
ldr(dst, FieldMemOperand(dst, JSFunction::kContextOffset));
|
|
2611
|
+
ldr(dst, MemOperand(cp, Context::SlotOffset(Context::PREVIOUS_INDEX)));
|
|
2524
2612
|
for (int i = 1; i < context_chain_length; i++) {
|
|
2525
|
-
ldr(dst, MemOperand(dst, Context::SlotOffset(Context::
|
|
2526
|
-
ldr(dst, FieldMemOperand(dst, JSFunction::kContextOffset));
|
|
2613
|
+
ldr(dst, MemOperand(dst, Context::SlotOffset(Context::PREVIOUS_INDEX)));
|
|
2527
2614
|
}
|
|
2528
2615
|
} else {
|
|
2529
2616
|
// Slot is in the current function context. Move it into the
|
|
@@ -2531,17 +2618,6 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
|
|
|
2531
2618
|
// cannot be allowed to destroy the context in esi).
|
|
2532
2619
|
mov(dst, cp);
|
|
2533
2620
|
}
|
|
2534
|
-
|
|
2535
|
-
// We should not have found a 'with' context by walking the context chain
|
|
2536
|
-
// (i.e., the static scope chain and runtime context chain do not agree).
|
|
2537
|
-
// A variable occurring in such a scope should have slot type LOOKUP and
|
|
2538
|
-
// not CONTEXT.
|
|
2539
|
-
if (emit_debug_code()) {
|
|
2540
|
-
ldr(ip, MemOperand(dst, Context::SlotOffset(Context::FCONTEXT_INDEX)));
|
|
2541
|
-
cmp(dst, ip);
|
|
2542
|
-
Check(eq, "Yo dawg, I heard you liked function contexts "
|
|
2543
|
-
"so I put function contexts in all your contexts");
|
|
2544
|
-
}
|
|
2545
2621
|
}
|
|
2546
2622
|
|
|
2547
2623
|
|
|
@@ -2689,8 +2765,7 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first,
|
|
|
2689
2765
|
// Check that neither is a smi.
|
|
2690
2766
|
STATIC_ASSERT(kSmiTag == 0);
|
|
2691
2767
|
and_(scratch1, first, Operand(second));
|
|
2692
|
-
|
|
2693
|
-
b(eq, failure);
|
|
2768
|
+
JumpIfSmi(scratch1, failure);
|
|
2694
2769
|
JumpIfNonSmisNotBothSequentialAsciiStrings(first,
|
|
2695
2770
|
second,
|
|
2696
2771
|
scratch1,
|
|
@@ -3082,7 +3157,7 @@ void MacroAssembler::ClampDoubleToUint8(Register result_reg,
|
|
|
3082
3157
|
Label done;
|
|
3083
3158
|
Label in_bounds;
|
|
3084
3159
|
|
|
3085
|
-
|
|
3160
|
+
Vmov(temp_double_reg, 0.0);
|
|
3086
3161
|
VFPCompareAndSetFlags(input_reg, temp_double_reg);
|
|
3087
3162
|
b(gt, &above_zero);
|
|
3088
3163
|
|
|
@@ -3092,7 +3167,7 @@ void MacroAssembler::ClampDoubleToUint8(Register result_reg,
|
|
|
3092
3167
|
|
|
3093
3168
|
// Double value is >= 255, return 255.
|
|
3094
3169
|
bind(&above_zero);
|
|
3095
|
-
|
|
3170
|
+
Vmov(temp_double_reg, 255.0);
|
|
3096
3171
|
VFPCompareAndSetFlags(input_reg, temp_double_reg);
|
|
3097
3172
|
b(le, &in_bounds);
|
|
3098
3173
|
mov(result_reg, Operand(255));
|
|
@@ -3100,7 +3175,7 @@ void MacroAssembler::ClampDoubleToUint8(Register result_reg,
|
|
|
3100
3175
|
|
|
3101
3176
|
// In 0-255 range, round and truncate.
|
|
3102
3177
|
bind(&in_bounds);
|
|
3103
|
-
|
|
3178
|
+
Vmov(temp_double_reg, 0.5);
|
|
3104
3179
|
vadd(temp_double_reg, input_reg, temp_double_reg);
|
|
3105
3180
|
vcvt_u32_f64(s0, temp_double_reg);
|
|
3106
3181
|
vmov(result_reg, s0);
|