mustang 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|
@@ -48,17 +48,20 @@ enum AllocationFlags {
|
|
48
48
|
// a spare register). The register isn't callee save, and not used by the
|
49
49
|
// function calling convention.
|
50
50
|
static const Register kScratchRegister = { 10 }; // r10.
|
51
|
-
static const Register kSmiConstantRegister = {
|
51
|
+
static const Register kSmiConstantRegister = { 12 }; // r12 (callee save).
|
52
52
|
static const Register kRootRegister = { 13 }; // r13 (callee save).
|
53
53
|
// Value of smi in kSmiConstantRegister.
|
54
54
|
static const int kSmiConstantRegisterValue = 1;
|
55
|
+
// Actual value of root register is offset from the root array's start
|
56
|
+
// to take advantage of negitive 8-bit displacement values.
|
57
|
+
static const int kRootRegisterBias = 128;
|
55
58
|
|
56
59
|
// Convenience for platform-independent signatures.
|
57
60
|
typedef Operand MemOperand;
|
58
61
|
|
59
62
|
// Forward declaration.
|
60
63
|
class JumpTarget;
|
61
|
-
class
|
64
|
+
class CallWrapper;
|
62
65
|
|
63
66
|
struct SmiIndex {
|
64
67
|
SmiIndex(Register index_register, ScaleFactor scale)
|
@@ -71,13 +74,64 @@ struct SmiIndex {
|
|
71
74
|
// MacroAssembler implements a collection of frequently used macros.
|
72
75
|
class MacroAssembler: public Assembler {
|
73
76
|
public:
|
74
|
-
|
75
|
-
|
77
|
+
// The isolate parameter can be NULL if the macro assembler should
|
78
|
+
// not use isolate-dependent functionality. In this case, it's the
|
79
|
+
// responsibility of the caller to never invoke such function on the
|
80
|
+
// macro assembler.
|
81
|
+
MacroAssembler(Isolate* isolate, void* buffer, int size);
|
82
|
+
|
83
|
+
// Prevent the use of the RootArray during the lifetime of this
|
84
|
+
// scope object.
|
85
|
+
class NoRootArrayScope BASE_EMBEDDED {
|
86
|
+
public:
|
87
|
+
explicit NoRootArrayScope(MacroAssembler* assembler)
|
88
|
+
: variable_(&assembler->root_array_available_),
|
89
|
+
old_value_(assembler->root_array_available_) {
|
90
|
+
assembler->root_array_available_ = false;
|
91
|
+
}
|
92
|
+
~NoRootArrayScope() {
|
93
|
+
*variable_ = old_value_;
|
94
|
+
}
|
95
|
+
private:
|
96
|
+
bool* variable_;
|
97
|
+
bool old_value_;
|
98
|
+
};
|
99
|
+
|
100
|
+
// Operand pointing to an external reference.
|
101
|
+
// May emit code to set up the scratch register. The operand is
|
102
|
+
// only guaranteed to be correct as long as the scratch register
|
103
|
+
// isn't changed.
|
104
|
+
// If the operand is used more than once, use a scratch register
|
105
|
+
// that is guaranteed not to be clobbered.
|
106
|
+
Operand ExternalOperand(ExternalReference reference,
|
107
|
+
Register scratch = kScratchRegister);
|
108
|
+
// Loads and stores the value of an external reference.
|
109
|
+
// Special case code for load and store to take advantage of
|
110
|
+
// load_rax/store_rax if possible/necessary.
|
111
|
+
// For other operations, just use:
|
112
|
+
// Operand operand = ExternalOperand(extref);
|
113
|
+
// operation(operand, ..);
|
114
|
+
void Load(Register destination, ExternalReference source);
|
115
|
+
void Store(ExternalReference destination, Register source);
|
116
|
+
// Loads the address of the external reference into the destination
|
117
|
+
// register.
|
118
|
+
void LoadAddress(Register destination, ExternalReference source);
|
119
|
+
// Returns the size of the code generated by LoadAddress.
|
120
|
+
// Used by CallSize(ExternalReference) to find the size of a call.
|
121
|
+
int LoadAddressSize(ExternalReference source);
|
122
|
+
|
123
|
+
// Operations on roots in the root-array.
|
76
124
|
void LoadRoot(Register destination, Heap::RootListIndex index);
|
125
|
+
void StoreRoot(Register source, Heap::RootListIndex index);
|
126
|
+
// Load a root value where the index (or part of it) is variable.
|
127
|
+
// The variable_offset register is added to the fixed_offset value
|
128
|
+
// to get the index into the root-array.
|
129
|
+
void LoadRootIndexed(Register destination,
|
130
|
+
Register variable_offset,
|
131
|
+
int fixed_offset);
|
77
132
|
void CompareRoot(Register with, Heap::RootListIndex index);
|
78
133
|
void CompareRoot(const Operand& with, Heap::RootListIndex index);
|
79
134
|
void PushRoot(Heap::RootListIndex index);
|
80
|
-
void StoreRoot(Register source, Heap::RootListIndex index);
|
81
135
|
|
82
136
|
// ---------------------------------------------------------------------------
|
83
137
|
// GC Support
|
@@ -174,7 +228,14 @@ class MacroAssembler: public Assembler {
|
|
174
228
|
// Store the value in register src in the safepoint register stack
|
175
229
|
// slot for register dst.
|
176
230
|
void StoreToSafepointRegisterSlot(Register dst, Register src);
|
231
|
+
void LoadFromSafepointRegisterSlot(Register dst, Register src);
|
177
232
|
|
233
|
+
void InitializeRootRegister() {
|
234
|
+
ExternalReference roots_address =
|
235
|
+
ExternalReference::roots_address(isolate());
|
236
|
+
movq(kRootRegister, roots_address);
|
237
|
+
addq(kRootRegister, Immediate(kRootRegisterBias));
|
238
|
+
}
|
178
239
|
|
179
240
|
// ---------------------------------------------------------------------------
|
180
241
|
// JavaScript invokes
|
@@ -184,32 +245,32 @@ class MacroAssembler: public Assembler {
|
|
184
245
|
const ParameterCount& expected,
|
185
246
|
const ParameterCount& actual,
|
186
247
|
InvokeFlag flag,
|
187
|
-
|
248
|
+
CallWrapper* call_wrapper = NULL);
|
188
249
|
|
189
250
|
void InvokeCode(Handle<Code> code,
|
190
251
|
const ParameterCount& expected,
|
191
252
|
const ParameterCount& actual,
|
192
253
|
RelocInfo::Mode rmode,
|
193
254
|
InvokeFlag flag,
|
194
|
-
|
255
|
+
CallWrapper* call_wrapper = NULL);
|
195
256
|
|
196
257
|
// Invoke the JavaScript function in the given register. Changes the
|
197
258
|
// current context to the context in the function before invoking.
|
198
259
|
void InvokeFunction(Register function,
|
199
260
|
const ParameterCount& actual,
|
200
261
|
InvokeFlag flag,
|
201
|
-
|
262
|
+
CallWrapper* call_wrapper = NULL);
|
202
263
|
|
203
264
|
void InvokeFunction(JSFunction* function,
|
204
265
|
const ParameterCount& actual,
|
205
266
|
InvokeFlag flag,
|
206
|
-
|
267
|
+
CallWrapper* call_wrapper = NULL);
|
207
268
|
|
208
269
|
// Invoke specified builtin JavaScript function. Adds an entry to
|
209
270
|
// the unresolved list if the name does not resolve.
|
210
271
|
void InvokeBuiltin(Builtins::JavaScript id,
|
211
272
|
InvokeFlag flag,
|
212
|
-
|
273
|
+
CallWrapper* call_wrapper = NULL);
|
213
274
|
|
214
275
|
// Store the function for the given builtin in the target register.
|
215
276
|
void GetBuiltinFunction(Register target, Builtins::JavaScript id);
|
@@ -263,8 +324,9 @@ class MacroAssembler: public Assembler {
|
|
263
324
|
int power);
|
264
325
|
|
265
326
|
|
266
|
-
// Simple comparison of smis.
|
267
|
-
|
327
|
+
// Simple comparison of smis. Both sides must be known smis to use these,
|
328
|
+
// otherwise use Cmp.
|
329
|
+
void SmiCompare(Register smi1, Register smi2);
|
268
330
|
void SmiCompare(Register dst, Smi* src);
|
269
331
|
void SmiCompare(Register dst, const Operand& src);
|
270
332
|
void SmiCompare(const Operand& dst, Register src);
|
@@ -412,6 +474,11 @@ class MacroAssembler: public Assembler {
|
|
412
474
|
Register src1,
|
413
475
|
Register src2,
|
414
476
|
LabelType* on_not_smi_result);
|
477
|
+
template <typename LabelType>
|
478
|
+
void SmiAdd(Register dst,
|
479
|
+
Register src1,
|
480
|
+
const Operand& src2,
|
481
|
+
LabelType* on_not_smi_result);
|
415
482
|
|
416
483
|
void SmiAdd(Register dst,
|
417
484
|
Register src1,
|
@@ -532,6 +599,10 @@ class MacroAssembler: public Assembler {
|
|
532
599
|
// Converts a positive smi to a negative index.
|
533
600
|
SmiIndex SmiToNegativeIndex(Register dst, Register src, int shift);
|
534
601
|
|
602
|
+
// Add the value of a smi in memory to an int32 register.
|
603
|
+
// Sets flags as a normal add.
|
604
|
+
void AddSmiField(Register dst, const Operand& src);
|
605
|
+
|
535
606
|
// Basic Smi operations.
|
536
607
|
void Move(Register dst, Smi* source) {
|
537
608
|
LoadSmiConstant(dst, source);
|
@@ -594,6 +665,8 @@ class MacroAssembler: public Assembler {
|
|
594
665
|
void Move(const Operand& dst, Handle<Object> source);
|
595
666
|
void Cmp(Register dst, Handle<Object> source);
|
596
667
|
void Cmp(const Operand& dst, Handle<Object> source);
|
668
|
+
void Cmp(Register dst, Smi* src);
|
669
|
+
void Cmp(const Operand& dst, Smi* src);
|
597
670
|
void Push(Handle<Object> source);
|
598
671
|
|
599
672
|
// Emit code to discard a non-negative number of pointer-sized elements
|
@@ -611,6 +684,24 @@ class MacroAssembler: public Assembler {
|
|
611
684
|
void Call(ExternalReference ext);
|
612
685
|
void Call(Handle<Code> code_object, RelocInfo::Mode rmode);
|
613
686
|
|
687
|
+
// The size of the code generated for different call instructions.
|
688
|
+
int CallSize(Address destination, RelocInfo::Mode rmode) {
|
689
|
+
return kCallInstructionLength;
|
690
|
+
}
|
691
|
+
int CallSize(ExternalReference ext);
|
692
|
+
int CallSize(Handle<Code> code_object) {
|
693
|
+
// Code calls use 32-bit relative addressing.
|
694
|
+
return kShortCallInstructionLength;
|
695
|
+
}
|
696
|
+
int CallSize(Register target) {
|
697
|
+
// Opcode: REX_opt FF /2 m64
|
698
|
+
return (target.high_bit() != 0) ? 3 : 2;
|
699
|
+
}
|
700
|
+
int CallSize(const Operand& target) {
|
701
|
+
// Opcode: REX_opt FF /2 m64
|
702
|
+
return (target.requires_rex() ? 2 : 1) + target.operand_size();
|
703
|
+
}
|
704
|
+
|
614
705
|
// Emit call to the code we are currently generating.
|
615
706
|
void CallSelf() {
|
616
707
|
Handle<Code> self(reinterpret_cast<Code**>(CodeObject().location()));
|
@@ -667,6 +758,7 @@ class MacroAssembler: public Assembler {
|
|
667
758
|
|
668
759
|
// Abort execution if argument is not a smi. Used in debug code.
|
669
760
|
void AbortIfNotSmi(Register object);
|
761
|
+
void AbortIfNotSmi(const Operand& object);
|
670
762
|
|
671
763
|
// Abort execution if argument is a string. Used in debug code.
|
672
764
|
void AbortIfNotString(Register object);
|
@@ -849,7 +941,7 @@ class MacroAssembler: public Assembler {
|
|
849
941
|
void StubReturn(int argc);
|
850
942
|
|
851
943
|
// Call a runtime routine.
|
852
|
-
void CallRuntime(Runtime::Function* f, int num_arguments);
|
944
|
+
void CallRuntime(const Runtime::Function* f, int num_arguments);
|
853
945
|
|
854
946
|
// Call a runtime function and save the value of XMM registers.
|
855
947
|
void CallRuntimeSaveDoubles(Runtime::FunctionId id);
|
@@ -857,7 +949,7 @@ class MacroAssembler: public Assembler {
|
|
857
949
|
// Call a runtime function, returning the CodeStub object called.
|
858
950
|
// Try to generate the stub code if necessary. Do not perform a GC
|
859
951
|
// but instead return a retry after GC failure.
|
860
|
-
MUST_USE_RESULT MaybeObject* TryCallRuntime(Runtime::Function* f,
|
952
|
+
MUST_USE_RESULT MaybeObject* TryCallRuntime(const Runtime::Function* f,
|
861
953
|
int num_arguments);
|
862
954
|
|
863
955
|
// Convenience function: Same as above, but takes the fid instead.
|
@@ -906,7 +998,7 @@ class MacroAssembler: public Assembler {
|
|
906
998
|
|
907
999
|
// Calls an API function. Allocates HandleScope, extracts
|
908
1000
|
// returned value from handle and propagates exceptions.
|
909
|
-
// Clobbers
|
1001
|
+
// Clobbers r14, r15, rbx and caller-save registers. Restores context.
|
910
1002
|
// On return removes stack_space * kPointerSize (GCed).
|
911
1003
|
MUST_USE_RESULT MaybeObject* TryCallApiFunctionAndReturn(
|
912
1004
|
ApiFunction* function, int stack_space);
|
@@ -941,7 +1033,22 @@ class MacroAssembler: public Assembler {
|
|
941
1033
|
// may be bigger than 2^16 - 1. Requires a scratch register.
|
942
1034
|
void Ret(int bytes_dropped, Register scratch);
|
943
1035
|
|
944
|
-
Handle<Object> CodeObject() {
|
1036
|
+
Handle<Object> CodeObject() {
|
1037
|
+
ASSERT(!code_object_.is_null());
|
1038
|
+
return code_object_;
|
1039
|
+
}
|
1040
|
+
|
1041
|
+
// Copy length bytes from source to destination.
|
1042
|
+
// Uses scratch register internally (if you have a low-eight register
|
1043
|
+
// free, do use it, otherwise kScratchRegister will be used).
|
1044
|
+
// The min_length is a minimum limit on the value that length will have.
|
1045
|
+
// The algorithm has some special cases that might be omitted if the string
|
1046
|
+
// is known to always be long.
|
1047
|
+
void CopyBytes(Register destination,
|
1048
|
+
Register source,
|
1049
|
+
Register length,
|
1050
|
+
int min_length = 0,
|
1051
|
+
Register scratch = kScratchRegister);
|
945
1052
|
|
946
1053
|
|
947
1054
|
// ---------------------------------------------------------------------------
|
@@ -978,12 +1085,13 @@ class MacroAssembler: public Assembler {
|
|
978
1085
|
|
979
1086
|
private:
|
980
1087
|
// Order general registers are pushed by Pushad.
|
981
|
-
// rax, rcx, rdx, rbx, rsi, rdi, r8, r9, r11,
|
1088
|
+
// rax, rcx, rdx, rbx, rsi, rdi, r8, r9, r11, r14, r15.
|
982
1089
|
static int kSafepointPushRegisterIndices[Register::kNumRegisters];
|
983
1090
|
static const int kNumSafepointSavedRegisters = 11;
|
984
1091
|
|
985
1092
|
bool generating_stub_;
|
986
1093
|
bool allow_stub_calls_;
|
1094
|
+
bool root_array_available_;
|
987
1095
|
|
988
1096
|
// Returns a register holding the smi value. The register MUST NOT be
|
989
1097
|
// modified. It may be the "smi 1 constant" register.
|
@@ -1003,7 +1111,7 @@ class MacroAssembler: public Assembler {
|
|
1003
1111
|
Register code_register,
|
1004
1112
|
LabelType* done,
|
1005
1113
|
InvokeFlag flag,
|
1006
|
-
|
1114
|
+
CallWrapper* call_wrapper);
|
1007
1115
|
|
1008
1116
|
// Activation support.
|
1009
1117
|
void EnterFrame(StackFrame::Type type);
|
@@ -1069,13 +1177,17 @@ class CodePatcher {
|
|
1069
1177
|
|
1070
1178
|
|
1071
1179
|
// Helper class for generating code or data associated with the code
|
1072
|
-
// right after a call instruction. As an example this can be used to
|
1180
|
+
// right before or after a call instruction. As an example this can be used to
|
1073
1181
|
// generate safepoint data after calls for crankshaft.
|
1074
|
-
class
|
1182
|
+
class CallWrapper {
|
1075
1183
|
public:
|
1076
|
-
|
1077
|
-
virtual ~
|
1078
|
-
|
1184
|
+
CallWrapper() { }
|
1185
|
+
virtual ~CallWrapper() { }
|
1186
|
+
// Called just before emitting a call. Argument is the size of the generated
|
1187
|
+
// call code.
|
1188
|
+
virtual void BeforeCall(int call_size) = 0;
|
1189
|
+
// Called just after emitting a call, i.e., at the return site for the call.
|
1190
|
+
virtual void AfterCall() = 0;
|
1079
1191
|
};
|
1080
1192
|
|
1081
1193
|
|
@@ -1188,6 +1300,26 @@ void MacroAssembler::SmiAdd(Register dst,
|
|
1188
1300
|
}
|
1189
1301
|
|
1190
1302
|
|
1303
|
+
template <typename LabelType>
|
1304
|
+
void MacroAssembler::SmiAdd(Register dst,
|
1305
|
+
Register src1,
|
1306
|
+
const Operand& src2,
|
1307
|
+
LabelType* on_not_smi_result) {
|
1308
|
+
ASSERT_NOT_NULL(on_not_smi_result);
|
1309
|
+
if (dst.is(src1)) {
|
1310
|
+
movq(kScratchRegister, src1);
|
1311
|
+
addq(kScratchRegister, src2);
|
1312
|
+
j(overflow, on_not_smi_result);
|
1313
|
+
movq(dst, kScratchRegister);
|
1314
|
+
} else {
|
1315
|
+
ASSERT(!src2.AddressUsesRegister(dst));
|
1316
|
+
movq(dst, src1);
|
1317
|
+
addq(dst, src2);
|
1318
|
+
j(overflow, on_not_smi_result);
|
1319
|
+
}
|
1320
|
+
}
|
1321
|
+
|
1322
|
+
|
1191
1323
|
template <typename LabelType>
|
1192
1324
|
void MacroAssembler::SmiSub(Register dst,
|
1193
1325
|
Register src1,
|
@@ -1754,26 +1886,26 @@ void MacroAssembler::InNewSpace(Register object,
|
|
1754
1886
|
// case the size of the new space is different between the snapshot maker
|
1755
1887
|
// and the running system.
|
1756
1888
|
if (scratch.is(object)) {
|
1757
|
-
movq(kScratchRegister, ExternalReference::new_space_mask());
|
1889
|
+
movq(kScratchRegister, ExternalReference::new_space_mask(isolate()));
|
1758
1890
|
and_(scratch, kScratchRegister);
|
1759
1891
|
} else {
|
1760
|
-
movq(scratch, ExternalReference::new_space_mask());
|
1892
|
+
movq(scratch, ExternalReference::new_space_mask(isolate()));
|
1761
1893
|
and_(scratch, object);
|
1762
1894
|
}
|
1763
|
-
movq(kScratchRegister, ExternalReference::new_space_start());
|
1895
|
+
movq(kScratchRegister, ExternalReference::new_space_start(isolate()));
|
1764
1896
|
cmpq(scratch, kScratchRegister);
|
1765
1897
|
j(cc, branch);
|
1766
1898
|
} else {
|
1767
|
-
ASSERT(is_int32(static_cast<int64_t>(
|
1899
|
+
ASSERT(is_int32(static_cast<int64_t>(HEAP->NewSpaceMask())));
|
1768
1900
|
intptr_t new_space_start =
|
1769
|
-
reinterpret_cast<intptr_t>(
|
1901
|
+
reinterpret_cast<intptr_t>(HEAP->NewSpaceStart());
|
1770
1902
|
movq(kScratchRegister, -new_space_start, RelocInfo::NONE);
|
1771
1903
|
if (scratch.is(object)) {
|
1772
1904
|
addq(scratch, kScratchRegister);
|
1773
1905
|
} else {
|
1774
1906
|
lea(scratch, Operand(object, kScratchRegister, times_1, 0));
|
1775
1907
|
}
|
1776
|
-
and_(scratch, Immediate(static_cast<int32_t>(
|
1908
|
+
and_(scratch, Immediate(static_cast<int32_t>(HEAP->NewSpaceMask())));
|
1777
1909
|
j(cc, branch);
|
1778
1910
|
}
|
1779
1911
|
}
|
@@ -1786,7 +1918,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
1786
1918
|
Register code_register,
|
1787
1919
|
LabelType* done,
|
1788
1920
|
InvokeFlag flag,
|
1789
|
-
|
1921
|
+
CallWrapper* call_wrapper) {
|
1790
1922
|
bool definitely_matches = false;
|
1791
1923
|
NearLabel invoke;
|
1792
1924
|
if (expected.is_immediate()) {
|
@@ -1826,8 +1958,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
1826
1958
|
}
|
1827
1959
|
|
1828
1960
|
if (!definitely_matches) {
|
1829
|
-
Handle<Code> adaptor =
|
1830
|
-
Handle<Code>(Builtins::builtin(Builtins::ArgumentsAdaptorTrampoline));
|
1961
|
+
Handle<Code> adaptor = isolate()->builtins()->ArgumentsAdaptorTrampoline();
|
1831
1962
|
if (!code_constant.is_null()) {
|
1832
1963
|
movq(rdx, code_constant, RelocInfo::EMBEDDED_OBJECT);
|
1833
1964
|
addq(rdx, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
@@ -1836,8 +1967,9 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
1836
1967
|
}
|
1837
1968
|
|
1838
1969
|
if (flag == CALL_FUNCTION) {
|
1970
|
+
if (call_wrapper != NULL) call_wrapper->BeforeCall(CallSize(adaptor));
|
1839
1971
|
Call(adaptor, RelocInfo::CODE_TARGET);
|
1840
|
-
if (
|
1972
|
+
if (call_wrapper != NULL) call_wrapper->AfterCall();
|
1841
1973
|
jmp(done);
|
1842
1974
|
} else {
|
1843
1975
|
Jump(adaptor, RelocInfo::CODE_TARGET);
|
@@ -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:
|
@@ -63,11 +63,16 @@ namespace internal {
|
|
63
63
|
*
|
64
64
|
* The registers rax, rbx, r9 and r11 are free to use for computations.
|
65
65
|
* If changed to use r12+, they should be saved as callee-save registers.
|
66
|
+
* The macro assembler special registers r12 and r13 (kSmiConstantRegister,
|
67
|
+
* kRootRegister) aren't special during execution of RegExp code (they don't
|
68
|
+
* hold the values assumed when creating JS code), so no Smi or Root related
|
69
|
+
* macro operations can be used.
|
66
70
|
*
|
67
71
|
* Each call to a C++ method should retain these registers.
|
68
72
|
*
|
69
73
|
* The stack will have the following content, in some order, indexable from the
|
70
74
|
* frame pointer (see, e.g., kStackHighEnd):
|
75
|
+
* - Isolate* isolate (Address of the current isolate)
|
71
76
|
* - direct_call (if 1, direct call from JavaScript code, if 0 call
|
72
77
|
* through the runtime system)
|
73
78
|
* - stack_area_base (High end of the memory area to use as
|
@@ -104,12 +109,13 @@ namespace internal {
|
|
104
109
|
* bool direct_call)
|
105
110
|
*/
|
106
111
|
|
107
|
-
#define __ ACCESS_MASM(masm_)
|
112
|
+
#define __ ACCESS_MASM((&masm_))
|
108
113
|
|
109
114
|
RegExpMacroAssemblerX64::RegExpMacroAssemblerX64(
|
110
115
|
Mode mode,
|
111
116
|
int registers_to_save)
|
112
|
-
: masm_(
|
117
|
+
: masm_(Isolate::Current(), NULL, kRegExpCodeSize),
|
118
|
+
no_root_array_scope_(&masm_),
|
113
119
|
code_relative_fixup_positions_(4),
|
114
120
|
mode_(mode),
|
115
121
|
num_registers_(registers_to_save),
|
@@ -126,7 +132,6 @@ RegExpMacroAssemblerX64::RegExpMacroAssemblerX64(
|
|
126
132
|
|
127
133
|
|
128
134
|
RegExpMacroAssemblerX64::~RegExpMacroAssemblerX64() {
|
129
|
-
delete masm_;
|
130
135
|
// Unuse labels in case we throw away the assembler without calling GetCode.
|
131
136
|
entry_label_.Unuse();
|
132
137
|
start_label_.Unuse();
|
@@ -397,13 +402,14 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
|
397
402
|
#endif
|
398
403
|
__ push(backtrack_stackpointer());
|
399
404
|
|
400
|
-
static const int num_arguments =
|
405
|
+
static const int num_arguments = 4;
|
401
406
|
__ PrepareCallCFunction(num_arguments);
|
402
407
|
|
403
408
|
// Put arguments into parameter registers. Parameters are
|
404
409
|
// Address byte_offset1 - Address captured substring's start.
|
405
410
|
// Address byte_offset2 - Address of current character position.
|
406
411
|
// size_t byte_length - length of capture in bytes(!)
|
412
|
+
// Isolate* isolate
|
407
413
|
#ifdef _WIN64
|
408
414
|
// Compute and set byte_offset1 (start of capture).
|
409
415
|
__ lea(rcx, Operand(rsi, rdx, times_1, 0));
|
@@ -411,6 +417,8 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
|
411
417
|
__ lea(rdx, Operand(rsi, rdi, times_1, 0));
|
412
418
|
// Set byte_length.
|
413
419
|
__ movq(r8, rbx);
|
420
|
+
// Isolate.
|
421
|
+
__ LoadAddress(r9, ExternalReference::isolate_address());
|
414
422
|
#else // AMD64 calling convention
|
415
423
|
// Compute byte_offset2 (current position = rsi+rdi).
|
416
424
|
__ lea(rax, Operand(rsi, rdi, times_1, 0));
|
@@ -420,13 +428,15 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
|
|
420
428
|
__ movq(rsi, rax);
|
421
429
|
// Set byte_length.
|
422
430
|
__ movq(rdx, rbx);
|
431
|
+
// Isolate.
|
432
|
+
__ LoadAddress(rcx, ExternalReference::isolate_address());
|
423
433
|
#endif
|
424
434
|
ExternalReference compare =
|
425
|
-
ExternalReference::re_case_insensitive_compare_uc16();
|
435
|
+
ExternalReference::re_case_insensitive_compare_uc16(masm_.isolate());
|
426
436
|
__ CallCFunction(compare, num_arguments);
|
427
437
|
|
428
438
|
// Restore original values before reacting on result value.
|
429
|
-
__ Move(code_object_pointer(), masm_
|
439
|
+
__ Move(code_object_pointer(), masm_.CodeObject());
|
430
440
|
__ pop(backtrack_stackpointer());
|
431
441
|
#ifndef _WIN64
|
432
442
|
__ pop(rdi);
|
@@ -740,7 +750,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
740
750
|
Label stack_ok;
|
741
751
|
|
742
752
|
ExternalReference stack_limit =
|
743
|
-
ExternalReference::address_of_stack_limit();
|
753
|
+
ExternalReference::address_of_stack_limit(masm_.isolate());
|
744
754
|
__ movq(rcx, rsp);
|
745
755
|
__ movq(kScratchRegister, stack_limit);
|
746
756
|
__ subq(rcx, Operand(kScratchRegister, 0));
|
@@ -756,7 +766,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
756
766
|
__ jmp(&exit_label_);
|
757
767
|
|
758
768
|
__ bind(&stack_limit_hit);
|
759
|
-
__ Move(code_object_pointer(), masm_
|
769
|
+
__ Move(code_object_pointer(), masm_.CodeObject());
|
760
770
|
CallCheckStackGuardState(); // Preserves no registers beside rbp and rsp.
|
761
771
|
__ testq(rax, rax);
|
762
772
|
// If returned value is non-zero, we exit with the returned value as result.
|
@@ -811,7 +821,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
811
821
|
// Initialize backtrack stack pointer.
|
812
822
|
__ movq(backtrack_stackpointer(), Operand(rbp, kStackHighEnd));
|
813
823
|
// Initialize code object pointer.
|
814
|
-
__ Move(code_object_pointer(), masm_
|
824
|
+
__ Move(code_object_pointer(), masm_.CodeObject());
|
815
825
|
// Load previous char as initial value of current-character.
|
816
826
|
Label at_start;
|
817
827
|
__ cmpb(Operand(rbp, kStartIndex), Immediate(0));
|
@@ -892,7 +902,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
892
902
|
__ j(not_zero, &exit_label_);
|
893
903
|
|
894
904
|
// Restore registers.
|
895
|
-
__ Move(code_object_pointer(), masm_
|
905
|
+
__ Move(code_object_pointer(), masm_.CodeObject());
|
896
906
|
__ pop(rdi);
|
897
907
|
__ pop(backtrack_stackpointer());
|
898
908
|
// String might have moved: Reload esi from frame.
|
@@ -914,18 +924,21 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
914
924
|
#endif
|
915
925
|
|
916
926
|
// Call GrowStack(backtrack_stackpointer())
|
917
|
-
static const int num_arguments =
|
927
|
+
static const int num_arguments = 3;
|
918
928
|
__ PrepareCallCFunction(num_arguments);
|
919
929
|
#ifdef _WIN64
|
920
|
-
// Microsoft passes parameters in rcx, rdx.
|
930
|
+
// Microsoft passes parameters in rcx, rdx, r8.
|
921
931
|
// First argument, backtrack stackpointer, is already in rcx.
|
922
932
|
__ lea(rdx, Operand(rbp, kStackHighEnd)); // Second argument
|
933
|
+
__ LoadAddress(r8, ExternalReference::isolate_address());
|
923
934
|
#else
|
924
|
-
// AMD64 ABI passes parameters in rdi, rsi.
|
935
|
+
// AMD64 ABI passes parameters in rdi, rsi, rdx.
|
925
936
|
__ movq(rdi, backtrack_stackpointer()); // First argument.
|
926
937
|
__ lea(rsi, Operand(rbp, kStackHighEnd)); // Second argument.
|
938
|
+
__ LoadAddress(rdx, ExternalReference::isolate_address());
|
927
939
|
#endif
|
928
|
-
ExternalReference grow_stack =
|
940
|
+
ExternalReference grow_stack =
|
941
|
+
ExternalReference::re_grow_stack(masm_.isolate());
|
929
942
|
__ CallCFunction(grow_stack, num_arguments);
|
930
943
|
// If return NULL, we have failed to grow the stack, and
|
931
944
|
// must exit with a stack-overflow exception.
|
@@ -934,7 +947,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
934
947
|
// Otherwise use return value as new stack pointer.
|
935
948
|
__ movq(backtrack_stackpointer(), rax);
|
936
949
|
// Restore saved registers and continue.
|
937
|
-
__ Move(code_object_pointer(), masm_
|
950
|
+
__ Move(code_object_pointer(), masm_.CodeObject());
|
938
951
|
#ifndef _WIN64
|
939
952
|
__ pop(rdi);
|
940
953
|
__ pop(rsi);
|
@@ -953,11 +966,12 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
|
953
966
|
FixupCodeRelativePositions();
|
954
967
|
|
955
968
|
CodeDesc code_desc;
|
956
|
-
masm_
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
969
|
+
masm_.GetCode(&code_desc);
|
970
|
+
Isolate* isolate = ISOLATE;
|
971
|
+
Handle<Code> code = isolate->factory()->NewCode(
|
972
|
+
code_desc, Code::ComputeFlags(Code::REGEXP),
|
973
|
+
masm_.CodeObject());
|
974
|
+
PROFILE(isolate, RegExpCodeCreateEvent(*code, *source));
|
961
975
|
return Handle<Object>::cast(code);
|
962
976
|
}
|
963
977
|
|
@@ -1126,7 +1140,7 @@ void RegExpMacroAssemblerX64::CallCheckStackGuardState() {
|
|
1126
1140
|
__ lea(rdi, Operand(rsp, -kPointerSize));
|
1127
1141
|
#endif
|
1128
1142
|
ExternalReference stack_check =
|
1129
|
-
ExternalReference::re_check_stack_guard_state();
|
1143
|
+
ExternalReference::re_check_stack_guard_state(masm_.isolate());
|
1130
1144
|
__ CallCFunction(stack_check, num_arguments);
|
1131
1145
|
}
|
1132
1146
|
|
@@ -1141,8 +1155,10 @@ static T& frame_entry(Address re_frame, int frame_offset) {
|
|
1141
1155
|
int RegExpMacroAssemblerX64::CheckStackGuardState(Address* return_address,
|
1142
1156
|
Code* re_code,
|
1143
1157
|
Address re_frame) {
|
1144
|
-
|
1145
|
-
|
1158
|
+
Isolate* isolate = frame_entry<Isolate*>(re_frame, kIsolate);
|
1159
|
+
ASSERT(isolate == Isolate::Current());
|
1160
|
+
if (isolate->stack_guard()->IsStackOverflow()) {
|
1161
|
+
isolate->StackOverflow();
|
1146
1162
|
return EXCEPTION;
|
1147
1163
|
}
|
1148
1164
|
|
@@ -1289,8 +1305,8 @@ void RegExpMacroAssemblerX64::FixupCodeRelativePositions() {
|
|
1289
1305
|
// Patch the relative offset to be relative to the Code object pointer
|
1290
1306
|
// instead.
|
1291
1307
|
int patch_position = position - kIntSize;
|
1292
|
-
int offset = masm_
|
1293
|
-
masm_
|
1308
|
+
int offset = masm_.long_at(patch_position);
|
1309
|
+
masm_.long_at_put(patch_position,
|
1294
1310
|
offset
|
1295
1311
|
+ position
|
1296
1312
|
+ Code::kHeaderSize
|
@@ -1324,7 +1340,7 @@ void RegExpMacroAssemblerX64::CheckPreemption() {
|
|
1324
1340
|
// Check for preemption.
|
1325
1341
|
Label no_preempt;
|
1326
1342
|
ExternalReference stack_limit =
|
1327
|
-
ExternalReference::address_of_stack_limit();
|
1343
|
+
ExternalReference::address_of_stack_limit(masm_.isolate());
|
1328
1344
|
__ load_rax(stack_limit);
|
1329
1345
|
__ cmpq(rsp, rax);
|
1330
1346
|
__ j(above, &no_preempt);
|
@@ -1338,7 +1354,7 @@ void RegExpMacroAssemblerX64::CheckPreemption() {
|
|
1338
1354
|
void RegExpMacroAssemblerX64::CheckStackLimit() {
|
1339
1355
|
Label no_stack_overflow;
|
1340
1356
|
ExternalReference stack_limit =
|
1341
|
-
ExternalReference::address_of_regexp_stack_limit();
|
1357
|
+
ExternalReference::address_of_regexp_stack_limit(masm_.isolate());
|
1342
1358
|
__ load_rax(stack_limit);
|
1343
1359
|
__ cmpq(backtrack_stackpointer(), rax);
|
1344
1360
|
__ j(above, &no_stack_overflow);
|