mustang 0.0.1 → 0.1.0
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/.rspec +1 -0
- data/Isolate +9 -0
- data/README.md +6 -12
- data/Rakefile +30 -4
- data/TODO.md +9 -0
- data/ext/v8/extconf.rb +56 -0
- data/ext/v8/v8.cpp +37 -0
- data/ext/v8/v8_array.cpp +161 -0
- data/ext/v8/v8_array.h +17 -0
- data/ext/v8/v8_base.cpp +147 -0
- data/ext/v8/v8_base.h +23 -0
- data/ext/v8/v8_cast.cpp +151 -0
- data/ext/v8/v8_cast.h +64 -0
- data/ext/v8/v8_context.cpp +174 -0
- data/ext/v8/v8_context.h +12 -0
- data/ext/v8/v8_date.cpp +61 -0
- data/ext/v8/v8_date.h +16 -0
- data/ext/v8/v8_errors.cpp +147 -0
- data/ext/v8/v8_errors.h +19 -0
- data/ext/v8/v8_external.cpp +66 -0
- data/ext/v8/v8_external.h +16 -0
- data/ext/v8/v8_function.cpp +182 -0
- data/ext/v8/v8_function.h +14 -0
- data/ext/v8/v8_integer.cpp +70 -0
- data/ext/v8/v8_integer.h +16 -0
- data/ext/v8/v8_macros.h +30 -0
- data/ext/v8/v8_main.cpp +53 -0
- data/ext/v8/v8_main.h +13 -0
- data/ext/v8/v8_number.cpp +62 -0
- data/ext/v8/v8_number.h +16 -0
- data/ext/v8/v8_object.cpp +172 -0
- data/ext/v8/v8_object.h +17 -0
- data/ext/v8/v8_ref.cpp +72 -0
- data/ext/v8/v8_ref.h +43 -0
- data/ext/v8/v8_regexp.cpp +148 -0
- data/ext/v8/v8_regexp.h +16 -0
- data/ext/v8/v8_string.cpp +78 -0
- data/ext/v8/v8_string.h +16 -0
- data/ext/v8/v8_value.cpp +370 -0
- data/ext/v8/v8_value.h +19 -0
- data/gemspec.yml +2 -1
- data/lib/core_ext/class.rb +14 -0
- data/lib/core_ext/object.rb +12 -0
- data/lib/core_ext/symbol.rb +23 -0
- data/lib/mustang.rb +44 -0
- data/lib/mustang/context.rb +69 -0
- data/lib/mustang/errors.rb +36 -0
- data/lib/support/delegated.rb +25 -0
- data/lib/v8/array.rb +21 -0
- data/lib/v8/context.rb +13 -0
- data/lib/v8/date.rb +20 -0
- data/lib/v8/error.rb +15 -0
- data/lib/v8/external.rb +16 -0
- data/lib/v8/function.rb +11 -0
- data/lib/v8/integer.rb +16 -0
- data/lib/v8/number.rb +16 -0
- data/lib/v8/object.rb +66 -0
- data/lib/v8/regexp.rb +23 -0
- data/lib/v8/string.rb +27 -0
- data/mustang.gemspec +3 -0
- data/spec/core_ext/class_spec.rb +19 -0
- data/spec/core_ext/object_spec.rb +19 -0
- data/spec/core_ext/symbol_spec.rb +27 -0
- data/spec/fixtures/test1.js +2 -0
- data/spec/fixtures/test2.js +2 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/v8/array_spec.rb +88 -0
- data/spec/v8/cast_spec.rb +151 -0
- data/spec/v8/context_spec.rb +78 -0
- data/spec/v8/data_spec.rb +39 -0
- data/spec/v8/date_spec.rb +45 -0
- data/spec/v8/empty_spec.rb +27 -0
- data/spec/v8/errors_spec.rb +142 -0
- data/spec/v8/external_spec.rb +44 -0
- data/spec/v8/function_spec.rb +170 -0
- data/spec/v8/integer_spec.rb +41 -0
- data/spec/v8/main_spec.rb +18 -0
- data/spec/v8/null_spec.rb +27 -0
- data/spec/v8/number_spec.rb +40 -0
- data/spec/v8/object_spec.rb +79 -0
- data/spec/v8/primitive_spec.rb +9 -0
- data/spec/v8/regexp_spec.rb +65 -0
- data/spec/v8/string_spec.rb +48 -0
- data/spec/v8/undefined_spec.rb +27 -0
- data/spec/v8/value_spec.rb +215 -0
- data/vendor/v8/.gitignore +2 -0
- data/vendor/v8/AUTHORS +3 -1
- data/vendor/v8/ChangeLog +117 -0
- data/vendor/v8/SConstruct +334 -53
- data/vendor/v8/include/v8-debug.h +21 -11
- data/vendor/v8/include/v8-preparser.h +1 -1
- data/vendor/v8/include/v8-profiler.h +122 -43
- data/vendor/v8/include/v8-testing.h +5 -0
- data/vendor/v8/include/v8.h +171 -17
- data/vendor/v8/preparser/SConscript +38 -0
- data/vendor/v8/preparser/preparser-process.cc +77 -114
- data/vendor/v8/samples/shell.cc +232 -46
- data/vendor/v8/src/SConscript +29 -5
- data/vendor/v8/src/accessors.cc +70 -211
- data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
- data/vendor/v8/src/allocation.cc +0 -82
- data/vendor/v8/src/allocation.h +9 -42
- data/vendor/v8/src/api.cc +1645 -1156
- data/vendor/v8/src/api.h +76 -12
- data/vendor/v8/src/apiutils.h +0 -7
- data/vendor/v8/src/arguments.h +15 -4
- data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
- data/vendor/v8/src/arm/assembler-arm.cc +62 -23
- data/vendor/v8/src/arm/assembler-arm.h +76 -11
- data/vendor/v8/src/arm/builtins-arm.cc +39 -33
- data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
- data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
- data/vendor/v8/src/arm/codegen-arm.cc +159 -106
- data/vendor/v8/src/arm/codegen-arm.h +6 -6
- data/vendor/v8/src/arm/constants-arm.h +16 -1
- data/vendor/v8/src/arm/cpu-arm.cc +7 -5
- data/vendor/v8/src/arm/debug-arm.cc +6 -4
- data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
- data/vendor/v8/src/arm/disasm-arm.cc +47 -15
- data/vendor/v8/src/arm/frames-arm.h +1 -1
- data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
- data/vendor/v8/src/arm/ic-arm.cc +90 -85
- data/vendor/v8/src/arm/lithium-arm.cc +140 -69
- data/vendor/v8/src/arm/lithium-arm.h +161 -46
- data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
- data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
- data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
- data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
- data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
- data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
- data/vendor/v8/src/arm/simulator-arm.cc +184 -101
- data/vendor/v8/src/arm/simulator-arm.h +26 -21
- data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
- data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
- data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
- data/vendor/v8/src/array.js +35 -18
- data/vendor/v8/src/assembler.cc +186 -92
- data/vendor/v8/src/assembler.h +106 -69
- data/vendor/v8/src/ast-inl.h +5 -0
- data/vendor/v8/src/ast.cc +46 -35
- data/vendor/v8/src/ast.h +107 -50
- data/vendor/v8/src/atomicops.h +2 -0
- data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
- data/vendor/v8/src/bootstrapper.cc +649 -399
- data/vendor/v8/src/bootstrapper.h +94 -27
- data/vendor/v8/src/builtins.cc +359 -227
- data/vendor/v8/src/builtins.h +157 -123
- data/vendor/v8/src/checks.cc +2 -2
- data/vendor/v8/src/checks.h +4 -0
- data/vendor/v8/src/code-stubs.cc +27 -17
- data/vendor/v8/src/code-stubs.h +38 -17
- data/vendor/v8/src/codegen-inl.h +5 -1
- data/vendor/v8/src/codegen.cc +27 -17
- data/vendor/v8/src/codegen.h +9 -9
- data/vendor/v8/src/compilation-cache.cc +92 -206
- data/vendor/v8/src/compilation-cache.h +205 -30
- data/vendor/v8/src/compiler.cc +107 -120
- data/vendor/v8/src/compiler.h +17 -2
- data/vendor/v8/src/contexts.cc +22 -15
- data/vendor/v8/src/contexts.h +14 -8
- data/vendor/v8/src/conversions.cc +86 -30
- data/vendor/v8/src/counters.cc +19 -4
- data/vendor/v8/src/counters.h +28 -16
- data/vendor/v8/src/cpu-profiler-inl.h +4 -3
- data/vendor/v8/src/cpu-profiler.cc +123 -72
- data/vendor/v8/src/cpu-profiler.h +33 -19
- data/vendor/v8/src/cpu.h +2 -0
- data/vendor/v8/src/d8-debug.cc +3 -3
- data/vendor/v8/src/d8-debug.h +7 -6
- data/vendor/v8/src/d8-posix.cc +2 -0
- data/vendor/v8/src/d8.cc +22 -12
- data/vendor/v8/src/d8.gyp +3 -0
- data/vendor/v8/src/d8.js +618 -0
- data/vendor/v8/src/data-flow.h +3 -3
- data/vendor/v8/src/dateparser.h +4 -2
- data/vendor/v8/src/debug-agent.cc +10 -9
- data/vendor/v8/src/debug-agent.h +9 -11
- data/vendor/v8/src/debug-debugger.js +121 -0
- data/vendor/v8/src/debug.cc +331 -227
- data/vendor/v8/src/debug.h +248 -219
- data/vendor/v8/src/deoptimizer.cc +173 -62
- data/vendor/v8/src/deoptimizer.h +119 -19
- data/vendor/v8/src/disasm.h +3 -0
- data/vendor/v8/src/disassembler.cc +10 -9
- data/vendor/v8/src/execution.cc +185 -129
- data/vendor/v8/src/execution.h +47 -78
- data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
- data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
- data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
- data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
- data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
- data/vendor/v8/src/extensions/gc-extension.cc +1 -1
- data/vendor/v8/src/factory.cc +261 -154
- data/vendor/v8/src/factory.h +162 -158
- data/vendor/v8/src/flag-definitions.h +17 -11
- data/vendor/v8/src/frame-element.cc +0 -5
- data/vendor/v8/src/frame-element.h +9 -13
- data/vendor/v8/src/frames-inl.h +7 -0
- data/vendor/v8/src/frames.cc +56 -46
- data/vendor/v8/src/frames.h +36 -25
- data/vendor/v8/src/full-codegen.cc +15 -24
- data/vendor/v8/src/full-codegen.h +13 -41
- data/vendor/v8/src/func-name-inferrer.cc +7 -6
- data/vendor/v8/src/func-name-inferrer.h +1 -1
- data/vendor/v8/src/gdb-jit.cc +1 -0
- data/vendor/v8/src/global-handles.cc +118 -56
- data/vendor/v8/src/global-handles.h +98 -40
- data/vendor/v8/src/globals.h +2 -2
- data/vendor/v8/src/handles-inl.h +106 -9
- data/vendor/v8/src/handles.cc +220 -157
- data/vendor/v8/src/handles.h +38 -59
- data/vendor/v8/src/hashmap.h +3 -3
- data/vendor/v8/src/heap-inl.h +141 -25
- data/vendor/v8/src/heap-profiler.cc +117 -63
- data/vendor/v8/src/heap-profiler.h +38 -21
- data/vendor/v8/src/heap.cc +805 -564
- data/vendor/v8/src/heap.h +640 -594
- data/vendor/v8/src/hydrogen-instructions.cc +216 -73
- data/vendor/v8/src/hydrogen-instructions.h +259 -124
- data/vendor/v8/src/hydrogen.cc +996 -1171
- data/vendor/v8/src/hydrogen.h +163 -144
- data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
- data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
- data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
- data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
- data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
- data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
- data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
- data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
- data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
- data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
- data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
- data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
- data/vendor/v8/src/ia32/frames-ia32.h +1 -1
- data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
- data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
- data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
- data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
- data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
- data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
- data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
- data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
- data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
- data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
- data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
- data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
- data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
- data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
- data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
- data/vendor/v8/src/ic-inl.h +12 -2
- data/vendor/v8/src/ic.cc +304 -221
- data/vendor/v8/src/ic.h +115 -58
- data/vendor/v8/src/interpreter-irregexp.cc +25 -21
- data/vendor/v8/src/interpreter-irregexp.h +2 -1
- data/vendor/v8/src/isolate.cc +883 -0
- data/vendor/v8/src/isolate.h +1304 -0
- data/vendor/v8/src/json.js +10 -10
- data/vendor/v8/src/jsregexp.cc +111 -80
- data/vendor/v8/src/jsregexp.h +6 -7
- data/vendor/v8/src/jump-target-heavy.cc +5 -8
- data/vendor/v8/src/jump-target-heavy.h +0 -6
- data/vendor/v8/src/jump-target-inl.h +1 -1
- data/vendor/v8/src/jump-target-light.cc +3 -3
- data/vendor/v8/src/lithium-allocator-inl.h +2 -0
- data/vendor/v8/src/lithium-allocator.cc +42 -30
- data/vendor/v8/src/lithium-allocator.h +8 -22
- data/vendor/v8/src/lithium.cc +1 -0
- data/vendor/v8/src/liveedit.cc +141 -99
- data/vendor/v8/src/liveedit.h +7 -2
- data/vendor/v8/src/liveobjectlist-inl.h +90 -0
- data/vendor/v8/src/liveobjectlist.cc +2537 -1
- data/vendor/v8/src/liveobjectlist.h +245 -35
- data/vendor/v8/src/log-utils.cc +122 -35
- data/vendor/v8/src/log-utils.h +33 -36
- data/vendor/v8/src/log.cc +299 -241
- data/vendor/v8/src/log.h +177 -110
- data/vendor/v8/src/mark-compact.cc +612 -470
- data/vendor/v8/src/mark-compact.h +153 -80
- data/vendor/v8/src/messages.cc +16 -14
- data/vendor/v8/src/messages.js +30 -7
- data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
- data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
- data/vendor/v8/src/mips/assembler-mips.h +552 -153
- data/vendor/v8/src/mips/builtins-mips.cc +43 -100
- data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
- data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
- data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
- data/vendor/v8/src/mips/codegen-mips.cc +672 -896
- data/vendor/v8/src/mips/codegen-mips.h +271 -69
- data/vendor/v8/src/mips/constants-mips.cc +44 -20
- data/vendor/v8/src/mips/constants-mips.h +238 -40
- data/vendor/v8/src/mips/cpu-mips.cc +20 -3
- data/vendor/v8/src/mips/debug-mips.cc +35 -7
- data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
- data/vendor/v8/src/mips/disasm-mips.cc +329 -93
- data/vendor/v8/src/mips/frames-mips.cc +2 -50
- data/vendor/v8/src/mips/frames-mips.h +24 -9
- data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
- data/vendor/v8/src/mips/ic-mips.cc +81 -45
- data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
- data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
- data/vendor/v8/src/mips/lithium-mips.h +304 -0
- data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
- data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
- data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
- data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
- data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
- data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
- data/vendor/v8/src/mips/simulator-mips.h +119 -36
- data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
- data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
- data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
- data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
- data/vendor/v8/src/mirror-debugger.js +9 -8
- data/vendor/v8/src/mksnapshot.cc +2 -2
- data/vendor/v8/src/objects-debug.cc +16 -16
- data/vendor/v8/src/objects-inl.h +421 -195
- data/vendor/v8/src/objects-printer.cc +7 -7
- data/vendor/v8/src/objects-visiting.cc +1 -1
- data/vendor/v8/src/objects-visiting.h +33 -12
- data/vendor/v8/src/objects.cc +935 -658
- data/vendor/v8/src/objects.h +234 -139
- data/vendor/v8/src/parser.cc +484 -439
- data/vendor/v8/src/parser.h +35 -14
- data/vendor/v8/src/platform-cygwin.cc +173 -107
- data/vendor/v8/src/platform-freebsd.cc +224 -72
- data/vendor/v8/src/platform-linux.cc +234 -95
- data/vendor/v8/src/platform-macos.cc +215 -82
- data/vendor/v8/src/platform-nullos.cc +9 -3
- data/vendor/v8/src/platform-openbsd.cc +22 -7
- data/vendor/v8/src/platform-posix.cc +30 -5
- data/vendor/v8/src/platform-solaris.cc +120 -38
- data/vendor/v8/src/platform-tls-mac.h +62 -0
- data/vendor/v8/src/platform-tls-win32.h +62 -0
- data/vendor/v8/src/platform-tls.h +50 -0
- data/vendor/v8/src/platform-win32.cc +195 -97
- data/vendor/v8/src/platform.h +72 -15
- data/vendor/v8/src/preparse-data.cc +2 -0
- data/vendor/v8/src/preparser-api.cc +8 -2
- data/vendor/v8/src/preparser.cc +1 -1
- data/vendor/v8/src/prettyprinter.cc +43 -52
- data/vendor/v8/src/prettyprinter.h +1 -1
- data/vendor/v8/src/profile-generator-inl.h +0 -28
- data/vendor/v8/src/profile-generator.cc +942 -685
- data/vendor/v8/src/profile-generator.h +210 -176
- data/vendor/v8/src/property.cc +6 -0
- data/vendor/v8/src/property.h +14 -3
- data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
- data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
- data/vendor/v8/src/regexp-macro-assembler.h +11 -6
- data/vendor/v8/src/regexp-stack.cc +18 -10
- data/vendor/v8/src/regexp-stack.h +45 -21
- data/vendor/v8/src/regexp.js +3 -3
- data/vendor/v8/src/register-allocator-inl.h +3 -3
- data/vendor/v8/src/register-allocator.cc +1 -7
- data/vendor/v8/src/register-allocator.h +5 -15
- data/vendor/v8/src/rewriter.cc +2 -1
- data/vendor/v8/src/runtime-profiler.cc +158 -128
- data/vendor/v8/src/runtime-profiler.h +131 -15
- data/vendor/v8/src/runtime.cc +2409 -1692
- data/vendor/v8/src/runtime.h +93 -17
- data/vendor/v8/src/safepoint-table.cc +3 -0
- data/vendor/v8/src/safepoint-table.h +9 -3
- data/vendor/v8/src/scanner-base.cc +21 -28
- data/vendor/v8/src/scanner-base.h +22 -11
- data/vendor/v8/src/scanner.cc +3 -5
- data/vendor/v8/src/scanner.h +4 -2
- data/vendor/v8/src/scopeinfo.cc +11 -16
- data/vendor/v8/src/scopeinfo.h +26 -15
- data/vendor/v8/src/scopes.cc +67 -37
- data/vendor/v8/src/scopes.h +26 -12
- data/vendor/v8/src/serialize.cc +193 -154
- data/vendor/v8/src/serialize.h +41 -36
- data/vendor/v8/src/small-pointer-list.h +163 -0
- data/vendor/v8/src/snapshot-common.cc +1 -1
- data/vendor/v8/src/snapshot.h +3 -1
- data/vendor/v8/src/spaces-inl.h +30 -25
- data/vendor/v8/src/spaces.cc +263 -370
- data/vendor/v8/src/spaces.h +178 -166
- data/vendor/v8/src/string-search.cc +4 -3
- data/vendor/v8/src/string-search.h +21 -20
- data/vendor/v8/src/string-stream.cc +32 -24
- data/vendor/v8/src/string.js +7 -7
- data/vendor/v8/src/stub-cache.cc +324 -248
- data/vendor/v8/src/stub-cache.h +181 -155
- data/vendor/v8/src/token.cc +3 -3
- data/vendor/v8/src/token.h +3 -3
- data/vendor/v8/src/top.cc +218 -390
- data/vendor/v8/src/type-info.cc +98 -32
- data/vendor/v8/src/type-info.h +10 -3
- data/vendor/v8/src/unicode.cc +1 -1
- data/vendor/v8/src/unicode.h +1 -1
- data/vendor/v8/src/utils.h +3 -0
- data/vendor/v8/src/v8-counters.cc +18 -11
- data/vendor/v8/src/v8-counters.h +34 -13
- data/vendor/v8/src/v8.cc +66 -121
- data/vendor/v8/src/v8.h +7 -4
- data/vendor/v8/src/v8globals.h +18 -12
- data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
- data/vendor/v8/src/v8natives.js +59 -18
- data/vendor/v8/src/v8threads.cc +127 -114
- data/vendor/v8/src/v8threads.h +42 -35
- data/vendor/v8/src/v8utils.h +2 -39
- data/vendor/v8/src/variables.h +1 -1
- data/vendor/v8/src/version.cc +26 -5
- data/vendor/v8/src/version.h +4 -0
- data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
- data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
- data/vendor/v8/src/vm-state-inl.h +21 -17
- data/vendor/v8/src/vm-state.h +7 -5
- data/vendor/v8/src/win32-headers.h +1 -0
- data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
- data/vendor/v8/src/x64/assembler-x64.cc +80 -40
- data/vendor/v8/src/x64/assembler-x64.h +67 -17
- data/vendor/v8/src/x64/builtins-x64.cc +34 -33
- data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
- data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
- data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
- data/vendor/v8/src/x64/codegen-x64.cc +158 -136
- data/vendor/v8/src/x64/codegen-x64.h +4 -1
- data/vendor/v8/src/x64/cpu-x64.cc +7 -5
- data/vendor/v8/src/x64/debug-x64.cc +8 -6
- data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
- data/vendor/v8/src/x64/disasm-x64.cc +42 -23
- data/vendor/v8/src/x64/frames-x64.cc +1 -1
- data/vendor/v8/src/x64/frames-x64.h +2 -2
- data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
- data/vendor/v8/src/x64/ic-x64.cc +77 -79
- data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
- data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
- data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
- data/vendor/v8/src/x64/lithium-x64.cc +136 -54
- data/vendor/v8/src/x64/lithium-x64.h +142 -51
- data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
- data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
- data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
- data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
- data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
- data/vendor/v8/src/x64/simulator-x64.h +5 -5
- data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
- data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
- data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
- data/vendor/v8/src/zone-inl.h +49 -3
- data/vendor/v8/src/zone.cc +42 -41
- data/vendor/v8/src/zone.h +37 -34
- data/vendor/v8/test/benchmarks/testcfg.py +100 -0
- data/vendor/v8/test/cctest/SConscript +5 -4
- data/vendor/v8/test/cctest/cctest.h +3 -2
- data/vendor/v8/test/cctest/cctest.status +6 -11
- data/vendor/v8/test/cctest/test-accessors.cc +3 -3
- data/vendor/v8/test/cctest/test-alloc.cc +39 -33
- data/vendor/v8/test/cctest/test-api.cc +1092 -205
- data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
- data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
- data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
- data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
- data/vendor/v8/test/cctest/test-ast.cc +1 -0
- data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
- data/vendor/v8/test/cctest/test-compiler.cc +24 -24
- data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
- data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
- data/vendor/v8/test/cctest/test-debug.cc +136 -77
- data/vendor/v8/test/cctest/test-decls.cc +1 -1
- data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
- data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
- data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
- data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
- data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
- data/vendor/v8/test/cctest/test-heap.cc +240 -217
- data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
- data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
- data/vendor/v8/test/cctest/test-log.cc +114 -108
- data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
- data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
- data/vendor/v8/test/cctest/test-parsing.cc +15 -14
- data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
- data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
- data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
- data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
- data/vendor/v8/test/cctest/test-regexp.cc +53 -41
- data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
- data/vendor/v8/test/cctest/test-serialize.cc +44 -43
- data/vendor/v8/test/cctest/test-sockets.cc +8 -3
- data/vendor/v8/test/cctest/test-spaces.cc +47 -29
- data/vendor/v8/test/cctest/test-strings.cc +20 -20
- data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
- data/vendor/v8/test/cctest/test-threads.cc +5 -3
- data/vendor/v8/test/cctest/test-utils.cc +5 -4
- data/vendor/v8/test/cctest/testcfg.py +7 -3
- data/vendor/v8/test/es5conform/es5conform.status +2 -77
- data/vendor/v8/test/es5conform/testcfg.py +1 -1
- data/vendor/v8/test/message/testcfg.py +1 -1
- data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
- data/vendor/v8/test/mjsunit/array-concat.js +43 -1
- data/vendor/v8/test/mjsunit/array-join.js +25 -0
- data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
- data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
- data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
- data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
- data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
- data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
- data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
- data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
- data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
- data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
- data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
- data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
- data/vendor/v8/test/mjsunit/object-seal.js +4 -13
- data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
- data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
- data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
- data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
- data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
- data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
- data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
- data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
- data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
- data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
- data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
- data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
- data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
- data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
- data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
- data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
- data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
- data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
- data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
- data/vendor/v8/test/mjsunit/testcfg.py +23 -6
- data/vendor/v8/test/mozilla/mozilla.status +0 -2
- data/vendor/v8/test/mozilla/testcfg.py +1 -1
- data/vendor/v8/test/preparser/empty.js +28 -0
- data/vendor/v8/test/preparser/functions-only.js +38 -0
- data/vendor/v8/test/preparser/non-alphanum.js +34 -0
- data/vendor/v8/test/preparser/symbols-only.js +49 -0
- data/vendor/v8/test/preparser/testcfg.py +90 -0
- data/vendor/v8/test/sputnik/testcfg.py +1 -1
- data/vendor/v8/test/test262/README +16 -0
- data/vendor/v8/test/test262/harness-adapt.js +80 -0
- data/vendor/v8/test/test262/test262.status +1506 -0
- data/vendor/v8/test/test262/testcfg.py +123 -0
- data/vendor/v8/tools/freebsd-tick-processor +10 -0
- data/vendor/v8/tools/gyp/v8.gyp +8 -33
- data/vendor/v8/tools/linux-tick-processor +5 -3
- data/vendor/v8/tools/test.py +37 -14
- data/vendor/v8/tools/tickprocessor.js +22 -8
- data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
- data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
- data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
- metadata +1495 -1341
- data/ext/extconf.rb +0 -22
- data/ext/mustang.cpp +0 -58
- data/vendor/v8/src/top.h +0 -608
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -357,6 +357,7 @@ class CodeGenerator: public AstVisitor {
|
|
357
357
|
// Accessors
|
358
358
|
inline bool is_eval();
|
359
359
|
inline Scope* scope();
|
360
|
+
inline bool is_strict_mode();
|
360
361
|
inline StrictModeFlag strict_mode_flag();
|
361
362
|
|
362
363
|
// Generating deferred code.
|
@@ -732,6 +733,7 @@ class CodeGenerator: public AstVisitor {
|
|
732
733
|
bool in_spilled_code_;
|
733
734
|
|
734
735
|
friend class VirtualFrame;
|
736
|
+
friend class Isolate;
|
735
737
|
friend class JumpTarget;
|
736
738
|
friend class Reference;
|
737
739
|
friend class Result;
|
@@ -740,6 +742,7 @@ class CodeGenerator: public AstVisitor {
|
|
740
742
|
friend class FullCodeGenSyntaxChecker;
|
741
743
|
|
742
744
|
friend class CodeGeneratorPatcher; // Used in test-log-stack-tracer.cc
|
745
|
+
friend class InlineRuntimeFunctionsTable;
|
743
746
|
|
744
747
|
DISALLOW_COPY_AND_ASSIGN(CodeGenerator);
|
745
748
|
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -42,10 +42,12 @@ namespace v8 {
|
|
42
42
|
namespace internal {
|
43
43
|
|
44
44
|
void CPU::Setup() {
|
45
|
-
CpuFeatures::Probe(
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
CpuFeatures::Probe();
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
bool CPU::SupportsCrankshaft() {
|
50
|
+
return true; // Yay!
|
49
51
|
}
|
50
52
|
|
51
53
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -49,7 +49,8 @@ bool BreakLocationIterator::IsDebugBreakAtReturn() {
|
|
49
49
|
void BreakLocationIterator::SetDebugBreakAtReturn() {
|
50
50
|
ASSERT(Assembler::kJSReturnSequenceLength >=
|
51
51
|
Assembler::kCallInstructionLength);
|
52
|
-
rinfo()->PatchCodeWithCall(
|
52
|
+
rinfo()->PatchCodeWithCall(
|
53
|
+
Isolate::Current()->debug()->debug_break_return()->entry(),
|
53
54
|
Assembler::kJSReturnSequenceLength - Assembler::kCallInstructionLength);
|
54
55
|
}
|
55
56
|
|
@@ -79,7 +80,7 @@ bool BreakLocationIterator::IsDebugBreakAtSlot() {
|
|
79
80
|
void BreakLocationIterator::SetDebugBreakAtSlot() {
|
80
81
|
ASSERT(IsDebugBreakSlot());
|
81
82
|
rinfo()->PatchCodeWithCall(
|
82
|
-
|
83
|
+
Isolate::Current()->debug()->debug_break_slot()->entry(),
|
83
84
|
Assembler::kDebugBreakSlotLength - Assembler::kCallInstructionLength);
|
84
85
|
}
|
85
86
|
|
@@ -128,7 +129,7 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
|
|
128
129
|
__ RecordComment("// Calling from debug break to runtime - come in - over");
|
129
130
|
#endif
|
130
131
|
__ Set(rax, 0); // No arguments (argc == 0).
|
131
|
-
__ movq(rbx, ExternalReference::debug_break());
|
132
|
+
__ movq(rbx, ExternalReference::debug_break(masm->isolate()));
|
132
133
|
|
133
134
|
CEntryStub ceb(1);
|
134
135
|
__ CallStub(&ceb);
|
@@ -167,7 +168,7 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
|
|
167
168
|
// jumping to the target address intended by the caller and that was
|
168
169
|
// overwritten by the address of DebugBreakXXX.
|
169
170
|
ExternalReference after_break_target =
|
170
|
-
ExternalReference(Debug_Address::AfterBreakTarget());
|
171
|
+
ExternalReference(Debug_Address::AfterBreakTarget(), masm->isolate());
|
171
172
|
__ movq(kScratchRegister, after_break_target);
|
172
173
|
__ jmp(Operand(kScratchRegister, 0));
|
173
174
|
}
|
@@ -283,7 +284,8 @@ void Debug::GeneratePlainReturnLiveEdit(MacroAssembler* masm) {
|
|
283
284
|
|
284
285
|
void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) {
|
285
286
|
ExternalReference restarter_frame_function_slot =
|
286
|
-
ExternalReference(Debug_Address::RestarterFrameFunctionPointer()
|
287
|
+
ExternalReference(Debug_Address::RestarterFrameFunctionPointer(),
|
288
|
+
masm->isolate());
|
287
289
|
__ movq(rax, restarter_frame_function_slot);
|
288
290
|
__ movq(Operand(rax, 0), Immediate(0));
|
289
291
|
|
@@ -101,7 +101,13 @@ class SafepointTableDeoptimiztionEntryIterator {
|
|
101
101
|
};
|
102
102
|
|
103
103
|
|
104
|
+
void Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(Handle<Code> code) {
|
105
|
+
// TODO(1276): Implement.
|
106
|
+
}
|
107
|
+
|
108
|
+
|
104
109
|
void Deoptimizer::DeoptimizeFunction(JSFunction* function) {
|
110
|
+
HandleScope scope;
|
105
111
|
AssertNoAllocation no_allocation;
|
106
112
|
|
107
113
|
if (!function->IsOptimized()) return;
|
@@ -186,8 +192,9 @@ void Deoptimizer::DeoptimizeFunction(JSFunction* function) {
|
|
186
192
|
|
187
193
|
// Add the deoptimizing code to the list.
|
188
194
|
DeoptimizingCodeListNode* node = new DeoptimizingCodeListNode(code);
|
189
|
-
|
190
|
-
deoptimizing_code_list_
|
195
|
+
DeoptimizerData* data = code->GetIsolate()->deoptimizer_data();
|
196
|
+
node->set_next(data->deoptimizing_code_list_);
|
197
|
+
data->deoptimizing_code_list_ = node;
|
191
198
|
|
192
199
|
// Set the code for the function to non-optimized version.
|
193
200
|
function->ReplaceCode(function->shared()->code());
|
@@ -196,6 +203,11 @@ void Deoptimizer::DeoptimizeFunction(JSFunction* function) {
|
|
196
203
|
PrintF("[forced deoptimization: ");
|
197
204
|
function->PrintName();
|
198
205
|
PrintF(" / %" V8PRIxPTR "]\n", reinterpret_cast<intptr_t>(function));
|
206
|
+
#ifdef DEBUG
|
207
|
+
if (FLAG_print_code) {
|
208
|
+
code->PrintLn();
|
209
|
+
}
|
210
|
+
#endif
|
199
211
|
}
|
200
212
|
}
|
201
213
|
|
@@ -224,7 +236,7 @@ void Deoptimizer::PatchStackCheckCodeAt(Address pc_after,
|
|
224
236
|
// ok:
|
225
237
|
//
|
226
238
|
ASSERT(*(call_target_address - 3) == 0x73 && // jae
|
227
|
-
*(call_target_address - 2) ==
|
239
|
+
*(call_target_address - 2) == 0x07 && // offset
|
228
240
|
*(call_target_address - 1) == 0xe8); // call
|
229
241
|
*(call_target_address - 3) = 0x90; // nop
|
230
242
|
*(call_target_address - 2) = 0x90; // nop
|
@@ -245,14 +257,174 @@ void Deoptimizer::RevertStackCheckCodeAt(Address pc_after,
|
|
245
257
|
*(call_target_address - 2) == 0x90 && // nop
|
246
258
|
*(call_target_address - 1) == 0xe8); // call
|
247
259
|
*(call_target_address - 3) = 0x73; // jae
|
248
|
-
*(call_target_address - 2) =
|
260
|
+
*(call_target_address - 2) = 0x07; // offset
|
249
261
|
Assembler::set_target_address_at(call_target_address,
|
250
262
|
check_code->entry());
|
251
263
|
}
|
252
264
|
|
253
265
|
|
266
|
+
static int LookupBailoutId(DeoptimizationInputData* data, unsigned ast_id) {
|
267
|
+
ByteArray* translations = data->TranslationByteArray();
|
268
|
+
int length = data->DeoptCount();
|
269
|
+
for (int i = 0; i < length; i++) {
|
270
|
+
if (static_cast<unsigned>(data->AstId(i)->value()) == ast_id) {
|
271
|
+
TranslationIterator it(translations, data->TranslationIndex(i)->value());
|
272
|
+
int value = it.Next();
|
273
|
+
ASSERT(Translation::BEGIN == static_cast<Translation::Opcode>(value));
|
274
|
+
// Read the number of frames.
|
275
|
+
value = it.Next();
|
276
|
+
if (value == 1) return i;
|
277
|
+
}
|
278
|
+
}
|
279
|
+
UNREACHABLE();
|
280
|
+
return -1;
|
281
|
+
}
|
282
|
+
|
283
|
+
|
254
284
|
void Deoptimizer::DoComputeOsrOutputFrame() {
|
255
|
-
|
285
|
+
DeoptimizationInputData* data = DeoptimizationInputData::cast(
|
286
|
+
optimized_code_->deoptimization_data());
|
287
|
+
unsigned ast_id = data->OsrAstId()->value();
|
288
|
+
// TODO(kasperl): This should not be the bailout_id_. It should be
|
289
|
+
// the ast id. Confusing.
|
290
|
+
ASSERT(bailout_id_ == ast_id);
|
291
|
+
|
292
|
+
int bailout_id = LookupBailoutId(data, ast_id);
|
293
|
+
unsigned translation_index = data->TranslationIndex(bailout_id)->value();
|
294
|
+
ByteArray* translations = data->TranslationByteArray();
|
295
|
+
|
296
|
+
TranslationIterator iterator(translations, translation_index);
|
297
|
+
Translation::Opcode opcode =
|
298
|
+
static_cast<Translation::Opcode>(iterator.Next());
|
299
|
+
ASSERT(Translation::BEGIN == opcode);
|
300
|
+
USE(opcode);
|
301
|
+
int count = iterator.Next();
|
302
|
+
ASSERT(count == 1);
|
303
|
+
USE(count);
|
304
|
+
|
305
|
+
opcode = static_cast<Translation::Opcode>(iterator.Next());
|
306
|
+
USE(opcode);
|
307
|
+
ASSERT(Translation::FRAME == opcode);
|
308
|
+
unsigned node_id = iterator.Next();
|
309
|
+
USE(node_id);
|
310
|
+
ASSERT(node_id == ast_id);
|
311
|
+
JSFunction* function = JSFunction::cast(ComputeLiteral(iterator.Next()));
|
312
|
+
USE(function);
|
313
|
+
ASSERT(function == function_);
|
314
|
+
unsigned height = iterator.Next();
|
315
|
+
unsigned height_in_bytes = height * kPointerSize;
|
316
|
+
USE(height_in_bytes);
|
317
|
+
|
318
|
+
unsigned fixed_size = ComputeFixedSize(function_);
|
319
|
+
unsigned input_frame_size = static_cast<unsigned>(input_->GetFrameSize());
|
320
|
+
ASSERT(fixed_size + height_in_bytes == input_frame_size);
|
321
|
+
|
322
|
+
unsigned stack_slot_size = optimized_code_->stack_slots() * kPointerSize;
|
323
|
+
unsigned outgoing_height = data->ArgumentsStackHeight(bailout_id)->value();
|
324
|
+
unsigned outgoing_size = outgoing_height * kPointerSize;
|
325
|
+
unsigned output_frame_size = fixed_size + stack_slot_size + outgoing_size;
|
326
|
+
ASSERT(outgoing_size == 0); // OSR does not happen in the middle of a call.
|
327
|
+
|
328
|
+
if (FLAG_trace_osr) {
|
329
|
+
PrintF("[on-stack replacement: begin 0x%08" V8PRIxPTR " ",
|
330
|
+
reinterpret_cast<intptr_t>(function_));
|
331
|
+
function_->PrintName();
|
332
|
+
PrintF(" => node=%u, frame=%d->%d]\n",
|
333
|
+
ast_id,
|
334
|
+
input_frame_size,
|
335
|
+
output_frame_size);
|
336
|
+
}
|
337
|
+
|
338
|
+
// There's only one output frame in the OSR case.
|
339
|
+
output_count_ = 1;
|
340
|
+
output_ = new FrameDescription*[1];
|
341
|
+
output_[0] = new(output_frame_size) FrameDescription(
|
342
|
+
output_frame_size, function_);
|
343
|
+
|
344
|
+
// Clear the incoming parameters in the optimized frame to avoid
|
345
|
+
// confusing the garbage collector.
|
346
|
+
unsigned output_offset = output_frame_size - kPointerSize;
|
347
|
+
int parameter_count = function_->shared()->formal_parameter_count() + 1;
|
348
|
+
for (int i = 0; i < parameter_count; ++i) {
|
349
|
+
output_[0]->SetFrameSlot(output_offset, 0);
|
350
|
+
output_offset -= kPointerSize;
|
351
|
+
}
|
352
|
+
|
353
|
+
// Translate the incoming parameters. This may overwrite some of the
|
354
|
+
// incoming argument slots we've just cleared.
|
355
|
+
int input_offset = input_frame_size - kPointerSize;
|
356
|
+
bool ok = true;
|
357
|
+
int limit = input_offset - (parameter_count * kPointerSize);
|
358
|
+
while (ok && input_offset > limit) {
|
359
|
+
ok = DoOsrTranslateCommand(&iterator, &input_offset);
|
360
|
+
}
|
361
|
+
|
362
|
+
// There are no translation commands for the caller's pc and fp, the
|
363
|
+
// context, and the function. Set them up explicitly.
|
364
|
+
for (int i = StandardFrameConstants::kCallerPCOffset;
|
365
|
+
ok && i >= StandardFrameConstants::kMarkerOffset;
|
366
|
+
i -= kPointerSize) {
|
367
|
+
intptr_t input_value = input_->GetFrameSlot(input_offset);
|
368
|
+
if (FLAG_trace_osr) {
|
369
|
+
const char* name = "UNKNOWN";
|
370
|
+
switch (i) {
|
371
|
+
case StandardFrameConstants::kCallerPCOffset:
|
372
|
+
name = "caller's pc";
|
373
|
+
break;
|
374
|
+
case StandardFrameConstants::kCallerFPOffset:
|
375
|
+
name = "fp";
|
376
|
+
break;
|
377
|
+
case StandardFrameConstants::kContextOffset:
|
378
|
+
name = "context";
|
379
|
+
break;
|
380
|
+
case StandardFrameConstants::kMarkerOffset:
|
381
|
+
name = "function";
|
382
|
+
break;
|
383
|
+
}
|
384
|
+
PrintF(" [rsp + %d] <- 0x%08" V8PRIxPTR " ; [rsp + %d] "
|
385
|
+
"(fixed part - %s)\n",
|
386
|
+
output_offset,
|
387
|
+
input_value,
|
388
|
+
input_offset,
|
389
|
+
name);
|
390
|
+
}
|
391
|
+
output_[0]->SetFrameSlot(output_offset, input_->GetFrameSlot(input_offset));
|
392
|
+
input_offset -= kPointerSize;
|
393
|
+
output_offset -= kPointerSize;
|
394
|
+
}
|
395
|
+
|
396
|
+
// Translate the rest of the frame.
|
397
|
+
while (ok && input_offset >= 0) {
|
398
|
+
ok = DoOsrTranslateCommand(&iterator, &input_offset);
|
399
|
+
}
|
400
|
+
|
401
|
+
// If translation of any command failed, continue using the input frame.
|
402
|
+
if (!ok) {
|
403
|
+
delete output_[0];
|
404
|
+
output_[0] = input_;
|
405
|
+
output_[0]->SetPc(reinterpret_cast<intptr_t>(from_));
|
406
|
+
} else {
|
407
|
+
// Setup the frame pointer and the context pointer.
|
408
|
+
output_[0]->SetRegister(rbp.code(), input_->GetRegister(rbp.code()));
|
409
|
+
output_[0]->SetRegister(rsi.code(), input_->GetRegister(rsi.code()));
|
410
|
+
|
411
|
+
unsigned pc_offset = data->OsrPcOffset()->value();
|
412
|
+
intptr_t pc = reinterpret_cast<intptr_t>(
|
413
|
+
optimized_code_->entry() + pc_offset);
|
414
|
+
output_[0]->SetPc(pc);
|
415
|
+
}
|
416
|
+
Code* continuation =
|
417
|
+
function->GetIsolate()->builtins()->builtin(Builtins::kNotifyOSR);
|
418
|
+
output_[0]->SetContinuation(
|
419
|
+
reinterpret_cast<intptr_t>(continuation->entry()));
|
420
|
+
|
421
|
+
if (FLAG_trace_osr) {
|
422
|
+
PrintF("[on-stack replacement translation %s: 0x%08" V8PRIxPTR " ",
|
423
|
+
ok ? "finished" : "aborted",
|
424
|
+
reinterpret_cast<intptr_t>(function));
|
425
|
+
function->PrintName();
|
426
|
+
PrintF(" => pc=0x%0" V8PRIxPTR "]\n", output_[0]->GetPc());
|
427
|
+
}
|
256
428
|
}
|
257
429
|
|
258
430
|
|
@@ -414,8 +586,8 @@ void Deoptimizer::DoComputeFrame(TranslationIterator* iterator,
|
|
414
586
|
// Set the continuation for the topmost frame.
|
415
587
|
if (is_topmost) {
|
416
588
|
Code* continuation = (bailout_type_ == EAGER)
|
417
|
-
?
|
418
|
-
:
|
589
|
+
? isolate_->builtins()->builtin(Builtins::kNotifyDeoptimized)
|
590
|
+
: isolate_->builtins()->builtin(Builtins::kNotifyLazyDeoptimized);
|
419
591
|
output_frame->SetContinuation(
|
420
592
|
reinterpret_cast<intptr_t>(continuation->entry()));
|
421
593
|
}
|
@@ -491,21 +663,26 @@ void Deoptimizer::EntryGenerator::Generate() {
|
|
491
663
|
__ neg(arg5);
|
492
664
|
|
493
665
|
// Allocate a new deoptimizer object.
|
494
|
-
__ PrepareCallCFunction(
|
666
|
+
__ PrepareCallCFunction(6);
|
495
667
|
__ movq(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
|
496
668
|
__ movq(arg1, rax);
|
497
669
|
__ movq(arg2, Immediate(type()));
|
498
670
|
// Args 3 and 4 are already in the right registers.
|
499
671
|
|
500
|
-
// On windows put the
|
501
|
-
// created space for this). On linux pass the
|
672
|
+
// On windows put the arguments on the stack (PrepareCallCFunction
|
673
|
+
// has created space for this). On linux pass the arguments in r8 and r9.
|
502
674
|
#ifdef _WIN64
|
503
|
-
__ movq(Operand(rsp,
|
675
|
+
__ movq(Operand(rsp, 4 * kPointerSize), arg5);
|
676
|
+
__ LoadAddress(arg5, ExternalReference::isolate_address());
|
677
|
+
__ movq(Operand(rsp, 5 * kPointerSize), arg5);
|
504
678
|
#else
|
505
679
|
__ movq(r8, arg5);
|
680
|
+
__ LoadAddress(r9, ExternalReference::isolate_address());
|
506
681
|
#endif
|
507
682
|
|
508
|
-
|
683
|
+
Isolate* isolate = masm()->isolate();
|
684
|
+
|
685
|
+
__ CallCFunction(ExternalReference::new_deoptimizer_function(isolate), 6);
|
509
686
|
// Preserve deoptimizer object in register rax and get the input
|
510
687
|
// frame descriptor pointer.
|
511
688
|
__ movq(rbx, Operand(rax, Deoptimizer::input_offset()));
|
@@ -548,9 +725,11 @@ void Deoptimizer::EntryGenerator::Generate() {
|
|
548
725
|
|
549
726
|
// Compute the output frame in the deoptimizer.
|
550
727
|
__ push(rax);
|
551
|
-
__ PrepareCallCFunction(
|
728
|
+
__ PrepareCallCFunction(2);
|
552
729
|
__ movq(arg1, rax);
|
553
|
-
__
|
730
|
+
__ LoadAddress(arg2, ExternalReference::isolate_address());
|
731
|
+
__ CallCFunction(
|
732
|
+
ExternalReference::compute_output_frames_function(isolate), 2);
|
554
733
|
__ pop(rax);
|
555
734
|
|
556
735
|
// Replace the current frame with the output frames.
|
@@ -608,12 +787,8 @@ void Deoptimizer::EntryGenerator::Generate() {
|
|
608
787
|
}
|
609
788
|
|
610
789
|
// Set up the roots register.
|
611
|
-
|
612
|
-
__
|
613
|
-
|
614
|
-
__ movq(kSmiConstantRegister,
|
615
|
-
reinterpret_cast<uint64_t>(Smi::FromInt(kSmiConstantRegisterValue)),
|
616
|
-
RelocInfo::NONE);
|
790
|
+
__ InitializeRootRegister();
|
791
|
+
__ InitializeSmiConstantRegister();
|
617
792
|
|
618
793
|
// Return to the continuation point.
|
619
794
|
__ ret(0);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -269,6 +269,7 @@ void InstructionTable::AddJumpConditionalShort() {
|
|
269
269
|
|
270
270
|
static InstructionTable instruction_table;
|
271
271
|
|
272
|
+
|
272
273
|
static InstructionDesc cmov_instructions[16] = {
|
273
274
|
{"cmovo", TWO_OPERANDS_INSTR, REG_OPER_OP_ORDER, false},
|
274
275
|
{"cmovno", TWO_OPERANDS_INSTR, REG_OPER_OP_ORDER, false},
|
@@ -451,9 +452,11 @@ void DisassemblerX64::AppendToBuffer(const char* format, ...) {
|
|
451
452
|
|
452
453
|
int DisassemblerX64::PrintRightOperandHelper(
|
453
454
|
byte* modrmp,
|
454
|
-
RegisterNameMapping
|
455
|
+
RegisterNameMapping direct_register_name) {
|
455
456
|
int mod, regop, rm;
|
456
457
|
get_modrm(*modrmp, &mod, ®op, &rm);
|
458
|
+
RegisterNameMapping register_name = (mod == 3) ? direct_register_name :
|
459
|
+
&DisassemblerX64::NameOfCPURegister;
|
457
460
|
switch (mod) {
|
458
461
|
case 0:
|
459
462
|
if ((rm & 7) == 5) {
|
@@ -1028,7 +1031,7 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) {
|
|
1028
1031
|
} else if (opcode == 0x6F) {
|
1029
1032
|
AppendToBuffer("movdqa %s,",
|
1030
1033
|
NameOfXMMRegister(regop));
|
1031
|
-
current +=
|
1034
|
+
current += PrintRightXMMOperand(current);
|
1032
1035
|
} else if (opcode == 0x7E) {
|
1033
1036
|
AppendToBuffer("mov%c ",
|
1034
1037
|
rex_w() ? 'q' : 'd');
|
@@ -1036,18 +1039,22 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) {
|
|
1036
1039
|
AppendToBuffer(", %s", NameOfXMMRegister(regop));
|
1037
1040
|
} else if (opcode == 0x7F) {
|
1038
1041
|
AppendToBuffer("movdqa ");
|
1039
|
-
current +=
|
1042
|
+
current += PrintRightXMMOperand(current);
|
1040
1043
|
AppendToBuffer(", %s", NameOfXMMRegister(regop));
|
1041
1044
|
} else {
|
1042
1045
|
const char* mnemonic = "?";
|
1043
|
-
if (opcode ==
|
1046
|
+
if (opcode == 0x50) {
|
1047
|
+
mnemonic = "movmskpd";
|
1048
|
+
} else if (opcode == 0x54) {
|
1049
|
+
mnemonic = "andpd";
|
1050
|
+
} else if (opcode == 0x56) {
|
1051
|
+
mnemonic = "orpd";
|
1052
|
+
} else if (opcode == 0x57) {
|
1044
1053
|
mnemonic = "xorpd";
|
1045
1054
|
} else if (opcode == 0x2E) {
|
1046
1055
|
mnemonic = "ucomisd";
|
1047
1056
|
} else if (opcode == 0x2F) {
|
1048
1057
|
mnemonic = "comisd";
|
1049
|
-
} else if (opcode == 0x50) {
|
1050
|
-
mnemonic = "movmskpd";
|
1051
1058
|
} else {
|
1052
1059
|
UnimplementedInstruction();
|
1053
1060
|
}
|
@@ -1064,11 +1071,11 @@ int DisassemblerX64::TwoByteOpcodeInstruction(byte* data) {
|
|
1064
1071
|
int mod, regop, rm;
|
1065
1072
|
get_modrm(*current, &mod, ®op, &rm);
|
1066
1073
|
if (opcode == 0x11) {
|
1067
|
-
current +=
|
1074
|
+
current += PrintRightXMMOperand(current);
|
1068
1075
|
AppendToBuffer(",%s", NameOfXMMRegister(regop));
|
1069
1076
|
} else {
|
1070
1077
|
AppendToBuffer("%s,", NameOfXMMRegister(regop));
|
1071
|
-
current +=
|
1078
|
+
current += PrintRightXMMOperand(current);
|
1072
1079
|
}
|
1073
1080
|
} else if (opcode == 0x2A) {
|
1074
1081
|
// CVTSI2SD: integer to XMM double conversion.
|
@@ -1431,19 +1438,26 @@ int DisassemblerX64::InstructionDecode(v8::internal::Vector<char> out_buffer,
|
|
1431
1438
|
{
|
1432
1439
|
bool is_byte = *data == 0xC6;
|
1433
1440
|
data++;
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1441
|
+
if (is_byte) {
|
1442
|
+
AppendToBuffer("movb ");
|
1443
|
+
data += PrintRightByteOperand(data);
|
1444
|
+
int32_t imm = *data;
|
1445
|
+
AppendToBuffer(",0x%x", imm);
|
1446
|
+
data++;
|
1447
|
+
} else {
|
1448
|
+
AppendToBuffer("mov%c ", operand_size_code());
|
1449
|
+
data += PrintRightOperand(data);
|
1450
|
+
int32_t imm = *reinterpret_cast<int32_t*>(data);
|
1451
|
+
AppendToBuffer(",0x%x", imm);
|
1452
|
+
data += 4;
|
1453
|
+
}
|
1440
1454
|
}
|
1441
1455
|
break;
|
1442
1456
|
|
1443
1457
|
case 0x80: {
|
1444
1458
|
data++;
|
1445
1459
|
AppendToBuffer("cmpb ");
|
1446
|
-
data +=
|
1460
|
+
data += PrintRightByteOperand(data);
|
1447
1461
|
int32_t imm = *data;
|
1448
1462
|
AppendToBuffer(",0x%x", imm);
|
1449
1463
|
data++;
|
@@ -1457,9 +1471,15 @@ int DisassemblerX64::InstructionDecode(v8::internal::Vector<char> out_buffer,
|
|
1457
1471
|
int mod, regop, rm;
|
1458
1472
|
data++;
|
1459
1473
|
get_modrm(*data, &mod, ®op, &rm);
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1474
|
+
if (is_byte) {
|
1475
|
+
AppendToBuffer("movb ");
|
1476
|
+
data += PrintRightByteOperand(data);
|
1477
|
+
AppendToBuffer(",%s", NameOfByteCPURegister(regop));
|
1478
|
+
} else {
|
1479
|
+
AppendToBuffer("mov%c ", operand_size_code());
|
1480
|
+
data += PrintRightOperand(data);
|
1481
|
+
AppendToBuffer(",%s", NameOfCPURegister(regop));
|
1482
|
+
}
|
1463
1483
|
}
|
1464
1484
|
break;
|
1465
1485
|
|
@@ -1489,7 +1509,7 @@ int DisassemblerX64::InstructionDecode(v8::internal::Vector<char> out_buffer,
|
|
1489
1509
|
get_modrm(*data, &mod, ®op, &rm);
|
1490
1510
|
if (regop == 1) {
|
1491
1511
|
AppendToBuffer("decb ");
|
1492
|
-
data +=
|
1512
|
+
data += PrintRightByteOperand(data);
|
1493
1513
|
} else {
|
1494
1514
|
UnimplementedInstruction();
|
1495
1515
|
}
|
@@ -1648,9 +1668,8 @@ static const char* xmm_regs[16] = {
|
|
1648
1668
|
|
1649
1669
|
|
1650
1670
|
const char* NameConverter::NameOfAddress(byte* addr) const {
|
1651
|
-
|
1652
|
-
|
1653
|
-
return tmp_buffer.start();
|
1671
|
+
v8::internal::OS::SNPrintF(tmp_buffer_, "%p", addr);
|
1672
|
+
return tmp_buffer_.start();
|
1654
1673
|
}
|
1655
1674
|
|
1656
1675
|
|