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_ARM)
|
31
|
+
|
30
32
|
#include "codegen-inl.h"
|
31
33
|
#include "jump-target-inl.h"
|
32
34
|
#include "register-allocator-inl.h"
|
@@ -47,28 +49,28 @@ void JumpTarget::DoJump() {
|
|
47
49
|
// which are still live in the C++ code.
|
48
50
|
ASSERT(cgen()->HasValidEntryRegisters());
|
49
51
|
|
50
|
-
if (
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
if (entry_frame_set_) {
|
53
|
+
if (entry_label_.is_bound()) {
|
54
|
+
// If we already bound and generated code at the destination then it
|
55
|
+
// is too late to ask for less optimistic type assumptions.
|
56
|
+
ASSERT(entry_frame_.IsCompatibleWith(cgen()->frame()));
|
57
|
+
}
|
58
|
+
// There already a frame expectation at the target.
|
59
|
+
cgen()->frame()->MergeTo(&entry_frame_);
|
54
60
|
cgen()->DeleteFrame();
|
55
61
|
} else {
|
56
|
-
//
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
//
|
67
|
-
|
68
|
-
if (!is_linked()) {
|
69
|
-
reaching_frames_.Add(NULL);
|
70
|
-
ASSERT(is_linked());
|
71
|
-
}
|
62
|
+
// Clone the current frame to use as the expected one at the target.
|
63
|
+
set_entry_frame(cgen()->frame());
|
64
|
+
// Zap the fall-through frame since the jump was unconditional.
|
65
|
+
RegisterFile empty;
|
66
|
+
cgen()->SetFrame(NULL, &empty);
|
67
|
+
}
|
68
|
+
if (entry_label_.is_bound()) {
|
69
|
+
// You can't jump backwards to an already bound label unless you admitted
|
70
|
+
// up front that this was a bidirectional jump target. Bidirectional jump
|
71
|
+
// targets will zap their type info when bound in case some later virtual
|
72
|
+
// frame with less precise type info branches to them.
|
73
|
+
ASSERT(direction_ != FORWARD_ONLY);
|
72
74
|
}
|
73
75
|
__ jmp(&entry_label_);
|
74
76
|
}
|
@@ -77,25 +79,29 @@ void JumpTarget::DoJump() {
|
|
77
79
|
void JumpTarget::DoBranch(Condition cc, Hint ignored) {
|
78
80
|
ASSERT(cgen()->has_valid_frame());
|
79
81
|
|
80
|
-
if (
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
} else {
|
86
|
-
// Clone the current frame to use as the expected one at the target if
|
87
|
-
// necessary.
|
88
|
-
if (entry_frame_ == NULL) {
|
89
|
-
entry_frame_ = new VirtualFrame(cgen()->frame());
|
90
|
-
}
|
91
|
-
// The predicate is_linked() should be made true. Its implementation
|
92
|
-
// detects the presence of a frame pointer in the reaching_frames_ list.
|
93
|
-
if (!is_linked()) {
|
94
|
-
reaching_frames_.Add(NULL);
|
95
|
-
ASSERT(is_linked());
|
82
|
+
if (entry_frame_set_) {
|
83
|
+
if (entry_label_.is_bound()) {
|
84
|
+
// If we already bound and generated code at the destination then it
|
85
|
+
// is too late to ask for less optimistic type assumptions.
|
86
|
+
ASSERT(entry_frame_.IsCompatibleWith(cgen()->frame()));
|
96
87
|
}
|
88
|
+
// We have an expected frame to merge to on the backward edge.
|
89
|
+
cgen()->frame()->MergeTo(&entry_frame_, cc);
|
90
|
+
} else {
|
91
|
+
// Clone the current frame to use as the expected one at the target.
|
92
|
+
set_entry_frame(cgen()->frame());
|
93
|
+
}
|
94
|
+
if (entry_label_.is_bound()) {
|
95
|
+
// You can't branch backwards to an already bound label unless you admitted
|
96
|
+
// up front that this was a bidirectional jump target. Bidirectional jump
|
97
|
+
// targets will zap their type info when bound in case some later virtual
|
98
|
+
// frame with less precise type info branches to them.
|
99
|
+
ASSERT(direction_ != FORWARD_ONLY);
|
97
100
|
}
|
98
101
|
__ b(cc, &entry_label_);
|
102
|
+
if (cc == al) {
|
103
|
+
cgen()->DeleteFrame();
|
104
|
+
}
|
99
105
|
}
|
100
106
|
|
101
107
|
|
@@ -113,15 +119,10 @@ void JumpTarget::Call() {
|
|
113
119
|
|
114
120
|
// Calls are always 'forward' so we use a copy of the current frame (plus
|
115
121
|
// one for a return address) as the expected frame.
|
116
|
-
ASSERT(
|
117
|
-
VirtualFrame
|
118
|
-
target_frame
|
119
|
-
|
120
|
-
|
121
|
-
// The predicate is_linked() should now be made true. Its implementation
|
122
|
-
// detects the presence of a frame pointer in the reaching_frames_ list.
|
123
|
-
reaching_frames_.Add(NULL);
|
124
|
-
ASSERT(is_linked());
|
122
|
+
ASSERT(!entry_frame_set_);
|
123
|
+
VirtualFrame target_frame = *cgen()->frame();
|
124
|
+
target_frame.Adjust(1);
|
125
|
+
set_entry_frame(&target_frame);
|
125
126
|
|
126
127
|
__ bl(&entry_label_);
|
127
128
|
}
|
@@ -135,78 +136,29 @@ void JumpTarget::DoBind() {
|
|
135
136
|
ASSERT(!cgen()->has_valid_frame() || cgen()->HasValidEntryRegisters());
|
136
137
|
|
137
138
|
if (cgen()->has_valid_frame()) {
|
139
|
+
if (direction_ != FORWARD_ONLY) cgen()->frame()->ForgetTypeInfo();
|
138
140
|
// If there is a current frame we can use it on the fall through.
|
139
|
-
if (
|
140
|
-
entry_frame_ =
|
141
|
+
if (!entry_frame_set_) {
|
142
|
+
entry_frame_ = *cgen()->frame();
|
143
|
+
entry_frame_set_ = true;
|
141
144
|
} else {
|
142
|
-
|
145
|
+
cgen()->frame()->MergeTo(&entry_frame_);
|
143
146
|
}
|
144
147
|
} else {
|
145
148
|
// If there is no current frame we must have an entry frame which we can
|
146
149
|
// copy.
|
147
|
-
ASSERT(
|
150
|
+
ASSERT(entry_frame_set_);
|
148
151
|
RegisterFile empty;
|
149
|
-
cgen()->SetFrame(new VirtualFrame(entry_frame_), &empty);
|
150
|
-
}
|
151
|
-
|
152
|
-
// The predicate is_linked() should be made false. Its implementation
|
153
|
-
// detects the presence (or absence) of frame pointers in the
|
154
|
-
// reaching_frames_ list. If we inserted a bogus frame to make
|
155
|
-
// is_linked() true, remove it now.
|
156
|
-
if (is_linked()) {
|
157
|
-
reaching_frames_.Clear();
|
152
|
+
cgen()->SetFrame(new VirtualFrame(&entry_frame_), &empty);
|
158
153
|
}
|
159
154
|
|
160
155
|
__ bind(&entry_label_);
|
161
156
|
}
|
162
157
|
|
163
158
|
|
164
|
-
void BreakTarget::Jump() {
|
165
|
-
// On ARM we do not currently emit merge code for jumps, so we need to do
|
166
|
-
// it explicitly here. The only merging necessary is to drop extra
|
167
|
-
// statement state from the stack.
|
168
|
-
ASSERT(cgen()->has_valid_frame());
|
169
|
-
int count = cgen()->frame()->height() - expected_height_;
|
170
|
-
cgen()->frame()->Drop(count);
|
171
|
-
DoJump();
|
172
|
-
}
|
173
|
-
|
174
|
-
|
175
|
-
void BreakTarget::Jump(Result* arg) {
|
176
|
-
UNIMPLEMENTED();
|
177
|
-
}
|
178
|
-
|
179
|
-
|
180
|
-
void BreakTarget::Bind() {
|
181
|
-
#ifdef DEBUG
|
182
|
-
// All the forward-reaching frames should have been adjusted at the
|
183
|
-
// jumps to this target.
|
184
|
-
for (int i = 0; i < reaching_frames_.length(); i++) {
|
185
|
-
ASSERT(reaching_frames_[i] == NULL ||
|
186
|
-
reaching_frames_[i]->height() == expected_height_);
|
187
|
-
}
|
188
|
-
#endif
|
189
|
-
// Drop leftover statement state from the frame before merging, even
|
190
|
-
// on the fall through. This is so we can bind the return target
|
191
|
-
// with state on the frame.
|
192
|
-
if (cgen()->has_valid_frame()) {
|
193
|
-
int count = cgen()->frame()->height() - expected_height_;
|
194
|
-
// On ARM we do not currently emit merge code at binding sites, so we need
|
195
|
-
// to do it explicitly here. The only merging necessary is to drop extra
|
196
|
-
// statement state from the stack.
|
197
|
-
cgen()->frame()->Drop(count);
|
198
|
-
}
|
199
|
-
|
200
|
-
DoBind();
|
201
|
-
}
|
202
|
-
|
203
|
-
|
204
|
-
void BreakTarget::Bind(Result* arg) {
|
205
|
-
UNIMPLEMENTED();
|
206
|
-
}
|
207
|
-
|
208
|
-
|
209
159
|
#undef __
|
210
160
|
|
211
161
|
|
212
162
|
} } // namespace v8::internal
|
163
|
+
|
164
|
+
#endif // V8_TARGET_ARCH_ARM
|
@@ -27,6 +27,8 @@
|
|
27
27
|
|
28
28
|
#include "v8.h"
|
29
29
|
|
30
|
+
#if defined(V8_TARGET_ARCH_ARM)
|
31
|
+
|
30
32
|
#include "bootstrapper.h"
|
31
33
|
#include "codegen-inl.h"
|
32
34
|
#include "debug.h"
|
@@ -181,15 +183,18 @@ void MacroAssembler::Drop(int count, Condition cond) {
|
|
181
183
|
}
|
182
184
|
|
183
185
|
|
184
|
-
void MacroAssembler::Swap(Register reg1,
|
186
|
+
void MacroAssembler::Swap(Register reg1,
|
187
|
+
Register reg2,
|
188
|
+
Register scratch,
|
189
|
+
Condition cond) {
|
185
190
|
if (scratch.is(no_reg)) {
|
186
|
-
eor(reg1, reg1, Operand(reg2));
|
187
|
-
eor(reg2, reg2, Operand(reg1));
|
188
|
-
eor(reg1, reg1, Operand(reg2));
|
191
|
+
eor(reg1, reg1, Operand(reg2), LeaveCC, cond);
|
192
|
+
eor(reg2, reg2, Operand(reg1), LeaveCC, cond);
|
193
|
+
eor(reg1, reg1, Operand(reg2), LeaveCC, cond);
|
189
194
|
} else {
|
190
|
-
mov(scratch, reg1);
|
191
|
-
mov(reg1, reg2);
|
192
|
-
mov(reg2, scratch);
|
195
|
+
mov(scratch, reg1, LeaveCC, cond);
|
196
|
+
mov(reg1, reg2, LeaveCC, cond);
|
197
|
+
mov(reg2, scratch, LeaveCC, cond);
|
193
198
|
}
|
194
199
|
}
|
195
200
|
|
@@ -211,6 +216,102 @@ void MacroAssembler::Move(Register dst, Register src) {
|
|
211
216
|
}
|
212
217
|
|
213
218
|
|
219
|
+
void MacroAssembler::And(Register dst, Register src1, const Operand& src2,
|
220
|
+
Condition cond) {
|
221
|
+
if (!CpuFeatures::IsSupported(ARMv7) || src2.is_single_instruction()) {
|
222
|
+
and_(dst, src1, src2, LeaveCC, cond);
|
223
|
+
return;
|
224
|
+
}
|
225
|
+
int32_t immediate = src2.immediate();
|
226
|
+
if (immediate == 0) {
|
227
|
+
mov(dst, Operand(0), LeaveCC, cond);
|
228
|
+
return;
|
229
|
+
}
|
230
|
+
if (IsPowerOf2(immediate + 1) && ((immediate & 1) != 0)) {
|
231
|
+
ubfx(dst, src1, 0, WhichPowerOf2(immediate + 1), cond);
|
232
|
+
return;
|
233
|
+
}
|
234
|
+
and_(dst, src1, src2, LeaveCC, cond);
|
235
|
+
}
|
236
|
+
|
237
|
+
|
238
|
+
void MacroAssembler::Ubfx(Register dst, Register src1, int lsb, int width,
|
239
|
+
Condition cond) {
|
240
|
+
ASSERT(lsb < 32);
|
241
|
+
if (!CpuFeatures::IsSupported(ARMv7)) {
|
242
|
+
int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1);
|
243
|
+
and_(dst, src1, Operand(mask), LeaveCC, cond);
|
244
|
+
if (lsb != 0) {
|
245
|
+
mov(dst, Operand(dst, LSR, lsb), LeaveCC, cond);
|
246
|
+
}
|
247
|
+
} else {
|
248
|
+
ubfx(dst, src1, lsb, width, cond);
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
|
253
|
+
void MacroAssembler::Sbfx(Register dst, Register src1, int lsb, int width,
|
254
|
+
Condition cond) {
|
255
|
+
ASSERT(lsb < 32);
|
256
|
+
if (!CpuFeatures::IsSupported(ARMv7)) {
|
257
|
+
int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1);
|
258
|
+
and_(dst, src1, Operand(mask), LeaveCC, cond);
|
259
|
+
int shift_up = 32 - lsb - width;
|
260
|
+
int shift_down = lsb + shift_up;
|
261
|
+
if (shift_up != 0) {
|
262
|
+
mov(dst, Operand(dst, LSL, shift_up), LeaveCC, cond);
|
263
|
+
}
|
264
|
+
if (shift_down != 0) {
|
265
|
+
mov(dst, Operand(dst, ASR, shift_down), LeaveCC, cond);
|
266
|
+
}
|
267
|
+
} else {
|
268
|
+
sbfx(dst, src1, lsb, width, cond);
|
269
|
+
}
|
270
|
+
}
|
271
|
+
|
272
|
+
|
273
|
+
void MacroAssembler::Bfc(Register dst, int lsb, int width, Condition cond) {
|
274
|
+
ASSERT(lsb < 32);
|
275
|
+
if (!CpuFeatures::IsSupported(ARMv7)) {
|
276
|
+
int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1);
|
277
|
+
bic(dst, dst, Operand(mask));
|
278
|
+
} else {
|
279
|
+
bfc(dst, lsb, width, cond);
|
280
|
+
}
|
281
|
+
}
|
282
|
+
|
283
|
+
|
284
|
+
void MacroAssembler::Usat(Register dst, int satpos, const Operand& src,
|
285
|
+
Condition cond) {
|
286
|
+
if (!CpuFeatures::IsSupported(ARMv7)) {
|
287
|
+
ASSERT(!dst.is(pc) && !src.rm().is(pc));
|
288
|
+
ASSERT((satpos >= 0) && (satpos <= 31));
|
289
|
+
|
290
|
+
// These asserts are required to ensure compatibility with the ARMv7
|
291
|
+
// implementation.
|
292
|
+
ASSERT((src.shift_op() == ASR) || (src.shift_op() == LSL));
|
293
|
+
ASSERT(src.rs().is(no_reg));
|
294
|
+
|
295
|
+
Label done;
|
296
|
+
int satval = (1 << satpos) - 1;
|
297
|
+
|
298
|
+
if (cond != al) {
|
299
|
+
b(NegateCondition(cond), &done); // Skip saturate if !condition.
|
300
|
+
}
|
301
|
+
if (!(src.is_reg() && dst.is(src.rm()))) {
|
302
|
+
mov(dst, src);
|
303
|
+
}
|
304
|
+
tst(dst, Operand(~satval));
|
305
|
+
b(eq, &done);
|
306
|
+
mov(dst, Operand(0), LeaveCC, mi); // 0 if negative.
|
307
|
+
mov(dst, Operand(satval), LeaveCC, pl); // satval if positive.
|
308
|
+
bind(&done);
|
309
|
+
} else {
|
310
|
+
usat(dst, satpos, src, cond);
|
311
|
+
}
|
312
|
+
}
|
313
|
+
|
314
|
+
|
214
315
|
void MacroAssembler::SmiJumpTable(Register index, Vector<Label*> targets) {
|
215
316
|
// Empty the const pool.
|
216
317
|
CheckConstPool(true, true);
|
@@ -232,8 +333,15 @@ void MacroAssembler::LoadRoot(Register destination,
|
|
232
333
|
}
|
233
334
|
|
234
335
|
|
336
|
+
void MacroAssembler::StoreRoot(Register source,
|
337
|
+
Heap::RootListIndex index,
|
338
|
+
Condition cond) {
|
339
|
+
str(source, MemOperand(roots, index << kPointerSizeLog2), cond);
|
340
|
+
}
|
341
|
+
|
342
|
+
|
235
343
|
void MacroAssembler::RecordWriteHelper(Register object,
|
236
|
-
Register
|
344
|
+
Register address,
|
237
345
|
Register scratch) {
|
238
346
|
if (FLAG_debug_code) {
|
239
347
|
// Check that the object is not in new space.
|
@@ -243,63 +351,18 @@ void MacroAssembler::RecordWriteHelper(Register object,
|
|
243
351
|
bind(¬_in_new_space);
|
244
352
|
}
|
245
353
|
|
246
|
-
//
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
//
|
254
|
-
|
255
|
-
// offset: offset to store location from the object
|
256
|
-
mov(ip, Operand(Page::kPageAlignmentMask)); // load mask only once
|
257
|
-
and_(scratch, object, Operand(ip)); // offset into page of the object
|
258
|
-
add(offset, scratch, Operand(offset)); // add offset into the object
|
259
|
-
mov(offset, Operand(offset, LSR, kObjectAlignmentBits));
|
260
|
-
|
261
|
-
// Compute the page address from the heap object pointer.
|
262
|
-
// object: heap object pointer (with tag)
|
263
|
-
// offset: bit offset of store position in the remembered set
|
264
|
-
bic(object, object, Operand(ip));
|
265
|
-
|
266
|
-
// If the bit offset lies beyond the normal remembered set range, it is in
|
267
|
-
// the extra remembered set area of a large object.
|
268
|
-
// object: page start
|
269
|
-
// offset: bit offset of store position in the remembered set
|
270
|
-
cmp(offset, Operand(Page::kPageSize / kPointerSize));
|
271
|
-
b(lt, &fast);
|
272
|
-
|
273
|
-
// Adjust the bit offset to be relative to the start of the extra
|
274
|
-
// remembered set and the start address to be the address of the extra
|
275
|
-
// remembered set.
|
276
|
-
sub(offset, offset, Operand(Page::kPageSize / kPointerSize));
|
277
|
-
// Load the array length into 'scratch' and multiply by four to get the
|
278
|
-
// size in bytes of the elements.
|
279
|
-
ldr(scratch, MemOperand(object, Page::kObjectStartOffset
|
280
|
-
+ FixedArray::kLengthOffset));
|
281
|
-
mov(scratch, Operand(scratch, LSL, kObjectAlignmentBits));
|
282
|
-
// Add the page header (including remembered set), array header, and array
|
283
|
-
// body size to the page address.
|
284
|
-
add(object, object, Operand(Page::kObjectStartOffset
|
285
|
-
+ FixedArray::kHeaderSize));
|
286
|
-
add(object, object, Operand(scratch));
|
287
|
-
|
288
|
-
bind(&fast);
|
289
|
-
// Get address of the rset word.
|
290
|
-
// object: start of the remembered set (page start for the fast case)
|
291
|
-
// offset: bit offset of store position in the remembered set
|
292
|
-
bic(scratch, offset, Operand(kBitsPerInt - 1)); // clear the bit offset
|
293
|
-
add(object, object, Operand(scratch, LSR, kRSetWordShift));
|
294
|
-
// Get bit offset in the rset word.
|
295
|
-
// object: address of remembered set word
|
296
|
-
// offset: bit offset of store position
|
297
|
-
and_(offset, offset, Operand(kBitsPerInt - 1));
|
298
|
-
|
299
|
-
ldr(scratch, MemOperand(object));
|
354
|
+
// Calculate page address.
|
355
|
+
Bfc(object, 0, kPageSizeBits);
|
356
|
+
|
357
|
+
// Calculate region number.
|
358
|
+
Ubfx(address, address, Page::kRegionSizeLog2,
|
359
|
+
kPageSizeBits - Page::kRegionSizeLog2);
|
360
|
+
|
361
|
+
// Mark region dirty.
|
362
|
+
ldr(scratch, MemOperand(object, Page::kDirtyFlagOffset));
|
300
363
|
mov(ip, Operand(1));
|
301
|
-
orr(scratch, scratch, Operand(ip, LSL,
|
302
|
-
str(scratch, MemOperand(object));
|
364
|
+
orr(scratch, scratch, Operand(ip, LSL, address));
|
365
|
+
str(scratch, MemOperand(object, Page::kDirtyFlagOffset));
|
303
366
|
}
|
304
367
|
|
305
368
|
|
@@ -317,21 +380,58 @@ void MacroAssembler::InNewSpace(Register object,
|
|
317
380
|
// Will clobber 4 registers: object, offset, scratch, ip. The
|
318
381
|
// register 'object' contains a heap object pointer. The heap object
|
319
382
|
// tag is shifted away.
|
320
|
-
void MacroAssembler::RecordWrite(Register object,
|
383
|
+
void MacroAssembler::RecordWrite(Register object,
|
384
|
+
Operand offset,
|
385
|
+
Register scratch0,
|
386
|
+
Register scratch1) {
|
387
|
+
// The compiled code assumes that record write doesn't change the
|
388
|
+
// context register, so we check that none of the clobbered
|
389
|
+
// registers are cp.
|
390
|
+
ASSERT(!object.is(cp) && !scratch0.is(cp) && !scratch1.is(cp));
|
391
|
+
|
392
|
+
Label done;
|
393
|
+
|
394
|
+
// First, test that the object is not in the new space. We cannot set
|
395
|
+
// region marks for new space pages.
|
396
|
+
InNewSpace(object, scratch0, eq, &done);
|
397
|
+
|
398
|
+
// Add offset into the object.
|
399
|
+
add(scratch0, object, offset);
|
400
|
+
|
401
|
+
// Record the actual write.
|
402
|
+
RecordWriteHelper(object, scratch0, scratch1);
|
403
|
+
|
404
|
+
bind(&done);
|
405
|
+
|
406
|
+
// Clobber all input registers when running with the debug-code flag
|
407
|
+
// turned on to provoke errors.
|
408
|
+
if (FLAG_debug_code) {
|
409
|
+
mov(object, Operand(BitCast<int32_t>(kZapValue)));
|
410
|
+
mov(scratch0, Operand(BitCast<int32_t>(kZapValue)));
|
411
|
+
mov(scratch1, Operand(BitCast<int32_t>(kZapValue)));
|
412
|
+
}
|
413
|
+
}
|
414
|
+
|
415
|
+
|
416
|
+
// Will clobber 4 registers: object, address, scratch, ip. The
|
417
|
+
// register 'object' contains a heap object pointer. The heap object
|
418
|
+
// tag is shifted away.
|
419
|
+
void MacroAssembler::RecordWrite(Register object,
|
420
|
+
Register address,
|
321
421
|
Register scratch) {
|
322
422
|
// The compiled code assumes that record write doesn't change the
|
323
423
|
// context register, so we check that none of the clobbered
|
324
424
|
// registers are cp.
|
325
|
-
ASSERT(!object.is(cp) && !
|
425
|
+
ASSERT(!object.is(cp) && !address.is(cp) && !scratch.is(cp));
|
326
426
|
|
327
427
|
Label done;
|
328
428
|
|
329
429
|
// First, test that the object is not in the new space. We cannot set
|
330
|
-
//
|
430
|
+
// region marks for new space pages.
|
331
431
|
InNewSpace(object, scratch, eq, &done);
|
332
432
|
|
333
433
|
// Record the actual write.
|
334
|
-
RecordWriteHelper(object,
|
434
|
+
RecordWriteHelper(object, address, scratch);
|
335
435
|
|
336
436
|
bind(&done);
|
337
437
|
|
@@ -339,12 +439,57 @@ void MacroAssembler::RecordWrite(Register object, Register offset,
|
|
339
439
|
// turned on to provoke errors.
|
340
440
|
if (FLAG_debug_code) {
|
341
441
|
mov(object, Operand(BitCast<int32_t>(kZapValue)));
|
342
|
-
mov(
|
442
|
+
mov(address, Operand(BitCast<int32_t>(kZapValue)));
|
343
443
|
mov(scratch, Operand(BitCast<int32_t>(kZapValue)));
|
344
444
|
}
|
345
445
|
}
|
346
446
|
|
347
447
|
|
448
|
+
void MacroAssembler::Ldrd(Register dst1, Register dst2,
|
449
|
+
const MemOperand& src, Condition cond) {
|
450
|
+
ASSERT(src.rm().is(no_reg));
|
451
|
+
ASSERT(!dst1.is(lr)); // r14.
|
452
|
+
ASSERT_EQ(0, dst1.code() % 2);
|
453
|
+
ASSERT_EQ(dst1.code() + 1, dst2.code());
|
454
|
+
|
455
|
+
// Generate two ldr instructions if ldrd is not available.
|
456
|
+
if (CpuFeatures::IsSupported(ARMv7)) {
|
457
|
+
CpuFeatures::Scope scope(ARMv7);
|
458
|
+
ldrd(dst1, dst2, src, cond);
|
459
|
+
} else {
|
460
|
+
MemOperand src2(src);
|
461
|
+
src2.set_offset(src2.offset() + 4);
|
462
|
+
if (dst1.is(src.rn())) {
|
463
|
+
ldr(dst2, src2, cond);
|
464
|
+
ldr(dst1, src, cond);
|
465
|
+
} else {
|
466
|
+
ldr(dst1, src, cond);
|
467
|
+
ldr(dst2, src2, cond);
|
468
|
+
}
|
469
|
+
}
|
470
|
+
}
|
471
|
+
|
472
|
+
|
473
|
+
void MacroAssembler::Strd(Register src1, Register src2,
|
474
|
+
const MemOperand& dst, Condition cond) {
|
475
|
+
ASSERT(dst.rm().is(no_reg));
|
476
|
+
ASSERT(!src1.is(lr)); // r14.
|
477
|
+
ASSERT_EQ(0, src1.code() % 2);
|
478
|
+
ASSERT_EQ(src1.code() + 1, src2.code());
|
479
|
+
|
480
|
+
// Generate two str instructions if strd is not available.
|
481
|
+
if (CpuFeatures::IsSupported(ARMv7)) {
|
482
|
+
CpuFeatures::Scope scope(ARMv7);
|
483
|
+
strd(src1, src2, dst, cond);
|
484
|
+
} else {
|
485
|
+
MemOperand dst2(dst);
|
486
|
+
dst2.set_offset(dst2.offset() + 4);
|
487
|
+
str(src1, dst, cond);
|
488
|
+
str(src2, dst2, cond);
|
489
|
+
}
|
490
|
+
}
|
491
|
+
|
492
|
+
|
348
493
|
void MacroAssembler::EnterFrame(StackFrame::Type type) {
|
349
494
|
// r0-r3: preserved
|
350
495
|
stm(db_w, sp, cp.bit() | fp.bit() | lr.bit());
|
@@ -610,6 +755,7 @@ void MacroAssembler::InvokeFunction(Register fun,
|
|
610
755
|
ldr(expected_reg,
|
611
756
|
FieldMemOperand(code_reg,
|
612
757
|
SharedFunctionInfo::kFormalParameterCountOffset));
|
758
|
+
mov(expected_reg, Operand(expected_reg, ASR, kSmiTagSize));
|
613
759
|
ldr(code_reg,
|
614
760
|
MemOperand(code_reg, SharedFunctionInfo::kCodeOffset - kHeapObjectTag));
|
615
761
|
add(code_reg, code_reg, Operand(Code::kHeaderSize - kHeapObjectTag));
|
@@ -758,88 +904,6 @@ void MacroAssembler::PopTryHandler() {
|
|
758
904
|
}
|
759
905
|
|
760
906
|
|
761
|
-
Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
|
762
|
-
JSObject* holder, Register holder_reg,
|
763
|
-
Register scratch,
|
764
|
-
int save_at_depth,
|
765
|
-
Label* miss) {
|
766
|
-
// Make sure there's no overlap between scratch and the other
|
767
|
-
// registers.
|
768
|
-
ASSERT(!scratch.is(object_reg) && !scratch.is(holder_reg));
|
769
|
-
|
770
|
-
// Keep track of the current object in register reg.
|
771
|
-
Register reg = object_reg;
|
772
|
-
int depth = 0;
|
773
|
-
|
774
|
-
if (save_at_depth == depth) {
|
775
|
-
str(reg, MemOperand(sp));
|
776
|
-
}
|
777
|
-
|
778
|
-
// Check the maps in the prototype chain.
|
779
|
-
// Traverse the prototype chain from the object and do map checks.
|
780
|
-
while (object != holder) {
|
781
|
-
depth++;
|
782
|
-
|
783
|
-
// Only global objects and objects that do not require access
|
784
|
-
// checks are allowed in stubs.
|
785
|
-
ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
|
786
|
-
|
787
|
-
// Get the map of the current object.
|
788
|
-
ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
|
789
|
-
cmp(scratch, Operand(Handle<Map>(object->map())));
|
790
|
-
|
791
|
-
// Branch on the result of the map check.
|
792
|
-
b(ne, miss);
|
793
|
-
|
794
|
-
// Check access rights to the global object. This has to happen
|
795
|
-
// after the map check so that we know that the object is
|
796
|
-
// actually a global object.
|
797
|
-
if (object->IsJSGlobalProxy()) {
|
798
|
-
CheckAccessGlobalProxy(reg, scratch, miss);
|
799
|
-
// Restore scratch register to be the map of the object. In the
|
800
|
-
// new space case below, we load the prototype from the map in
|
801
|
-
// the scratch register.
|
802
|
-
ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
|
803
|
-
}
|
804
|
-
|
805
|
-
reg = holder_reg; // from now the object is in holder_reg
|
806
|
-
JSObject* prototype = JSObject::cast(object->GetPrototype());
|
807
|
-
if (Heap::InNewSpace(prototype)) {
|
808
|
-
// The prototype is in new space; we cannot store a reference
|
809
|
-
// to it in the code. Load it from the map.
|
810
|
-
ldr(reg, FieldMemOperand(scratch, Map::kPrototypeOffset));
|
811
|
-
} else {
|
812
|
-
// The prototype is in old space; load it directly.
|
813
|
-
mov(reg, Operand(Handle<JSObject>(prototype)));
|
814
|
-
}
|
815
|
-
|
816
|
-
if (save_at_depth == depth) {
|
817
|
-
str(reg, MemOperand(sp));
|
818
|
-
}
|
819
|
-
|
820
|
-
// Go to the next object in the prototype chain.
|
821
|
-
object = prototype;
|
822
|
-
}
|
823
|
-
|
824
|
-
// Check the holder map.
|
825
|
-
ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
|
826
|
-
cmp(scratch, Operand(Handle<Map>(object->map())));
|
827
|
-
b(ne, miss);
|
828
|
-
|
829
|
-
// Log the check depth.
|
830
|
-
LOG(IntEvent("check-maps-depth", depth + 1));
|
831
|
-
|
832
|
-
// Perform security check for access to the global object and return
|
833
|
-
// the holder register.
|
834
|
-
ASSERT(object == holder);
|
835
|
-
ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
|
836
|
-
if (object->IsJSGlobalProxy()) {
|
837
|
-
CheckAccessGlobalProxy(reg, scratch, miss);
|
838
|
-
}
|
839
|
-
return reg;
|
840
|
-
}
|
841
|
-
|
842
|
-
|
843
907
|
void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
|
844
908
|
Register scratch,
|
845
909
|
Label* miss) {
|
@@ -926,6 +990,12 @@ void MacroAssembler::AllocateInNewSpace(int object_size,
|
|
926
990
|
ASSERT(!result.is(scratch1));
|
927
991
|
ASSERT(!scratch1.is(scratch2));
|
928
992
|
|
993
|
+
// Make object size into bytes.
|
994
|
+
if ((flags & SIZE_IN_WORDS) != 0) {
|
995
|
+
object_size *= kPointerSize;
|
996
|
+
}
|
997
|
+
ASSERT_EQ(0, object_size & kObjectAlignmentMask);
|
998
|
+
|
929
999
|
// Load address of new object into result and allocation top address into
|
930
1000
|
// scratch1.
|
931
1001
|
ExternalReference new_space_allocation_top =
|
@@ -948,23 +1018,16 @@ void MacroAssembler::AllocateInNewSpace(int object_size,
|
|
948
1018
|
ExternalReference::new_space_allocation_limit_address();
|
949
1019
|
mov(scratch2, Operand(new_space_allocation_limit));
|
950
1020
|
ldr(scratch2, MemOperand(scratch2));
|
951
|
-
add(result, result, Operand(object_size
|
1021
|
+
add(result, result, Operand(object_size));
|
952
1022
|
cmp(result, Operand(scratch2));
|
953
1023
|
b(hi, gc_required);
|
954
|
-
|
955
|
-
// Update allocation top. result temporarily holds the new top.
|
956
|
-
if (FLAG_debug_code) {
|
957
|
-
tst(result, Operand(kObjectAlignmentMask));
|
958
|
-
Check(eq, "Unaligned allocation in new space");
|
959
|
-
}
|
960
1024
|
str(result, MemOperand(scratch1));
|
961
1025
|
|
962
1026
|
// Tag and adjust back to start of new object.
|
963
1027
|
if ((flags & TAG_OBJECT) != 0) {
|
964
|
-
sub(result, result, Operand(
|
965
|
-
kHeapObjectTag));
|
1028
|
+
sub(result, result, Operand(object_size - kHeapObjectTag));
|
966
1029
|
} else {
|
967
|
-
sub(result, result, Operand(object_size
|
1030
|
+
sub(result, result, Operand(object_size));
|
968
1031
|
}
|
969
1032
|
}
|
970
1033
|
|
@@ -1001,7 +1064,11 @@ void MacroAssembler::AllocateInNewSpace(Register object_size,
|
|
1001
1064
|
ExternalReference::new_space_allocation_limit_address();
|
1002
1065
|
mov(scratch2, Operand(new_space_allocation_limit));
|
1003
1066
|
ldr(scratch2, MemOperand(scratch2));
|
1004
|
-
|
1067
|
+
if ((flags & SIZE_IN_WORDS) != 0) {
|
1068
|
+
add(result, result, Operand(object_size, LSL, kPointerSizeLog2));
|
1069
|
+
} else {
|
1070
|
+
add(result, result, Operand(object_size));
|
1071
|
+
}
|
1005
1072
|
cmp(result, Operand(scratch2));
|
1006
1073
|
b(hi, gc_required);
|
1007
1074
|
|
@@ -1013,7 +1080,11 @@ void MacroAssembler::AllocateInNewSpace(Register object_size,
|
|
1013
1080
|
str(result, MemOperand(scratch1));
|
1014
1081
|
|
1015
1082
|
// Adjust back to start of new object.
|
1016
|
-
|
1083
|
+
if ((flags & SIZE_IN_WORDS) != 0) {
|
1084
|
+
sub(result, result, Operand(object_size, LSL, kPointerSizeLog2));
|
1085
|
+
} else {
|
1086
|
+
sub(result, result, Operand(object_size));
|
1087
|
+
}
|
1017
1088
|
|
1018
1089
|
// Tag object if requested.
|
1019
1090
|
if ((flags & TAG_OBJECT) != 0) {
|
@@ -1054,10 +1125,7 @@ void MacroAssembler::AllocateTwoByteString(Register result,
|
|
1054
1125
|
mov(scratch1, Operand(length, LSL, 1)); // Length in bytes, not chars.
|
1055
1126
|
add(scratch1, scratch1,
|
1056
1127
|
Operand(kObjectAlignmentMask + SeqTwoByteString::kHeaderSize));
|
1057
|
-
|
1058
|
-
// to kObjectAlignment and divide by kPointerSize in the same shift.
|
1059
|
-
ASSERT_EQ(kPointerSize, kObjectAlignmentMask + 1);
|
1060
|
-
mov(scratch1, Operand(scratch1, ASR, kPointerSizeLog2));
|
1128
|
+
and_(scratch1, scratch1, Operand(~kObjectAlignmentMask));
|
1061
1129
|
|
1062
1130
|
// Allocate two-byte string in new space.
|
1063
1131
|
AllocateInNewSpace(scratch1,
|
@@ -1088,10 +1156,7 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
|
1088
1156
|
ASSERT(kCharSize == 1);
|
1089
1157
|
add(scratch1, length,
|
1090
1158
|
Operand(kObjectAlignmentMask + SeqAsciiString::kHeaderSize));
|
1091
|
-
|
1092
|
-
// to kObjectAlignment and divide by kPointerSize in the same shift.
|
1093
|
-
ASSERT_EQ(kPointerSize, kObjectAlignmentMask + 1);
|
1094
|
-
mov(scratch1, Operand(scratch1, ASR, kPointerSizeLog2));
|
1159
|
+
and_(scratch1, scratch1, Operand(~kObjectAlignmentMask));
|
1095
1160
|
|
1096
1161
|
// Allocate ASCII string in new space.
|
1097
1162
|
AllocateInNewSpace(scratch1,
|
@@ -1115,7 +1180,7 @@ void MacroAssembler::AllocateTwoByteConsString(Register result,
|
|
1115
1180
|
Register scratch1,
|
1116
1181
|
Register scratch2,
|
1117
1182
|
Label* gc_required) {
|
1118
|
-
AllocateInNewSpace(ConsString::kSize
|
1183
|
+
AllocateInNewSpace(ConsString::kSize,
|
1119
1184
|
result,
|
1120
1185
|
scratch1,
|
1121
1186
|
scratch2,
|
@@ -1135,7 +1200,7 @@ void MacroAssembler::AllocateAsciiConsString(Register result,
|
|
1135
1200
|
Register scratch1,
|
1136
1201
|
Register scratch2,
|
1137
1202
|
Label* gc_required) {
|
1138
|
-
AllocateInNewSpace(ConsString::kSize
|
1203
|
+
AllocateInNewSpace(ConsString::kSize,
|
1139
1204
|
result,
|
1140
1205
|
scratch1,
|
1141
1206
|
scratch2,
|
@@ -1182,6 +1247,21 @@ void MacroAssembler::CheckMap(Register obj,
|
|
1182
1247
|
}
|
1183
1248
|
|
1184
1249
|
|
1250
|
+
void MacroAssembler::CheckMap(Register obj,
|
1251
|
+
Register scratch,
|
1252
|
+
Heap::RootListIndex index,
|
1253
|
+
Label* fail,
|
1254
|
+
bool is_heap_object) {
|
1255
|
+
if (!is_heap_object) {
|
1256
|
+
BranchOnSmi(obj, fail);
|
1257
|
+
}
|
1258
|
+
ldr(scratch, FieldMemOperand(obj, HeapObject::kMapOffset));
|
1259
|
+
LoadRoot(ip, index);
|
1260
|
+
cmp(scratch, ip);
|
1261
|
+
b(ne, fail);
|
1262
|
+
}
|
1263
|
+
|
1264
|
+
|
1185
1265
|
void MacroAssembler::TryGetFunctionPrototype(Register function,
|
1186
1266
|
Register result,
|
1187
1267
|
Register scratch,
|
@@ -1241,12 +1321,12 @@ void MacroAssembler::TailCallStub(CodeStub* stub, Condition cond) {
|
|
1241
1321
|
}
|
1242
1322
|
|
1243
1323
|
|
1244
|
-
void MacroAssembler::StubReturn(int argc) {
|
1324
|
+
void MacroAssembler::StubReturn(int argc, Condition cond) {
|
1245
1325
|
ASSERT(argc >= 1 && generating_stub());
|
1246
1326
|
if (argc > 1) {
|
1247
|
-
add(sp, sp, Operand((argc - 1) * kPointerSize));
|
1327
|
+
add(sp, sp, Operand((argc - 1) * kPointerSize), LeaveCC, cond);
|
1248
1328
|
}
|
1249
|
-
Ret();
|
1329
|
+
Ret(cond);
|
1250
1330
|
}
|
1251
1331
|
|
1252
1332
|
|
@@ -1269,11 +1349,61 @@ void MacroAssembler::IntegerToDoubleConversionWithVFP3(Register inReg,
|
|
1269
1349
|
}
|
1270
1350
|
|
1271
1351
|
|
1352
|
+
void MacroAssembler::ObjectToDoubleVFPRegister(Register object,
|
1353
|
+
DwVfpRegister result,
|
1354
|
+
Register scratch1,
|
1355
|
+
Register scratch2,
|
1356
|
+
Register heap_number_map,
|
1357
|
+
SwVfpRegister scratch3,
|
1358
|
+
Label* not_number,
|
1359
|
+
ObjectToDoubleFlags flags) {
|
1360
|
+
Label done;
|
1361
|
+
if ((flags & OBJECT_NOT_SMI) == 0) {
|
1362
|
+
Label not_smi;
|
1363
|
+
BranchOnNotSmi(object, ¬_smi);
|
1364
|
+
// Remove smi tag and convert to double.
|
1365
|
+
mov(scratch1, Operand(object, ASR, kSmiTagSize));
|
1366
|
+
vmov(scratch3, scratch1);
|
1367
|
+
vcvt_f64_s32(result, scratch3);
|
1368
|
+
b(&done);
|
1369
|
+
bind(¬_smi);
|
1370
|
+
}
|
1371
|
+
// Check for heap number and load double value from it.
|
1372
|
+
ldr(scratch1, FieldMemOperand(object, HeapObject::kMapOffset));
|
1373
|
+
sub(scratch2, object, Operand(kHeapObjectTag));
|
1374
|
+
cmp(scratch1, heap_number_map);
|
1375
|
+
b(ne, not_number);
|
1376
|
+
if ((flags & AVOID_NANS_AND_INFINITIES) != 0) {
|
1377
|
+
// If exponent is all ones the number is either a NaN or +/-Infinity.
|
1378
|
+
ldr(scratch1, FieldMemOperand(object, HeapNumber::kExponentOffset));
|
1379
|
+
Sbfx(scratch1,
|
1380
|
+
scratch1,
|
1381
|
+
HeapNumber::kExponentShift,
|
1382
|
+
HeapNumber::kExponentBits);
|
1383
|
+
// All-one value sign extend to -1.
|
1384
|
+
cmp(scratch1, Operand(-1));
|
1385
|
+
b(eq, not_number);
|
1386
|
+
}
|
1387
|
+
vldr(result, scratch2, HeapNumber::kValueOffset);
|
1388
|
+
bind(&done);
|
1389
|
+
}
|
1390
|
+
|
1391
|
+
|
1392
|
+
void MacroAssembler::SmiToDoubleVFPRegister(Register smi,
|
1393
|
+
DwVfpRegister value,
|
1394
|
+
Register scratch1,
|
1395
|
+
SwVfpRegister scratch2) {
|
1396
|
+
mov(scratch1, Operand(smi, ASR, kSmiTagSize));
|
1397
|
+
vmov(scratch2, scratch1);
|
1398
|
+
vcvt_f64_s32(value, scratch2);
|
1399
|
+
}
|
1400
|
+
|
1401
|
+
|
1272
1402
|
void MacroAssembler::GetLeastBitsFromSmi(Register dst,
|
1273
1403
|
Register src,
|
1274
1404
|
int num_least_bits) {
|
1275
1405
|
if (CpuFeatures::IsSupported(ARMv7)) {
|
1276
|
-
ubfx(dst, src,
|
1406
|
+
ubfx(dst, src, kSmiTagSize, num_least_bits);
|
1277
1407
|
} else {
|
1278
1408
|
mov(dst, Operand(src, ASR, kSmiTagSize));
|
1279
1409
|
and_(dst, dst, Operand((1 << num_least_bits) - 1));
|
@@ -1428,6 +1558,16 @@ void MacroAssembler::Assert(Condition cc, const char* msg) {
|
|
1428
1558
|
}
|
1429
1559
|
|
1430
1560
|
|
1561
|
+
void MacroAssembler::AssertRegisterIsRoot(Register reg,
|
1562
|
+
Heap::RootListIndex index) {
|
1563
|
+
if (FLAG_debug_code) {
|
1564
|
+
LoadRoot(ip, index);
|
1565
|
+
cmp(reg, ip);
|
1566
|
+
Check(eq, "Register did not match expected root");
|
1567
|
+
}
|
1568
|
+
}
|
1569
|
+
|
1570
|
+
|
1431
1571
|
void MacroAssembler::Check(Condition cc, const char* msg) {
|
1432
1572
|
Label L;
|
1433
1573
|
b(cc, &L);
|
@@ -1438,6 +1578,8 @@ void MacroAssembler::Check(Condition cc, const char* msg) {
|
|
1438
1578
|
|
1439
1579
|
|
1440
1580
|
void MacroAssembler::Abort(const char* msg) {
|
1581
|
+
Label abort_start;
|
1582
|
+
bind(&abort_start);
|
1441
1583
|
// We want to pass the msg string like a smi to avoid GC
|
1442
1584
|
// problems, however msg is not guaranteed to be aligned
|
1443
1585
|
// properly. Instead, we pass an aligned pointer that is
|
@@ -1461,6 +1603,17 @@ void MacroAssembler::Abort(const char* msg) {
|
|
1461
1603
|
push(r0);
|
1462
1604
|
CallRuntime(Runtime::kAbort, 2);
|
1463
1605
|
// will not return here
|
1606
|
+
if (is_const_pool_blocked()) {
|
1607
|
+
// If the calling code cares about the exact number of
|
1608
|
+
// instructions generated, we insert padding here to keep the size
|
1609
|
+
// of the Abort macro constant.
|
1610
|
+
static const int kExpectedAbortInstructions = 10;
|
1611
|
+
int abort_instructions = InstructionsGeneratedSince(&abort_start);
|
1612
|
+
ASSERT(abort_instructions <= kExpectedAbortInstructions);
|
1613
|
+
while (abort_instructions++ < kExpectedAbortInstructions) {
|
1614
|
+
nop();
|
1615
|
+
}
|
1616
|
+
}
|
1464
1617
|
}
|
1465
1618
|
|
1466
1619
|
|
@@ -1546,30 +1699,48 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first,
|
|
1546
1699
|
void MacroAssembler::AllocateHeapNumber(Register result,
|
1547
1700
|
Register scratch1,
|
1548
1701
|
Register scratch2,
|
1702
|
+
Register heap_number_map,
|
1549
1703
|
Label* gc_required) {
|
1550
1704
|
// Allocate an object in the heap for the heap number and tag it as a heap
|
1551
1705
|
// object.
|
1552
|
-
AllocateInNewSpace(HeapNumber::kSize
|
1706
|
+
AllocateInNewSpace(HeapNumber::kSize,
|
1553
1707
|
result,
|
1554
1708
|
scratch1,
|
1555
1709
|
scratch2,
|
1556
1710
|
gc_required,
|
1557
1711
|
TAG_OBJECT);
|
1558
1712
|
|
1559
|
-
//
|
1560
|
-
|
1561
|
-
str(
|
1713
|
+
// Store heap number map in the allocated object.
|
1714
|
+
AssertRegisterIsRoot(heap_number_map, Heap::kHeapNumberMapRootIndex);
|
1715
|
+
str(heap_number_map, FieldMemOperand(result, HeapObject::kMapOffset));
|
1562
1716
|
}
|
1563
1717
|
|
1564
1718
|
|
1565
|
-
void MacroAssembler::
|
1566
|
-
|
1567
|
-
|
1719
|
+
void MacroAssembler::AllocateHeapNumberWithValue(Register result,
|
1720
|
+
DwVfpRegister value,
|
1721
|
+
Register scratch1,
|
1722
|
+
Register scratch2,
|
1723
|
+
Register heap_number_map,
|
1724
|
+
Label* gc_required) {
|
1725
|
+
AllocateHeapNumber(result, scratch1, scratch2, heap_number_map, gc_required);
|
1726
|
+
sub(scratch1, result, Operand(kHeapObjectTag));
|
1727
|
+
vstr(value, scratch1, HeapNumber::kValueOffset);
|
1728
|
+
}
|
1729
|
+
|
1730
|
+
|
1731
|
+
void MacroAssembler::CountLeadingZeros(Register zeros, // Answer.
|
1732
|
+
Register source, // Input.
|
1733
|
+
Register scratch) {
|
1734
|
+
ASSERT(!zeros.is(source) || !source.is(zeros));
|
1735
|
+
ASSERT(!zeros.is(scratch));
|
1736
|
+
ASSERT(!scratch.is(ip));
|
1737
|
+
ASSERT(!source.is(ip));
|
1738
|
+
ASSERT(!zeros.is(ip));
|
1568
1739
|
#ifdef CAN_USE_ARMV5_INSTRUCTIONS
|
1569
1740
|
clz(zeros, source); // This instruction is only supported after ARM5.
|
1570
1741
|
#else
|
1571
1742
|
mov(zeros, Operand(0));
|
1572
|
-
|
1743
|
+
Move(scratch, source);
|
1573
1744
|
// Top 16.
|
1574
1745
|
tst(scratch, Operand(0xffff0000));
|
1575
1746
|
add(zeros, zeros, Operand(16), LeaveCC, eq);
|
@@ -1717,3 +1888,5 @@ void CodePatcher::Emit(Address addr) {
|
|
1717
1888
|
|
1718
1889
|
|
1719
1890
|
} } // namespace v8::internal
|
1891
|
+
|
1892
|
+
#endif // V8_TARGET_ARCH_ARM
|