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
|
@@ -99,44 +99,11 @@ class MacroAssembler: public Assembler {
|
|
|
99
99
|
// macro assembler.
|
|
100
100
|
MacroAssembler(Isolate* isolate, void* buffer, int size);
|
|
101
101
|
|
|
102
|
-
// Arguments macros.
|
|
102
|
+
// Arguments macros.
|
|
103
103
|
#define COND_TYPED_ARGS Condition cond, Register r1, const Operand& r2
|
|
104
104
|
#define COND_ARGS cond, r1, r2
|
|
105
105
|
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
// Prototypes for functions with no target (eg Ret()).
|
|
109
|
-
#define DECLARE_NOTARGET_PROTOTYPE(Name) \
|
|
110
|
-
void Name(BranchDelaySlot bd = PROTECT); \
|
|
111
|
-
void Name(COND_TYPED_ARGS, BranchDelaySlot bd = PROTECT); \
|
|
112
|
-
inline void Name(BranchDelaySlot bd, COND_TYPED_ARGS) { \
|
|
113
|
-
Name(COND_ARGS, bd); \
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Prototypes for functions with a target.
|
|
117
|
-
|
|
118
|
-
// Cases when relocation may be needed.
|
|
119
|
-
#define DECLARE_RELOC_PROTOTYPE(Name, target_type) \
|
|
120
|
-
void Name(target_type target, \
|
|
121
|
-
RelocInfo::Mode rmode, \
|
|
122
|
-
BranchDelaySlot bd = PROTECT); \
|
|
123
|
-
inline void Name(BranchDelaySlot bd, \
|
|
124
|
-
target_type target, \
|
|
125
|
-
RelocInfo::Mode rmode) { \
|
|
126
|
-
Name(target, rmode, bd); \
|
|
127
|
-
} \
|
|
128
|
-
void Name(target_type target, \
|
|
129
|
-
RelocInfo::Mode rmode, \
|
|
130
|
-
COND_TYPED_ARGS, \
|
|
131
|
-
BranchDelaySlot bd = PROTECT); \
|
|
132
|
-
inline void Name(BranchDelaySlot bd, \
|
|
133
|
-
target_type target, \
|
|
134
|
-
RelocInfo::Mode rmode, \
|
|
135
|
-
COND_TYPED_ARGS) { \
|
|
136
|
-
Name(target, rmode, COND_ARGS, bd); \
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Cases when relocation is not needed.
|
|
106
|
+
// Cases when relocation is not needed.
|
|
140
107
|
#define DECLARE_NORELOC_PROTOTYPE(Name, target_type) \
|
|
141
108
|
void Name(target_type target, BranchDelaySlot bd = PROTECT); \
|
|
142
109
|
inline void Name(BranchDelaySlot bd, target_type target) { \
|
|
@@ -151,44 +118,44 @@ class MacroAssembler: public Assembler {
|
|
|
151
118
|
Name(target, COND_ARGS, bd); \
|
|
152
119
|
}
|
|
153
120
|
|
|
154
|
-
// Target prototypes.
|
|
155
|
-
|
|
156
|
-
#define DECLARE_JUMP_CALL_PROTOTYPES(Name) \
|
|
157
|
-
DECLARE_NORELOC_PROTOTYPE(Name, Register) \
|
|
158
|
-
DECLARE_NORELOC_PROTOTYPE(Name, const Operand&) \
|
|
159
|
-
DECLARE_RELOC_PROTOTYPE(Name, byte*) \
|
|
160
|
-
DECLARE_RELOC_PROTOTYPE(Name, Handle<Code>)
|
|
161
|
-
|
|
162
121
|
#define DECLARE_BRANCH_PROTOTYPES(Name) \
|
|
163
122
|
DECLARE_NORELOC_PROTOTYPE(Name, Label*) \
|
|
164
123
|
DECLARE_NORELOC_PROTOTYPE(Name, int16_t)
|
|
165
124
|
|
|
125
|
+
DECLARE_BRANCH_PROTOTYPES(Branch)
|
|
126
|
+
DECLARE_BRANCH_PROTOTYPES(BranchAndLink)
|
|
166
127
|
|
|
167
|
-
|
|
168
|
-
DECLARE_JUMP_CALL_PROTOTYPES(Call)
|
|
169
|
-
|
|
170
|
-
DECLARE_BRANCH_PROTOTYPES(Branch)
|
|
171
|
-
DECLARE_BRANCH_PROTOTYPES(BranchAndLink)
|
|
172
|
-
|
|
173
|
-
DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
174
|
-
|
|
128
|
+
#undef DECLARE_BRANCH_PROTOTYPES
|
|
175
129
|
#undef COND_TYPED_ARGS
|
|
176
130
|
#undef COND_ARGS
|
|
177
|
-
#undef DECLARE_NOTARGET_PROTOTYPE
|
|
178
|
-
#undef DECLARE_NORELOC_PROTOTYPE
|
|
179
|
-
#undef DECLARE_RELOC_PROTOTYPE
|
|
180
|
-
#undef DECLARE_JUMP_CALL_PROTOTYPES
|
|
181
|
-
#undef DECLARE_BRANCH_PROTOTYPES
|
|
182
131
|
|
|
183
|
-
void CallWithAstId(Handle<Code> code,
|
|
184
|
-
RelocInfo::Mode rmode,
|
|
185
|
-
unsigned ast_id,
|
|
186
|
-
Condition cond = al,
|
|
187
|
-
Register r1 = zero_reg,
|
|
188
|
-
const Operand& r2 = Operand(zero_reg));
|
|
189
132
|
|
|
190
|
-
|
|
191
|
-
|
|
133
|
+
// Jump, Call, and Ret pseudo instructions implementing inter-working.
|
|
134
|
+
#define COND_ARGS Condition cond = al, Register rs = zero_reg, \
|
|
135
|
+
const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT
|
|
136
|
+
|
|
137
|
+
void Jump(Register target, COND_ARGS);
|
|
138
|
+
void Jump(intptr_t target, RelocInfo::Mode rmode, COND_ARGS);
|
|
139
|
+
void Jump(Address target, RelocInfo::Mode rmode, COND_ARGS);
|
|
140
|
+
void Jump(Handle<Code> code, RelocInfo::Mode rmode, COND_ARGS);
|
|
141
|
+
int CallSize(Register target, COND_ARGS);
|
|
142
|
+
void Call(Register target, COND_ARGS);
|
|
143
|
+
int CallSize(Address target, RelocInfo::Mode rmode, COND_ARGS);
|
|
144
|
+
void Call(Address target, RelocInfo::Mode rmode, COND_ARGS);
|
|
145
|
+
int CallSize(Handle<Code> code,
|
|
146
|
+
RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
|
|
147
|
+
unsigned ast_id = kNoASTId,
|
|
148
|
+
COND_ARGS);
|
|
149
|
+
void Call(Handle<Code> code,
|
|
150
|
+
RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
|
|
151
|
+
unsigned ast_id = kNoASTId,
|
|
152
|
+
COND_ARGS);
|
|
153
|
+
void Ret(COND_ARGS);
|
|
154
|
+
inline void Ret(BranchDelaySlot bd) {
|
|
155
|
+
Ret(al, zero_reg, Operand(zero_reg), bd);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
#undef COND_ARGS
|
|
192
159
|
|
|
193
160
|
// Emit code to discard a non-negative number of pointer-sized elements
|
|
194
161
|
// from the stack, clobbering only the sp register.
|
|
@@ -299,6 +266,16 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
299
266
|
Register scratch,
|
|
300
267
|
Label* miss);
|
|
301
268
|
|
|
269
|
+
|
|
270
|
+
void LoadFromNumberDictionary(Label* miss,
|
|
271
|
+
Register elements,
|
|
272
|
+
Register key,
|
|
273
|
+
Register result,
|
|
274
|
+
Register reg0,
|
|
275
|
+
Register reg1,
|
|
276
|
+
Register reg2);
|
|
277
|
+
|
|
278
|
+
|
|
302
279
|
inline void MarkCode(NopMarkerTypes type) {
|
|
303
280
|
nop(type);
|
|
304
281
|
}
|
|
@@ -459,9 +436,6 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
459
436
|
li(dst, Operand(value), gen2instr);
|
|
460
437
|
}
|
|
461
438
|
|
|
462
|
-
// Exception-generating instructions and debugging support.
|
|
463
|
-
void stop(const char* msg);
|
|
464
|
-
|
|
465
439
|
// Push multiple registers on the stack.
|
|
466
440
|
// Registers are saved in numerical order, with higher numbered registers
|
|
467
441
|
// saved in higher memory addresses.
|
|
@@ -474,6 +448,9 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
474
448
|
sw(src, MemOperand(sp, 0));
|
|
475
449
|
}
|
|
476
450
|
|
|
451
|
+
// Push a handle.
|
|
452
|
+
void Push(Handle<Object> handle);
|
|
453
|
+
|
|
477
454
|
// Push two registers. Pushes leftmost register first (to highest address).
|
|
478
455
|
void Push(Register src1, Register src2) {
|
|
479
456
|
Subu(sp, sp, Operand(2 * kPointerSize));
|
|
@@ -547,12 +524,12 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
547
524
|
void Ext(Register rt, Register rs, uint16_t pos, uint16_t size);
|
|
548
525
|
|
|
549
526
|
// Convert unsigned word to double.
|
|
550
|
-
void Cvt_d_uw(FPURegister fd, FPURegister fs);
|
|
551
|
-
void Cvt_d_uw(FPURegister fd, Register rs);
|
|
527
|
+
void Cvt_d_uw(FPURegister fd, FPURegister fs, FPURegister scratch);
|
|
528
|
+
void Cvt_d_uw(FPURegister fd, Register rs, FPURegister scratch);
|
|
552
529
|
|
|
553
530
|
// Convert double to unsigned word.
|
|
554
|
-
void Trunc_uw_d(FPURegister fd, FPURegister fs);
|
|
555
|
-
void Trunc_uw_d(FPURegister fd, Register rs);
|
|
531
|
+
void Trunc_uw_d(FPURegister fd, FPURegister fs, FPURegister scratch);
|
|
532
|
+
void Trunc_uw_d(FPURegister fd, Register rs, FPURegister scratch);
|
|
556
533
|
|
|
557
534
|
// Convert the HeapNumber pointed to by source to a 32bits signed integer
|
|
558
535
|
// dest. If the HeapNumber does not fit into a 32bits signed integer branch
|
|
@@ -576,6 +553,16 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
576
553
|
Register input_low,
|
|
577
554
|
Register scratch);
|
|
578
555
|
|
|
556
|
+
// Performs a truncating conversion of a floating point number as used by
|
|
557
|
+
// the JS bitwise operations. See ECMA-262 9.5: ToInt32.
|
|
558
|
+
// Exits with 'result' holding the answer and all other registers clobbered.
|
|
559
|
+
void EmitECMATruncate(Register result,
|
|
560
|
+
FPURegister double_input,
|
|
561
|
+
FPURegister single_scratch,
|
|
562
|
+
Register scratch,
|
|
563
|
+
Register scratch2,
|
|
564
|
+
Register scratch3);
|
|
565
|
+
|
|
579
566
|
// -------------------------------------------------------------------------
|
|
580
567
|
// Activation frames.
|
|
581
568
|
|
|
@@ -624,27 +611,28 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
624
611
|
const ParameterCount& expected,
|
|
625
612
|
const ParameterCount& actual,
|
|
626
613
|
InvokeFlag flag,
|
|
627
|
-
const CallWrapper& call_wrapper
|
|
628
|
-
CallKind call_kind
|
|
614
|
+
const CallWrapper& call_wrapper,
|
|
615
|
+
CallKind call_kind);
|
|
629
616
|
|
|
630
617
|
void InvokeCode(Handle<Code> code,
|
|
631
618
|
const ParameterCount& expected,
|
|
632
619
|
const ParameterCount& actual,
|
|
633
620
|
RelocInfo::Mode rmode,
|
|
634
621
|
InvokeFlag flag,
|
|
635
|
-
CallKind call_kind
|
|
622
|
+
CallKind call_kind);
|
|
636
623
|
|
|
637
624
|
// Invoke the JavaScript function in the given register. Changes the
|
|
638
625
|
// current context to the context in the function before invoking.
|
|
639
626
|
void InvokeFunction(Register function,
|
|
640
627
|
const ParameterCount& actual,
|
|
641
628
|
InvokeFlag flag,
|
|
642
|
-
const CallWrapper& call_wrapper
|
|
643
|
-
CallKind call_kind
|
|
629
|
+
const CallWrapper& call_wrapper,
|
|
630
|
+
CallKind call_kind);
|
|
644
631
|
|
|
645
632
|
void InvokeFunction(JSFunction* function,
|
|
646
633
|
const ParameterCount& actual,
|
|
647
|
-
InvokeFlag flag
|
|
634
|
+
InvokeFlag flag,
|
|
635
|
+
CallKind call_kind);
|
|
648
636
|
|
|
649
637
|
|
|
650
638
|
void IsObjectJSObjectType(Register heap_object,
|
|
@@ -715,6 +703,12 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
715
703
|
Register map,
|
|
716
704
|
Register type_reg);
|
|
717
705
|
|
|
706
|
+
// Check if a map for a JSObject indicates that the object has fast elements.
|
|
707
|
+
// Jump to the specified label if it does not.
|
|
708
|
+
void CheckFastElements(Register map,
|
|
709
|
+
Register scratch,
|
|
710
|
+
Label* fail);
|
|
711
|
+
|
|
718
712
|
// Check if the map of an object is equal to a specified map (either
|
|
719
713
|
// given directly or as an index into the root list) and branch to
|
|
720
714
|
// label if not. Skip the smi check if not required (object is known
|
|
@@ -1088,16 +1082,25 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
1088
1082
|
Register scratch,
|
|
1089
1083
|
int num_arguments);
|
|
1090
1084
|
|
|
1091
|
-
void
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
void
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1085
|
+
void BranchShort(int16_t offset, BranchDelaySlot bdslot = PROTECT);
|
|
1086
|
+
void BranchShort(int16_t offset, Condition cond, Register rs,
|
|
1087
|
+
const Operand& rt,
|
|
1088
|
+
BranchDelaySlot bdslot = PROTECT);
|
|
1089
|
+
void BranchShort(Label* L, BranchDelaySlot bdslot = PROTECT);
|
|
1090
|
+
void BranchShort(Label* L, Condition cond, Register rs,
|
|
1091
|
+
const Operand& rt,
|
|
1092
|
+
BranchDelaySlot bdslot = PROTECT);
|
|
1093
|
+
void BranchAndLinkShort(int16_t offset, BranchDelaySlot bdslot = PROTECT);
|
|
1094
|
+
void BranchAndLinkShort(int16_t offset, Condition cond, Register rs,
|
|
1095
|
+
const Operand& rt,
|
|
1096
|
+
BranchDelaySlot bdslot = PROTECT);
|
|
1097
|
+
void BranchAndLinkShort(Label* L, BranchDelaySlot bdslot = PROTECT);
|
|
1098
|
+
void BranchAndLinkShort(Label* L, Condition cond, Register rs,
|
|
1099
|
+
const Operand& rt,
|
|
1100
|
+
BranchDelaySlot bdslot = PROTECT);
|
|
1101
|
+
void J(Label* L, BranchDelaySlot bdslot);
|
|
1102
|
+
void Jr(Label* L, BranchDelaySlot bdslot);
|
|
1103
|
+
void Jalr(Label* L, BranchDelaySlot bdslot);
|
|
1101
1104
|
|
|
1102
1105
|
// Helper functions for generating invokes.
|
|
1103
1106
|
void InvokePrologue(const ParameterCount& expected,
|
|
@@ -1106,8 +1109,8 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
1106
1109
|
Register code_reg,
|
|
1107
1110
|
Label* done,
|
|
1108
1111
|
InvokeFlag flag,
|
|
1109
|
-
const CallWrapper& call_wrapper
|
|
1110
|
-
CallKind call_kind
|
|
1112
|
+
const CallWrapper& call_wrapper,
|
|
1113
|
+
CallKind call_kind);
|
|
1111
1114
|
|
|
1112
1115
|
// Get the code for the given builtin. Returns if able to resolve
|
|
1113
1116
|
// the function in the 'resolved' flag.
|
|
@@ -1128,6 +1131,8 @@ DECLARE_NOTARGET_PROTOTYPE(Ret)
|
|
|
1128
1131
|
MemOperand SafepointRegisterSlot(Register reg);
|
|
1129
1132
|
MemOperand SafepointRegistersAndDoublesSlot(Register reg);
|
|
1130
1133
|
|
|
1134
|
+
bool UseAbsoluteCodePointers();
|
|
1135
|
+
|
|
1131
1136
|
bool generating_stub_;
|
|
1132
1137
|
bool allow_stub_calls_;
|
|
1133
1138
|
// This handle will be patched with the code object on installation.
|
|
@@ -179,7 +179,7 @@ void RegExpMacroAssemblerMIPS::Backtrack() {
|
|
|
179
179
|
// Pop Code* offset from backtrack stack, add Code* and jump to location.
|
|
180
180
|
Pop(a0);
|
|
181
181
|
__ Addu(a0, a0, code_pointer());
|
|
182
|
-
__ Jump(
|
|
182
|
+
__ Jump(a0);
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
|
|
@@ -1036,12 +1036,12 @@ int RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address,
|
|
|
1036
1036
|
}
|
|
1037
1037
|
|
|
1038
1038
|
// Prepare for possible GC.
|
|
1039
|
-
HandleScope handles;
|
|
1039
|
+
HandleScope handles(isolate);
|
|
1040
1040
|
Handle<Code> code_handle(re_code);
|
|
1041
1041
|
|
|
1042
1042
|
Handle<String> subject(frame_entry<String*>(re_frame, kInputString));
|
|
1043
1043
|
// Current string.
|
|
1044
|
-
bool is_ascii = subject->
|
|
1044
|
+
bool is_ascii = subject->IsAsciiRepresentationUnderneath();
|
|
1045
1045
|
|
|
1046
1046
|
ASSERT(re_code->instruction_start() <= *return_address);
|
|
1047
1047
|
ASSERT(*return_address <=
|
|
@@ -1050,7 +1050,7 @@ int RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address,
|
|
|
1050
1050
|
MaybeObject* result = Execution::HandleStackGuardInterrupt();
|
|
1051
1051
|
|
|
1052
1052
|
if (*code_handle != re_code) { // Return address no longer valid.
|
|
1053
|
-
int delta =
|
|
1053
|
+
int delta = code_handle->address() - re_code->address();
|
|
1054
1054
|
// Overwrite the return address on the stack.
|
|
1055
1055
|
*return_address += delta;
|
|
1056
1056
|
}
|
|
@@ -1059,8 +1059,20 @@ int RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address,
|
|
|
1059
1059
|
return EXCEPTION;
|
|
1060
1060
|
}
|
|
1061
1061
|
|
|
1062
|
+
Handle<String> subject_tmp = subject;
|
|
1063
|
+
int slice_offset = 0;
|
|
1064
|
+
|
|
1065
|
+
// Extract the underlying string and the slice offset.
|
|
1066
|
+
if (StringShape(*subject_tmp).IsCons()) {
|
|
1067
|
+
subject_tmp = Handle<String>(ConsString::cast(*subject_tmp)->first());
|
|
1068
|
+
} else if (StringShape(*subject_tmp).IsSliced()) {
|
|
1069
|
+
SlicedString* slice = SlicedString::cast(*subject_tmp);
|
|
1070
|
+
subject_tmp = Handle<String>(slice->parent());
|
|
1071
|
+
slice_offset = slice->offset();
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1062
1074
|
// String might have changed.
|
|
1063
|
-
if (
|
|
1075
|
+
if (subject_tmp->IsAsciiRepresentation() != is_ascii) {
|
|
1064
1076
|
// If we changed between an ASCII and an UC16 string, the specialized
|
|
1065
1077
|
// code cannot be used, and we need to restart regexp matching from
|
|
1066
1078
|
// scratch (including, potentially, compiling a new version of the code).
|
|
@@ -1071,8 +1083,8 @@ int RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address,
|
|
|
1071
1083
|
// be a sequential or external string with the same content.
|
|
1072
1084
|
// Update the start and end pointers in the stack frame to the current
|
|
1073
1085
|
// location (whether it has actually moved or not).
|
|
1074
|
-
ASSERT(StringShape(*
|
|
1075
|
-
StringShape(*
|
|
1086
|
+
ASSERT(StringShape(*subject_tmp).IsSequential() ||
|
|
1087
|
+
StringShape(*subject_tmp).IsExternal());
|
|
1076
1088
|
|
|
1077
1089
|
// The original start address of the characters to match.
|
|
1078
1090
|
const byte* start_address = frame_entry<const byte*>(re_frame, kInputStart);
|
|
@@ -1080,13 +1092,14 @@ int RegExpMacroAssemblerMIPS::CheckStackGuardState(Address* return_address,
|
|
|
1080
1092
|
// Find the current start address of the same character at the current string
|
|
1081
1093
|
// position.
|
|
1082
1094
|
int start_index = frame_entry<int>(re_frame, kStartIndex);
|
|
1083
|
-
const byte* new_address = StringCharacterPosition(*
|
|
1095
|
+
const byte* new_address = StringCharacterPosition(*subject_tmp,
|
|
1096
|
+
start_index + slice_offset);
|
|
1084
1097
|
|
|
1085
1098
|
if (start_address != new_address) {
|
|
1086
1099
|
// If there is a difference, update the object pointer and start and end
|
|
1087
1100
|
// addresses in the RegExp stack frame to match the new value.
|
|
1088
1101
|
const byte* end_address = frame_entry<const byte* >(re_frame, kInputEnd);
|
|
1089
|
-
int byte_length = end_address - start_address;
|
|
1102
|
+
int byte_length = static_cast<int>(end_address - start_address);
|
|
1090
1103
|
frame_entry<const String*>(re_frame, kInputString) = *subject;
|
|
1091
1104
|
frame_entry<const byte*>(re_frame, kInputStart) = new_address;
|
|
1092
1105
|
frame_entry<const byte*>(re_frame, kInputEnd) = new_address + byte_length;
|
|
@@ -1238,7 +1251,7 @@ void RegExpCEntryStub::Generate(MacroAssembler* masm_) {
|
|
|
1238
1251
|
__ Call(t9);
|
|
1239
1252
|
__ lw(ra, MemOperand(sp, 0));
|
|
1240
1253
|
__ Addu(sp, sp, Operand(stack_alignment));
|
|
1241
|
-
__ Jump(
|
|
1254
|
+
__ Jump(ra);
|
|
1242
1255
|
}
|
|
1243
1256
|
|
|
1244
1257
|
|
|
@@ -29,6 +29,12 @@
|
|
|
29
29
|
#ifndef V8_MIPS_REGEXP_MACRO_ASSEMBLER_MIPS_H_
|
|
30
30
|
#define V8_MIPS_REGEXP_MACRO_ASSEMBLER_MIPS_H_
|
|
31
31
|
|
|
32
|
+
#include "mips/assembler-mips.h"
|
|
33
|
+
#include "mips/assembler-mips-inl.h"
|
|
34
|
+
#include "macro-assembler.h"
|
|
35
|
+
#include "code.h"
|
|
36
|
+
#include "mips/macro-assembler-mips.h"
|
|
37
|
+
|
|
32
38
|
namespace v8 {
|
|
33
39
|
namespace internal {
|
|
34
40
|
|
|
@@ -249,4 +255,3 @@ class RegExpMacroAssemblerMIPS: public NativeRegExpMacroAssembler {
|
|
|
249
255
|
}} // namespace v8::internal
|
|
250
256
|
|
|
251
257
|
#endif // V8_MIPS_REGEXP_MACRO_ASSEMBLER_MIPS_H_
|
|
252
|
-
|
|
@@ -126,16 +126,29 @@ static void InitializeCoverage() {
|
|
|
126
126
|
|
|
127
127
|
|
|
128
128
|
void MipsDebugger::Stop(Instruction* instr) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
// Get the stop code.
|
|
130
|
+
uint32_t code = instr->Bits(25, 6);
|
|
131
|
+
// Retrieve the encoded address, which comes just after this stop.
|
|
132
|
+
char** msg_address =
|
|
133
|
+
reinterpret_cast<char**>(sim_->get_pc() + Instr::kInstrSize);
|
|
134
|
+
char* msg = *msg_address;
|
|
135
|
+
ASSERT(msg != NULL);
|
|
136
|
+
|
|
137
|
+
// Update this stop description.
|
|
138
|
+
if (!watched_stops[code].desc) {
|
|
139
|
+
watched_stops[code].desc = msg;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (strlen(msg) > 0) {
|
|
132
143
|
if (coverage_log != NULL) {
|
|
133
144
|
fprintf(coverage_log, "%s\n", str);
|
|
134
145
|
fflush(coverage_log);
|
|
135
146
|
}
|
|
136
|
-
|
|
147
|
+
// Overwrite the instruction and address with nops.
|
|
148
|
+
instr->SetInstructionBits(kNopInstr);
|
|
149
|
+
reinterpret_cast<Instr*>(msg_address)->SetInstructionBits(kNopInstr);
|
|
137
150
|
}
|
|
138
|
-
sim_->set_pc(sim_->get_pc() + Instruction::
|
|
151
|
+
sim_->set_pc(sim_->get_pc() + 2 * Instruction::kInstructionSize);
|
|
139
152
|
}
|
|
140
153
|
|
|
141
154
|
|
|
@@ -147,9 +160,17 @@ static void InitializeCoverage() {}
|
|
|
147
160
|
|
|
148
161
|
|
|
149
162
|
void MipsDebugger::Stop(Instruction* instr) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
163
|
+
// Get the stop code.
|
|
164
|
+
uint32_t code = instr->Bits(25, 6);
|
|
165
|
+
// Retrieve the encoded address, which comes just after this stop.
|
|
166
|
+
char* msg = *reinterpret_cast<char**>(sim_->get_pc() +
|
|
167
|
+
Instruction::kInstrSize);
|
|
168
|
+
// Update this stop description.
|
|
169
|
+
if (!sim_->watched_stops[code].desc) {
|
|
170
|
+
sim_->watched_stops[code].desc = msg;
|
|
171
|
+
}
|
|
172
|
+
PrintF("Simulator hit %s (%u)\n", msg, code);
|
|
173
|
+
sim_->set_pc(sim_->get_pc() + 2 * Instruction::kInstrSize);
|
|
153
174
|
Debug();
|
|
154
175
|
}
|
|
155
176
|
#endif // GENERATED_CODE_COVERAGE
|
|
@@ -585,8 +606,67 @@ void MipsDebugger::Debug() {
|
|
|
585
606
|
}
|
|
586
607
|
} else if (strcmp(cmd, "flags") == 0) {
|
|
587
608
|
PrintF("No flags on MIPS !\n");
|
|
588
|
-
} else if (strcmp(cmd, "
|
|
589
|
-
|
|
609
|
+
} else if (strcmp(cmd, "stop") == 0) {
|
|
610
|
+
int32_t value;
|
|
611
|
+
intptr_t stop_pc = sim_->get_pc() -
|
|
612
|
+
2 * Instruction::kInstrSize;
|
|
613
|
+
Instruction* stop_instr = reinterpret_cast<Instruction*>(stop_pc);
|
|
614
|
+
Instruction* msg_address =
|
|
615
|
+
reinterpret_cast<Instruction*>(stop_pc +
|
|
616
|
+
Instruction::kInstrSize);
|
|
617
|
+
if ((argc == 2) && (strcmp(arg1, "unstop") == 0)) {
|
|
618
|
+
// Remove the current stop.
|
|
619
|
+
if (sim_->IsStopInstruction(stop_instr)) {
|
|
620
|
+
stop_instr->SetInstructionBits(kNopInstr);
|
|
621
|
+
msg_address->SetInstructionBits(kNopInstr);
|
|
622
|
+
} else {
|
|
623
|
+
PrintF("Not at debugger stop.\n");
|
|
624
|
+
}
|
|
625
|
+
} else if (argc == 3) {
|
|
626
|
+
// Print information about all/the specified breakpoint(s).
|
|
627
|
+
if (strcmp(arg1, "info") == 0) {
|
|
628
|
+
if (strcmp(arg2, "all") == 0) {
|
|
629
|
+
PrintF("Stop information:\n");
|
|
630
|
+
for (uint32_t i = kMaxWatchpointCode + 1;
|
|
631
|
+
i <= kMaxStopCode;
|
|
632
|
+
i++) {
|
|
633
|
+
sim_->PrintStopInfo(i);
|
|
634
|
+
}
|
|
635
|
+
} else if (GetValue(arg2, &value)) {
|
|
636
|
+
sim_->PrintStopInfo(value);
|
|
637
|
+
} else {
|
|
638
|
+
PrintF("Unrecognized argument.\n");
|
|
639
|
+
}
|
|
640
|
+
} else if (strcmp(arg1, "enable") == 0) {
|
|
641
|
+
// Enable all/the specified breakpoint(s).
|
|
642
|
+
if (strcmp(arg2, "all") == 0) {
|
|
643
|
+
for (uint32_t i = kMaxWatchpointCode + 1;
|
|
644
|
+
i <= kMaxStopCode;
|
|
645
|
+
i++) {
|
|
646
|
+
sim_->EnableStop(i);
|
|
647
|
+
}
|
|
648
|
+
} else if (GetValue(arg2, &value)) {
|
|
649
|
+
sim_->EnableStop(value);
|
|
650
|
+
} else {
|
|
651
|
+
PrintF("Unrecognized argument.\n");
|
|
652
|
+
}
|
|
653
|
+
} else if (strcmp(arg1, "disable") == 0) {
|
|
654
|
+
// Disable all/the specified breakpoint(s).
|
|
655
|
+
if (strcmp(arg2, "all") == 0) {
|
|
656
|
+
for (uint32_t i = kMaxWatchpointCode + 1;
|
|
657
|
+
i <= kMaxStopCode;
|
|
658
|
+
i++) {
|
|
659
|
+
sim_->DisableStop(i);
|
|
660
|
+
}
|
|
661
|
+
} else if (GetValue(arg2, &value)) {
|
|
662
|
+
sim_->DisableStop(value);
|
|
663
|
+
} else {
|
|
664
|
+
PrintF("Unrecognized argument.\n");
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
} else {
|
|
668
|
+
PrintF("Wrong usage. Use help command for more information.\n");
|
|
669
|
+
}
|
|
590
670
|
} else if ((strcmp(cmd, "stat") == 0) || (strcmp(cmd, "st") == 0)) {
|
|
591
671
|
// Print registers and disassemble.
|
|
592
672
|
PrintAllRegs();
|
|
@@ -652,9 +732,26 @@ void MipsDebugger::Debug() {
|
|
|
652
732
|
PrintF(" set a break point on the address\n");
|
|
653
733
|
PrintF("del\n");
|
|
654
734
|
PrintF(" delete the breakpoint\n");
|
|
655
|
-
PrintF("
|
|
656
|
-
PrintF("
|
|
657
|
-
PrintF("
|
|
735
|
+
PrintF("stop feature:\n");
|
|
736
|
+
PrintF(" Description:\n");
|
|
737
|
+
PrintF(" Stops are debug instructions inserted by\n");
|
|
738
|
+
PrintF(" the Assembler::stop() function.\n");
|
|
739
|
+
PrintF(" When hitting a stop, the Simulator will\n");
|
|
740
|
+
PrintF(" stop and and give control to the Debugger.\n");
|
|
741
|
+
PrintF(" All stop codes are watched:\n");
|
|
742
|
+
PrintF(" - They can be enabled / disabled: the Simulator\n");
|
|
743
|
+
PrintF(" will / won't stop when hitting them.\n");
|
|
744
|
+
PrintF(" - The Simulator keeps track of how many times they \n");
|
|
745
|
+
PrintF(" are met. (See the info command.) Going over a\n");
|
|
746
|
+
PrintF(" disabled stop still increases its counter. \n");
|
|
747
|
+
PrintF(" Commands:\n");
|
|
748
|
+
PrintF(" stop info all/<code> : print infos about number <code>\n");
|
|
749
|
+
PrintF(" or all stop(s).\n");
|
|
750
|
+
PrintF(" stop enable/disable all/<code> : enables / disables\n");
|
|
751
|
+
PrintF(" all or number <code> stop(s)\n");
|
|
752
|
+
PrintF(" stop unstop\n");
|
|
753
|
+
PrintF(" ignore the stop instruction at the current location\n");
|
|
754
|
+
PrintF(" from now on\n");
|
|
658
755
|
} else {
|
|
659
756
|
PrintF("Unknown command: %s\n", cmd);
|
|
660
757
|
}
|
|
@@ -1062,15 +1159,30 @@ bool Simulator::test_fcsr_bit(uint32_t cc) {
|
|
|
1062
1159
|
// Sets the rounding error codes in FCSR based on the result of the rounding.
|
|
1063
1160
|
// Returns true if the operation was invalid.
|
|
1064
1161
|
bool Simulator::set_fcsr_round_error(double original, double rounded) {
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
set_fcsr_bit(
|
|
1069
|
-
|
|
1070
|
-
} else if (original != static_cast<double>(rounded)) {
|
|
1071
|
-
set_fcsr_bit(2, true); // Inexact.
|
|
1162
|
+
bool ret = false;
|
|
1163
|
+
|
|
1164
|
+
if (!isfinite(original) || !isfinite(rounded)) {
|
|
1165
|
+
set_fcsr_bit(kFCSRInvalidOpFlagBit, true);
|
|
1166
|
+
ret = true;
|
|
1072
1167
|
}
|
|
1073
|
-
|
|
1168
|
+
|
|
1169
|
+
if (original != rounded) {
|
|
1170
|
+
set_fcsr_bit(kFCSRInexactFlagBit, true);
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
if (rounded < DBL_MIN && rounded > -DBL_MIN && rounded != 0) {
|
|
1174
|
+
set_fcsr_bit(kFCSRUnderflowFlagBit, true);
|
|
1175
|
+
ret = true;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
if (rounded > INT_MAX || rounded < INT_MIN) {
|
|
1179
|
+
set_fcsr_bit(kFCSROverflowFlagBit, true);
|
|
1180
|
+
// The reference is not really clear but it seems this is required:
|
|
1181
|
+
set_fcsr_bit(kFCSRInvalidOpFlagBit, true);
|
|
1182
|
+
ret = true;
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
return ret;
|
|
1074
1186
|
}
|
|
1075
1187
|
|
|
1076
1188
|
|
|
@@ -1288,7 +1400,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
|
|
1288
1400
|
// the break_ instruction, or several variants of traps. All
|
|
1289
1401
|
// Are "SPECIAL" class opcode, and are distinuished by function.
|
|
1290
1402
|
int32_t func = instr->FunctionFieldRaw();
|
|
1291
|
-
|
|
1403
|
+
uint32_t code = (func == BREAK) ? instr->Bits(25, 6) : -1;
|
|
1292
1404
|
|
|
1293
1405
|
// We first check if we met a call_rt_redirected.
|
|
1294
1406
|
if (instr->InstructionBits() == rtCallRedirInstr) {
|
|
@@ -1297,20 +1409,11 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
|
|
1297
1409
|
int32_t arg1 = get_register(a1);
|
|
1298
1410
|
int32_t arg2 = get_register(a2);
|
|
1299
1411
|
int32_t arg3 = get_register(a3);
|
|
1300
|
-
int32_t arg4 = 0;
|
|
1301
|
-
int32_t arg5 = 0;
|
|
1302
1412
|
|
|
1303
|
-
// Need to check if sp is valid before assigning arg4, arg5.
|
|
1304
|
-
// This is a fix for cctest test-api/CatchStackOverflow which causes
|
|
1305
|
-
// the stack to overflow. For some reason arm doesn't need this
|
|
1306
|
-
// stack check here.
|
|
1307
1413
|
int32_t* stack_pointer = reinterpret_cast<int32_t*>(get_register(sp));
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
arg4 = stack_pointer[4];
|
|
1312
|
-
arg5 = stack_pointer[5];
|
|
1313
|
-
}
|
|
1414
|
+
// Args 4 and 5 are on the stack after the reserved space for args 0..3.
|
|
1415
|
+
int32_t arg4 = stack_pointer[4];
|
|
1416
|
+
int32_t arg5 = stack_pointer[5];
|
|
1314
1417
|
|
|
1315
1418
|
bool fp_call =
|
|
1316
1419
|
(redirection->type() == ExternalReference::BUILTIN_FP_FP_CALL) ||
|
|
@@ -1372,7 +1475,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
|
|
1372
1475
|
case ExternalReference::BUILTIN_FP_CALL:
|
|
1373
1476
|
GetFpArgs(&dval0);
|
|
1374
1477
|
PrintF("Call to host function at %p with arg %f",
|
|
1375
|
-
FUNCTION_ADDR(target),
|
|
1478
|
+
FUNCTION_ADDR(target), dval0);
|
|
1376
1479
|
break;
|
|
1377
1480
|
case ExternalReference::BUILTIN_FP_INT_CALL:
|
|
1378
1481
|
GetFpArgs(&dval0, &ival);
|
|
@@ -1440,14 +1543,13 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
|
|
1440
1543
|
set_register(ra, saved_ra);
|
|
1441
1544
|
set_pc(get_register(ra));
|
|
1442
1545
|
|
|
1443
|
-
} else if (func == BREAK && code
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
dbg.PrintAllRegs(); // Print registers and continue running.
|
|
1546
|
+
} else if (func == BREAK && code <= kMaxStopCode) {
|
|
1547
|
+
if (IsWatchpoint(code)) {
|
|
1548
|
+
PrintWatchpoint(code);
|
|
1549
|
+
} else {
|
|
1550
|
+
IncreaseStopCounter(code);
|
|
1551
|
+
HandleStop(code, instr);
|
|
1552
|
+
}
|
|
1451
1553
|
} else {
|
|
1452
1554
|
// All remaining break_ codes, and all traps are handled here.
|
|
1453
1555
|
MipsDebugger dbg(this);
|
|
@@ -1456,6 +1558,99 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
|
|
1456
1558
|
}
|
|
1457
1559
|
|
|
1458
1560
|
|
|
1561
|
+
// Stop helper functions.
|
|
1562
|
+
bool Simulator::IsWatchpoint(uint32_t code) {
|
|
1563
|
+
return (code <= kMaxWatchpointCode);
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
|
|
1567
|
+
void Simulator::PrintWatchpoint(uint32_t code) {
|
|
1568
|
+
MipsDebugger dbg(this);
|
|
1569
|
+
++break_count_;
|
|
1570
|
+
PrintF("\n---- break %d marker: %3d (instr count: %8d) ----------"
|
|
1571
|
+
"----------------------------------",
|
|
1572
|
+
code, break_count_, icount_);
|
|
1573
|
+
dbg.PrintAllRegs(); // Print registers and continue running.
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1576
|
+
|
|
1577
|
+
void Simulator::HandleStop(uint32_t code, Instruction* instr) {
|
|
1578
|
+
// Stop if it is enabled, otherwise go on jumping over the stop
|
|
1579
|
+
// and the message address.
|
|
1580
|
+
if (IsEnabledStop(code)) {
|
|
1581
|
+
MipsDebugger dbg(this);
|
|
1582
|
+
dbg.Stop(instr);
|
|
1583
|
+
} else {
|
|
1584
|
+
set_pc(get_pc() + 2 * Instruction::kInstrSize);
|
|
1585
|
+
}
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
|
|
1589
|
+
bool Simulator::IsStopInstruction(Instruction* instr) {
|
|
1590
|
+
int32_t func = instr->FunctionFieldRaw();
|
|
1591
|
+
uint32_t code = static_cast<uint32_t>(instr->Bits(25, 6));
|
|
1592
|
+
return (func == BREAK) && code > kMaxWatchpointCode && code <= kMaxStopCode;
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
|
|
1596
|
+
bool Simulator::IsEnabledStop(uint32_t code) {
|
|
1597
|
+
ASSERT(code <= kMaxStopCode);
|
|
1598
|
+
ASSERT(code > kMaxWatchpointCode);
|
|
1599
|
+
return !(watched_stops[code].count & kStopDisabledBit);
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
|
|
1603
|
+
void Simulator::EnableStop(uint32_t code) {
|
|
1604
|
+
if (!IsEnabledStop(code)) {
|
|
1605
|
+
watched_stops[code].count &= ~kStopDisabledBit;
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
|
|
1610
|
+
void Simulator::DisableStop(uint32_t code) {
|
|
1611
|
+
if (IsEnabledStop(code)) {
|
|
1612
|
+
watched_stops[code].count |= kStopDisabledBit;
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
|
|
1616
|
+
|
|
1617
|
+
void Simulator::IncreaseStopCounter(uint32_t code) {
|
|
1618
|
+
ASSERT(code <= kMaxStopCode);
|
|
1619
|
+
if ((watched_stops[code].count & ~(1 << 31)) == 0x7fffffff) {
|
|
1620
|
+
PrintF("Stop counter for code %i has overflowed.\n"
|
|
1621
|
+
"Enabling this code and reseting the counter to 0.\n", code);
|
|
1622
|
+
watched_stops[code].count = 0;
|
|
1623
|
+
EnableStop(code);
|
|
1624
|
+
} else {
|
|
1625
|
+
watched_stops[code].count++;
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
|
|
1630
|
+
// Print a stop status.
|
|
1631
|
+
void Simulator::PrintStopInfo(uint32_t code) {
|
|
1632
|
+
if (code <= kMaxWatchpointCode) {
|
|
1633
|
+
PrintF("That is a watchpoint, not a stop.\n");
|
|
1634
|
+
return;
|
|
1635
|
+
} else if (code > kMaxStopCode) {
|
|
1636
|
+
PrintF("Code too large, only %u stops can be used\n", kMaxStopCode + 1);
|
|
1637
|
+
return;
|
|
1638
|
+
}
|
|
1639
|
+
const char* state = IsEnabledStop(code) ? "Enabled" : "Disabled";
|
|
1640
|
+
int32_t count = watched_stops[code].count & ~kStopDisabledBit;
|
|
1641
|
+
// Don't print the state of unused breakpoints.
|
|
1642
|
+
if (count != 0) {
|
|
1643
|
+
if (watched_stops[code].desc) {
|
|
1644
|
+
PrintF("stop %i - 0x%x: \t%s, \tcounter = %i, \t%s\n",
|
|
1645
|
+
code, code, state, count, watched_stops[code].desc);
|
|
1646
|
+
} else {
|
|
1647
|
+
PrintF("stop %i - 0x%x: \t%s, \tcounter = %i\n",
|
|
1648
|
+
code, code, state, count);
|
|
1649
|
+
}
|
|
1650
|
+
}
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
|
|
1459
1654
|
void Simulator::SignalExceptions() {
|
|
1460
1655
|
for (int i = 1; i < kNumExceptions; i++) {
|
|
1461
1656
|
if (exceptions[i] != 0) {
|
|
@@ -1865,9 +2060,10 @@ void Simulator::DecodeTypeRegister(Instruction* instr) {
|
|
|
1865
2060
|
break;
|
|
1866
2061
|
case TRUNC_W_D: // Truncate double to word (round towards 0).
|
|
1867
2062
|
{
|
|
1868
|
-
|
|
2063
|
+
double rounded = trunc(fs);
|
|
2064
|
+
int32_t result = static_cast<int32_t>(rounded);
|
|
1869
2065
|
set_fpu_register(fd_reg, result);
|
|
1870
|
-
if (set_fcsr_round_error(fs,
|
|
2066
|
+
if (set_fcsr_round_error(fs, rounded)) {
|
|
1871
2067
|
set_fpu_register(fd_reg, kFPUInvalidResult);
|
|
1872
2068
|
}
|
|
1873
2069
|
}
|
|
@@ -1895,16 +2091,20 @@ void Simulator::DecodeTypeRegister(Instruction* instr) {
|
|
|
1895
2091
|
case CVT_S_D: // Convert double to float (single).
|
|
1896
2092
|
set_fpu_register_float(fd_reg, static_cast<float>(fs));
|
|
1897
2093
|
break;
|
|
1898
|
-
case CVT_L_D: // Mips32r2: Truncate double to 64-bit long-word.
|
|
1899
|
-
|
|
2094
|
+
case CVT_L_D: { // Mips32r2: Truncate double to 64-bit long-word.
|
|
2095
|
+
double rounded = trunc(fs);
|
|
2096
|
+
i64 = static_cast<int64_t>(rounded);
|
|
1900
2097
|
set_fpu_register(fd_reg, i64 & 0xffffffff);
|
|
1901
2098
|
set_fpu_register(fd_reg + 1, i64 >> 32);
|
|
1902
2099
|
break;
|
|
1903
|
-
|
|
1904
|
-
|
|
2100
|
+
}
|
|
2101
|
+
case TRUNC_L_D: { // Mips32r2 instruction.
|
|
2102
|
+
double rounded = trunc(fs);
|
|
2103
|
+
i64 = static_cast<int64_t>(rounded);
|
|
1905
2104
|
set_fpu_register(fd_reg, i64 & 0xffffffff);
|
|
1906
2105
|
set_fpu_register(fd_reg + 1, i64 >> 32);
|
|
1907
2106
|
break;
|
|
2107
|
+
}
|
|
1908
2108
|
case ROUND_L_D: { // Mips32r2 instruction.
|
|
1909
2109
|
double rounded = fs > 0 ? floor(fs + 0.5) : ceil(fs - 0.5);
|
|
1910
2110
|
i64 = static_cast<int64_t>(rounded);
|