therubyracer 0.6.3 → 0.7.0.pre
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/Rakefile +10 -9
- data/ext/v8/callbacks.cpp +15 -8
- data/ext/v8/converters.cpp +7 -8
- data/ext/v8/converters.h +0 -2
- data/ext/v8/extconf.rb +2 -0
- data/ext/v8/rr.cpp +169 -0
- data/ext/v8/rr.h +34 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/AUTHORS +8 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/ChangeLog +198 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/LICENSE +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/SConstruct +152 -38
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8-debug.h +52 -4
- data/ext/v8/upstream/2.1.10/include/v8-profiler.h +176 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8.h +227 -48
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/SConscript +60 -10
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.cc +5 -39
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.cc +477 -57
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.h +8 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apinatives.js +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apiutils.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arguments.h +5 -6
- data/ext/v8/upstream/{2.0.6/src/arm/assembler-thumb2-inl.h → 2.1.10/src/arm/assembler-arm-inl.h} +42 -27
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.cc +430 -216
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.h +199 -110
- data/ext/v8/upstream/{2.0.6/src/arm/assembler-arm-inl.h → 2.1.10/src/arm/assembler-thumb2-inl.h} +4 -18
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.cc +142 -85
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.h +18 -9
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/builtins-arm.cc +127 -87
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm-inl.h +3 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm.cc +4634 -1427
- data/ext/v8/upstream/2.1.10/src/arm/codegen-arm.h +946 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.cc +21 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.h +39 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/cpu-arm.cc +9 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/debug-arm.cc +34 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/disasm-arm.cc +262 -117
- data/ext/v8/upstream/2.1.10/src/arm/fast-codegen-arm.cc +238 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/arm/fast-codegen-arm.cc → 2.1.10/src/arm/full-codegen-arm.cc} +453 -283
- data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +1833 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/jump-target-arm.cc +3 -29
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.cc +564 -104
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.h +255 -46
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.cc +78 -104
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.h +6 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm-inl.h +0 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.h +2 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.cc +557 -180
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.h +52 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/stub-cache-arm.cc +904 -240
- data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.cc +668 -0
- data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.h +503 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/array.js +82 -109
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.cc +49 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.h +27 -5
- data/ext/v8/upstream/2.1.10/src/ast.cc +1138 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ast.h +354 -53
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.cc +609 -501
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.h +27 -8
- data/ext/v8/upstream/2.1.10/src/builtins.cc +1512 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/builtins.h +41 -25
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bytecodes-irregexp.h +0 -0
- data/ext/v8/upstream/2.1.10/src/cached-powers.h +119 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.h +25 -1
- data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +101 -0
- data/ext/v8/upstream/2.1.10/src/circular-queue.cc +121 -0
- data/ext/v8/upstream/2.1.10/src/circular-queue.h +129 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.cc +23 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.h +16 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen-inl.h +6 -34
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.cc +73 -92
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.h +164 -68
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.cc +117 -73
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.h +18 -17
- data/ext/v8/upstream/2.1.10/src/compiler.cc +623 -0
- data/ext/v8/upstream/2.1.10/src/compiler.h +299 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.h +8 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions-inl.h +28 -13
- data/ext/v8/upstream/2.1.10/src/conversions.cc +1105 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions.h +9 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.h +1 -1
- data/ext/v8/upstream/2.1.10/src/cpu-profiler-inl.h +99 -0
- data/ext/v8/upstream/2.1.10/src/cpu-profiler.cc +494 -0
- data/ext/v8/upstream/2.1.10/src/cpu-profiler.h +277 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/cpu.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.cc +15 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-posix.cc +18 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-readline.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-windows.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.cc +10 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.js +43 -38
- data/ext/v8/upstream/2.1.10/src/data-flow.cc +755 -0
- data/ext/v8/upstream/2.1.10/src/data-flow.h +278 -0
- data/ext/v8/upstream/{2.0.6/src/date-delay.js → 2.1.10/src/date.js} +100 -110
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser-inl.h +11 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.cc +24 -26
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.h +8 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.cc +3 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/debug-delay.js → 2.1.10/src/debug-debugger.js} +111 -15
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.cc +156 -96
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.h +53 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disasm.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.cc +2 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.h +0 -0
- data/ext/v8/upstream/2.1.10/src/diy-fp.cc +58 -0
- data/ext/v8/upstream/2.1.10/src/diy-fp.h +117 -0
- data/ext/v8/upstream/2.1.10/src/double.h +169 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dtoa-config.c +4 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.cc +22 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.h +17 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.cc +70 -46
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.h +27 -17
- data/ext/v8/upstream/2.1.10/src/fast-codegen.cc +746 -0
- data/ext/v8/upstream/2.1.10/src/fast-codegen.h +161 -0
- data/ext/v8/upstream/2.1.10/src/fast-dtoa.cc +512 -0
- data/ext/v8/upstream/2.1.10/src/fast-dtoa.h +59 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flag-definitions.h +32 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.h +0 -0
- data/ext/v8/upstream/2.1.10/src/flow-graph.cc +763 -0
- data/ext/v8/upstream/2.1.10/src/flow-graph.h +180 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.cc +1 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.h +49 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames-inl.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.cc +91 -17
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.h +24 -2
- data/ext/v8/upstream/{2.0.6/src/fast-codegen.cc → 2.1.10/src/full-codegen.cc} +549 -198
- data/ext/v8/upstream/{2.0.6/src/fast-codegen.h → 2.1.10/src/full-codegen.h} +109 -29
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/globals.h +67 -43
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.cc +124 -129
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.h +33 -15
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-inl.h +56 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.cc +413 -221
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.h +192 -67
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32-inl.h +6 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.cc +187 -32
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.h +31 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/builtins-ia32.cc +160 -133
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32.cc +5533 -2177
- data/ext/v8/upstream/{2.0.6/src/x64/codegen-x64.h → 2.1.10/src/ia32/codegen-ia32.h} +453 -134
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/cpu-ia32.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/debug-ia32.cc +63 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/disasm-ia32.cc +99 -16
- data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.cc +950 -0
- data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.h +155 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/ia32/fast-codegen-ia32.cc → 2.1.10/src/ia32/full-codegen-ia32.cc} +454 -253
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/ic-ia32.cc +545 -390
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/jump-target-ia32.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.cc +330 -139
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.h +96 -30
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.cc +73 -89
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.h +6 -21
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.cc +59 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/stub-cache-ia32.cc +745 -303
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.cc +278 -71
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.h +78 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.cc +172 -89
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.h +51 -20
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/json-delay.js → 2.1.10/src/json.js} +26 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.cc +151 -118
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.h +31 -7
- data/ext/v8/upstream/2.1.10/src/jump-target-heavy-inl.h +51 -0
- data/ext/v8/upstream/{2.0.6/src/jump-target.cc → 2.1.10/src/jump-target-heavy.cc} +164 -184
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target-inl.h +8 -9
- data/ext/v8/upstream/{2.0.6/src/usage-analyzer.h → 2.1.10/src/jump-target-light-inl.h} +9 -7
- data/ext/v8/upstream/2.1.10/src/jump-target-light.cc +86 -0
- data/ext/v8/upstream/2.1.10/src/jump-target.cc +155 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target.h +6 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list.h +2 -1
- data/ext/v8/upstream/2.1.10/src/liveedit-debugger.js +944 -0
- data/ext/v8/upstream/2.1.10/src/liveedit.cc +1468 -0
- data/ext/v8/upstream/2.1.10/src/liveedit.h +170 -0
- data/ext/v8/upstream/2.1.10/src/log-inl.h +59 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.cc +3 -9
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.h +1 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.cc +198 -95
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.h +50 -49
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macro-assembler.h +9 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macros.py +30 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.cc +464 -152
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.h +41 -20
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/math.js +9 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/memory.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.js +46 -9
- data/ext/v8/upstream/2.1.10/src/mips/assembler-mips-inl.h +215 -0
- data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.cc +1208 -0
- data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.h +665 -0
- data/ext/v8/upstream/2.1.10/src/mips/builtins-mips.cc +202 -0
- data/ext/v8/upstream/2.1.10/src/mips/codegen-mips-inl.h +70 -0
- data/ext/v8/upstream/2.1.10/src/mips/codegen-mips.cc +1428 -0
- data/ext/v8/upstream/{2.0.6/src/arm/codegen-arm.h → 2.1.10/src/mips/codegen-mips.h} +103 -205
- data/ext/v8/upstream/2.1.10/src/mips/constants-mips.cc +323 -0
- data/ext/v8/upstream/2.1.10/src/mips/constants-mips.h +525 -0
- data/ext/v8/upstream/2.1.10/src/mips/cpu-mips.cc +69 -0
- data/ext/v8/upstream/2.1.10/src/mips/debug-mips.cc +128 -0
- data/ext/v8/upstream/2.1.10/src/mips/disasm-mips.cc +784 -0
- data/ext/v8/upstream/2.1.10/src/mips/fast-codegen-mips.cc +74 -0
- data/ext/v8/upstream/2.1.10/src/mips/frames-mips.cc +99 -0
- data/ext/v8/upstream/2.1.10/src/mips/frames-mips.h +164 -0
- data/ext/v8/upstream/2.1.10/src/mips/full-codegen-mips.cc +273 -0
- data/ext/v8/upstream/2.1.10/src/mips/ic-mips.cc +217 -0
- data/ext/v8/upstream/2.1.10/src/mips/jump-target-mips.cc +172 -0
- data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.cc +1323 -0
- data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.h +461 -0
- data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips-inl.h +137 -0
- data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.cc +60 -0
- data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.h +46 -0
- data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.cc +1648 -0
- data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.h +311 -0
- data/ext/v8/upstream/2.1.10/src/mips/stub-cache-mips.cc +400 -0
- data/ext/v8/upstream/2.1.10/src/mips/virtual-frame-mips.cc +316 -0
- data/ext/v8/upstream/{2.0.6/src/arm/virtual-frame-arm.h → 2.1.10/src/mips/virtual-frame-mips.h} +87 -71
- data/ext/v8/upstream/{2.0.6/src/mirror-delay.js → 2.1.10/src/mirror-debugger.js} +51 -45
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mksnapshot.cc +97 -10
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/natives.h +6 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-debug.cc +47 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-inl.h +154 -38
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.cc +528 -280
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.h +302 -95
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.cc +25 -33
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.h +9 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.cc +444 -72
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.h +4 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-freebsd.cc +32 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-linux.cc +59 -25
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-macos.cc +30 -13
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-nullos.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-openbsd.cc +21 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-posix.cc +0 -18
- data/ext/v8/upstream/2.1.10/src/platform-solaris.cc +607 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-win32.cc +16 -17
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform.h +25 -8
- data/ext/v8/upstream/2.1.10/src/powers-ten.h +2461 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.cc +49 -29
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.h +3 -1
- data/ext/v8/upstream/2.1.10/src/profile-generator-inl.h +124 -0
- data/ext/v8/upstream/2.1.10/src/profile-generator.cc +583 -0
- data/ext/v8/upstream/2.1.10/src/profile-generator.h +364 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.cc +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.h +12 -24
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp-inl.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.cc +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.cc +33 -10
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.h +12 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/regexp-delay.js → 2.1.10/src/regexp.js} +180 -58
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator-inl.h +68 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.cc +5 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.h +42 -17
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.cc +110 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.cc +2733 -623
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.h +43 -20
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.js +46 -35
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.cc +278 -36
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.h +97 -26
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.cc +3 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.h +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.cc +11 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.h +0 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.cc +298 -175
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.h +184 -40
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/shell.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/simulator.h +2 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/smart-pointer.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot-common.cc +16 -31
- data/ext/v8/upstream/2.1.10/src/snapshot-empty.cc +50 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot.h +13 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces-inl.h +35 -27
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.cc +256 -42
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.h +136 -42
- data/ext/v8/upstream/{2.0.6/src/zone-inl.h → 2.1.10/src/splay-tree-inl.h} +102 -89
- data/ext/v8/upstream/2.1.10/src/splay-tree.h +203 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string.js +260 -149
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.cc +195 -69
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.h +127 -12
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/COPYING +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/dtoa.c +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/valgrind/valgrind.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.cc +26 -31
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.h +3 -4
- data/ext/v8/upstream/2.1.10/src/type-info.cc +53 -0
- data/ext/v8/upstream/2.1.10/src/type-info.h +244 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/uri.js +6 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.cc +0 -37
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.h +121 -50
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.h +130 -98
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.cc +42 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.h +4 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8natives.js +202 -37
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.cc +11 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.h +15 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.cc +7 -51
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.h +5 -35
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.cc +3 -3
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.h +0 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame-heavy-inl.h +152 -0
- data/ext/v8/upstream/{2.0.6/src/virtual-frame.cc → 2.1.10/src/virtual-frame-heavy.cc} +107 -176
- data/ext/v8/upstream/2.1.10/src/virtual-frame-inl.h +39 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame-light-inl.h +69 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame-light.cc +49 -0
- data/ext/v8/upstream/2.1.10/src/virtual-frame.cc +49 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/virtual-frame.h +2 -0
- data/ext/v8/upstream/{2.0.6/src/log-inl.h → 2.1.10/src/vm-state-inl.h} +28 -20
- data/ext/v8/upstream/{2.0.6/src/snapshot-empty.cc → 2.1.10/src/vm-state.cc} +5 -6
- data/ext/v8/upstream/2.1.10/src/vm-state.h +75 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64-inl.h +11 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.cc +285 -93
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.h +81 -78
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/builtins-x64.cc +130 -87
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64-inl.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64.cc +4520 -1317
- data/ext/v8/upstream/{2.0.6/src/ia32/codegen-ia32.h → 2.1.10/src/x64/codegen-x64.h} +362 -141
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/cpu-x64.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/debug-x64.cc +20 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/disasm-x64.cc +121 -44
- data/ext/v8/upstream/2.1.10/src/x64/fast-codegen-x64.cc +246 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.h +0 -0
- data/ext/v8/upstream/{2.0.6/src/x64/fast-codegen-x64.cc → 2.1.10/src/x64/full-codegen-x64.cc} +404 -231
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/ic-x64.cc +346 -117
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/jump-target-x64.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.cc +537 -181
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.h +140 -34
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.cc +74 -96
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.h +8 -25
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64-inl.h +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.cc +3 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.h +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.cc +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.h +2 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/stub-cache-x64.cc +785 -288
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.cc +128 -52
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.h +40 -19
- data/ext/v8/upstream/2.1.10/src/zone-inl.h +82 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.cc +1 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.h +6 -90
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/codemap.js +12 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/consarray.js +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/csvparser.js +22 -37
- data/ext/v8/upstream/2.1.10/tools/generate-ten-powers.scm +286 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/gyp/v8.gyp +86 -24
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/js2c.py +22 -22
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/jsmin.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor +10 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/logreader.js +34 -16
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-nm +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-tick-processor +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/annotate +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/common +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/dump +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/report +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/reset +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/run +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/shutdown +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/start +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/presubmit.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/process-heap-prof.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile.js +70 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile_view.js +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/run-valgrind.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.js +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/stats-viewer.py +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/test.py +7 -7
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor-driver.js +7 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.js +140 -9
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.py +40 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/utils.py +6 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/README.txt +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/arm.vsprops +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/common.vsprops +1 -2
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_arm.vcproj +193 -199
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_x64.vcproj +16 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8js2c.cmd +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/debug.vsprops +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/ia32.vsprops +5 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/js2c.cmd +1 -1
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/release.vsprops +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.sln +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.vcproj +11 -7
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.sln +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.vcproj +227 -223
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base.vcproj +137 -5
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_arm.vcproj +116 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_x64.vcproj +125 -4
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest.vcproj +12 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_arm.vcproj +12 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_x64.vcproj +11 -11
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_arm.vcproj +145 -151
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_x64.vcproj +16 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample.vcproj +0 -6
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -151
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_x64.vcproj +16 -8
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.sln +0 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.vcproj +11 -7
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/x64.vsprops +5 -1
- data/ext/v8/upstream/2.1.10/tools/windows-tick-processor.bat +29 -0
- data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/windows-tick-processor.py +0 -0
- data/ext/v8/upstream/Makefile +8 -2
- data/ext/v8/v8.cpp +21 -73
- data/ext/v8/v8_array.cpp +56 -0
- data/ext/v8/v8_array.h +8 -0
- data/ext/v8/v8_callbacks.cpp +121 -0
- data/ext/v8/v8_callbacks.h +8 -0
- data/ext/v8/v8_cxt.cpp +74 -77
- data/ext/v8/v8_cxt.h +2 -9
- data/ext/v8/v8_date.cpp +26 -0
- data/ext/v8/v8_date.h +6 -0
- data/ext/v8/v8_exception.cpp +55 -0
- data/ext/v8/v8_exception.h +6 -0
- data/ext/v8/v8_external.cpp +50 -0
- data/ext/v8/v8_external.h +8 -0
- data/ext/v8/v8_func.cpp +76 -18
- data/ext/v8/v8_func.h +5 -4
- data/ext/v8/v8_msg.cpp +55 -46
- data/ext/v8/v8_msg.h +3 -11
- data/ext/v8/v8_obj.cpp +67 -36
- data/ext/v8/v8_obj.h +6 -8
- data/ext/v8/v8_ref.cpp +25 -9
- data/ext/v8/v8_ref.h +3 -5
- data/ext/v8/v8_script.cpp +17 -10
- data/ext/v8/v8_script.h +3 -3
- data/ext/v8/v8_str.cpp +34 -6
- data/ext/v8/v8_str.h +4 -2
- data/ext/v8/v8_template.cpp +195 -33
- data/ext/v8/v8_template.h +4 -5
- data/ext/v8/v8_try_catch.cpp +99 -0
- data/ext/v8/v8_try_catch.h +5 -0
- data/ext/v8/v8_value.cpp +164 -0
- data/ext/v8/v8_value.h +10 -0
- data/lib/v8.rb +3 -1
- data/lib/v8/access.rb +60 -0
- data/lib/v8/array.rb +15 -0
- data/lib/v8/callbacks.rb +88 -0
- data/lib/v8/cli.rb +1 -1
- data/lib/v8/context.rb +55 -66
- data/lib/v8/function.rb +20 -2
- data/lib/v8/object.rb +14 -12
- data/lib/v8/ruby_error.rb +3 -0
- data/lib/v8/to.rb +59 -7
- data/spec/ext/cxt_spec.rb +2 -15
- data/spec/ext/func_spec.rb +17 -10
- data/spec/ext/try_catch_spec.rb +32 -0
- data/spec/foo.rb +17 -0
- data/spec/redjs/jsapi_spec.rb +173 -96
- data/spec/spec_helper.rb +7 -0
- data/spec/v8/to_spec.rb +0 -1
- data/therubyracer.gemspec +6 -6
- metadata +493 -386
- data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
- data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
- data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
- data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
- data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
- data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
- data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
- data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
- data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
- data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
- data/ext/v8/v8_standalone.cpp +0 -69
- data/ext/v8/v8_standalone.h +0 -31
- data/spec/ext/obj_spec.rb +0 -13
@@ -39,7 +39,6 @@ namespace internal {
|
|
39
39
|
|
40
40
|
MacroAssembler::MacroAssembler(void* buffer, int size)
|
41
41
|
: Assembler(buffer, size),
|
42
|
-
unresolved_(0),
|
43
42
|
generating_stub_(false),
|
44
43
|
allow_stub_calls_(true),
|
45
44
|
code_object_(Heap::undefined_value()) {
|
@@ -47,17 +46,17 @@ MacroAssembler::MacroAssembler(void* buffer, int size)
|
|
47
46
|
|
48
47
|
|
49
48
|
void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) {
|
50
|
-
movq(destination, Operand(
|
49
|
+
movq(destination, Operand(kRootRegister, index << kPointerSizeLog2));
|
51
50
|
}
|
52
51
|
|
53
52
|
|
54
53
|
void MacroAssembler::PushRoot(Heap::RootListIndex index) {
|
55
|
-
push(Operand(
|
54
|
+
push(Operand(kRootRegister, index << kPointerSizeLog2));
|
56
55
|
}
|
57
56
|
|
58
57
|
|
59
58
|
void MacroAssembler::CompareRoot(Register with, Heap::RootListIndex index) {
|
60
|
-
cmpq(with, Operand(
|
59
|
+
cmpq(with, Operand(kRootRegister, index << kPointerSizeLog2));
|
61
60
|
}
|
62
61
|
|
63
62
|
|
@@ -73,37 +72,46 @@ void MacroAssembler::StackLimitCheck(Label* on_stack_overflow) {
|
|
73
72
|
}
|
74
73
|
|
75
74
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
75
|
+
void MacroAssembler::RecordWriteHelper(Register object,
|
76
|
+
Register addr,
|
77
|
+
Register scratch) {
|
78
|
+
if (FLAG_debug_code) {
|
79
|
+
// Check that the object is not in new space.
|
80
|
+
Label not_in_new_space;
|
81
|
+
InNewSpace(object, scratch, not_equal, ¬_in_new_space);
|
82
|
+
Abort("new-space object passed to RecordWriteHelper");
|
83
|
+
bind(¬_in_new_space);
|
84
|
+
}
|
85
|
+
|
80
86
|
Label fast;
|
81
87
|
|
82
88
|
// Compute the page start address from the heap object pointer, and reuse
|
83
89
|
// the 'object' register for it.
|
84
90
|
ASSERT(is_int32(~Page::kPageAlignmentMask));
|
85
|
-
|
86
|
-
|
91
|
+
and_(object,
|
92
|
+
Immediate(static_cast<int32_t>(~Page::kPageAlignmentMask)));
|
87
93
|
Register page_start = object;
|
88
94
|
|
89
95
|
// Compute the bit addr in the remembered set/index of the pointer in the
|
90
96
|
// page. Reuse 'addr' as pointer_offset.
|
91
|
-
|
92
|
-
|
97
|
+
subq(addr, page_start);
|
98
|
+
shr(addr, Immediate(kPointerSizeLog2));
|
93
99
|
Register pointer_offset = addr;
|
94
100
|
|
95
101
|
// If the bit offset lies beyond the normal remembered set range, it is in
|
96
102
|
// the extra remembered set area of a large object.
|
97
|
-
|
98
|
-
|
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.
|
99
107
|
|
100
108
|
// Adjust 'page_start' so that addressing using 'pointer_offset' hits the
|
101
109
|
// extra remembered set after the large object.
|
102
110
|
|
103
111
|
// Load the array length into 'scratch'.
|
104
|
-
|
105
|
-
|
106
|
-
|
112
|
+
movl(scratch,
|
113
|
+
Operand(page_start,
|
114
|
+
Page::kObjectStartOffset + FixedArray::kLengthOffset));
|
107
115
|
Register array_length = scratch;
|
108
116
|
|
109
117
|
// Extra remembered set starts right after the large object (a FixedArray), at
|
@@ -112,59 +120,17 @@ static void RecordWriteHelper(MacroAssembler* masm,
|
|
112
120
|
// Add the delta between the end of the normal RSet and the start of the
|
113
121
|
// extra RSet to 'page_start', so that addressing the bit using
|
114
122
|
// 'pointer_offset' hits the extra RSet words.
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
123
|
+
lea(page_start,
|
124
|
+
Operand(page_start, array_length, times_pointer_size,
|
125
|
+
Page::kObjectStartOffset + FixedArray::kHeaderSize
|
126
|
+
- Page::kRSetEndOffset));
|
119
127
|
|
120
128
|
// NOTE: For now, we use the bit-test-and-set (bts) x86 instruction
|
121
129
|
// to limit code size. We should probably evaluate this decision by
|
122
130
|
// measuring the performance of an equivalent implementation using
|
123
131
|
// "simpler" instructions
|
124
|
-
|
125
|
-
|
126
|
-
}
|
127
|
-
|
128
|
-
|
129
|
-
class RecordWriteStub : public CodeStub {
|
130
|
-
public:
|
131
|
-
RecordWriteStub(Register object, Register addr, Register scratch)
|
132
|
-
: object_(object), addr_(addr), scratch_(scratch) { }
|
133
|
-
|
134
|
-
void Generate(MacroAssembler* masm);
|
135
|
-
|
136
|
-
private:
|
137
|
-
Register object_;
|
138
|
-
Register addr_;
|
139
|
-
Register scratch_;
|
140
|
-
|
141
|
-
#ifdef DEBUG
|
142
|
-
void Print() {
|
143
|
-
PrintF("RecordWriteStub (object reg %d), (addr reg %d), (scratch reg %d)\n",
|
144
|
-
object_.code(), addr_.code(), scratch_.code());
|
145
|
-
}
|
146
|
-
#endif
|
147
|
-
|
148
|
-
// Minor key encoding in 12 bits of three registers (object, address and
|
149
|
-
// scratch) OOOOAAAASSSS.
|
150
|
-
class ScratchBits : public BitField<uint32_t, 0, 4> {};
|
151
|
-
class AddressBits : public BitField<uint32_t, 4, 4> {};
|
152
|
-
class ObjectBits : public BitField<uint32_t, 8, 4> {};
|
153
|
-
|
154
|
-
Major MajorKey() { return RecordWrite; }
|
155
|
-
|
156
|
-
int MinorKey() {
|
157
|
-
// Encode the registers.
|
158
|
-
return ObjectBits::encode(object_.code()) |
|
159
|
-
AddressBits::encode(addr_.code()) |
|
160
|
-
ScratchBits::encode(scratch_.code());
|
161
|
-
}
|
162
|
-
};
|
163
|
-
|
164
|
-
|
165
|
-
void RecordWriteStub::Generate(MacroAssembler* masm) {
|
166
|
-
RecordWriteHelper(masm, object_, addr_, scratch_);
|
167
|
-
masm->ret(0);
|
132
|
+
bind(&fast);
|
133
|
+
bts(Operand(page_start, Page::kRSetOffset), pointer_offset);
|
168
134
|
}
|
169
135
|
|
170
136
|
|
@@ -178,14 +144,30 @@ void MacroAssembler::RecordWrite(Register object,
|
|
178
144
|
int offset,
|
179
145
|
Register value,
|
180
146
|
Register smi_index) {
|
147
|
+
// The compiled code assumes that record write doesn't change the
|
148
|
+
// context register, so we check that none of the clobbered
|
149
|
+
// registers are rsi.
|
150
|
+
ASSERT(!object.is(rsi) && !value.is(rsi) && !smi_index.is(rsi));
|
151
|
+
|
181
152
|
// First, check if a remembered set write is even needed. The tests below
|
182
153
|
// catch stores of Smis and stores into young gen (which does not have space
|
183
|
-
// for the remembered set bits.
|
154
|
+
// for the remembered set bits).
|
184
155
|
Label done;
|
185
156
|
JumpIfSmi(value, &done);
|
186
157
|
|
187
158
|
RecordWriteNonSmi(object, offset, value, smi_index);
|
188
159
|
bind(&done);
|
160
|
+
|
161
|
+
// Clobber all input registers when running with the debug-code flag
|
162
|
+
// turned on to provoke errors. This clobbering repeats the
|
163
|
+
// clobbering done inside RecordWriteNonSmi but it's necessary to
|
164
|
+
// avoid having the fast case for smis leave the registers
|
165
|
+
// unchanged.
|
166
|
+
if (FLAG_debug_code) {
|
167
|
+
movq(object, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
168
|
+
movq(value, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
169
|
+
movq(smi_index, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
170
|
+
}
|
189
171
|
}
|
190
172
|
|
191
173
|
|
@@ -194,21 +176,34 @@ void MacroAssembler::RecordWriteNonSmi(Register object,
|
|
194
176
|
Register scratch,
|
195
177
|
Register smi_index) {
|
196
178
|
Label done;
|
179
|
+
|
180
|
+
if (FLAG_debug_code) {
|
181
|
+
Label okay;
|
182
|
+
JumpIfNotSmi(object, &okay);
|
183
|
+
Abort("MacroAssembler::RecordWriteNonSmi cannot deal with smis");
|
184
|
+
bind(&okay);
|
185
|
+
}
|
186
|
+
|
197
187
|
// Test that the object address is not in the new space. We cannot
|
198
188
|
// set remembered set bits in the new space.
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
189
|
+
InNewSpace(object, scratch, equal, &done);
|
190
|
+
|
191
|
+
// The offset is relative to a tagged or untagged HeapObject pointer,
|
192
|
+
// so either offset or offset + kHeapObjectTag must be a
|
193
|
+
// multiple of kPointerSize.
|
194
|
+
ASSERT(IsAligned(offset, kPointerSize) ||
|
195
|
+
IsAligned(offset + kHeapObjectTag, kPointerSize));
|
196
|
+
|
197
|
+
// We use optimized write barrier code if the word being written to is not in
|
198
|
+
// a large object page, or is in the first "page" of a large object page.
|
199
|
+
// We make sure that an offset is inside the right limits whether it is
|
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'.
|
208
203
|
lea(scratch, Operand(object, offset));
|
209
204
|
ASSERT(is_int32(Page::kPageAlignmentMask));
|
210
205
|
and_(scratch, Immediate(static_cast<int32_t>(Page::kPageAlignmentMask)));
|
211
|
-
shr(scratch, Immediate(
|
206
|
+
shr(scratch, Immediate(kPointerSizeLog2));
|
212
207
|
|
213
208
|
// Compute the page address from the heap object pointer, leave it in
|
214
209
|
// 'object' (immediate value is sign extended).
|
@@ -227,15 +222,15 @@ void MacroAssembler::RecordWriteNonSmi(Register object,
|
|
227
222
|
// array access: calculate the destination address in the same manner as
|
228
223
|
// KeyedStoreIC::GenerateGeneric.
|
229
224
|
SmiIndex index = SmiToIndex(smi_index, smi_index, kPointerSizeLog2);
|
230
|
-
lea(dst,
|
231
|
-
|
232
|
-
|
233
|
-
|
225
|
+
lea(dst, FieldOperand(object,
|
226
|
+
index.reg,
|
227
|
+
index.scale,
|
228
|
+
FixedArray::kHeaderSize));
|
234
229
|
}
|
235
230
|
// If we are already generating a shared stub, not inlining the
|
236
231
|
// record write code isn't going to save us any memory.
|
237
232
|
if (generating_stub()) {
|
238
|
-
RecordWriteHelper(
|
233
|
+
RecordWriteHelper(object, dst, scratch);
|
239
234
|
} else {
|
240
235
|
RecordWriteStub stub(object, dst, scratch);
|
241
236
|
CallStub(&stub);
|
@@ -243,6 +238,49 @@ void MacroAssembler::RecordWriteNonSmi(Register object,
|
|
243
238
|
}
|
244
239
|
|
245
240
|
bind(&done);
|
241
|
+
|
242
|
+
// Clobber all input registers when running with the debug-code flag
|
243
|
+
// turned on to provoke errors.
|
244
|
+
if (FLAG_debug_code) {
|
245
|
+
movq(object, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
246
|
+
movq(scratch, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
247
|
+
movq(smi_index, BitCast<int64_t>(kZapValue), RelocInfo::NONE);
|
248
|
+
}
|
249
|
+
}
|
250
|
+
|
251
|
+
|
252
|
+
void MacroAssembler::InNewSpace(Register object,
|
253
|
+
Register scratch,
|
254
|
+
Condition cc,
|
255
|
+
Label* branch) {
|
256
|
+
if (Serializer::enabled()) {
|
257
|
+
// Can't do arithmetic on external references if it might get serialized.
|
258
|
+
// The mask isn't really an address. We load it as an external reference in
|
259
|
+
// case the size of the new space is different between the snapshot maker
|
260
|
+
// and the running system.
|
261
|
+
if (scratch.is(object)) {
|
262
|
+
movq(kScratchRegister, ExternalReference::new_space_mask());
|
263
|
+
and_(scratch, kScratchRegister);
|
264
|
+
} else {
|
265
|
+
movq(scratch, ExternalReference::new_space_mask());
|
266
|
+
and_(scratch, object);
|
267
|
+
}
|
268
|
+
movq(kScratchRegister, ExternalReference::new_space_start());
|
269
|
+
cmpq(scratch, kScratchRegister);
|
270
|
+
j(cc, branch);
|
271
|
+
} else {
|
272
|
+
ASSERT(is_int32(static_cast<int64_t>(Heap::NewSpaceMask())));
|
273
|
+
intptr_t new_space_start =
|
274
|
+
reinterpret_cast<intptr_t>(Heap::NewSpaceStart());
|
275
|
+
movq(kScratchRegister, -new_space_start, RelocInfo::NONE);
|
276
|
+
if (scratch.is(object)) {
|
277
|
+
addq(scratch, kScratchRegister);
|
278
|
+
} else {
|
279
|
+
lea(scratch, Operand(object, kScratchRegister, times_1, 0));
|
280
|
+
}
|
281
|
+
and_(scratch, Immediate(static_cast<int32_t>(Heap::NewSpaceMask())));
|
282
|
+
j(cc, branch);
|
283
|
+
}
|
246
284
|
}
|
247
285
|
|
248
286
|
|
@@ -260,6 +298,21 @@ void MacroAssembler::Check(Condition cc, const char* msg) {
|
|
260
298
|
}
|
261
299
|
|
262
300
|
|
301
|
+
void MacroAssembler::CheckStackAlignment() {
|
302
|
+
int frame_alignment = OS::ActivationFrameAlignment();
|
303
|
+
int frame_alignment_mask = frame_alignment - 1;
|
304
|
+
if (frame_alignment > kPointerSize) {
|
305
|
+
ASSERT(IsPowerOf2(frame_alignment));
|
306
|
+
Label alignment_as_expected;
|
307
|
+
testq(rsp, Immediate(frame_alignment_mask));
|
308
|
+
j(zero, &alignment_as_expected);
|
309
|
+
// Abort if stack is not aligned.
|
310
|
+
int3();
|
311
|
+
bind(&alignment_as_expected);
|
312
|
+
}
|
313
|
+
}
|
314
|
+
|
315
|
+
|
263
316
|
void MacroAssembler::NegativeZeroTest(Register result,
|
264
317
|
Register op,
|
265
318
|
Label* then_label) {
|
@@ -344,16 +397,30 @@ void MacroAssembler::CallRuntime(Runtime::Function* f, int num_arguments) {
|
|
344
397
|
return;
|
345
398
|
}
|
346
399
|
|
347
|
-
|
348
|
-
|
349
|
-
|
400
|
+
// TODO(1236192): Most runtime routines don't need the number of
|
401
|
+
// arguments passed in because it is constant. At some point we
|
402
|
+
// should remove this need and make the runtime routine entry code
|
403
|
+
// smarter.
|
404
|
+
movq(rax, Immediate(num_arguments));
|
405
|
+
movq(rbx, ExternalReference(f));
|
406
|
+
CEntryStub ces(f->result_size);
|
407
|
+
CallStub(&ces);
|
408
|
+
}
|
409
|
+
|
410
|
+
|
411
|
+
void MacroAssembler::CallExternalReference(const ExternalReference& ext,
|
412
|
+
int num_arguments) {
|
413
|
+
movq(rax, Immediate(num_arguments));
|
414
|
+
movq(rbx, ext);
|
415
|
+
|
416
|
+
CEntryStub stub(1);
|
350
417
|
CallStub(&stub);
|
351
418
|
}
|
352
419
|
|
353
420
|
|
354
|
-
void MacroAssembler::
|
355
|
-
|
356
|
-
|
421
|
+
void MacroAssembler::TailCallExternalReference(const ExternalReference& ext,
|
422
|
+
int num_arguments,
|
423
|
+
int result_size) {
|
357
424
|
// ----------- S t a t e -------------
|
358
425
|
// -- rsp[0] : return address
|
359
426
|
// -- rsp[8] : argument num_arguments - 1
|
@@ -366,12 +433,19 @@ void MacroAssembler::TailCallRuntime(ExternalReference const& ext,
|
|
366
433
|
// should remove this need and make the runtime routine entry code
|
367
434
|
// smarter.
|
368
435
|
movq(rax, Immediate(num_arguments));
|
369
|
-
|
436
|
+
JumpToExternalReference(ext, result_size);
|
370
437
|
}
|
371
438
|
|
372
439
|
|
373
|
-
void MacroAssembler::
|
374
|
-
|
440
|
+
void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid,
|
441
|
+
int num_arguments,
|
442
|
+
int result_size) {
|
443
|
+
TailCallExternalReference(ExternalReference(fid), num_arguments, result_size);
|
444
|
+
}
|
445
|
+
|
446
|
+
|
447
|
+
void MacroAssembler::JumpToExternalReference(const ExternalReference& ext,
|
448
|
+
int result_size) {
|
375
449
|
// Set the entry point and jump to the C entry runtime stub.
|
376
450
|
movq(rbx, ext);
|
377
451
|
CEntryStub ces(result_size);
|
@@ -379,38 +453,42 @@ void MacroAssembler::JumpToRuntime(const ExternalReference& ext,
|
|
379
453
|
}
|
380
454
|
|
381
455
|
|
382
|
-
void MacroAssembler::
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
const char* name = Builtins::GetName(id);
|
387
|
-
int argc = Builtins::GetArgumentsCount(id);
|
456
|
+
void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag) {
|
457
|
+
// Calls are not allowed in some stubs.
|
458
|
+
ASSERT(flag == JUMP_FUNCTION || allow_stub_calls());
|
388
459
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
unresolved_.Add(entry);
|
396
|
-
}
|
397
|
-
addq(target, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
460
|
+
// Rely on the assertion to check that the number of provided
|
461
|
+
// arguments match the expected number of arguments. Fake a
|
462
|
+
// parameter count to avoid emitting code to do the check.
|
463
|
+
ParameterCount expected(0);
|
464
|
+
GetBuiltinEntry(rdx, id);
|
465
|
+
InvokeCode(rdx, expected, expected, flag);
|
398
466
|
}
|
399
467
|
|
400
|
-
Handle<Code> MacroAssembler::ResolveBuiltin(Builtins::JavaScript id,
|
401
|
-
bool* resolved) {
|
402
|
-
// Move the builtin function into the temporary function slot by
|
403
|
-
// reading it from the builtins object. NOTE: We should be able to
|
404
|
-
// reduce this to two instructions by putting the function table in
|
405
|
-
// the global object instead of the "builtins" object and by using a
|
406
|
-
// real register for the function.
|
407
|
-
movq(rdx, Operand(rsi, Context::SlotOffset(Context::GLOBAL_INDEX)));
|
408
|
-
movq(rdx, FieldOperand(rdx, GlobalObject::kBuiltinsOffset));
|
409
|
-
int builtins_offset =
|
410
|
-
JSBuiltinsObject::kJSBuiltinsOffset + (id * kPointerSize);
|
411
|
-
movq(rdi, FieldOperand(rdx, builtins_offset));
|
412
468
|
|
413
|
-
|
469
|
+
void MacroAssembler::GetBuiltinEntry(Register target, Builtins::JavaScript id) {
|
470
|
+
ASSERT(!target.is(rdi));
|
471
|
+
|
472
|
+
// Load the builtins object into target register.
|
473
|
+
movq(target, Operand(rsi, Context::SlotOffset(Context::GLOBAL_INDEX)));
|
474
|
+
movq(target, FieldOperand(target, GlobalObject::kBuiltinsOffset));
|
475
|
+
|
476
|
+
// Load the JavaScript builtin function from the builtins object.
|
477
|
+
movq(rdi, FieldOperand(target, JSBuiltinsObject::OffsetOfFunctionWithId(id)));
|
478
|
+
|
479
|
+
// Load the code entry point from the builtins object.
|
480
|
+
movq(target, FieldOperand(target, JSBuiltinsObject::OffsetOfCodeWithId(id)));
|
481
|
+
if (FLAG_debug_code) {
|
482
|
+
// Make sure the code objects in the builtins object and in the
|
483
|
+
// builtin function are the same.
|
484
|
+
push(target);
|
485
|
+
movq(target, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset));
|
486
|
+
movq(target, FieldOperand(target, SharedFunctionInfo::kCodeOffset));
|
487
|
+
cmpq(target, Operand(rsp, 0));
|
488
|
+
Assert(equal, "Builtin code object changed");
|
489
|
+
pop(target);
|
490
|
+
}
|
491
|
+
lea(target, FieldOperand(target, Code::kHeaderSize));
|
414
492
|
}
|
415
493
|
|
416
494
|
|
@@ -518,6 +596,11 @@ void MacroAssembler::SmiCompare(Register dst, Smi* src) {
|
|
518
596
|
}
|
519
597
|
|
520
598
|
|
599
|
+
void MacroAssembler::SmiCompare(Register dst, const Operand& src) {
|
600
|
+
cmpq(dst, src);
|
601
|
+
}
|
602
|
+
|
603
|
+
|
521
604
|
void MacroAssembler::SmiCompare(const Operand& dst, Register src) {
|
522
605
|
cmpq(dst, src);
|
523
606
|
}
|
@@ -581,6 +664,31 @@ Condition MacroAssembler::CheckBothSmi(Register first, Register second) {
|
|
581
664
|
}
|
582
665
|
|
583
666
|
|
667
|
+
Condition MacroAssembler::CheckBothPositiveSmi(Register first,
|
668
|
+
Register second) {
|
669
|
+
if (first.is(second)) {
|
670
|
+
return CheckPositiveSmi(first);
|
671
|
+
}
|
672
|
+
movl(kScratchRegister, first);
|
673
|
+
orl(kScratchRegister, second);
|
674
|
+
rol(kScratchRegister, Immediate(1));
|
675
|
+
testl(kScratchRegister, Immediate(0x03));
|
676
|
+
return zero;
|
677
|
+
}
|
678
|
+
|
679
|
+
|
680
|
+
|
681
|
+
Condition MacroAssembler::CheckEitherSmi(Register first, Register second) {
|
682
|
+
if (first.is(second)) {
|
683
|
+
return CheckSmi(first);
|
684
|
+
}
|
685
|
+
movl(kScratchRegister, first);
|
686
|
+
andl(kScratchRegister, second);
|
687
|
+
testb(kScratchRegister, Immediate(kSmiTagMask));
|
688
|
+
return zero;
|
689
|
+
}
|
690
|
+
|
691
|
+
|
584
692
|
Condition MacroAssembler::CheckIsMinSmi(Register src) {
|
585
693
|
ASSERT(kSmiTag == 0 && kSmiTagSize == 1);
|
586
694
|
movq(kScratchRegister, src);
|
@@ -628,7 +736,17 @@ void MacroAssembler::SmiAdd(Register dst,
|
|
628
736
|
Register src2,
|
629
737
|
Label* on_not_smi_result) {
|
630
738
|
ASSERT(!dst.is(src2));
|
631
|
-
if (
|
739
|
+
if (on_not_smi_result == NULL) {
|
740
|
+
// No overflow checking. Use only when it's known that
|
741
|
+
// overflowing is impossible.
|
742
|
+
if (dst.is(src1)) {
|
743
|
+
addq(dst, src2);
|
744
|
+
} else {
|
745
|
+
movq(dst, src1);
|
746
|
+
addq(dst, src2);
|
747
|
+
}
|
748
|
+
Assert(no_overflow, "Smi addition onverflow");
|
749
|
+
} else if (dst.is(src1)) {
|
632
750
|
addq(dst, src2);
|
633
751
|
Label smi_result;
|
634
752
|
j(no_overflow, &smi_result);
|
@@ -649,7 +767,17 @@ void MacroAssembler::SmiSub(Register dst,
|
|
649
767
|
Register src2,
|
650
768
|
Label* on_not_smi_result) {
|
651
769
|
ASSERT(!dst.is(src2));
|
652
|
-
if (
|
770
|
+
if (on_not_smi_result == NULL) {
|
771
|
+
// No overflow checking. Use only when it's known that
|
772
|
+
// overflowing is impossible (e.g., subtracting two positive smis).
|
773
|
+
if (dst.is(src1)) {
|
774
|
+
subq(dst, src2);
|
775
|
+
} else {
|
776
|
+
movq(dst, src1);
|
777
|
+
subq(dst, src2);
|
778
|
+
}
|
779
|
+
Assert(no_overflow, "Smi substraction onverflow");
|
780
|
+
} else if (dst.is(src1)) {
|
653
781
|
subq(dst, src2);
|
654
782
|
Label smi_result;
|
655
783
|
j(no_overflow, &smi_result);
|
@@ -665,6 +793,35 @@ void MacroAssembler::SmiSub(Register dst,
|
|
665
793
|
}
|
666
794
|
|
667
795
|
|
796
|
+
void MacroAssembler::SmiSub(Register dst,
|
797
|
+
Register src1,
|
798
|
+
Operand const& src2,
|
799
|
+
Label* on_not_smi_result) {
|
800
|
+
if (on_not_smi_result == NULL) {
|
801
|
+
// No overflow checking. Use only when it's known that
|
802
|
+
// overflowing is impossible (e.g., subtracting two positive smis).
|
803
|
+
if (dst.is(src1)) {
|
804
|
+
subq(dst, src2);
|
805
|
+
} else {
|
806
|
+
movq(dst, src1);
|
807
|
+
subq(dst, src2);
|
808
|
+
}
|
809
|
+
Assert(no_overflow, "Smi substraction onverflow");
|
810
|
+
} else if (dst.is(src1)) {
|
811
|
+
subq(dst, src2);
|
812
|
+
Label smi_result;
|
813
|
+
j(no_overflow, &smi_result);
|
814
|
+
// Restore src1.
|
815
|
+
addq(src1, src2);
|
816
|
+
jmp(on_not_smi_result);
|
817
|
+
bind(&smi_result);
|
818
|
+
} else {
|
819
|
+
movq(dst, src1);
|
820
|
+
subq(dst, src2);
|
821
|
+
j(overflow, on_not_smi_result);
|
822
|
+
}
|
823
|
+
}
|
824
|
+
|
668
825
|
void MacroAssembler::SmiMul(Register dst,
|
669
826
|
Register src1,
|
670
827
|
Register src2,
|
@@ -1281,6 +1438,90 @@ void MacroAssembler::JumpIfNotBothSmi(Register src1, Register src2,
|
|
1281
1438
|
}
|
1282
1439
|
|
1283
1440
|
|
1441
|
+
void MacroAssembler::JumpIfNotBothPositiveSmi(Register src1, Register src2,
|
1442
|
+
Label* on_not_both_smi) {
|
1443
|
+
Condition both_smi = CheckBothPositiveSmi(src1, src2);
|
1444
|
+
j(NegateCondition(both_smi), on_not_both_smi);
|
1445
|
+
}
|
1446
|
+
|
1447
|
+
|
1448
|
+
|
1449
|
+
void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first_object,
|
1450
|
+
Register second_object,
|
1451
|
+
Register scratch1,
|
1452
|
+
Register scratch2,
|
1453
|
+
Label* on_fail) {
|
1454
|
+
// Check that both objects are not smis.
|
1455
|
+
Condition either_smi = CheckEitherSmi(first_object, second_object);
|
1456
|
+
j(either_smi, on_fail);
|
1457
|
+
|
1458
|
+
// Load instance type for both strings.
|
1459
|
+
movq(scratch1, FieldOperand(first_object, HeapObject::kMapOffset));
|
1460
|
+
movq(scratch2, FieldOperand(second_object, HeapObject::kMapOffset));
|
1461
|
+
movzxbl(scratch1, FieldOperand(scratch1, Map::kInstanceTypeOffset));
|
1462
|
+
movzxbl(scratch2, FieldOperand(scratch2, Map::kInstanceTypeOffset));
|
1463
|
+
|
1464
|
+
// Check that both are flat ascii strings.
|
1465
|
+
ASSERT(kNotStringTag != 0);
|
1466
|
+
const int kFlatAsciiStringMask =
|
1467
|
+
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
1468
|
+
const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
1469
|
+
|
1470
|
+
andl(scratch1, Immediate(kFlatAsciiStringMask));
|
1471
|
+
andl(scratch2, Immediate(kFlatAsciiStringMask));
|
1472
|
+
// Interleave the bits to check both scratch1 and scratch2 in one test.
|
1473
|
+
ASSERT_EQ(0, kFlatAsciiStringMask & (kFlatAsciiStringMask << 3));
|
1474
|
+
lea(scratch1, Operand(scratch1, scratch2, times_8, 0));
|
1475
|
+
cmpl(scratch1,
|
1476
|
+
Immediate(kFlatAsciiStringTag + (kFlatAsciiStringTag << 3)));
|
1477
|
+
j(not_equal, on_fail);
|
1478
|
+
}
|
1479
|
+
|
1480
|
+
|
1481
|
+
void MacroAssembler::JumpIfInstanceTypeIsNotSequentialAscii(
|
1482
|
+
Register instance_type,
|
1483
|
+
Register scratch,
|
1484
|
+
Label *failure) {
|
1485
|
+
if (!scratch.is(instance_type)) {
|
1486
|
+
movl(scratch, instance_type);
|
1487
|
+
}
|
1488
|
+
|
1489
|
+
const int kFlatAsciiStringMask =
|
1490
|
+
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
1491
|
+
|
1492
|
+
andl(scratch, Immediate(kFlatAsciiStringMask));
|
1493
|
+
cmpl(scratch, Immediate(kStringTag | kSeqStringTag | kAsciiStringTag));
|
1494
|
+
j(not_equal, failure);
|
1495
|
+
}
|
1496
|
+
|
1497
|
+
|
1498
|
+
void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
1499
|
+
Register first_object_instance_type,
|
1500
|
+
Register second_object_instance_type,
|
1501
|
+
Register scratch1,
|
1502
|
+
Register scratch2,
|
1503
|
+
Label* on_fail) {
|
1504
|
+
// Load instance type for both strings.
|
1505
|
+
movq(scratch1, first_object_instance_type);
|
1506
|
+
movq(scratch2, second_object_instance_type);
|
1507
|
+
|
1508
|
+
// Check that both are flat ascii strings.
|
1509
|
+
ASSERT(kNotStringTag != 0);
|
1510
|
+
const int kFlatAsciiStringMask =
|
1511
|
+
kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
1512
|
+
const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
1513
|
+
|
1514
|
+
andl(scratch1, Immediate(kFlatAsciiStringMask));
|
1515
|
+
andl(scratch2, Immediate(kFlatAsciiStringMask));
|
1516
|
+
// Interleave the bits to check both scratch1 and scratch2 in one test.
|
1517
|
+
ASSERT_EQ(0, kFlatAsciiStringMask & (kFlatAsciiStringMask << 3));
|
1518
|
+
lea(scratch1, Operand(scratch1, scratch2, times_8, 0));
|
1519
|
+
cmpl(scratch1,
|
1520
|
+
Immediate(kFlatAsciiStringTag + (kFlatAsciiStringTag << 3)));
|
1521
|
+
j(not_equal, on_fail);
|
1522
|
+
}
|
1523
|
+
|
1524
|
+
|
1284
1525
|
void MacroAssembler::Move(Register dst, Handle<Object> source) {
|
1285
1526
|
ASSERT(!source->IsFailure());
|
1286
1527
|
if (source->IsSmi()) {
|
@@ -1474,6 +1715,49 @@ void MacroAssembler::CmpInstanceType(Register map, InstanceType type) {
|
|
1474
1715
|
}
|
1475
1716
|
|
1476
1717
|
|
1718
|
+
void MacroAssembler::CheckMap(Register obj,
|
1719
|
+
Handle<Map> map,
|
1720
|
+
Label* fail,
|
1721
|
+
bool is_heap_object) {
|
1722
|
+
if (!is_heap_object) {
|
1723
|
+
JumpIfSmi(obj, fail);
|
1724
|
+
}
|
1725
|
+
Cmp(FieldOperand(obj, HeapObject::kMapOffset), map);
|
1726
|
+
j(not_equal, fail);
|
1727
|
+
}
|
1728
|
+
|
1729
|
+
|
1730
|
+
void MacroAssembler::AbortIfNotNumber(Register object, const char* msg) {
|
1731
|
+
Label ok;
|
1732
|
+
Condition is_smi = CheckSmi(object);
|
1733
|
+
j(is_smi, &ok);
|
1734
|
+
Cmp(FieldOperand(object, HeapObject::kMapOffset),
|
1735
|
+
Factory::heap_number_map());
|
1736
|
+
Assert(equal, msg);
|
1737
|
+
bind(&ok);
|
1738
|
+
}
|
1739
|
+
|
1740
|
+
|
1741
|
+
void MacroAssembler::AbortIfNotSmi(Register object, const char* msg) {
|
1742
|
+
Label ok;
|
1743
|
+
Condition is_smi = CheckSmi(object);
|
1744
|
+
j(is_smi, &ok);
|
1745
|
+
Assert(equal, msg);
|
1746
|
+
bind(&ok);
|
1747
|
+
}
|
1748
|
+
|
1749
|
+
|
1750
|
+
Condition MacroAssembler::IsObjectStringType(Register heap_object,
|
1751
|
+
Register map,
|
1752
|
+
Register instance_type) {
|
1753
|
+
movq(map, FieldOperand(heap_object, HeapObject::kMapOffset));
|
1754
|
+
movzxbl(instance_type, FieldOperand(map, Map::kInstanceTypeOffset));
|
1755
|
+
ASSERT(kNotStringTag != 0);
|
1756
|
+
testb(instance_type, Immediate(kIsNotStringMask));
|
1757
|
+
return zero;
|
1758
|
+
}
|
1759
|
+
|
1760
|
+
|
1477
1761
|
void MacroAssembler::TryGetFunctionPrototype(Register function,
|
1478
1762
|
Register result,
|
1479
1763
|
Label* miss) {
|
@@ -1640,39 +1924,14 @@ void MacroAssembler::CopyRegistersFromStackToMemory(Register base,
|
|
1640
1924
|
}
|
1641
1925
|
}
|
1642
1926
|
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
// Calls are not allowed in some stubs.
|
1651
|
-
ASSERT(flag == JUMP_FUNCTION || allow_stub_calls());
|
1652
|
-
|
1653
|
-
// Rely on the assertion to check that the number of provided
|
1654
|
-
// arguments match the expected number of arguments. Fake a
|
1655
|
-
// parameter count to avoid emitting code to do the check.
|
1656
|
-
ParameterCount expected(0);
|
1657
|
-
InvokeCode(Handle<Code>(code),
|
1658
|
-
expected,
|
1659
|
-
expected,
|
1660
|
-
RelocInfo::CODE_TARGET,
|
1661
|
-
flag);
|
1662
|
-
|
1663
|
-
const char* name = Builtins::GetName(id);
|
1664
|
-
int argc = Builtins::GetArgumentsCount(id);
|
1665
|
-
// The target address for the jump is stored as an immediate at offset
|
1666
|
-
// kInvokeCodeAddressOffset.
|
1667
|
-
if (!resolved) {
|
1668
|
-
uint32_t flags =
|
1669
|
-
Bootstrapper::FixupFlagsArgumentsCount::encode(argc) |
|
1670
|
-
Bootstrapper::FixupFlagsUseCodeObject::encode(false);
|
1671
|
-
Unresolved entry =
|
1672
|
-
{ pc_offset() - kCallTargetAddressOffset, flags, name };
|
1673
|
-
unresolved_.Add(entry);
|
1674
|
-
}
|
1927
|
+
void MacroAssembler::DebugBreak() {
|
1928
|
+
ASSERT(allow_stub_calls());
|
1929
|
+
xor_(rax, rax); // no arguments
|
1930
|
+
movq(rbx, ExternalReference(Runtime::kDebugBreak));
|
1931
|
+
CEntryStub ces(1);
|
1932
|
+
Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
|
1675
1933
|
}
|
1934
|
+
#endif // ENABLE_DEBUGGER_SUPPORT
|
1676
1935
|
|
1677
1936
|
|
1678
1937
|
void MacroAssembler::InvokePrologue(const ParameterCount& expected,
|
@@ -1792,6 +2051,21 @@ void MacroAssembler::InvokeFunction(Register function,
|
|
1792
2051
|
}
|
1793
2052
|
|
1794
2053
|
|
2054
|
+
void MacroAssembler::InvokeFunction(JSFunction* function,
|
2055
|
+
const ParameterCount& actual,
|
2056
|
+
InvokeFlag flag) {
|
2057
|
+
ASSERT(function->is_compiled());
|
2058
|
+
// Get the function and setup the context.
|
2059
|
+
Move(rdi, Handle<JSFunction>(function));
|
2060
|
+
movq(rsi, FieldOperand(rdi, JSFunction::kContextOffset));
|
2061
|
+
|
2062
|
+
// Invoke the cached code.
|
2063
|
+
Handle<Code> code(function->code());
|
2064
|
+
ParameterCount expected(function->shared()->formal_parameter_count());
|
2065
|
+
InvokeCode(code, expected, actual, RelocInfo::CODE_TARGET, flag);
|
2066
|
+
}
|
2067
|
+
|
2068
|
+
|
1795
2069
|
void MacroAssembler::EnterFrame(StackFrame::Type type) {
|
1796
2070
|
push(rbp);
|
1797
2071
|
movq(rbp, rsp);
|
@@ -1831,13 +2105,9 @@ void MacroAssembler::EnterExitFrame(ExitFrame::Mode mode, int result_size) {
|
|
1831
2105
|
|
1832
2106
|
// Reserve room for entry stack pointer and push the debug marker.
|
1833
2107
|
ASSERT(ExitFrameConstants::kSPOffset == -1 * kPointerSize);
|
1834
|
-
push(Immediate(0)); //
|
1835
|
-
|
1836
|
-
|
1837
|
-
} else {
|
1838
|
-
movq(kScratchRegister, CodeObject(), RelocInfo::EMBEDDED_OBJECT);
|
1839
|
-
push(kScratchRegister);
|
1840
|
-
}
|
2108
|
+
push(Immediate(0)); // Saved entry sp, patched before call.
|
2109
|
+
movq(kScratchRegister, CodeObject(), RelocInfo::EMBEDDED_OBJECT);
|
2110
|
+
push(kScratchRegister); // Accessed from EditFrame::code_slot.
|
1841
2111
|
|
1842
2112
|
// Save the frame pointer and the context in top.
|
1843
2113
|
ExternalReference c_entry_fp_address(Top::k_c_entry_fp_address);
|
@@ -1943,6 +2213,7 @@ Register MacroAssembler::CheckMaps(JSObject* object,
|
|
1943
2213
|
JSObject* holder,
|
1944
2214
|
Register holder_reg,
|
1945
2215
|
Register scratch,
|
2216
|
+
int save_at_depth,
|
1946
2217
|
Label* miss) {
|
1947
2218
|
// Make sure there's no overlap between scratch and the other
|
1948
2219
|
// registers.
|
@@ -1952,7 +2223,11 @@ Register MacroAssembler::CheckMaps(JSObject* object,
|
|
1952
2223
|
// iteration, reg is an alias for object_reg, on later iterations,
|
1953
2224
|
// it is an alias for holder_reg.
|
1954
2225
|
Register reg = object_reg;
|
1955
|
-
int depth =
|
2226
|
+
int depth = 0;
|
2227
|
+
|
2228
|
+
if (save_at_depth == depth) {
|
2229
|
+
movq(Operand(rsp, kPointerSize), object_reg);
|
2230
|
+
}
|
1956
2231
|
|
1957
2232
|
// Check the maps in the prototype chain.
|
1958
2233
|
// Traverse the prototype chain from the object and do map checks.
|
@@ -2002,6 +2277,10 @@ Register MacroAssembler::CheckMaps(JSObject* object,
|
|
2002
2277
|
Move(reg, Handle<JSObject>(prototype));
|
2003
2278
|
}
|
2004
2279
|
|
2280
|
+
if (save_at_depth == depth) {
|
2281
|
+
movq(Operand(rsp, kPointerSize), reg);
|
2282
|
+
}
|
2283
|
+
|
2005
2284
|
// Go to the next object in the prototype chain.
|
2006
2285
|
object = prototype;
|
2007
2286
|
}
|
@@ -2011,7 +2290,7 @@ Register MacroAssembler::CheckMaps(JSObject* object,
|
|
2011
2290
|
j(not_equal, miss);
|
2012
2291
|
|
2013
2292
|
// Log the check depth.
|
2014
|
-
LOG(IntEvent("check-maps-depth", depth));
|
2293
|
+
LOG(IntEvent("check-maps-depth", depth + 1));
|
2015
2294
|
|
2016
2295
|
// Perform security check for access to the global object and return
|
2017
2296
|
// the holder register.
|
@@ -2097,7 +2376,7 @@ void MacroAssembler::LoadAllocationTopHelper(Register result,
|
|
2097
2376
|
// Just return if allocation top is already known.
|
2098
2377
|
if ((flags & RESULT_CONTAINS_TOP) != 0) {
|
2099
2378
|
// No use of scratch if allocation top is provided.
|
2100
|
-
ASSERT(scratch.
|
2379
|
+
ASSERT(!scratch.is_valid());
|
2101
2380
|
#ifdef DEBUG
|
2102
2381
|
// Assert that result actually contains top on entry.
|
2103
2382
|
movq(kScratchRegister, new_space_allocation_top);
|
@@ -2107,14 +2386,17 @@ void MacroAssembler::LoadAllocationTopHelper(Register result,
|
|
2107
2386
|
return;
|
2108
2387
|
}
|
2109
2388
|
|
2110
|
-
// Move address of new object to result. Use scratch register if available
|
2111
|
-
|
2112
|
-
|
2113
|
-
movq(result, Operand(kScratchRegister, 0));
|
2114
|
-
} else {
|
2389
|
+
// Move address of new object to result. Use scratch register if available,
|
2390
|
+
// and keep address in scratch until call to UpdateAllocationTopHelper.
|
2391
|
+
if (scratch.is_valid()) {
|
2115
2392
|
ASSERT(!scratch.is(result_end));
|
2116
2393
|
movq(scratch, new_space_allocation_top);
|
2117
2394
|
movq(result, Operand(scratch, 0));
|
2395
|
+
} else if (result.is(rax)) {
|
2396
|
+
load_rax(new_space_allocation_top);
|
2397
|
+
} else {
|
2398
|
+
movq(kScratchRegister, new_space_allocation_top);
|
2399
|
+
movq(result, Operand(kScratchRegister, 0));
|
2118
2400
|
}
|
2119
2401
|
}
|
2120
2402
|
|
@@ -2135,11 +2417,11 @@ void MacroAssembler::UpdateAllocationTopHelper(Register result_end,
|
|
2135
2417
|
store_rax(new_space_allocation_top);
|
2136
2418
|
} else {
|
2137
2419
|
// Register required - use scratch provided if available.
|
2138
|
-
if (scratch.
|
2420
|
+
if (scratch.is_valid()) {
|
2421
|
+
movq(Operand(scratch, 0), result_end);
|
2422
|
+
} else {
|
2139
2423
|
movq(kScratchRegister, new_space_allocation_top);
|
2140
2424
|
movq(Operand(kScratchRegister, 0), result_end);
|
2141
|
-
} else {
|
2142
|
-
movq(Operand(scratch, 0), result_end);
|
2143
2425
|
}
|
2144
2426
|
}
|
2145
2427
|
}
|
@@ -2159,16 +2441,29 @@ void MacroAssembler::AllocateInNewSpace(int object_size,
|
|
2159
2441
|
// Calculate new top and bail out if new space is exhausted.
|
2160
2442
|
ExternalReference new_space_allocation_limit =
|
2161
2443
|
ExternalReference::new_space_allocation_limit_address();
|
2162
|
-
|
2444
|
+
|
2445
|
+
Register top_reg = result_end.is_valid() ? result_end : result;
|
2446
|
+
|
2447
|
+
if (top_reg.is(result)) {
|
2448
|
+
addq(top_reg, Immediate(object_size));
|
2449
|
+
} else {
|
2450
|
+
lea(top_reg, Operand(result, object_size));
|
2451
|
+
}
|
2163
2452
|
movq(kScratchRegister, new_space_allocation_limit);
|
2164
|
-
cmpq(
|
2453
|
+
cmpq(top_reg, Operand(kScratchRegister, 0));
|
2165
2454
|
j(above, gc_required);
|
2166
2455
|
|
2167
2456
|
// Update allocation top.
|
2168
|
-
UpdateAllocationTopHelper(
|
2457
|
+
UpdateAllocationTopHelper(top_reg, scratch);
|
2169
2458
|
|
2170
|
-
|
2171
|
-
|
2459
|
+
if (top_reg.is(result)) {
|
2460
|
+
if ((flags & TAG_OBJECT) != 0) {
|
2461
|
+
subq(result, Immediate(object_size - kHeapObjectTag));
|
2462
|
+
} else {
|
2463
|
+
subq(result, Immediate(object_size));
|
2464
|
+
}
|
2465
|
+
} else if ((flags & TAG_OBJECT) != 0) {
|
2466
|
+
// Tag the result if requested.
|
2172
2467
|
addq(result, Immediate(kHeapObjectTag));
|
2173
2468
|
}
|
2174
2469
|
}
|
@@ -2275,11 +2570,16 @@ void MacroAssembler::AllocateTwoByteString(Register result,
|
|
2275
2570
|
Label* gc_required) {
|
2276
2571
|
// Calculate the number of bytes needed for the characters in the string while
|
2277
2572
|
// observing object alignment.
|
2278
|
-
|
2573
|
+
const int kHeaderAlignment = SeqTwoByteString::kHeaderSize &
|
2574
|
+
kObjectAlignmentMask;
|
2279
2575
|
ASSERT(kShortSize == 2);
|
2280
2576
|
// scratch1 = length * 2 + kObjectAlignmentMask.
|
2281
|
-
lea(scratch1, Operand(length, length, times_1, kObjectAlignmentMask
|
2577
|
+
lea(scratch1, Operand(length, length, times_1, kObjectAlignmentMask +
|
2578
|
+
kHeaderAlignment));
|
2282
2579
|
and_(scratch1, Immediate(~kObjectAlignmentMask));
|
2580
|
+
if (kHeaderAlignment > 0) {
|
2581
|
+
subq(scratch1, Immediate(kHeaderAlignment));
|
2582
|
+
}
|
2283
2583
|
|
2284
2584
|
// Allocate two byte string in new space.
|
2285
2585
|
AllocateInNewSpace(SeqTwoByteString::kHeaderSize,
|
@@ -2294,7 +2594,8 @@ void MacroAssembler::AllocateTwoByteString(Register result,
|
|
2294
2594
|
// Set the map, length and hash field.
|
2295
2595
|
LoadRoot(kScratchRegister, Heap::kStringMapRootIndex);
|
2296
2596
|
movq(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister);
|
2297
|
-
|
2597
|
+
Integer32ToSmi(scratch1, length);
|
2598
|
+
movq(FieldOperand(result, String::kLengthOffset), scratch1);
|
2298
2599
|
movl(FieldOperand(result, String::kHashFieldOffset),
|
2299
2600
|
Immediate(String::kEmptyHashField));
|
2300
2601
|
}
|
@@ -2308,11 +2609,15 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
|
2308
2609
|
Label* gc_required) {
|
2309
2610
|
// Calculate the number of bytes needed for the characters in the string while
|
2310
2611
|
// observing object alignment.
|
2311
|
-
|
2612
|
+
const int kHeaderAlignment = SeqAsciiString::kHeaderSize &
|
2613
|
+
kObjectAlignmentMask;
|
2312
2614
|
movl(scratch1, length);
|
2313
2615
|
ASSERT(kCharSize == 1);
|
2314
|
-
addq(scratch1, Immediate(kObjectAlignmentMask));
|
2616
|
+
addq(scratch1, Immediate(kObjectAlignmentMask + kHeaderAlignment));
|
2315
2617
|
and_(scratch1, Immediate(~kObjectAlignmentMask));
|
2618
|
+
if (kHeaderAlignment > 0) {
|
2619
|
+
subq(scratch1, Immediate(kHeaderAlignment));
|
2620
|
+
}
|
2316
2621
|
|
2317
2622
|
// Allocate ascii string in new space.
|
2318
2623
|
AllocateInNewSpace(SeqAsciiString::kHeaderSize,
|
@@ -2327,7 +2632,8 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
|
2327
2632
|
// Set the map, length and hash field.
|
2328
2633
|
LoadRoot(kScratchRegister, Heap::kAsciiStringMapRootIndex);
|
2329
2634
|
movq(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister);
|
2330
|
-
|
2635
|
+
Integer32ToSmi(scratch1, length);
|
2636
|
+
movq(FieldOperand(result, String::kLengthOffset), scratch1);
|
2331
2637
|
movl(FieldOperand(result, String::kHashFieldOffset),
|
2332
2638
|
Immediate(String::kEmptyHashField));
|
2333
2639
|
}
|
@@ -2387,6 +2693,56 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
|
|
2387
2693
|
}
|
2388
2694
|
}
|
2389
2695
|
|
2696
|
+
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. On Linux 6 arguments are passed in
|
2699
|
+
// registers and the caller does not reserve stack slots for them.
|
2700
|
+
ASSERT(num_arguments >= 0);
|
2701
|
+
#ifdef _WIN64
|
2702
|
+
static const int kArgumentsWithoutStackSlot = 0;
|
2703
|
+
#else
|
2704
|
+
static const int kArgumentsWithoutStackSlot = 6;
|
2705
|
+
#endif
|
2706
|
+
return num_arguments > kArgumentsWithoutStackSlot ?
|
2707
|
+
num_arguments - kArgumentsWithoutStackSlot : 0;
|
2708
|
+
}
|
2709
|
+
|
2710
|
+
void MacroAssembler::PrepareCallCFunction(int num_arguments) {
|
2711
|
+
int frame_alignment = OS::ActivationFrameAlignment();
|
2712
|
+
ASSERT(frame_alignment != 0);
|
2713
|
+
ASSERT(num_arguments >= 0);
|
2714
|
+
// Make stack end at alignment and allocate space for arguments and old rsp.
|
2715
|
+
movq(kScratchRegister, rsp);
|
2716
|
+
ASSERT(IsPowerOf2(frame_alignment));
|
2717
|
+
int argument_slots_on_stack =
|
2718
|
+
ArgumentStackSlotsForCFunctionCall(num_arguments);
|
2719
|
+
subq(rsp, Immediate((argument_slots_on_stack + 1) * kPointerSize));
|
2720
|
+
and_(rsp, Immediate(-frame_alignment));
|
2721
|
+
movq(Operand(rsp, argument_slots_on_stack * kPointerSize), kScratchRegister);
|
2722
|
+
}
|
2723
|
+
|
2724
|
+
|
2725
|
+
void MacroAssembler::CallCFunction(ExternalReference function,
|
2726
|
+
int num_arguments) {
|
2727
|
+
movq(rax, function);
|
2728
|
+
CallCFunction(rax, num_arguments);
|
2729
|
+
}
|
2730
|
+
|
2731
|
+
|
2732
|
+
void MacroAssembler::CallCFunction(Register function, int num_arguments) {
|
2733
|
+
// Check stack alignment.
|
2734
|
+
if (FLAG_debug_code) {
|
2735
|
+
CheckStackAlignment();
|
2736
|
+
}
|
2737
|
+
|
2738
|
+
call(function);
|
2739
|
+
ASSERT(OS::ActivationFrameAlignment() != 0);
|
2740
|
+
ASSERT(num_arguments >= 0);
|
2741
|
+
int argument_slots_on_stack =
|
2742
|
+
ArgumentStackSlotsForCFunctionCall(num_arguments);
|
2743
|
+
movq(rsp, Operand(rsp, argument_slots_on_stack * kPointerSize));
|
2744
|
+
}
|
2745
|
+
|
2390
2746
|
|
2391
2747
|
CodePatcher::CodePatcher(byte* address, int size)
|
2392
2748
|
: address_(address), size_(size), masm_(address, size + Assembler::kGap) {
|