therubyracer 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of therubyracer might be problematic. Click here for more details.
- data/History.txt +11 -0
- data/Rakefile +1 -1
- data/ext/v8/extconf.rb +0 -18
- data/ext/v8/rr.cpp +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/AUTHORS +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/ChangeLog +239 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/LICENSE +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/SConstruct +29 -17
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-debug.h +61 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-profiler.h +182 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8.h +458 -257
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/SConscript +2 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.cc +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.cc +574 -30
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.h +12 -10
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apinatives.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apiutils.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arguments.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm-inl.h +38 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.cc +646 -101
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.h +174 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/builtins-arm.cc +56 -47
- data/ext/v8/upstream/2.3.3/src/arm/codegen-arm-inl.h +48 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.cc +2957 -1448
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.h +230 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.cc +25 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.h +16 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/cpu-arm.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/debug-arm.cc +76 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/disasm-arm.cc +168 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/fast-codegen-arm.cc +5 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.cc +4 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/full-codegen-arm.cc +1558 -248
- data/ext/v8/upstream/2.3.3/src/arm/ic-arm.cc +2258 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/jump-target-arm.cc +55 -103
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.cc +358 -185
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.h +136 -41
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.cc +26 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.cc +203 -22
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.h +7 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/stub-cache-arm.cc +531 -324
- data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm-inl.h +59 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.cc +247 -81
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.h +99 -83
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/array.js +2 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.cc +6 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.h +36 -10
- data/ext/v8/upstream/2.3.3/src/ast-inl.h +81 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.cc +14 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.h +20 -35
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.cc +32 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.h +0 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.cc +50 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.h +2 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bytecodes-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cached-powers.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.h +8 -6
- data/ext/v8/upstream/2.3.3/src/circular-queue-inl.h +53 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.h +0 -26
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.cc +2 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.cc +44 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.h +310 -31
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.cc +28 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.h +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.cc +45 -14
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.cc +11 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.cc +25 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler-inl.h +2 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.cc +68 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.h +19 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-posix.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-readline.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-windows.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.js +55 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/date.js +68 -137
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.cc +2 -8
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.cc +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-debugger.js +81 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.cc +275 -81
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.h +85 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disasm.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/double.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dtoa-config.c +0 -0
- data/ext/v8/upstream/2.3.3/src/dtoa.cc +77 -0
- data/ext/v8/upstream/2.3.3/src/dtoa.h +81 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.cc +111 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.h +12 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.cc +25 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.h +16 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.cc +2 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.h +1 -2
- data/ext/v8/upstream/2.3.3/src/fixed-dtoa.cc +405 -0
- data/ext/v8/upstream/{2.1.10/src/jump-target-light.cc → 2.3.3/src/fixed-dtoa.h} +22 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flag-definitions.h +14 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.cc +5 -9
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.cc +5 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.cc +387 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.h +102 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.cc +8 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/globals.h +44 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.cc +19 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.h +8 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-inl.h +56 -14
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.cc +85 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.h +45 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.cc +994 -396
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.h +220 -65
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32-inl.h +41 -12
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.cc +94 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.h +32 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/builtins-ia32.cc +42 -30
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.cc +1758 -916
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.h +67 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/cpu-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/debug-ia32.cc +46 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/disasm-ia32.cc +37 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/full-codegen-ia32.cc +1465 -198
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/ic-ia32.cc +688 -367
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/jump-target-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.cc +82 -180
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.h +41 -25
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.cc +68 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.h +1 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/stub-cache-ia32.cc +649 -302
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.cc +23 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.h +18 -27
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic-inl.h +30 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.cc +384 -66
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.h +65 -24
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/json.js +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.cc +20 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy.cc +79 -13
- data/ext/v8/upstream/{2.1.10/src/jump-target.h → 2.3.3/src/jump-target-heavy.h} +5 -47
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-light-inl.h +16 -2
- data/ext/v8/upstream/2.3.3/src/jump-target-light.cc +110 -0
- data/ext/v8/upstream/2.3.3/src/jump-target-light.h +192 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target.cc +0 -64
- data/ext/v8/upstream/2.3.3/src/jump-target.h +90 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit-debugger.js +141 -28
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.cc +19 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.cc +12 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.h +12 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macro-assembler.h +0 -16
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macros.py +21 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.cc +120 -109
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.h +25 -37
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/math.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/memory.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.cc +8 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.h +2 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.js +15 -7
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.cc +12 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.h +4 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/builtins-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.cc +9 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.h +1 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.cc +5 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/cpu-mips.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/debug-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/disasm-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/fast-codegen-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/full-codegen-mips.cc +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/ic-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/jump-target-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/stub-cache-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.cc +3 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mirror-debugger.js +46 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mksnapshot.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/natives.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-debug.cc +8 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-inl.h +235 -62
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.cc +497 -231
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.h +355 -149
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.cc +31 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-freebsd.cc +9 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-linux.cc +26 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-macos.cc +11 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-nullos.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-openbsd.cc +6 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-posix.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-solaris.cc +69 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-win32.cc +15 -11
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform.h +10 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/powers-ten.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/profile-generator-inl.h +26 -2
- data/ext/v8/upstream/2.3.3/src/profile-generator.cc +1830 -0
- data/ext/v8/upstream/2.3.3/src/profile-generator.h +853 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.cc +1 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp.js +25 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.cc +4 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.cc +85 -8
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.cc +547 -221
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.h +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.js +23 -31
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.cc +12 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.h +60 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.cc +156 -168
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.h +58 -62
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.cc +320 -242
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.h +81 -48
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/shell.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/simulator.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/smart-pointer.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-common.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-empty.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces-inl.h +177 -74
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.cc +138 -315
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.h +155 -124
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string.js +113 -119
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.cc +242 -97
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.h +118 -55
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/COPYING +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/dtoa.c +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/valgrind/valgrind.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.cc +107 -26
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.h +9 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.h +2 -2
- data/ext/v8/upstream/2.3.3/src/unbound-queue-inl.h +95 -0
- data/ext/v8/upstream/2.3.3/src/unbound-queue.h +67 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/uri.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.h +83 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.h +20 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.cc +5 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.h +0 -0
- data/ext/v8/upstream/2.3.3/src/v8dll-main.cc +39 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8natives.js +210 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.cc +3 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy-inl.h +40 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light-inl.h +106 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light.cc +4 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state-inl.h +6 -3
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.cc +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.h +6 -4
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64-inl.h +42 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.cc +285 -53
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.h +54 -18
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/builtins-x64.cc +31 -33
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.cc +9787 -8722
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.h +82 -47
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/cpu-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/debug-x64.cc +55 -6
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/disasm-x64.cc +42 -19
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/fast-codegen-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.h +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/full-codegen-x64.cc +1487 -210
- data/ext/v8/upstream/2.3.3/src/x64/ic-x64.cc +1907 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/jump-target-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.cc +366 -338
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.h +83 -38
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.cc +82 -23
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.h +1 -2
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64-inl.h +6 -5
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.cc +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.h +1 -1
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/stub-cache-x64.cc +556 -377
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.cc +197 -98
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.h +37 -28
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone-inl.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.cc +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.h +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/codemap.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/consarray.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/csvparser.js +0 -0
- data/ext/v8/upstream/2.3.3/tools/gc-nvp-trace-processor.py +317 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/generate-ten-powers.scm +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/gyp/v8.gyp +87 -20
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/js2c.py +19 -15
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/jsmin.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/logreader.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-nm +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-tick-processor +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/annotate +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/common +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/dump +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/report +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/reset +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/run +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/shutdown +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/start +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/presubmit.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/process-heap-prof.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile_view.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/run-valgrind.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/stats-viewer.py +25 -13
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/test.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor-driver.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.js +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.py +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/utils.py +0 -0
- data/ext/v8/upstream/2.3.3/tools/v8.xcodeproj/project.pbxproj +1855 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/README.txt +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/arm.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/common.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8js2c.cmd +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/debug.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/ia32.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/js2c.cmd +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/release.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base.vcproj +40 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_arm.vcproj +20 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_x64.vcproj +16 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest.vcproj +4 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.sln +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/x64.vsprops +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.bat +0 -0
- data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.py +0 -0
- data/ext/v8/upstream/Makefile +1 -1
- data/ext/v8/v8_template.cpp +94 -2
- data/ext/v8/v8_try_catch.cpp +2 -2
- data/lib/v8.rb +1 -1
- data/lib/v8/access.rb +93 -40
- data/lib/v8/cli.rb +1 -1
- data/lib/v8/function.rb +14 -2
- data/spec/redjs/jsapi_spec.rb +231 -42
- data/therubyracer.gemspec +3 -3
- metadata +463 -453
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2-inl.h +0 -263
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.cc +0 -1878
- data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.h +0 -1036
- data/ext/v8/upstream/2.1.10/src/arm/codegen-arm-inl.h +0 -72
- data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +0 -1833
- data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +0 -101
- data/ext/v8/upstream/2.1.10/src/profile-generator.cc +0 -583
- data/ext/v8/upstream/2.1.10/src/profile-generator.h +0 -364
- data/ext/v8/upstream/2.1.10/src/x64/ic-x64.cc +0 -1621
@@ -27,6 +27,8 @@
|
|
27
27
|
|
28
28
|
#include "v8.h"
|
29
29
|
|
30
|
+
#if defined(V8_TARGET_ARCH_X64)
|
31
|
+
|
30
32
|
#include "codegen-inl.h"
|
31
33
|
#include "jump-target-inl.h"
|
32
34
|
#include "register-allocator-inl.h"
|
@@ -431,3 +433,5 @@ void BreakTarget::Bind(Result* arg) {
|
|
431
433
|
|
432
434
|
|
433
435
|
} } // namespace v8::internal
|
436
|
+
|
437
|
+
#endif // V8_TARGET_ARCH_X64
|
@@ -27,12 +27,15 @@
|
|
27
27
|
|
28
28
|
#include "v8.h"
|
29
29
|
|
30
|
+
#if defined(V8_TARGET_ARCH_X64)
|
31
|
+
|
30
32
|
#include "bootstrapper.h"
|
31
33
|
#include "codegen-inl.h"
|
32
34
|
#include "assembler-x64.h"
|
33
35
|
#include "macro-assembler-x64.h"
|
34
36
|
#include "serialize.h"
|
35
37
|
#include "debug.h"
|
38
|
+
#include "heap.h"
|
36
39
|
|
37
40
|
namespace v8 {
|
38
41
|
namespace internal {
|
@@ -50,6 +53,11 @@ void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) {
|
|
50
53
|
}
|
51
54
|
|
52
55
|
|
56
|
+
void MacroAssembler::StoreRoot(Register source, Heap::RootListIndex index) {
|
57
|
+
movq(Operand(kRootRegister, index << kPointerSizeLog2), source);
|
58
|
+
}
|
59
|
+
|
60
|
+
|
53
61
|
void MacroAssembler::PushRoot(Heap::RootListIndex index) {
|
54
62
|
push(Operand(kRootRegister, index << kPointerSizeLog2));
|
55
63
|
}
|
@@ -83,79 +91,35 @@ void MacroAssembler::RecordWriteHelper(Register object,
|
|
83
91
|
bind(¬_in_new_space);
|
84
92
|
}
|
85
93
|
|
86
|
-
Label fast;
|
87
|
-
|
88
94
|
// Compute the page start address from the heap object pointer, and reuse
|
89
95
|
// the 'object' register for it.
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
// the extra remembered set area of a large object.
|
103
|
-
cmpq(pointer_offset, Immediate(Page::kPageSize / kPointerSize));
|
104
|
-
j(below, &fast);
|
105
|
-
|
106
|
-
// We have a large object containing pointers. It must be a FixedArray.
|
107
|
-
|
108
|
-
// Adjust 'page_start' so that addressing using 'pointer_offset' hits the
|
109
|
-
// extra remembered set after the large object.
|
110
|
-
|
111
|
-
// Load the array length into 'scratch'.
|
112
|
-
movl(scratch,
|
113
|
-
Operand(page_start,
|
114
|
-
Page::kObjectStartOffset + FixedArray::kLengthOffset));
|
115
|
-
Register array_length = scratch;
|
116
|
-
|
117
|
-
// Extra remembered set starts right after the large object (a FixedArray), at
|
118
|
-
// page_start + kObjectStartOffset + objectSize
|
119
|
-
// where objectSize is FixedArray::kHeaderSize + kPointerSize * array_length.
|
120
|
-
// Add the delta between the end of the normal RSet and the start of the
|
121
|
-
// extra RSet to 'page_start', so that addressing the bit using
|
122
|
-
// 'pointer_offset' hits the extra RSet words.
|
123
|
-
lea(page_start,
|
124
|
-
Operand(page_start, array_length, times_pointer_size,
|
125
|
-
Page::kObjectStartOffset + FixedArray::kHeaderSize
|
126
|
-
- Page::kRSetEndOffset));
|
127
|
-
|
128
|
-
// NOTE: For now, we use the bit-test-and-set (bts) x86 instruction
|
129
|
-
// to limit code size. We should probably evaluate this decision by
|
130
|
-
// measuring the performance of an equivalent implementation using
|
131
|
-
// "simpler" instructions
|
132
|
-
bind(&fast);
|
133
|
-
bts(Operand(page_start, Page::kRSetOffset), pointer_offset);
|
134
|
-
}
|
135
|
-
|
136
|
-
|
137
|
-
// Set the remembered set bit for [object+offset].
|
138
|
-
// object is the object being stored into, value is the object being stored.
|
139
|
-
// If offset is zero, then the smi_index register contains the array index into
|
140
|
-
// the elements array represented as a smi. Otherwise it can be used as a
|
141
|
-
// scratch register.
|
142
|
-
// All registers are clobbered by the operation.
|
96
|
+
and_(object, Immediate(~Page::kPageAlignmentMask));
|
97
|
+
|
98
|
+
// Compute number of region covering addr. See Page::GetRegionNumberForAddress
|
99
|
+
// method for more details.
|
100
|
+
shrl(addr, Immediate(Page::kRegionSizeLog2));
|
101
|
+
andl(addr, Immediate(Page::kPageAlignmentMask >> Page::kRegionSizeLog2));
|
102
|
+
|
103
|
+
// Set dirty mark for region.
|
104
|
+
bts(Operand(object, Page::kDirtyFlagOffset), addr);
|
105
|
+
}
|
106
|
+
|
107
|
+
|
143
108
|
void MacroAssembler::RecordWrite(Register object,
|
144
109
|
int offset,
|
145
110
|
Register value,
|
146
|
-
Register
|
111
|
+
Register index) {
|
147
112
|
// The compiled code assumes that record write doesn't change the
|
148
113
|
// context register, so we check that none of the clobbered
|
149
114
|
// registers are rsi.
|
150
|
-
ASSERT(!object.is(rsi) && !value.is(rsi) && !
|
115
|
+
ASSERT(!object.is(rsi) && !value.is(rsi) && !index.is(rsi));
|
151
116
|
|
152
|
-
// First, check if a
|
153
|
-
// catch stores of Smis and stores into young gen
|
154
|
-
// for the remembered set bits).
|
117
|
+
// First, check if a write barrier is even needed. The tests below
|
118
|
+
// catch stores of Smis and stores into young gen.
|
155
119
|
Label done;
|
156
120
|
JumpIfSmi(value, &done);
|
157
121
|
|
158
|
-
RecordWriteNonSmi(object, offset, value,
|
122
|
+
RecordWriteNonSmi(object, offset, value, index);
|
159
123
|
bind(&done);
|
160
124
|
|
161
125
|
// Clobber all input registers when running with the debug-code flag
|
@@ -166,7 +130,36 @@ void MacroAssembler::RecordWrite(Register object,
|
|
166
130
|
if (FLAG_debug_code) {
|
167
131
|
movq(object, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
168
132
|
movq(value, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
169
|
-
movq(
|
133
|
+
movq(index, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
void MacroAssembler::RecordWrite(Register object,
|
139
|
+
Register address,
|
140
|
+
Register value) {
|
141
|
+
// The compiled code assumes that record write doesn't change the
|
142
|
+
// context register, so we check that none of the clobbered
|
143
|
+
// registers are esi.
|
144
|
+
ASSERT(!object.is(rsi) && !value.is(rsi) && !address.is(rsi));
|
145
|
+
|
146
|
+
// First, check if a write barrier is even needed. The tests below
|
147
|
+
// catch stores of Smis and stores into young gen.
|
148
|
+
Label done;
|
149
|
+
JumpIfSmi(value, &done);
|
150
|
+
|
151
|
+
InNewSpace(object, value, equal, &done);
|
152
|
+
|
153
|
+
RecordWriteHelper(object, address, value);
|
154
|
+
|
155
|
+
bind(&done);
|
156
|
+
|
157
|
+
// Clobber all input registers when running with the debug-code flag
|
158
|
+
// turned on to provoke errors.
|
159
|
+
if (FLAG_debug_code) {
|
160
|
+
movq(object, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
161
|
+
movq(address, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
162
|
+
movq(value, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
170
163
|
}
|
171
164
|
}
|
172
165
|
|
@@ -174,7 +167,7 @@ void MacroAssembler::RecordWrite(Register object,
|
|
174
167
|
void MacroAssembler::RecordWriteNonSmi(Register object,
|
175
168
|
int offset,
|
176
169
|
Register scratch,
|
177
|
-
Register
|
170
|
+
Register index) {
|
178
171
|
Label done;
|
179
172
|
|
180
173
|
if (FLAG_debug_code) {
|
@@ -182,10 +175,20 @@ void MacroAssembler::RecordWriteNonSmi(Register object,
|
|
182
175
|
JumpIfNotSmi(object, &okay);
|
183
176
|
Abort("MacroAssembler::RecordWriteNonSmi cannot deal with smis");
|
184
177
|
bind(&okay);
|
178
|
+
|
179
|
+
if (offset == 0) {
|
180
|
+
// index must be int32.
|
181
|
+
Register tmp = index.is(rax) ? rbx : rax;
|
182
|
+
push(tmp);
|
183
|
+
movl(tmp, index);
|
184
|
+
cmpq(tmp, index);
|
185
|
+
Check(equal, "Index register for RecordWrite must be untagged int32.");
|
186
|
+
pop(tmp);
|
187
|
+
}
|
185
188
|
}
|
186
189
|
|
187
|
-
// Test that the object address is not in the new space.
|
188
|
-
//
|
190
|
+
// Test that the object address is not in the new space. We cannot
|
191
|
+
// update page dirty marks for new space pages.
|
189
192
|
InNewSpace(object, scratch, equal, &done);
|
190
193
|
|
191
194
|
// The offset is relative to a tagged or untagged HeapObject pointer,
|
@@ -194,48 +197,18 @@ void MacroAssembler::RecordWriteNonSmi(Register object,
|
|
194
197
|
ASSERT(IsAligned(offset, kPointerSize) ||
|
195
198
|
IsAligned(offset + kHeapObjectTag, kPointerSize));
|
196
199
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
// tagged or untagged.
|
201
|
-
if ((offset > 0) && (offset < Page::kMaxHeapObjectSize - kHeapObjectTag)) {
|
202
|
-
// Compute the bit offset in the remembered set, leave it in 'scratch'.
|
203
|
-
lea(scratch, Operand(object, offset));
|
204
|
-
ASSERT(is_int32(Page::kPageAlignmentMask));
|
205
|
-
and_(scratch, Immediate(static_cast<int32_t>(Page::kPageAlignmentMask)));
|
206
|
-
shr(scratch, Immediate(kPointerSizeLog2));
|
207
|
-
|
208
|
-
// Compute the page address from the heap object pointer, leave it in
|
209
|
-
// 'object' (immediate value is sign extended).
|
210
|
-
and_(object, Immediate(~Page::kPageAlignmentMask));
|
211
|
-
|
212
|
-
// NOTE: For now, we use the bit-test-and-set (bts) x86 instruction
|
213
|
-
// to limit code size. We should probably evaluate this decision by
|
214
|
-
// measuring the performance of an equivalent implementation using
|
215
|
-
// "simpler" instructions
|
216
|
-
bts(Operand(object, Page::kRSetOffset), scratch);
|
200
|
+
Register dst = index;
|
201
|
+
if (offset != 0) {
|
202
|
+
lea(dst, Operand(object, offset));
|
217
203
|
} else {
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
SmiIndex index = SmiToIndex(smi_index, smi_index, kPointerSizeLog2);
|
225
|
-
lea(dst, FieldOperand(object,
|
226
|
-
index.reg,
|
227
|
-
index.scale,
|
228
|
-
FixedArray::kHeaderSize));
|
229
|
-
}
|
230
|
-
// If we are already generating a shared stub, not inlining the
|
231
|
-
// record write code isn't going to save us any memory.
|
232
|
-
if (generating_stub()) {
|
233
|
-
RecordWriteHelper(object, dst, scratch);
|
234
|
-
} else {
|
235
|
-
RecordWriteStub stub(object, dst, scratch);
|
236
|
-
CallStub(&stub);
|
237
|
-
}
|
204
|
+
// array access: calculate the destination address in the same manner as
|
205
|
+
// KeyedStoreIC::GenerateGeneric.
|
206
|
+
lea(dst, FieldOperand(object,
|
207
|
+
index,
|
208
|
+
times_pointer_size,
|
209
|
+
FixedArray::kHeaderSize));
|
238
210
|
}
|
211
|
+
RecordWriteHelper(object, dst, scratch);
|
239
212
|
|
240
213
|
bind(&done);
|
241
214
|
|
@@ -244,7 +217,7 @@ void MacroAssembler::RecordWriteNonSmi(Register object,
|
|
244
217
|
if (FLAG_debug_code) {
|
245
218
|
movq(object, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
246
219
|
movq(scratch, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
247
|
-
movq(
|
220
|
+
movq(index, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
248
221
|
}
|
249
222
|
}
|
250
223
|
|
@@ -401,7 +374,7 @@ void MacroAssembler::CallRuntime(Runtime::Function* f, int num_arguments) {
|
|
401
374
|
// arguments passed in because it is constant. At some point we
|
402
375
|
// should remove this need and make the runtime routine entry code
|
403
376
|
// smarter.
|
404
|
-
|
377
|
+
Set(rax, num_arguments);
|
405
378
|
movq(rbx, ExternalReference(f));
|
406
379
|
CEntryStub ces(f->result_size);
|
407
380
|
CallStub(&ces);
|
@@ -410,7 +383,7 @@ void MacroAssembler::CallRuntime(Runtime::Function* f, int num_arguments) {
|
|
410
383
|
|
411
384
|
void MacroAssembler::CallExternalReference(const ExternalReference& ext,
|
412
385
|
int num_arguments) {
|
413
|
-
|
386
|
+
Set(rax, num_arguments);
|
414
387
|
movq(rbx, ext);
|
415
388
|
|
416
389
|
CEntryStub stub(1);
|
@@ -432,7 +405,7 @@ void MacroAssembler::TailCallExternalReference(const ExternalReference& ext,
|
|
432
405
|
// arguments passed in because it is constant. At some point we
|
433
406
|
// should remove this need and make the runtime routine entry code
|
434
407
|
// smarter.
|
435
|
-
|
408
|
+
Set(rax, num_arguments);
|
436
409
|
JumpToExternalReference(ext, result_size);
|
437
410
|
}
|
438
411
|
|
@@ -494,7 +467,7 @@ void MacroAssembler::GetBuiltinEntry(Register target, Builtins::JavaScript id) {
|
|
494
467
|
|
495
468
|
void MacroAssembler::Set(Register dst, int64_t x) {
|
496
469
|
if (x == 0) {
|
497
|
-
|
470
|
+
xorl(dst, dst);
|
498
471
|
} else if (is_int32(x)) {
|
499
472
|
movq(dst, Immediate(static_cast<int32_t>(x)));
|
500
473
|
} else if (is_uint32(x)) {
|
@@ -504,15 +477,9 @@ void MacroAssembler::Set(Register dst, int64_t x) {
|
|
504
477
|
}
|
505
478
|
}
|
506
479
|
|
507
|
-
|
508
480
|
void MacroAssembler::Set(const Operand& dst, int64_t x) {
|
509
|
-
if (x
|
510
|
-
xor_(kScratchRegister, kScratchRegister);
|
511
|
-
movq(dst, kScratchRegister);
|
512
|
-
} else if (is_int32(x)) {
|
481
|
+
if (is_int32(x)) {
|
513
482
|
movq(dst, Immediate(static_cast<int32_t>(x)));
|
514
|
-
} else if (is_uint32(x)) {
|
515
|
-
movl(dst, Immediate(static_cast<uint32_t>(x)));
|
516
483
|
} else {
|
517
484
|
movq(kScratchRegister, x, RelocInfo::NONE);
|
518
485
|
movq(dst, kScratchRegister);
|
@@ -524,6 +491,78 @@ void MacroAssembler::Set(const Operand& dst, int64_t x) {
|
|
524
491
|
|
525
492
|
static int kSmiShift = kSmiTagSize + kSmiShiftSize;
|
526
493
|
|
494
|
+
Register MacroAssembler::GetSmiConstant(Smi* source) {
|
495
|
+
int value = source->value();
|
496
|
+
if (value == 0) {
|
497
|
+
xorl(kScratchRegister, kScratchRegister);
|
498
|
+
return kScratchRegister;
|
499
|
+
}
|
500
|
+
if (value == 1) {
|
501
|
+
return kSmiConstantRegister;
|
502
|
+
}
|
503
|
+
LoadSmiConstant(kScratchRegister, source);
|
504
|
+
return kScratchRegister;
|
505
|
+
}
|
506
|
+
|
507
|
+
void MacroAssembler::LoadSmiConstant(Register dst, Smi* source) {
|
508
|
+
if (FLAG_debug_code) {
|
509
|
+
movq(dst,
|
510
|
+
reinterpret_cast<uint64_t>(Smi::FromInt(kSmiConstantRegisterValue)),
|
511
|
+
RelocInfo::NONE);
|
512
|
+
cmpq(dst, kSmiConstantRegister);
|
513
|
+
if (allow_stub_calls()) {
|
514
|
+
Assert(equal, "Uninitialized kSmiConstantRegister");
|
515
|
+
} else {
|
516
|
+
Label ok;
|
517
|
+
j(equal, &ok);
|
518
|
+
int3();
|
519
|
+
bind(&ok);
|
520
|
+
}
|
521
|
+
}
|
522
|
+
if (source->value() == 0) {
|
523
|
+
xorl(dst, dst);
|
524
|
+
return;
|
525
|
+
}
|
526
|
+
int value = source->value();
|
527
|
+
bool negative = value < 0;
|
528
|
+
unsigned int uvalue = negative ? -value : value;
|
529
|
+
|
530
|
+
switch (uvalue) {
|
531
|
+
case 9:
|
532
|
+
lea(dst, Operand(kSmiConstantRegister, kSmiConstantRegister, times_8, 0));
|
533
|
+
break;
|
534
|
+
case 8:
|
535
|
+
xorl(dst, dst);
|
536
|
+
lea(dst, Operand(dst, kSmiConstantRegister, times_8, 0));
|
537
|
+
break;
|
538
|
+
case 4:
|
539
|
+
xorl(dst, dst);
|
540
|
+
lea(dst, Operand(dst, kSmiConstantRegister, times_4, 0));
|
541
|
+
break;
|
542
|
+
case 5:
|
543
|
+
lea(dst, Operand(kSmiConstantRegister, kSmiConstantRegister, times_4, 0));
|
544
|
+
break;
|
545
|
+
case 3:
|
546
|
+
lea(dst, Operand(kSmiConstantRegister, kSmiConstantRegister, times_2, 0));
|
547
|
+
break;
|
548
|
+
case 2:
|
549
|
+
lea(dst, Operand(kSmiConstantRegister, kSmiConstantRegister, times_1, 0));
|
550
|
+
break;
|
551
|
+
case 1:
|
552
|
+
movq(dst, kSmiConstantRegister);
|
553
|
+
break;
|
554
|
+
case 0:
|
555
|
+
UNREACHABLE();
|
556
|
+
return;
|
557
|
+
default:
|
558
|
+
movq(dst, reinterpret_cast<uint64_t>(source), RelocInfo::NONE);
|
559
|
+
return;
|
560
|
+
}
|
561
|
+
if (negative) {
|
562
|
+
neg(dst);
|
563
|
+
}
|
564
|
+
}
|
565
|
+
|
527
566
|
void MacroAssembler::Integer32ToSmi(Register dst, Register src) {
|
528
567
|
ASSERT_EQ(0, kSmiTag);
|
529
568
|
if (!dst.is(src)) {
|
@@ -545,6 +584,23 @@ void MacroAssembler::Integer32ToSmi(Register dst,
|
|
545
584
|
}
|
546
585
|
|
547
586
|
|
587
|
+
void MacroAssembler::Integer32ToSmiField(const Operand& dst, Register src) {
|
588
|
+
if (FLAG_debug_code) {
|
589
|
+
testb(dst, Immediate(0x01));
|
590
|
+
Label ok;
|
591
|
+
j(zero, &ok);
|
592
|
+
if (allow_stub_calls()) {
|
593
|
+
Abort("Integer32ToSmiField writing to non-smi location");
|
594
|
+
} else {
|
595
|
+
int3();
|
596
|
+
}
|
597
|
+
bind(&ok);
|
598
|
+
}
|
599
|
+
ASSERT(kSmiShift % kBitsPerByte == 0);
|
600
|
+
movl(Operand(dst, kSmiShift / kBitsPerByte), src);
|
601
|
+
}
|
602
|
+
|
603
|
+
|
548
604
|
void MacroAssembler::Integer64PlusConstantToSmi(Register dst,
|
549
605
|
Register src,
|
550
606
|
int constant) {
|
@@ -566,6 +622,11 @@ void MacroAssembler::SmiToInteger32(Register dst, Register src) {
|
|
566
622
|
}
|
567
623
|
|
568
624
|
|
625
|
+
void MacroAssembler::SmiToInteger32(Register dst, const Operand& src) {
|
626
|
+
movl(dst, Operand(src, kSmiShift / kBitsPerByte));
|
627
|
+
}
|
628
|
+
|
629
|
+
|
569
630
|
void MacroAssembler::SmiToInteger64(Register dst, Register src) {
|
570
631
|
ASSERT_EQ(0, kSmiTag);
|
571
632
|
if (!dst.is(src)) {
|
@@ -575,6 +636,11 @@ void MacroAssembler::SmiToInteger64(Register dst, Register src) {
|
|
575
636
|
}
|
576
637
|
|
577
638
|
|
639
|
+
void MacroAssembler::SmiToInteger64(Register dst, const Operand& src) {
|
640
|
+
movsxlq(dst, Operand(src, kSmiShift / kBitsPerByte));
|
641
|
+
}
|
642
|
+
|
643
|
+
|
578
644
|
void MacroAssembler::SmiTest(Register src) {
|
579
645
|
testq(src, src);
|
580
646
|
}
|
@@ -596,7 +662,7 @@ void MacroAssembler::SmiCompare(Register dst, Smi* src) {
|
|
596
662
|
}
|
597
663
|
|
598
664
|
|
599
|
-
void MacroAssembler::SmiCompare(Register
|
665
|
+
void MacroAssembler::SmiCompare(Register dst, const Operand& src) {
|
600
666
|
cmpq(dst, src);
|
601
667
|
}
|
602
668
|
|
@@ -607,13 +673,12 @@ void MacroAssembler::SmiCompare(const Operand& dst, Register src) {
|
|
607
673
|
|
608
674
|
|
609
675
|
void MacroAssembler::SmiCompare(const Operand& dst, Smi* src) {
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
}
|
676
|
+
cmpl(Operand(dst, kSmiShift / kBitsPerByte), Immediate(src->value()));
|
677
|
+
}
|
678
|
+
|
679
|
+
|
680
|
+
void MacroAssembler::SmiCompareInteger32(const Operand& dst, Register src) {
|
681
|
+
cmpl(Operand(dst, kSmiShift / kBitsPerByte), src);
|
617
682
|
}
|
618
683
|
|
619
684
|
|
@@ -637,6 +702,18 @@ void MacroAssembler::PositiveSmiTimesPowerOfTwoToInteger64(Register dst,
|
|
637
702
|
}
|
638
703
|
|
639
704
|
|
705
|
+
void MacroAssembler::PositiveSmiDivPowerOfTwoToInteger32(Register dst,
|
706
|
+
Register src,
|
707
|
+
int power) {
|
708
|
+
ASSERT((0 <= power) && (power < 32));
|
709
|
+
if (dst.is(src)) {
|
710
|
+
shr(dst, Immediate(power + kSmiShift));
|
711
|
+
} else {
|
712
|
+
UNIMPLEMENTED(); // Not used.
|
713
|
+
}
|
714
|
+
}
|
715
|
+
|
716
|
+
|
640
717
|
Condition MacroAssembler::CheckSmi(Register src) {
|
641
718
|
ASSERT_EQ(0, kSmiTag);
|
642
719
|
testb(src, Immediate(kSmiTagMask));
|
@@ -646,9 +723,10 @@ Condition MacroAssembler::CheckSmi(Register src) {
|
|
646
723
|
|
647
724
|
Condition MacroAssembler::CheckPositiveSmi(Register src) {
|
648
725
|
ASSERT_EQ(0, kSmiTag);
|
726
|
+
// Make mask 0x8000000000000001 and test that both bits are zero.
|
649
727
|
movq(kScratchRegister, src);
|
650
728
|
rol(kScratchRegister, Immediate(1));
|
651
|
-
|
729
|
+
testb(kScratchRegister, Immediate(3));
|
652
730
|
return zero;
|
653
731
|
}
|
654
732
|
|
@@ -657,9 +735,9 @@ Condition MacroAssembler::CheckBothSmi(Register first, Register second) {
|
|
657
735
|
if (first.is(second)) {
|
658
736
|
return CheckSmi(first);
|
659
737
|
}
|
660
|
-
|
661
|
-
|
662
|
-
testb(kScratchRegister, Immediate(
|
738
|
+
ASSERT(kSmiTag == 0 && kHeapObjectTag == 1 && kHeapObjectTagMask == 3);
|
739
|
+
leal(kScratchRegister, Operand(first, second, times_1, 0));
|
740
|
+
testb(kScratchRegister, Immediate(0x03));
|
663
741
|
return zero;
|
664
742
|
}
|
665
743
|
|
@@ -669,15 +747,14 @@ Condition MacroAssembler::CheckBothPositiveSmi(Register first,
|
|
669
747
|
if (first.is(second)) {
|
670
748
|
return CheckPositiveSmi(first);
|
671
749
|
}
|
672
|
-
|
673
|
-
|
750
|
+
movq(kScratchRegister, first);
|
751
|
+
or_(kScratchRegister, second);
|
674
752
|
rol(kScratchRegister, Immediate(1));
|
675
753
|
testl(kScratchRegister, Immediate(0x03));
|
676
754
|
return zero;
|
677
755
|
}
|
678
756
|
|
679
757
|
|
680
|
-
|
681
758
|
Condition MacroAssembler::CheckEitherSmi(Register first, Register second) {
|
682
759
|
if (first.is(second)) {
|
683
760
|
return CheckSmi(first);
|
@@ -690,11 +767,10 @@ Condition MacroAssembler::CheckEitherSmi(Register first, Register second) {
|
|
690
767
|
|
691
768
|
|
692
769
|
Condition MacroAssembler::CheckIsMinSmi(Register src) {
|
693
|
-
ASSERT(
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
return equal;
|
770
|
+
ASSERT(!src.is(kScratchRegister));
|
771
|
+
// If we overflow by subtracting one, it's the minimal smi value.
|
772
|
+
cmpq(src, kSmiConstantRegister);
|
773
|
+
return overflow;
|
698
774
|
}
|
699
775
|
|
700
776
|
|
@@ -707,8 +783,8 @@ Condition MacroAssembler::CheckInteger32ValidSmiValue(Register src) {
|
|
707
783
|
Condition MacroAssembler::CheckUInteger32ValidSmiValue(Register src) {
|
708
784
|
// An unsigned 32-bit integer value is valid as long as the high bit
|
709
785
|
// is not set.
|
710
|
-
|
711
|
-
return
|
786
|
+
testl(src, src);
|
787
|
+
return positive;
|
712
788
|
}
|
713
789
|
|
714
790
|
|
@@ -745,15 +821,12 @@ void MacroAssembler::SmiAdd(Register dst,
|
|
745
821
|
movq(dst, src1);
|
746
822
|
addq(dst, src2);
|
747
823
|
}
|
748
|
-
Assert(no_overflow, "Smi addition
|
824
|
+
Assert(no_overflow, "Smi addition overflow");
|
749
825
|
} else if (dst.is(src1)) {
|
750
|
-
|
751
|
-
|
752
|
-
j(
|
753
|
-
|
754
|
-
subq(src1, src2);
|
755
|
-
jmp(on_not_smi_result);
|
756
|
-
bind(&smi_result);
|
826
|
+
movq(kScratchRegister, src1);
|
827
|
+
addq(kScratchRegister, src2);
|
828
|
+
j(overflow, on_not_smi_result);
|
829
|
+
movq(dst, kScratchRegister);
|
757
830
|
} else {
|
758
831
|
movq(dst, src1);
|
759
832
|
addq(dst, src2);
|
@@ -776,15 +849,11 @@ void MacroAssembler::SmiSub(Register dst,
|
|
776
849
|
movq(dst, src1);
|
777
850
|
subq(dst, src2);
|
778
851
|
}
|
779
|
-
Assert(no_overflow, "Smi
|
852
|
+
Assert(no_overflow, "Smi subtraction overflow");
|
780
853
|
} else if (dst.is(src1)) {
|
854
|
+
cmpq(dst, src2);
|
855
|
+
j(overflow, on_not_smi_result);
|
781
856
|
subq(dst, src2);
|
782
|
-
Label smi_result;
|
783
|
-
j(no_overflow, &smi_result);
|
784
|
-
// Restore src1.
|
785
|
-
addq(src1, src2);
|
786
|
-
jmp(on_not_smi_result);
|
787
|
-
bind(&smi_result);
|
788
857
|
} else {
|
789
858
|
movq(dst, src1);
|
790
859
|
subq(dst, src2);
|
@@ -795,7 +864,7 @@ void MacroAssembler::SmiSub(Register dst,
|
|
795
864
|
|
796
865
|
void MacroAssembler::SmiSub(Register dst,
|
797
866
|
Register src1,
|
798
|
-
Operand
|
867
|
+
const Operand& src2,
|
799
868
|
Label* on_not_smi_result) {
|
800
869
|
if (on_not_smi_result == NULL) {
|
801
870
|
// No overflow checking. Use only when it's known that
|
@@ -806,15 +875,12 @@ void MacroAssembler::SmiSub(Register dst,
|
|
806
875
|
movq(dst, src1);
|
807
876
|
subq(dst, src2);
|
808
877
|
}
|
809
|
-
Assert(no_overflow, "Smi
|
878
|
+
Assert(no_overflow, "Smi subtraction overflow");
|
810
879
|
} else if (dst.is(src1)) {
|
811
|
-
|
812
|
-
|
813
|
-
j(
|
814
|
-
|
815
|
-
addq(src1, src2);
|
816
|
-
jmp(on_not_smi_result);
|
817
|
-
bind(&smi_result);
|
880
|
+
movq(kScratchRegister, src2);
|
881
|
+
cmpq(src1, kScratchRegister);
|
882
|
+
j(overflow, on_not_smi_result);
|
883
|
+
subq(src1, kScratchRegister);
|
818
884
|
} else {
|
819
885
|
movq(dst, src1);
|
820
886
|
subq(dst, src2);
|
@@ -887,7 +953,7 @@ void MacroAssembler::SmiTryAddConstant(Register dst,
|
|
887
953
|
|
888
954
|
JumpIfNotSmi(src, on_not_smi_result);
|
889
955
|
Register tmp = (dst.is(src) ? kScratchRegister : dst);
|
890
|
-
|
956
|
+
LoadSmiConstant(tmp, constant);
|
891
957
|
addq(tmp, src);
|
892
958
|
j(overflow, on_not_smi_result);
|
893
959
|
if (dst.is(src)) {
|
@@ -901,14 +967,53 @@ void MacroAssembler::SmiAddConstant(Register dst, Register src, Smi* constant) {
|
|
901
967
|
if (!dst.is(src)) {
|
902
968
|
movq(dst, src);
|
903
969
|
}
|
970
|
+
return;
|
904
971
|
} else if (dst.is(src)) {
|
905
972
|
ASSERT(!dst.is(kScratchRegister));
|
906
|
-
|
907
|
-
|
908
|
-
|
973
|
+
switch (constant->value()) {
|
974
|
+
case 1:
|
975
|
+
addq(dst, kSmiConstantRegister);
|
976
|
+
return;
|
977
|
+
case 2:
|
978
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_2, 0));
|
979
|
+
return;
|
980
|
+
case 4:
|
981
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_4, 0));
|
982
|
+
return;
|
983
|
+
case 8:
|
984
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_8, 0));
|
985
|
+
return;
|
986
|
+
default:
|
987
|
+
Register constant_reg = GetSmiConstant(constant);
|
988
|
+
addq(dst, constant_reg);
|
989
|
+
return;
|
990
|
+
}
|
909
991
|
} else {
|
910
|
-
|
911
|
-
|
992
|
+
switch (constant->value()) {
|
993
|
+
case 1:
|
994
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_1, 0));
|
995
|
+
return;
|
996
|
+
case 2:
|
997
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_2, 0));
|
998
|
+
return;
|
999
|
+
case 4:
|
1000
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_4, 0));
|
1001
|
+
return;
|
1002
|
+
case 8:
|
1003
|
+
lea(dst, Operand(src, kSmiConstantRegister, times_8, 0));
|
1004
|
+
return;
|
1005
|
+
default:
|
1006
|
+
LoadSmiConstant(dst, constant);
|
1007
|
+
addq(dst, src);
|
1008
|
+
return;
|
1009
|
+
}
|
1010
|
+
}
|
1011
|
+
}
|
1012
|
+
|
1013
|
+
|
1014
|
+
void MacroAssembler::SmiAddConstant(const Operand& dst, Smi* constant) {
|
1015
|
+
if (constant->value() != 0) {
|
1016
|
+
addl(Operand(dst, kSmiShift / kBitsPerByte), Immediate(constant->value()));
|
912
1017
|
}
|
913
1018
|
}
|
914
1019
|
|
@@ -924,15 +1029,12 @@ void MacroAssembler::SmiAddConstant(Register dst,
|
|
924
1029
|
} else if (dst.is(src)) {
|
925
1030
|
ASSERT(!dst.is(kScratchRegister));
|
926
1031
|
|
927
|
-
|
928
|
-
addq(
|
929
|
-
|
930
|
-
|
931
|
-
subq(dst, kScratchRegister);
|
932
|
-
jmp(on_not_smi_result);
|
933
|
-
bind(&result_ok);
|
1032
|
+
LoadSmiConstant(kScratchRegister, constant);
|
1033
|
+
addq(kScratchRegister, src);
|
1034
|
+
j(overflow, on_not_smi_result);
|
1035
|
+
movq(dst, kScratchRegister);
|
934
1036
|
} else {
|
935
|
-
|
1037
|
+
LoadSmiConstant(dst, constant);
|
936
1038
|
addq(dst, src);
|
937
1039
|
j(overflow, on_not_smi_result);
|
938
1040
|
}
|
@@ -946,17 +1048,17 @@ void MacroAssembler::SmiSubConstant(Register dst, Register src, Smi* constant) {
|
|
946
1048
|
}
|
947
1049
|
} else if (dst.is(src)) {
|
948
1050
|
ASSERT(!dst.is(kScratchRegister));
|
949
|
-
|
950
|
-
|
951
|
-
subq(dst, kScratchRegister);
|
1051
|
+
Register constant_reg = GetSmiConstant(constant);
|
1052
|
+
subq(dst, constant_reg);
|
952
1053
|
} else {
|
953
|
-
// Subtract by adding the negative, to do it in two operations.
|
954
1054
|
if (constant->value() == Smi::kMinValue) {
|
955
|
-
|
956
|
-
|
957
|
-
|
1055
|
+
LoadSmiConstant(dst, constant);
|
1056
|
+
// Adding and subtracting the min-value gives the same result, it only
|
1057
|
+
// differs on the overflow bit, which we don't check here.
|
1058
|
+
addq(dst, src);
|
958
1059
|
} else {
|
959
|
-
|
1060
|
+
// Subtract by adding the negation.
|
1061
|
+
LoadSmiConstant(dst, Smi::FromInt(-constant->value()));
|
960
1062
|
addq(dst, src);
|
961
1063
|
}
|
962
1064
|
}
|
@@ -973,22 +1075,33 @@ void MacroAssembler::SmiSubConstant(Register dst,
|
|
973
1075
|
}
|
974
1076
|
} else if (dst.is(src)) {
|
975
1077
|
ASSERT(!dst.is(kScratchRegister));
|
976
|
-
|
977
|
-
Move(kScratchRegister, constant);
|
978
|
-
subq(dst, kScratchRegister);
|
979
|
-
Label sub_success;
|
980
|
-
j(no_overflow, &sub_success);
|
981
|
-
addq(src, kScratchRegister);
|
982
|
-
jmp(on_not_smi_result);
|
983
|
-
bind(&sub_success);
|
984
|
-
} else {
|
985
1078
|
if (constant->value() == Smi::kMinValue) {
|
986
|
-
|
987
|
-
|
1079
|
+
// Subtracting min-value from any non-negative value will overflow.
|
1080
|
+
// We test the non-negativeness before doing the subtraction.
|
1081
|
+
testq(src, src);
|
1082
|
+
j(not_sign, on_not_smi_result);
|
1083
|
+
LoadSmiConstant(kScratchRegister, constant);
|
988
1084
|
subq(dst, kScratchRegister);
|
1085
|
+
} else {
|
1086
|
+
// Subtract by adding the negation.
|
1087
|
+
LoadSmiConstant(kScratchRegister, Smi::FromInt(-constant->value()));
|
1088
|
+
addq(kScratchRegister, dst);
|
989
1089
|
j(overflow, on_not_smi_result);
|
1090
|
+
movq(dst, kScratchRegister);
|
1091
|
+
}
|
1092
|
+
} else {
|
1093
|
+
if (constant->value() == Smi::kMinValue) {
|
1094
|
+
// Subtracting min-value from any non-negative value will overflow.
|
1095
|
+
// We test the non-negativeness before doing the subtraction.
|
1096
|
+
testq(src, src);
|
1097
|
+
j(not_sign, on_not_smi_result);
|
1098
|
+
LoadSmiConstant(dst, constant);
|
1099
|
+
// Adding and subtracting the min-value gives the same result, it only
|
1100
|
+
// differs on the overflow bit, which we don't check here.
|
1101
|
+
addq(dst, src);
|
990
1102
|
} else {
|
991
|
-
|
1103
|
+
// Subtract by adding the negation.
|
1104
|
+
LoadSmiConstant(dst, Smi::FromInt(-(constant->value())));
|
992
1105
|
addq(dst, src);
|
993
1106
|
j(overflow, on_not_smi_result);
|
994
1107
|
}
|
@@ -1142,10 +1255,10 @@ void MacroAssembler::SmiAndConstant(Register dst, Register src, Smi* constant) {
|
|
1142
1255
|
xor_(dst, dst);
|
1143
1256
|
} else if (dst.is(src)) {
|
1144
1257
|
ASSERT(!dst.is(kScratchRegister));
|
1145
|
-
|
1146
|
-
and_(dst,
|
1258
|
+
Register constant_reg = GetSmiConstant(constant);
|
1259
|
+
and_(dst, constant_reg);
|
1147
1260
|
} else {
|
1148
|
-
|
1261
|
+
LoadSmiConstant(dst, constant);
|
1149
1262
|
and_(dst, src);
|
1150
1263
|
}
|
1151
1264
|
}
|
@@ -1162,10 +1275,10 @@ void MacroAssembler::SmiOr(Register dst, Register src1, Register src2) {
|
|
1162
1275
|
void MacroAssembler::SmiOrConstant(Register dst, Register src, Smi* constant) {
|
1163
1276
|
if (dst.is(src)) {
|
1164
1277
|
ASSERT(!dst.is(kScratchRegister));
|
1165
|
-
|
1166
|
-
or_(dst,
|
1278
|
+
Register constant_reg = GetSmiConstant(constant);
|
1279
|
+
or_(dst, constant_reg);
|
1167
1280
|
} else {
|
1168
|
-
|
1281
|
+
LoadSmiConstant(dst, constant);
|
1169
1282
|
or_(dst, src);
|
1170
1283
|
}
|
1171
1284
|
}
|
@@ -1182,10 +1295,10 @@ void MacroAssembler::SmiXor(Register dst, Register src1, Register src2) {
|
|
1182
1295
|
void MacroAssembler::SmiXorConstant(Register dst, Register src, Smi* constant) {
|
1183
1296
|
if (dst.is(src)) {
|
1184
1297
|
ASSERT(!dst.is(kScratchRegister));
|
1185
|
-
|
1186
|
-
xor_(dst,
|
1298
|
+
Register constant_reg = GetSmiConstant(constant);
|
1299
|
+
xor_(dst, constant_reg);
|
1187
1300
|
} else {
|
1188
|
-
|
1301
|
+
LoadSmiConstant(dst, constant);
|
1189
1302
|
xor_(dst, src);
|
1190
1303
|
}
|
1191
1304
|
}
|
@@ -1227,8 +1340,7 @@ void MacroAssembler::SmiShiftLogicalRightConstant(Register dst,
|
|
1227
1340
|
|
1228
1341
|
void MacroAssembler::SmiShiftLeftConstant(Register dst,
|
1229
1342
|
Register src,
|
1230
|
-
int shift_value
|
1231
|
-
Label* on_not_smi_result) {
|
1343
|
+
int shift_value) {
|
1232
1344
|
if (!dst.is(src)) {
|
1233
1345
|
movq(dst, src);
|
1234
1346
|
}
|
@@ -1240,8 +1352,7 @@ void MacroAssembler::SmiShiftLeftConstant(Register dst,
|
|
1240
1352
|
|
1241
1353
|
void MacroAssembler::SmiShiftLeft(Register dst,
|
1242
1354
|
Register src1,
|
1243
|
-
Register src2
|
1244
|
-
Label* on_not_smi_result) {
|
1355
|
+
Register src2) {
|
1245
1356
|
ASSERT(!dst.is(rcx));
|
1246
1357
|
Label result_ok;
|
1247
1358
|
// Untag shift amount.
|
@@ -1355,6 +1466,7 @@ void MacroAssembler::SelectNonSmi(Register dst,
|
|
1355
1466
|
// If src1 is a smi, dst is src2, else it is src1, i.e., the non-smi.
|
1356
1467
|
}
|
1357
1468
|
|
1469
|
+
|
1358
1470
|
SmiIndex MacroAssembler::SmiToIndex(Register dst,
|
1359
1471
|
Register src,
|
1360
1472
|
int shift) {
|
@@ -1580,8 +1692,8 @@ void MacroAssembler::Push(Smi* source) {
|
|
1580
1692
|
if (is_int32(smi)) {
|
1581
1693
|
push(Immediate(static_cast<int32_t>(smi)));
|
1582
1694
|
} else {
|
1583
|
-
|
1584
|
-
push(
|
1695
|
+
Register constant = GetSmiConstant(source);
|
1696
|
+
push(constant);
|
1585
1697
|
}
|
1586
1698
|
}
|
1587
1699
|
|
@@ -1594,13 +1706,7 @@ void MacroAssembler::Drop(int stack_elements) {
|
|
1594
1706
|
|
1595
1707
|
|
1596
1708
|
void MacroAssembler::Test(const Operand& src, Smi* source) {
|
1597
|
-
|
1598
|
-
if (is_int32(smi)) {
|
1599
|
-
testl(src, Immediate(static_cast<int32_t>(smi)));
|
1600
|
-
} else {
|
1601
|
-
Move(kScratchRegister, source);
|
1602
|
-
testq(src, kScratchRegister);
|
1603
|
-
}
|
1709
|
+
testl(Operand(src, kIntSize), Immediate(source->value()));
|
1604
1710
|
}
|
1605
1711
|
|
1606
1712
|
|
@@ -1696,8 +1802,7 @@ void MacroAssembler::Ret() {
|
|
1696
1802
|
|
1697
1803
|
void MacroAssembler::FCmp() {
|
1698
1804
|
fucomip();
|
1699
|
-
|
1700
|
-
fincstp();
|
1805
|
+
fstp(0);
|
1701
1806
|
}
|
1702
1807
|
|
1703
1808
|
|
@@ -1727,26 +1832,35 @@ void MacroAssembler::CheckMap(Register obj,
|
|
1727
1832
|
}
|
1728
1833
|
|
1729
1834
|
|
1730
|
-
void MacroAssembler::AbortIfNotNumber(Register object
|
1835
|
+
void MacroAssembler::AbortIfNotNumber(Register object) {
|
1731
1836
|
Label ok;
|
1732
1837
|
Condition is_smi = CheckSmi(object);
|
1733
1838
|
j(is_smi, &ok);
|
1734
1839
|
Cmp(FieldOperand(object, HeapObject::kMapOffset),
|
1735
1840
|
Factory::heap_number_map());
|
1736
|
-
Assert(equal,
|
1841
|
+
Assert(equal, "Operand not a number");
|
1737
1842
|
bind(&ok);
|
1738
1843
|
}
|
1739
1844
|
|
1740
1845
|
|
1741
|
-
void MacroAssembler::AbortIfNotSmi(Register object
|
1846
|
+
void MacroAssembler::AbortIfNotSmi(Register object) {
|
1742
1847
|
Label ok;
|
1743
1848
|
Condition is_smi = CheckSmi(object);
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1849
|
+
Assert(is_smi, "Operand not a smi");
|
1850
|
+
}
|
1851
|
+
|
1852
|
+
|
1853
|
+
void MacroAssembler::AbortIfNotRootValue(Register src,
|
1854
|
+
Heap::RootListIndex root_value_index,
|
1855
|
+
const char* message) {
|
1856
|
+
ASSERT(!src.is(kScratchRegister));
|
1857
|
+
LoadRoot(kScratchRegister, root_value_index);
|
1858
|
+
cmpq(src, kScratchRegister);
|
1859
|
+
Check(equal, message);
|
1747
1860
|
}
|
1748
1861
|
|
1749
1862
|
|
1863
|
+
|
1750
1864
|
Condition MacroAssembler::IsObjectStringType(Register heap_object,
|
1751
1865
|
Register map,
|
1752
1866
|
Register instance_type) {
|
@@ -1947,7 +2061,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
1947
2061
|
if (expected.immediate() == actual.immediate()) {
|
1948
2062
|
definitely_matches = true;
|
1949
2063
|
} else {
|
1950
|
-
|
2064
|
+
Set(rax, actual.immediate());
|
1951
2065
|
if (expected.immediate() ==
|
1952
2066
|
SharedFunctionInfo::kDontAdaptArgumentsSentinel) {
|
1953
2067
|
// Don't worry about adapting arguments for built-ins that
|
@@ -1956,7 +2070,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
1956
2070
|
// arguments.
|
1957
2071
|
definitely_matches = true;
|
1958
2072
|
} else {
|
1959
|
-
|
2073
|
+
Set(rbx, expected.immediate());
|
1960
2074
|
}
|
1961
2075
|
}
|
1962
2076
|
} else {
|
@@ -1967,7 +2081,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
|
1967
2081
|
cmpq(expected.reg(), Immediate(actual.immediate()));
|
1968
2082
|
j(equal, &invoke);
|
1969
2083
|
ASSERT(expected.reg().is(rbx));
|
1970
|
-
|
2084
|
+
Set(rax, actual.immediate());
|
1971
2085
|
} else if (!expected.reg().is(actual.reg())) {
|
1972
2086
|
// Both expected and actual are in (different) registers. This
|
1973
2087
|
// is the case when we invoke functions using call and apply.
|
@@ -2119,10 +2233,10 @@ void MacroAssembler::EnterExitFrame(ExitFrame::Mode mode, int result_size) {
|
|
2119
2233
|
movq(rax, rsi);
|
2120
2234
|
store_rax(context_address);
|
2121
2235
|
|
2122
|
-
// Setup argv in callee-saved register
|
2236
|
+
// Setup argv in callee-saved register r12. It is reused in LeaveExitFrame,
|
2123
2237
|
// so it must be retained across the C-call.
|
2124
2238
|
int offset = StandardFrameConstants::kCallerSPOffset - kPointerSize;
|
2125
|
-
lea(
|
2239
|
+
lea(r12, Operand(rbp, r14, times_pointer_size, offset));
|
2126
2240
|
|
2127
2241
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
2128
2242
|
// Save the state of all registers to the stack from the memory
|
@@ -2168,7 +2282,7 @@ void MacroAssembler::EnterExitFrame(ExitFrame::Mode mode, int result_size) {
|
|
2168
2282
|
|
2169
2283
|
void MacroAssembler::LeaveExitFrame(ExitFrame::Mode mode, int result_size) {
|
2170
2284
|
// Registers:
|
2171
|
-
//
|
2285
|
+
// r12 : argv
|
2172
2286
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
2173
2287
|
// Restore the memory copy of the registers by digging them out from
|
2174
2288
|
// the stack. This is needed to allow nested break points.
|
@@ -2188,7 +2302,7 @@ void MacroAssembler::LeaveExitFrame(ExitFrame::Mode mode, int result_size) {
|
|
2188
2302
|
|
2189
2303
|
// Pop everything up to and including the arguments and the receiver
|
2190
2304
|
// from the caller stack.
|
2191
|
-
lea(rsp, Operand(
|
2305
|
+
lea(rsp, Operand(r12, 1 * kPointerSize));
|
2192
2306
|
|
2193
2307
|
// Restore current context from top and clear it in debug mode.
|
2194
2308
|
ExternalReference context_address(Top::k_context_address);
|
@@ -2208,101 +2322,6 @@ void MacroAssembler::LeaveExitFrame(ExitFrame::Mode mode, int result_size) {
|
|
2208
2322
|
}
|
2209
2323
|
|
2210
2324
|
|
2211
|
-
Register MacroAssembler::CheckMaps(JSObject* object,
|
2212
|
-
Register object_reg,
|
2213
|
-
JSObject* holder,
|
2214
|
-
Register holder_reg,
|
2215
|
-
Register scratch,
|
2216
|
-
int save_at_depth,
|
2217
|
-
Label* miss) {
|
2218
|
-
// Make sure there's no overlap between scratch and the other
|
2219
|
-
// registers.
|
2220
|
-
ASSERT(!scratch.is(object_reg) && !scratch.is(holder_reg));
|
2221
|
-
|
2222
|
-
// Keep track of the current object in register reg. On the first
|
2223
|
-
// iteration, reg is an alias for object_reg, on later iterations,
|
2224
|
-
// it is an alias for holder_reg.
|
2225
|
-
Register reg = object_reg;
|
2226
|
-
int depth = 0;
|
2227
|
-
|
2228
|
-
if (save_at_depth == depth) {
|
2229
|
-
movq(Operand(rsp, kPointerSize), object_reg);
|
2230
|
-
}
|
2231
|
-
|
2232
|
-
// Check the maps in the prototype chain.
|
2233
|
-
// Traverse the prototype chain from the object and do map checks.
|
2234
|
-
while (object != holder) {
|
2235
|
-
depth++;
|
2236
|
-
|
2237
|
-
// Only global objects and objects that do not require access
|
2238
|
-
// checks are allowed in stubs.
|
2239
|
-
ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
|
2240
|
-
|
2241
|
-
JSObject* prototype = JSObject::cast(object->GetPrototype());
|
2242
|
-
if (Heap::InNewSpace(prototype)) {
|
2243
|
-
// Get the map of the current object.
|
2244
|
-
movq(scratch, FieldOperand(reg, HeapObject::kMapOffset));
|
2245
|
-
Cmp(scratch, Handle<Map>(object->map()));
|
2246
|
-
// Branch on the result of the map check.
|
2247
|
-
j(not_equal, miss);
|
2248
|
-
// Check access rights to the global object. This has to happen
|
2249
|
-
// after the map check so that we know that the object is
|
2250
|
-
// actually a global object.
|
2251
|
-
if (object->IsJSGlobalProxy()) {
|
2252
|
-
CheckAccessGlobalProxy(reg, scratch, miss);
|
2253
|
-
|
2254
|
-
// Restore scratch register to be the map of the object.
|
2255
|
-
// We load the prototype from the map in the scratch register.
|
2256
|
-
movq(scratch, FieldOperand(reg, HeapObject::kMapOffset));
|
2257
|
-
}
|
2258
|
-
// The prototype is in new space; we cannot store a reference
|
2259
|
-
// to it in the code. Load it from the map.
|
2260
|
-
reg = holder_reg; // from now the object is in holder_reg
|
2261
|
-
movq(reg, FieldOperand(scratch, Map::kPrototypeOffset));
|
2262
|
-
|
2263
|
-
} else {
|
2264
|
-
// Check the map of the current object.
|
2265
|
-
Cmp(FieldOperand(reg, HeapObject::kMapOffset),
|
2266
|
-
Handle<Map>(object->map()));
|
2267
|
-
// Branch on the result of the map check.
|
2268
|
-
j(not_equal, miss);
|
2269
|
-
// Check access rights to the global object. This has to happen
|
2270
|
-
// after the map check so that we know that the object is
|
2271
|
-
// actually a global object.
|
2272
|
-
if (object->IsJSGlobalProxy()) {
|
2273
|
-
CheckAccessGlobalProxy(reg, scratch, miss);
|
2274
|
-
}
|
2275
|
-
// The prototype is in old space; load it directly.
|
2276
|
-
reg = holder_reg; // from now the object is in holder_reg
|
2277
|
-
Move(reg, Handle<JSObject>(prototype));
|
2278
|
-
}
|
2279
|
-
|
2280
|
-
if (save_at_depth == depth) {
|
2281
|
-
movq(Operand(rsp, kPointerSize), reg);
|
2282
|
-
}
|
2283
|
-
|
2284
|
-
// Go to the next object in the prototype chain.
|
2285
|
-
object = prototype;
|
2286
|
-
}
|
2287
|
-
|
2288
|
-
// Check the holder map.
|
2289
|
-
Cmp(FieldOperand(reg, HeapObject::kMapOffset), Handle<Map>(holder->map()));
|
2290
|
-
j(not_equal, miss);
|
2291
|
-
|
2292
|
-
// Log the check depth.
|
2293
|
-
LOG(IntEvent("check-maps-depth", depth + 1));
|
2294
|
-
|
2295
|
-
// Perform security check for access to the global object and return
|
2296
|
-
// the holder register.
|
2297
|
-
ASSERT(object == holder);
|
2298
|
-
ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
|
2299
|
-
if (object->IsJSGlobalProxy()) {
|
2300
|
-
CheckAccessGlobalProxy(reg, scratch, miss);
|
2301
|
-
}
|
2302
|
-
return reg;
|
2303
|
-
}
|
2304
|
-
|
2305
|
-
|
2306
2325
|
void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
|
2307
2326
|
Register scratch,
|
2308
2327
|
Label* miss) {
|
@@ -2596,7 +2615,7 @@ void MacroAssembler::AllocateTwoByteString(Register result,
|
|
2596
2615
|
movq(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister);
|
2597
2616
|
Integer32ToSmi(scratch1, length);
|
2598
2617
|
movq(FieldOperand(result, String::kLengthOffset), scratch1);
|
2599
|
-
|
2618
|
+
movq(FieldOperand(result, String::kHashFieldOffset),
|
2600
2619
|
Immediate(String::kEmptyHashField));
|
2601
2620
|
}
|
2602
2621
|
|
@@ -2634,7 +2653,7 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
|
2634
2653
|
movq(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister);
|
2635
2654
|
Integer32ToSmi(scratch1, length);
|
2636
2655
|
movq(FieldOperand(result, String::kLengthOffset), scratch1);
|
2637
|
-
|
2656
|
+
movq(FieldOperand(result, String::kHashFieldOffset),
|
2638
2657
|
Immediate(String::kEmptyHashField));
|
2639
2658
|
}
|
2640
2659
|
|
@@ -2693,20 +2712,27 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
|
|
2693
2712
|
}
|
2694
2713
|
}
|
2695
2714
|
|
2715
|
+
|
2696
2716
|
int MacroAssembler::ArgumentStackSlotsForCFunctionCall(int num_arguments) {
|
2697
|
-
// On Windows stack slots are reserved by the caller for all arguments
|
2698
|
-
// including the ones passed in registers
|
2699
|
-
//
|
2717
|
+
// On Windows 64 stack slots are reserved by the caller for all arguments
|
2718
|
+
// including the ones passed in registers, and space is always allocated for
|
2719
|
+
// the four register arguments even if the function takes fewer than four
|
2720
|
+
// arguments.
|
2721
|
+
// On AMD64 ABI (Linux/Mac) the first six arguments are passed in registers
|
2722
|
+
// and the caller does not reserve stack slots for them.
|
2700
2723
|
ASSERT(num_arguments >= 0);
|
2701
2724
|
#ifdef _WIN64
|
2702
|
-
static const int
|
2725
|
+
static const int kMinimumStackSlots = 4;
|
2726
|
+
if (num_arguments < kMinimumStackSlots) return kMinimumStackSlots;
|
2727
|
+
return num_arguments;
|
2703
2728
|
#else
|
2704
|
-
static const int
|
2729
|
+
static const int kRegisterPassedArguments = 6;
|
2730
|
+
if (num_arguments < kRegisterPassedArguments) return 0;
|
2731
|
+
return num_arguments - kRegisterPassedArguments;
|
2705
2732
|
#endif
|
2706
|
-
return num_arguments > kArgumentsWithoutStackSlot ?
|
2707
|
-
num_arguments - kArgumentsWithoutStackSlot : 0;
|
2708
2733
|
}
|
2709
2734
|
|
2735
|
+
|
2710
2736
|
void MacroAssembler::PrepareCallCFunction(int num_arguments) {
|
2711
2737
|
int frame_alignment = OS::ActivationFrameAlignment();
|
2712
2738
|
ASSERT(frame_alignment != 0);
|
@@ -2763,3 +2789,5 @@ CodePatcher::~CodePatcher() {
|
|
2763
2789
|
}
|
2764
2790
|
|
2765
2791
|
} } // namespace v8::internal
|
2792
|
+
|
2793
|
+
#endif // V8_TARGET_ARCH_X64
|