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
@@ -32,14 +32,14 @@ namespace v8 {
|
|
32
32
|
namespace internal {
|
33
33
|
|
34
34
|
|
35
|
-
#
|
35
|
+
#ifdef V8_INTERPRETED_REGEXP
|
36
36
|
class RegExpMacroAssemblerARM: public RegExpMacroAssembler {
|
37
37
|
public:
|
38
38
|
RegExpMacroAssemblerARM();
|
39
39
|
virtual ~RegExpMacroAssemblerARM();
|
40
40
|
};
|
41
41
|
|
42
|
-
#else
|
42
|
+
#else // V8_INTERPRETED_REGEXP
|
43
43
|
class RegExpMacroAssemblerARM: public NativeRegExpMacroAssembler {
|
44
44
|
public:
|
45
45
|
RegExpMacroAssemblerARM(Mode mode, int registers_to_save);
|
@@ -123,8 +123,7 @@ class RegExpMacroAssemblerARM: public NativeRegExpMacroAssembler {
|
|
123
123
|
static const int kReturnAddress = kStoredRegisters + 8 * kPointerSize;
|
124
124
|
// Stack parameters placed by caller.
|
125
125
|
static const int kRegisterOutput = kReturnAddress + kPointerSize;
|
126
|
-
static const int
|
127
|
-
static const int kStackHighEnd = kAtStart + kPointerSize;
|
126
|
+
static const int kStackHighEnd = kRegisterOutput + kPointerSize;
|
128
127
|
static const int kDirectCall = kStackHighEnd + kPointerSize;
|
129
128
|
|
130
129
|
// Below the frame pointer.
|
@@ -136,8 +135,9 @@ class RegExpMacroAssemblerARM: public NativeRegExpMacroAssembler {
|
|
136
135
|
// When adding local variables remember to push space for them in
|
137
136
|
// the frame in GetCode.
|
138
137
|
static const int kInputStartMinusOne = kInputString - kPointerSize;
|
138
|
+
static const int kAtStart = kInputStartMinusOne - kPointerSize;
|
139
139
|
// First register address. Following registers are below it on the stack.
|
140
|
-
static const int kRegisterZero =
|
140
|
+
static const int kRegisterZero = kAtStart - kPointerSize;
|
141
141
|
|
142
142
|
// Initial size of code buffer.
|
143
143
|
static const size_t kRegExpCodeSize = 1024;
|
@@ -206,22 +206,6 @@ class RegExpMacroAssemblerARM: public NativeRegExpMacroAssembler {
|
|
206
206
|
// and increments it by a word size.
|
207
207
|
inline void Pop(Register target);
|
208
208
|
|
209
|
-
// Before calling a C-function from generated code, align arguments on stack.
|
210
|
-
// After aligning the frame, non-register arguments must be stored in
|
211
|
-
// sp[0], sp[4], etc., not pushed. The argument count assumes all arguments
|
212
|
-
// are word sized.
|
213
|
-
// Some compilers/platforms require the stack to be aligned when calling
|
214
|
-
// C++ code.
|
215
|
-
// Needs a scratch register to do some arithmetic. This register will be
|
216
|
-
// trashed.
|
217
|
-
inline void FrameAlign(int num_arguments, Register scratch);
|
218
|
-
|
219
|
-
// Calls a C function and cleans up the space for arguments allocated
|
220
|
-
// by FrameAlign. The called function is not allowed to trigger a garbage
|
221
|
-
// collection.
|
222
|
-
inline void CallCFunction(ExternalReference function,
|
223
|
-
int num_arguments);
|
224
|
-
|
225
209
|
// Calls a C function and cleans up the frame alignment done by
|
226
210
|
// by FrameAlign. The called function *is* allowed to trigger a garbage
|
227
211
|
// collection, but may not take more than four arguments (no arguments
|
@@ -274,7 +258,7 @@ class RegExpCEntryStub: public CodeStub {
|
|
274
258
|
const char* GetName() { return "RegExpCEntryStub"; }
|
275
259
|
};
|
276
260
|
|
277
|
-
#endif //
|
261
|
+
#endif // V8_INTERPRETED_REGEXP
|
278
262
|
|
279
263
|
|
280
264
|
}} // namespace v8::internal
|
File without changes
|
@@ -33,7 +33,8 @@ namespace internal {
|
|
33
33
|
|
34
34
|
class RegisterAllocatorConstants : public AllStatic {
|
35
35
|
public:
|
36
|
-
|
36
|
+
// No registers are currently managed by the register allocator on ARM.
|
37
|
+
static const int kNumRegisters = 0;
|
37
38
|
static const int kInvalidRegister = -1;
|
38
39
|
};
|
39
40
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2010 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -47,9 +47,9 @@ using ::v8::internal::ReadLine;
|
|
47
47
|
using ::v8::internal::DeleteArray;
|
48
48
|
|
49
49
|
// This macro provides a platform independent use of sscanf. The reason for
|
50
|
-
// SScanF not being implemented in a platform independent
|
51
|
-
// ::v8::internal::OS in the same way as SNPrintF is that the
|
52
|
-
// Library does not provide vsscanf.
|
50
|
+
// SScanF not being implemented in a platform independent way through
|
51
|
+
// ::v8::internal::OS in the same way as SNPrintF is that the
|
52
|
+
// Windows C Run-Time Library does not provide vsscanf.
|
53
53
|
#define SScanF sscanf // NOLINT
|
54
54
|
|
55
55
|
// The Debugger class is used by the simulator while debugging simulated ARM
|
@@ -72,6 +72,8 @@ class Debugger {
|
|
72
72
|
|
73
73
|
int32_t GetRegisterValue(int regnum);
|
74
74
|
bool GetValue(const char* desc, int32_t* value);
|
75
|
+
bool GetVFPSingleValue(const char* desc, float* value);
|
76
|
+
bool GetVFPDoubleValue(const char* desc, double* value);
|
75
77
|
|
76
78
|
// Set or delete a breakpoint. Returns true if successful.
|
77
79
|
bool SetBreakpoint(Instr* breakpc);
|
@@ -148,7 +150,33 @@ bool Debugger::GetValue(const char* desc, int32_t* value) {
|
|
148
150
|
*value = GetRegisterValue(regnum);
|
149
151
|
return true;
|
150
152
|
} else {
|
151
|
-
|
153
|
+
if (strncmp(desc, "0x", 2) == 0) {
|
154
|
+
return SScanF(desc + 2, "%x", reinterpret_cast<uint32_t*>(value)) == 1;
|
155
|
+
} else {
|
156
|
+
return SScanF(desc, "%u", reinterpret_cast<uint32_t*>(value)) == 1;
|
157
|
+
}
|
158
|
+
}
|
159
|
+
return false;
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
bool Debugger::GetVFPSingleValue(const char* desc, float* value) {
|
164
|
+
bool is_double;
|
165
|
+
int regnum = VFPRegisters::Number(desc, &is_double);
|
166
|
+
if (regnum != kNoRegister && !is_double) {
|
167
|
+
*value = sim_->get_float_from_s_register(regnum);
|
168
|
+
return true;
|
169
|
+
}
|
170
|
+
return false;
|
171
|
+
}
|
172
|
+
|
173
|
+
|
174
|
+
bool Debugger::GetVFPDoubleValue(const char* desc, double* value) {
|
175
|
+
bool is_double;
|
176
|
+
int regnum = VFPRegisters::Number(desc, &is_double);
|
177
|
+
if (regnum != kNoRegister && is_double) {
|
178
|
+
*value = sim_->get_double_from_d_register(regnum);
|
179
|
+
return true;
|
152
180
|
}
|
153
181
|
return false;
|
154
182
|
}
|
@@ -207,6 +235,7 @@ void Debugger::Debug() {
|
|
207
235
|
char cmd[COMMAND_SIZE + 1];
|
208
236
|
char arg1[ARG_SIZE + 1];
|
209
237
|
char arg2[ARG_SIZE + 1];
|
238
|
+
char* argv[3] = { cmd, arg1, arg2 };
|
210
239
|
|
211
240
|
// make sure to have a proper terminating character if reaching the limit
|
212
241
|
cmd[COMMAND_SIZE] = 0;
|
@@ -234,7 +263,7 @@ void Debugger::Debug() {
|
|
234
263
|
} else {
|
235
264
|
// Use sscanf to parse the individual parts of the command line. At the
|
236
265
|
// moment no command expects more than two parameters.
|
237
|
-
int
|
266
|
+
int argc = SScanF(line,
|
238
267
|
"%" XSTR(COMMAND_SIZE) "s "
|
239
268
|
"%" XSTR(ARG_SIZE) "s "
|
240
269
|
"%" XSTR(ARG_SIZE) "s",
|
@@ -247,8 +276,10 @@ void Debugger::Debug() {
|
|
247
276
|
// Leave the debugger shell.
|
248
277
|
done = true;
|
249
278
|
} else if ((strcmp(cmd, "p") == 0) || (strcmp(cmd, "print") == 0)) {
|
250
|
-
if (
|
279
|
+
if (argc == 2) {
|
251
280
|
int32_t value;
|
281
|
+
float svalue;
|
282
|
+
double dvalue;
|
252
283
|
if (strcmp(arg1, "all") == 0) {
|
253
284
|
for (int i = 0; i < kNumRegisters; i++) {
|
254
285
|
value = GetRegisterValue(i);
|
@@ -257,6 +288,10 @@ void Debugger::Debug() {
|
|
257
288
|
} else {
|
258
289
|
if (GetValue(arg1, &value)) {
|
259
290
|
PrintF("%s: 0x%08x %d \n", arg1, value, value);
|
291
|
+
} else if (GetVFPSingleValue(arg1, &svalue)) {
|
292
|
+
PrintF("%s: %f \n", arg1, svalue);
|
293
|
+
} else if (GetVFPDoubleValue(arg1, &dvalue)) {
|
294
|
+
PrintF("%s: %lf \n", arg1, dvalue);
|
260
295
|
} else {
|
261
296
|
PrintF("%s unrecognized\n", arg1);
|
262
297
|
}
|
@@ -266,7 +301,7 @@ void Debugger::Debug() {
|
|
266
301
|
}
|
267
302
|
} else if ((strcmp(cmd, "po") == 0)
|
268
303
|
|| (strcmp(cmd, "printobject") == 0)) {
|
269
|
-
if (
|
304
|
+
if (argc == 2) {
|
270
305
|
int32_t value;
|
271
306
|
if (GetValue(arg1, &value)) {
|
272
307
|
Object* obj = reinterpret_cast<Object*>(value);
|
@@ -283,6 +318,37 @@ void Debugger::Debug() {
|
|
283
318
|
} else {
|
284
319
|
PrintF("printobject <value>\n");
|
285
320
|
}
|
321
|
+
} else if (strcmp(cmd, "stack") == 0 || strcmp(cmd, "mem") == 0) {
|
322
|
+
int32_t* cur = NULL;
|
323
|
+
int32_t* end = NULL;
|
324
|
+
int next_arg = 1;
|
325
|
+
|
326
|
+
if (strcmp(cmd, "stack") == 0) {
|
327
|
+
cur = reinterpret_cast<int32_t*>(sim_->get_register(Simulator::sp));
|
328
|
+
} else { // "mem"
|
329
|
+
int32_t value;
|
330
|
+
if (!GetValue(arg1, &value)) {
|
331
|
+
PrintF("%s unrecognized\n", arg1);
|
332
|
+
continue;
|
333
|
+
}
|
334
|
+
cur = reinterpret_cast<int32_t*>(value);
|
335
|
+
next_arg++;
|
336
|
+
}
|
337
|
+
|
338
|
+
int32_t words;
|
339
|
+
if (argc == next_arg) {
|
340
|
+
words = 10;
|
341
|
+
} else if (argc == next_arg + 1) {
|
342
|
+
if (!GetValue(argv[next_arg], &words)) {
|
343
|
+
words = 10;
|
344
|
+
}
|
345
|
+
}
|
346
|
+
end = cur + words;
|
347
|
+
|
348
|
+
while (cur < end) {
|
349
|
+
PrintF(" 0x%08x: 0x%08x %10d\n", cur, *cur, *cur);
|
350
|
+
cur++;
|
351
|
+
}
|
286
352
|
} else if (strcmp(cmd, "disasm") == 0) {
|
287
353
|
disasm::NameConverter converter;
|
288
354
|
disasm::Disassembler dasm(converter);
|
@@ -292,10 +358,10 @@ void Debugger::Debug() {
|
|
292
358
|
byte* cur = NULL;
|
293
359
|
byte* end = NULL;
|
294
360
|
|
295
|
-
if (
|
361
|
+
if (argc == 1) {
|
296
362
|
cur = reinterpret_cast<byte*>(sim_->get_pc());
|
297
363
|
end = cur + (10 * Instr::kInstrSize);
|
298
|
-
} else if (
|
364
|
+
} else if (argc == 2) {
|
299
365
|
int32_t value;
|
300
366
|
if (GetValue(arg1, &value)) {
|
301
367
|
cur = reinterpret_cast<byte*>(value);
|
@@ -321,7 +387,7 @@ void Debugger::Debug() {
|
|
321
387
|
v8::internal::OS::DebugBreak();
|
322
388
|
PrintF("regaining control from gdb\n");
|
323
389
|
} else if (strcmp(cmd, "break") == 0) {
|
324
|
-
if (
|
390
|
+
if (argc == 2) {
|
325
391
|
int32_t value;
|
326
392
|
if (GetValue(arg1, &value)) {
|
327
393
|
if (!SetBreakpoint(reinterpret_cast<Instr*>(value))) {
|
@@ -355,6 +421,10 @@ void Debugger::Debug() {
|
|
355
421
|
} else {
|
356
422
|
PrintF("Not at debugger stop.");
|
357
423
|
}
|
424
|
+
} else if ((strcmp(cmd, "t") == 0) || strcmp(cmd, "trace") == 0) {
|
425
|
+
::v8::internal::FLAG_trace_sim = !::v8::internal::FLAG_trace_sim;
|
426
|
+
PrintF("Trace of executed instructions is %s\n",
|
427
|
+
::v8::internal::FLAG_trace_sim ? "on" : "off");
|
358
428
|
} else if ((strcmp(cmd, "h") == 0) || (strcmp(cmd, "help") == 0)) {
|
359
429
|
PrintF("cont\n");
|
360
430
|
PrintF(" continue execution (alias 'c')\n");
|
@@ -367,6 +437,10 @@ void Debugger::Debug() {
|
|
367
437
|
PrintF(" print an object from a register (alias 'po')\n");
|
368
438
|
PrintF("flags\n");
|
369
439
|
PrintF(" print flags\n");
|
440
|
+
PrintF("stack [<words>]\n");
|
441
|
+
PrintF(" dump stack content, default dump 10 words)\n");
|
442
|
+
PrintF("mem <address> [<words>]\n");
|
443
|
+
PrintF(" dump memory content, default dump 10 words)\n");
|
370
444
|
PrintF("disasm [<instructions>]\n");
|
371
445
|
PrintF("disasm [[<address>] <instructions>]\n");
|
372
446
|
PrintF(" disassemble code, default is 10 instructions from pc\n");
|
@@ -378,7 +452,9 @@ void Debugger::Debug() {
|
|
378
452
|
PrintF(" delete the breakpoint\n");
|
379
453
|
PrintF("unstop\n");
|
380
454
|
PrintF(" ignore the stop instruction at the current location");
|
381
|
-
PrintF("
|
455
|
+
PrintF(" from now on\n");
|
456
|
+
PrintF("trace (alias 't')\n");
|
457
|
+
PrintF(" toogle the tracing of all executed statements\n");
|
382
458
|
} else {
|
383
459
|
PrintF("Unknown command: %s\n", cmd);
|
384
460
|
}
|
@@ -398,6 +474,94 @@ void Debugger::Debug() {
|
|
398
474
|
}
|
399
475
|
|
400
476
|
|
477
|
+
static bool ICacheMatch(void* one, void* two) {
|
478
|
+
ASSERT((reinterpret_cast<intptr_t>(one) & CachePage::kPageMask) == 0);
|
479
|
+
ASSERT((reinterpret_cast<intptr_t>(two) & CachePage::kPageMask) == 0);
|
480
|
+
return one == two;
|
481
|
+
}
|
482
|
+
|
483
|
+
|
484
|
+
static uint32_t ICacheHash(void* key) {
|
485
|
+
return static_cast<uint32_t>(reinterpret_cast<uintptr_t>(key)) >> 2;
|
486
|
+
}
|
487
|
+
|
488
|
+
|
489
|
+
static bool AllOnOnePage(uintptr_t start, int size) {
|
490
|
+
intptr_t start_page = (start & ~CachePage::kPageMask);
|
491
|
+
intptr_t end_page = ((start + size) & ~CachePage::kPageMask);
|
492
|
+
return start_page == end_page;
|
493
|
+
}
|
494
|
+
|
495
|
+
|
496
|
+
void Simulator::FlushICache(void* start_addr, size_t size) {
|
497
|
+
intptr_t start = reinterpret_cast<intptr_t>(start_addr);
|
498
|
+
int intra_line = (start & CachePage::kLineMask);
|
499
|
+
start -= intra_line;
|
500
|
+
size += intra_line;
|
501
|
+
size = ((size - 1) | CachePage::kLineMask) + 1;
|
502
|
+
int offset = (start & CachePage::kPageMask);
|
503
|
+
while (!AllOnOnePage(start, size - 1)) {
|
504
|
+
int bytes_to_flush = CachePage::kPageSize - offset;
|
505
|
+
FlushOnePage(start, bytes_to_flush);
|
506
|
+
start += bytes_to_flush;
|
507
|
+
size -= bytes_to_flush;
|
508
|
+
ASSERT_EQ(0, start & CachePage::kPageMask);
|
509
|
+
offset = 0;
|
510
|
+
}
|
511
|
+
if (size != 0) {
|
512
|
+
FlushOnePage(start, size);
|
513
|
+
}
|
514
|
+
}
|
515
|
+
|
516
|
+
|
517
|
+
CachePage* Simulator::GetCachePage(void* page) {
|
518
|
+
v8::internal::HashMap::Entry* entry = i_cache_->Lookup(page,
|
519
|
+
ICacheHash(page),
|
520
|
+
true);
|
521
|
+
if (entry->value == NULL) {
|
522
|
+
CachePage* new_page = new CachePage();
|
523
|
+
entry->value = new_page;
|
524
|
+
}
|
525
|
+
return reinterpret_cast<CachePage*>(entry->value);
|
526
|
+
}
|
527
|
+
|
528
|
+
|
529
|
+
// Flush from start up to and not including start + size.
|
530
|
+
void Simulator::FlushOnePage(intptr_t start, int size) {
|
531
|
+
ASSERT(size <= CachePage::kPageSize);
|
532
|
+
ASSERT(AllOnOnePage(start, size - 1));
|
533
|
+
ASSERT((start & CachePage::kLineMask) == 0);
|
534
|
+
ASSERT((size & CachePage::kLineMask) == 0);
|
535
|
+
void* page = reinterpret_cast<void*>(start & (~CachePage::kPageMask));
|
536
|
+
int offset = (start & CachePage::kPageMask);
|
537
|
+
CachePage* cache_page = GetCachePage(page);
|
538
|
+
char* valid_bytemap = cache_page->ValidityByte(offset);
|
539
|
+
memset(valid_bytemap, CachePage::LINE_INVALID, size >> CachePage::kLineShift);
|
540
|
+
}
|
541
|
+
|
542
|
+
|
543
|
+
void Simulator::CheckICache(Instr* instr) {
|
544
|
+
intptr_t address = reinterpret_cast<intptr_t>(instr);
|
545
|
+
void* page = reinterpret_cast<void*>(address & (~CachePage::kPageMask));
|
546
|
+
void* line = reinterpret_cast<void*>(address & (~CachePage::kLineMask));
|
547
|
+
int offset = (address & CachePage::kPageMask);
|
548
|
+
CachePage* cache_page = GetCachePage(page);
|
549
|
+
char* cache_valid_byte = cache_page->ValidityByte(offset);
|
550
|
+
bool cache_hit = (*cache_valid_byte == CachePage::LINE_VALID);
|
551
|
+
char* cached_line = cache_page->CachedData(offset & ~CachePage::kLineMask);
|
552
|
+
if (cache_hit) {
|
553
|
+
// Check that the data in memory matches the contents of the I-cache.
|
554
|
+
CHECK(memcmp(reinterpret_cast<void*>(instr),
|
555
|
+
cache_page->CachedData(offset),
|
556
|
+
Instr::kInstrSize) == 0);
|
557
|
+
} else {
|
558
|
+
// Cache miss. Load memory into the cache.
|
559
|
+
memcpy(cached_line, line, CachePage::kLineLength);
|
560
|
+
*cache_valid_byte = CachePage::LINE_VALID;
|
561
|
+
}
|
562
|
+
}
|
563
|
+
|
564
|
+
|
401
565
|
// Create one simulator per thread and keep it in thread local storage.
|
402
566
|
static v8::internal::Thread::LocalStorageKey simulator_key;
|
403
567
|
|
@@ -413,7 +577,13 @@ void Simulator::Initialize() {
|
|
413
577
|
}
|
414
578
|
|
415
579
|
|
580
|
+
v8::internal::HashMap* Simulator::i_cache_ = NULL;
|
581
|
+
|
582
|
+
|
416
583
|
Simulator::Simulator() {
|
584
|
+
if (i_cache_ == NULL) {
|
585
|
+
i_cache_ = new v8::internal::HashMap(&ICacheMatch);
|
586
|
+
}
|
417
587
|
Initialize();
|
418
588
|
// Setup simulator support first. Some of this information is needed to
|
419
589
|
// setup the architecture state.
|
@@ -478,6 +648,9 @@ class Redirection {
|
|
478
648
|
swi_instruction_((AL << 28) | (0xf << 24) | call_rt_redirected),
|
479
649
|
fp_return_(fp_return),
|
480
650
|
next_(list_) {
|
651
|
+
Simulator::current()->
|
652
|
+
FlushICache(reinterpret_cast<void*>(&swi_instruction_),
|
653
|
+
Instr::kInstrSize);
|
481
654
|
list_ = this;
|
482
655
|
}
|
483
656
|
|
@@ -890,8 +1063,13 @@ bool Simulator::OverflowFrom(int32_t alu_out,
|
|
890
1063
|
|
891
1064
|
// Support for VFP comparisons.
|
892
1065
|
void Simulator::Compute_FPSCR_Flags(double val1, double val2) {
|
1066
|
+
if (isnan(val1) || isnan(val2)) {
|
1067
|
+
n_flag_FPSCR_ = false;
|
1068
|
+
z_flag_FPSCR_ = false;
|
1069
|
+
c_flag_FPSCR_ = true;
|
1070
|
+
v_flag_FPSCR_ = true;
|
893
1071
|
// All non-NaN cases.
|
894
|
-
if (val1 == val2) {
|
1072
|
+
} else if (val1 == val2) {
|
895
1073
|
n_flag_FPSCR_ = false;
|
896
1074
|
z_flag_FPSCR_ = true;
|
897
1075
|
c_flag_FPSCR_ = true;
|
@@ -1168,6 +1346,11 @@ void Simulator::SoftwareInterrupt(Instr* instr) {
|
|
1168
1346
|
int swi = instr->SwiField();
|
1169
1347
|
switch (swi) {
|
1170
1348
|
case call_rt_redirected: {
|
1349
|
+
// Check if stack is aligned. Error if not aligned is reported below to
|
1350
|
+
// include information on the function called.
|
1351
|
+
bool stack_aligned =
|
1352
|
+
(get_register(sp)
|
1353
|
+
& (::v8::internal::FLAG_sim_stack_alignment - 1)) == 0;
|
1171
1354
|
Redirection* redirection = Redirection::FromSwiInstruction(instr);
|
1172
1355
|
int32_t arg0 = get_register(r0);
|
1173
1356
|
int32_t arg1 = get_register(r1);
|
@@ -1181,12 +1364,17 @@ void Simulator::SoftwareInterrupt(Instr* instr) {
|
|
1181
1364
|
reinterpret_cast<intptr_t>(redirection->external_function());
|
1182
1365
|
SimulatorRuntimeFPCall target =
|
1183
1366
|
reinterpret_cast<SimulatorRuntimeFPCall>(external);
|
1184
|
-
if (::v8::internal::FLAG_trace_sim) {
|
1367
|
+
if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
|
1185
1368
|
double x, y;
|
1186
1369
|
GetFpArgs(&x, &y);
|
1187
|
-
PrintF("Call to host function at %p with args %f, %f
|
1370
|
+
PrintF("Call to host function at %p with args %f, %f",
|
1188
1371
|
FUNCTION_ADDR(target), x, y);
|
1372
|
+
if (!stack_aligned) {
|
1373
|
+
PrintF(" with unaligned stack %08x\n", get_register(sp));
|
1374
|
+
}
|
1375
|
+
PrintF("\n");
|
1189
1376
|
}
|
1377
|
+
CHECK(stack_aligned);
|
1190
1378
|
double result = target(arg0, arg1, arg2, arg3);
|
1191
1379
|
SetFpResult(result);
|
1192
1380
|
} else {
|
@@ -1194,15 +1382,20 @@ void Simulator::SoftwareInterrupt(Instr* instr) {
|
|
1194
1382
|
reinterpret_cast<int32_t>(redirection->external_function());
|
1195
1383
|
SimulatorRuntimeCall target =
|
1196
1384
|
reinterpret_cast<SimulatorRuntimeCall>(external);
|
1197
|
-
if (::v8::internal::FLAG_trace_sim) {
|
1385
|
+
if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
|
1198
1386
|
PrintF(
|
1199
|
-
"Call to host function at %p with args %08x, %08x, %08x, %08x
|
1387
|
+
"Call to host function at %p with args %08x, %08x, %08x, %08x",
|
1200
1388
|
FUNCTION_ADDR(target),
|
1201
1389
|
arg0,
|
1202
1390
|
arg1,
|
1203
1391
|
arg2,
|
1204
1392
|
arg3);
|
1393
|
+
if (!stack_aligned) {
|
1394
|
+
PrintF(" with unaligned stack %08x\n", get_register(sp));
|
1395
|
+
}
|
1396
|
+
PrintF("\n");
|
1205
1397
|
}
|
1398
|
+
CHECK(stack_aligned);
|
1206
1399
|
int64_t result = target(arg0, arg1, arg2, arg3);
|
1207
1400
|
int32_t lo_res = static_cast<int32_t>(result);
|
1208
1401
|
int32_t hi_res = static_cast<int32_t>(result >> 32);
|
@@ -1424,6 +1617,50 @@ void Simulator::DecodeType01(Instr* instr) {
|
|
1424
1617
|
}
|
1425
1618
|
return;
|
1426
1619
|
}
|
1620
|
+
} else if ((type == 0) && instr->IsMiscType0()) {
|
1621
|
+
if (instr->Bits(22, 21) == 1) {
|
1622
|
+
int rm = instr->RmField();
|
1623
|
+
switch (instr->Bits(7, 4)) {
|
1624
|
+
case BX:
|
1625
|
+
set_pc(get_register(rm));
|
1626
|
+
break;
|
1627
|
+
case BLX: {
|
1628
|
+
uint32_t old_pc = get_pc();
|
1629
|
+
set_pc(get_register(rm));
|
1630
|
+
set_register(lr, old_pc + Instr::kInstrSize);
|
1631
|
+
break;
|
1632
|
+
}
|
1633
|
+
case BKPT:
|
1634
|
+
v8::internal::OS::DebugBreak();
|
1635
|
+
break;
|
1636
|
+
default:
|
1637
|
+
UNIMPLEMENTED();
|
1638
|
+
}
|
1639
|
+
} else if (instr->Bits(22, 21) == 3) {
|
1640
|
+
int rm = instr->RmField();
|
1641
|
+
int rd = instr->RdField();
|
1642
|
+
switch (instr->Bits(7, 4)) {
|
1643
|
+
case CLZ: {
|
1644
|
+
uint32_t bits = get_register(rm);
|
1645
|
+
int leading_zeros = 0;
|
1646
|
+
if (bits == 0) {
|
1647
|
+
leading_zeros = 32;
|
1648
|
+
} else {
|
1649
|
+
while ((bits & 0x80000000u) == 0) {
|
1650
|
+
bits <<= 1;
|
1651
|
+
leading_zeros++;
|
1652
|
+
}
|
1653
|
+
}
|
1654
|
+
set_register(rd, leading_zeros);
|
1655
|
+
break;
|
1656
|
+
}
|
1657
|
+
default:
|
1658
|
+
UNIMPLEMENTED();
|
1659
|
+
}
|
1660
|
+
} else {
|
1661
|
+
PrintF("%08x\n", instr->InstructionBits());
|
1662
|
+
UNIMPLEMENTED();
|
1663
|
+
}
|
1427
1664
|
} else {
|
1428
1665
|
int rd = instr->RdField();
|
1429
1666
|
int rn = instr->RnField();
|
@@ -1541,21 +1778,9 @@ void Simulator::DecodeType01(Instr* instr) {
|
|
1541
1778
|
SetNZFlags(alu_out);
|
1542
1779
|
SetCFlag(shifter_carry_out);
|
1543
1780
|
} else {
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
case BX:
|
1548
|
-
set_pc(get_register(rm));
|
1549
|
-
break;
|
1550
|
-
case BLX: {
|
1551
|
-
uint32_t old_pc = get_pc();
|
1552
|
-
set_pc(get_register(rm));
|
1553
|
-
set_register(lr, old_pc + Instr::kInstrSize);
|
1554
|
-
break;
|
1555
|
-
}
|
1556
|
-
default:
|
1557
|
-
UNIMPLEMENTED();
|
1558
|
-
}
|
1781
|
+
// Other instructions matching this pattern are handled in the
|
1782
|
+
// miscellaneous instructions part above.
|
1783
|
+
UNREACHABLE();
|
1559
1784
|
}
|
1560
1785
|
break;
|
1561
1786
|
}
|
@@ -1583,27 +1808,9 @@ void Simulator::DecodeType01(Instr* instr) {
|
|
1583
1808
|
SetCFlag(!CarryFrom(rn_val, shifter_operand));
|
1584
1809
|
SetVFlag(OverflowFrom(alu_out, rn_val, shifter_operand, true));
|
1585
1810
|
} else {
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
switch (instr->Bits(7, 4)) {
|
1590
|
-
case CLZ: {
|
1591
|
-
uint32_t bits = get_register(rm);
|
1592
|
-
int leading_zeros = 0;
|
1593
|
-
if (bits == 0) {
|
1594
|
-
leading_zeros = 32;
|
1595
|
-
} else {
|
1596
|
-
while ((bits & 0x80000000u) == 0) {
|
1597
|
-
bits <<= 1;
|
1598
|
-
leading_zeros++;
|
1599
|
-
}
|
1600
|
-
}
|
1601
|
-
set_register(rd, leading_zeros);
|
1602
|
-
break;
|
1603
|
-
}
|
1604
|
-
default:
|
1605
|
-
UNIMPLEMENTED();
|
1606
|
-
}
|
1811
|
+
// Other instructions matching this pattern are handled in the
|
1812
|
+
// miscellaneous instructions part above.
|
1813
|
+
UNREACHABLE();
|
1607
1814
|
}
|
1608
1815
|
break;
|
1609
1816
|
}
|
@@ -1730,7 +1937,7 @@ void Simulator::DecodeType2(Instr* instr) {
|
|
1730
1937
|
|
1731
1938
|
|
1732
1939
|
void Simulator::DecodeType3(Instr* instr) {
|
1733
|
-
ASSERT(instr->Bit(4) == 0);
|
1940
|
+
ASSERT(instr->Bits(6, 4) == 0x5 || instr->Bit(4) == 0);
|
1734
1941
|
int rd = instr->RdField();
|
1735
1942
|
int rn = instr->RnField();
|
1736
1943
|
int32_t rn_val = get_register(rn);
|
@@ -1757,10 +1964,27 @@ void Simulator::DecodeType3(Instr* instr) {
|
|
1757
1964
|
break;
|
1758
1965
|
}
|
1759
1966
|
case 3: {
|
1760
|
-
//
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1967
|
+
// UBFX.
|
1968
|
+
if (instr->HasW() && (instr->Bits(6, 4) == 0x5)) {
|
1969
|
+
uint32_t widthminus1 = static_cast<uint32_t>(instr->Bits(20, 16));
|
1970
|
+
uint32_t lsbit = static_cast<uint32_t>(instr->ShiftAmountField());
|
1971
|
+
uint32_t msbit = widthminus1 + lsbit;
|
1972
|
+
if (msbit <= 31) {
|
1973
|
+
uint32_t rm_val =
|
1974
|
+
static_cast<uint32_t>(get_register(instr->RmField()));
|
1975
|
+
uint32_t extr_val = rm_val << (31 - msbit);
|
1976
|
+
extr_val = extr_val >> (31 - widthminus1);
|
1977
|
+
set_register(instr->RdField(), extr_val);
|
1978
|
+
} else {
|
1979
|
+
UNREACHABLE();
|
1980
|
+
}
|
1981
|
+
return;
|
1982
|
+
} else {
|
1983
|
+
// Format(instr, "'memop'cond'b 'rd, ['rn, +'shift_rm]'w");
|
1984
|
+
addr = rn_val + shifter_operand;
|
1985
|
+
if (instr->HasW()) {
|
1986
|
+
set_register(rn, addr);
|
1987
|
+
}
|
1764
1988
|
}
|
1765
1989
|
break;
|
1766
1990
|
}
|
@@ -1774,7 +1998,8 @@ void Simulator::DecodeType3(Instr* instr) {
|
|
1774
1998
|
uint8_t byte = ReadB(addr);
|
1775
1999
|
set_register(rd, byte);
|
1776
2000
|
} else {
|
1777
|
-
|
2001
|
+
uint8_t byte = get_register(rd);
|
2002
|
+
WriteB(addr, byte);
|
1778
2003
|
}
|
1779
2004
|
} else {
|
1780
2005
|
if (instr->HasL()) {
|
@@ -1891,6 +2116,13 @@ void Simulator::DecodeUnconditional(Instr* instr) {
|
|
1891
2116
|
}
|
1892
2117
|
|
1893
2118
|
|
2119
|
+
// Depending on value of last_bit flag glue register code from vm and m values
|
2120
|
+
// (where m is expected to be a single bit).
|
2121
|
+
static int GlueRegCode(bool last_bit, int vm, int m) {
|
2122
|
+
return last_bit ? ((vm << 1) | m) : ((m << 4) | vm);
|
2123
|
+
}
|
2124
|
+
|
2125
|
+
|
1894
2126
|
// void Simulator::DecodeTypeVFP(Instr* instr)
|
1895
2127
|
// The Following ARMv7 VFPv instructions are currently supported.
|
1896
2128
|
// vmov :Sn = Rt
|
@@ -1905,114 +2137,212 @@ void Simulator::DecodeUnconditional(Instr* instr) {
|
|
1905
2137
|
// VMRS
|
1906
2138
|
void Simulator::DecodeTypeVFP(Instr* instr) {
|
1907
2139
|
ASSERT((instr->TypeField() == 7) && (instr->Bit(24) == 0x0) );
|
2140
|
+
ASSERT(instr->Bits(11, 9) == 0x5);
|
1908
2141
|
|
1909
|
-
int rt = instr->RtField();
|
1910
2142
|
int vm = instr->VmField();
|
1911
|
-
int vn = instr->VnField();
|
1912
2143
|
int vd = instr->VdField();
|
2144
|
+
int vn = instr->VnField();
|
2145
|
+
|
2146
|
+
if (instr->Bit(4) == 0) {
|
2147
|
+
if (instr->Opc1Field() == 0x7) {
|
2148
|
+
// Other data processing instructions
|
2149
|
+
if ((instr->Opc2Field() == 0x7) && (instr->Opc3Field() == 0x3)) {
|
2150
|
+
DecodeVCVTBetweenDoubleAndSingle(instr);
|
2151
|
+
} else if ((instr->Opc2Field() == 0x8) && (instr->Opc3Field() & 0x1)) {
|
2152
|
+
DecodeVCVTBetweenFloatingPointAndInteger(instr);
|
2153
|
+
} else if (((instr->Opc2Field() >> 1) == 0x6) &&
|
2154
|
+
(instr->Opc3Field() & 0x1)) {
|
2155
|
+
DecodeVCVTBetweenFloatingPointAndInteger(instr);
|
2156
|
+
} else if (((instr->Opc2Field() == 0x4) || (instr->Opc2Field() == 0x5)) &&
|
2157
|
+
(instr->Opc3Field() & 0x1)) {
|
2158
|
+
DecodeVCMP(instr);
|
2159
|
+
} else {
|
2160
|
+
UNREACHABLE(); // Not used by V8.
|
2161
|
+
}
|
2162
|
+
} else if (instr->Opc1Field() == 0x3) {
|
2163
|
+
if (instr->SzField() != 0x1) {
|
2164
|
+
UNREACHABLE(); // Not used by V8.
|
2165
|
+
}
|
2166
|
+
|
2167
|
+
if (instr->Opc3Field() & 0x1) {
|
2168
|
+
// vsub
|
2169
|
+
double dn_value = get_double_from_d_register(vn);
|
2170
|
+
double dm_value = get_double_from_d_register(vm);
|
2171
|
+
double dd_value = dn_value - dm_value;
|
2172
|
+
set_d_register_from_double(vd, dd_value);
|
2173
|
+
} else {
|
2174
|
+
// vadd
|
2175
|
+
double dn_value = get_double_from_d_register(vn);
|
2176
|
+
double dm_value = get_double_from_d_register(vm);
|
2177
|
+
double dd_value = dn_value + dm_value;
|
2178
|
+
set_d_register_from_double(vd, dd_value);
|
2179
|
+
}
|
2180
|
+
} else if ((instr->Opc1Field() == 0x2) && !(instr->Opc3Field() & 0x1)) {
|
2181
|
+
// vmul
|
2182
|
+
if (instr->SzField() != 0x1) {
|
2183
|
+
UNREACHABLE(); // Not used by V8.
|
2184
|
+
}
|
1913
2185
|
|
1914
|
-
if (instr->Bit(23) == 1) {
|
1915
|
-
if ((instr->Bits(21, 19) == 0x7) &&
|
1916
|
-
(instr->Bits(18, 16) == 0x5) &&
|
1917
|
-
(instr->Bits(11, 9) == 0x5) &&
|
1918
|
-
(instr->Bit(8) == 1) &&
|
1919
|
-
(instr->Bit(6) == 1) &&
|
1920
|
-
(instr->Bit(4) == 0)) {
|
1921
|
-
double dm_val = get_double_from_d_register(vm);
|
1922
|
-
int32_t int_value = static_cast<int32_t>(dm_val);
|
1923
|
-
set_s_register_from_sinteger(((vd<<1) | instr->DField()), int_value);
|
1924
|
-
} else if ((instr->Bits(21, 19) == 0x7) &&
|
1925
|
-
(instr->Bits(18, 16) == 0x0) &&
|
1926
|
-
(instr->Bits(11, 9) == 0x5) &&
|
1927
|
-
(instr->Bit(8) == 1) &&
|
1928
|
-
(instr->Bit(7) == 1) &&
|
1929
|
-
(instr->Bit(6) == 1) &&
|
1930
|
-
(instr->Bit(4) == 0)) {
|
1931
|
-
int32_t int_value = get_sinteger_from_s_register(((vm<<1) |
|
1932
|
-
instr->MField()));
|
1933
|
-
double dbl_value = static_cast<double>(int_value);
|
1934
|
-
set_d_register_from_double(vd, dbl_value);
|
1935
|
-
} else if ((instr->Bit(21) == 0x0) &&
|
1936
|
-
(instr->Bit(20) == 0x0) &&
|
1937
|
-
(instr->Bits(11, 9) == 0x5) &&
|
1938
|
-
(instr->Bit(8) == 1) &&
|
1939
|
-
(instr->Bit(6) == 0) &&
|
1940
|
-
(instr->Bit(4) == 0)) {
|
1941
2186
|
double dn_value = get_double_from_d_register(vn);
|
1942
2187
|
double dm_value = get_double_from_d_register(vm);
|
1943
|
-
double dd_value = dn_value
|
2188
|
+
double dd_value = dn_value * dm_value;
|
1944
2189
|
set_d_register_from_double(vd, dd_value);
|
1945
|
-
} else if ((instr->
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
1949
|
-
|
1950
|
-
|
1951
|
-
double
|
2190
|
+
} else if ((instr->Opc1Field() == 0x4) && !(instr->Opc3Field() & 0x1)) {
|
2191
|
+
// vdiv
|
2192
|
+
if (instr->SzField() != 0x1) {
|
2193
|
+
UNREACHABLE(); // Not used by V8.
|
2194
|
+
}
|
2195
|
+
|
2196
|
+
double dn_value = get_double_from_d_register(vn);
|
1952
2197
|
double dm_value = get_double_from_d_register(vm);
|
1953
|
-
|
1954
|
-
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
1958
|
-
|
1959
|
-
|
1960
|
-
|
2198
|
+
double dd_value = dn_value / dm_value;
|
2199
|
+
set_d_register_from_double(vd, dd_value);
|
2200
|
+
} else {
|
2201
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2202
|
+
}
|
2203
|
+
} else {
|
2204
|
+
if ((instr->VCField() == 0x0) &&
|
2205
|
+
(instr->VAField() == 0x0)) {
|
2206
|
+
DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(instr);
|
2207
|
+
} else if ((instr->VLField() == 0x1) &&
|
2208
|
+
(instr->VCField() == 0x0) &&
|
2209
|
+
(instr->VAField() == 0x7) &&
|
2210
|
+
(instr->Bits(19, 16) == 0x1)) {
|
2211
|
+
// vmrs
|
2212
|
+
if (instr->RtField() == 0xF)
|
1961
2213
|
Copy_FPSCR_to_APSR();
|
1962
2214
|
else
|
1963
2215
|
UNIMPLEMENTED(); // Not used by V8.
|
1964
2216
|
} else {
|
1965
2217
|
UNIMPLEMENTED(); // Not used by V8.
|
1966
2218
|
}
|
1967
|
-
}
|
1968
|
-
|
1969
|
-
|
1970
|
-
|
1971
|
-
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
1977
|
-
|
1978
|
-
|
1979
|
-
|
1980
|
-
|
1981
|
-
|
1982
|
-
|
1983
|
-
|
1984
|
-
|
1985
|
-
|
1986
|
-
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
1994
|
-
|
1995
|
-
|
2219
|
+
}
|
2220
|
+
}
|
2221
|
+
|
2222
|
+
|
2223
|
+
void Simulator::DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(Instr* instr) {
|
2224
|
+
ASSERT((instr->Bit(4) == 1) && (instr->VCField() == 0x0) &&
|
2225
|
+
(instr->VAField() == 0x0));
|
2226
|
+
|
2227
|
+
int t = instr->RtField();
|
2228
|
+
int n = GlueRegCode(true, instr->VnField(), instr->NField());
|
2229
|
+
bool to_arm_register = (instr->VLField() == 0x1);
|
2230
|
+
|
2231
|
+
if (to_arm_register) {
|
2232
|
+
int32_t int_value = get_sinteger_from_s_register(n);
|
2233
|
+
set_register(t, int_value);
|
2234
|
+
} else {
|
2235
|
+
int32_t rs_val = get_register(t);
|
2236
|
+
set_s_register_from_sinteger(n, rs_val);
|
2237
|
+
}
|
2238
|
+
}
|
2239
|
+
|
2240
|
+
|
2241
|
+
void Simulator::DecodeVCMP(Instr* instr) {
|
2242
|
+
ASSERT((instr->Bit(4) == 0) && (instr->Opc1Field() == 0x7));
|
2243
|
+
ASSERT(((instr->Opc2Field() == 0x4) || (instr->Opc2Field() == 0x5)) &&
|
2244
|
+
(instr->Opc3Field() & 0x1));
|
2245
|
+
|
2246
|
+
// Comparison.
|
2247
|
+
bool dp_operation = (instr->SzField() == 1);
|
2248
|
+
|
2249
|
+
if (instr->Bit(7) != 0) {
|
2250
|
+
// Raising exceptions for quiet NaNs are not supported.
|
2251
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2252
|
+
}
|
2253
|
+
|
2254
|
+
int d = GlueRegCode(!dp_operation, instr->VdField(), instr->DField());
|
2255
|
+
int m = GlueRegCode(!dp_operation, instr->VmField(), instr->MField());
|
2256
|
+
|
2257
|
+
if (dp_operation) {
|
2258
|
+
double dd_value = get_double_from_d_register(d);
|
2259
|
+
double dm_value = get_double_from_d_register(m);
|
2260
|
+
|
2261
|
+
Compute_FPSCR_Flags(dd_value, dm_value);
|
2262
|
+
} else {
|
2263
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2264
|
+
}
|
2265
|
+
}
|
2266
|
+
|
2267
|
+
|
2268
|
+
void Simulator::DecodeVCVTBetweenDoubleAndSingle(Instr* instr) {
|
2269
|
+
ASSERT((instr->Bit(4) == 0) && (instr->Opc1Field() == 0x7));
|
2270
|
+
ASSERT((instr->Opc2Field() == 0x7) && (instr->Opc3Field() == 0x3));
|
2271
|
+
|
2272
|
+
bool double_to_single = (instr->SzField() == 1);
|
2273
|
+
int dst = GlueRegCode(double_to_single, instr->VdField(), instr->DField());
|
2274
|
+
int src = GlueRegCode(!double_to_single, instr->VmField(), instr->MField());
|
2275
|
+
|
2276
|
+
if (double_to_single) {
|
2277
|
+
double val = get_double_from_d_register(src);
|
2278
|
+
set_s_register_from_float(dst, static_cast<float>(val));
|
2279
|
+
} else {
|
2280
|
+
float val = get_float_from_s_register(src);
|
2281
|
+
set_d_register_from_double(dst, static_cast<double>(val));
|
2282
|
+
}
|
2283
|
+
}
|
2284
|
+
|
2285
|
+
|
2286
|
+
void Simulator::DecodeVCVTBetweenFloatingPointAndInteger(Instr* instr) {
|
2287
|
+
ASSERT((instr->Bit(4) == 0) && (instr->Opc1Field() == 0x7));
|
2288
|
+
ASSERT(((instr->Opc2Field() == 0x8) && (instr->Opc3Field() & 0x1)) ||
|
2289
|
+
(((instr->Opc2Field() >> 1) == 0x6) && (instr->Opc3Field() & 0x1)));
|
2290
|
+
|
2291
|
+
// Conversion between floating-point and integer.
|
2292
|
+
int vd = instr->VdField();
|
2293
|
+
int d = instr->DField();
|
2294
|
+
int vm = instr->VmField();
|
2295
|
+
int m = instr->MField();
|
2296
|
+
|
2297
|
+
bool to_integer = (instr->Bit(18) == 1);
|
2298
|
+
bool dp_operation = (instr->SzField() == 1);
|
2299
|
+
if (to_integer) {
|
2300
|
+
bool unsigned_integer = (instr->Bit(16) == 0);
|
2301
|
+
if (instr->Bit(7) != 1) {
|
2302
|
+
// Only rounding towards zero supported.
|
1996
2303
|
UNIMPLEMENTED(); // Not used by V8.
|
1997
2304
|
}
|
2305
|
+
|
2306
|
+
int dst = GlueRegCode(true, vd, d);
|
2307
|
+
int src = GlueRegCode(!dp_operation, vm, m);
|
2308
|
+
|
2309
|
+
if (dp_operation) {
|
2310
|
+
double val = get_double_from_d_register(src);
|
2311
|
+
|
2312
|
+
int sint = unsigned_integer ? static_cast<uint32_t>(val) :
|
2313
|
+
static_cast<int32_t>(val);
|
2314
|
+
|
2315
|
+
set_s_register_from_sinteger(dst, sint);
|
2316
|
+
} else {
|
2317
|
+
float val = get_float_from_s_register(src);
|
2318
|
+
|
2319
|
+
int sint = unsigned_integer ? static_cast<uint32_t>(val) :
|
2320
|
+
static_cast<int32_t>(val);
|
2321
|
+
|
2322
|
+
set_s_register_from_sinteger(dst, sint);
|
2323
|
+
}
|
1998
2324
|
} else {
|
1999
|
-
|
2000
|
-
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
2006
|
-
|
2007
|
-
|
2008
|
-
|
2009
|
-
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2013
|
-
set_register(rt, int_value);
|
2325
|
+
bool unsigned_integer = (instr->Bit(7) == 0);
|
2326
|
+
|
2327
|
+
int dst = GlueRegCode(!dp_operation, vd, d);
|
2328
|
+
int src = GlueRegCode(true, vm, m);
|
2329
|
+
|
2330
|
+
int val = get_sinteger_from_s_register(src);
|
2331
|
+
|
2332
|
+
if (dp_operation) {
|
2333
|
+
if (unsigned_integer) {
|
2334
|
+
set_d_register_from_double(dst,
|
2335
|
+
static_cast<double>((uint32_t)val));
|
2336
|
+
} else {
|
2337
|
+
set_d_register_from_double(dst, static_cast<double>(val));
|
2338
|
+
}
|
2014
2339
|
} else {
|
2015
|
-
|
2340
|
+
if (unsigned_integer) {
|
2341
|
+
set_s_register_from_float(dst,
|
2342
|
+
static_cast<float>((uint32_t)val));
|
2343
|
+
} else {
|
2344
|
+
set_s_register_from_float(dst, static_cast<float>(val));
|
2345
|
+
}
|
2016
2346
|
}
|
2017
2347
|
}
|
2018
2348
|
}
|
@@ -2022,48 +2352,96 @@ void Simulator::DecodeTypeVFP(Instr* instr) {
|
|
2022
2352
|
// Decode Type 6 coprocessor instructions.
|
2023
2353
|
// Dm = vmov(Rt, Rt2)
|
2024
2354
|
// <Rt, Rt2> = vmov(Dm)
|
2355
|
+
// Ddst = MEM(Rbase + 4*offset).
|
2356
|
+
// MEM(Rbase + 4*offset) = Dsrc.
|
2025
2357
|
void Simulator::DecodeType6CoprocessorIns(Instr* instr) {
|
2026
2358
|
ASSERT((instr->TypeField() == 6));
|
2027
2359
|
|
2028
|
-
|
2029
|
-
|
2030
|
-
|
2360
|
+
if (instr->CoprocessorField() == 0xA) {
|
2361
|
+
switch (instr->OpcodeField()) {
|
2362
|
+
case 0x8:
|
2363
|
+
case 0xC: { // Load and store float to memory.
|
2364
|
+
int rn = instr->RnField();
|
2365
|
+
int vd = instr->VdField();
|
2366
|
+
int offset = instr->Immed8Field();
|
2367
|
+
if (!instr->HasU()) {
|
2368
|
+
offset = -offset;
|
2369
|
+
}
|
2031
2370
|
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2035
|
-
|
2036
|
-
|
2037
|
-
|
2038
|
-
|
2039
|
-
|
2040
|
-
|
2041
|
-
int32_t rs_val = get_register(rt);
|
2042
|
-
int32_t rn_val = get_register(rn);
|
2043
|
-
|
2044
|
-
set_s_register_from_sinteger(2*vm, rs_val);
|
2045
|
-
set_s_register_from_sinteger((2*vm+1), rn_val);
|
2046
|
-
|
2047
|
-
} else if (instr->Bit(20) == 1) {
|
2048
|
-
int32_t rt_int_value = get_sinteger_from_s_register(2*vm);
|
2049
|
-
int32_t rn_int_value = get_sinteger_from_s_register(2*vm+1);
|
2050
|
-
|
2051
|
-
set_register(rt, rt_int_value);
|
2052
|
-
set_register(rn, rn_int_value);
|
2371
|
+
int32_t address = get_register(rn) + 4 * offset;
|
2372
|
+
if (instr->HasL()) {
|
2373
|
+
// Load double from memory: vldr.
|
2374
|
+
set_s_register_from_sinteger(vd, ReadW(address, instr));
|
2375
|
+
} else {
|
2376
|
+
// Store double to memory: vstr.
|
2377
|
+
WriteW(address, get_sinteger_from_s_register(vd), instr);
|
2378
|
+
}
|
2379
|
+
break;
|
2053
2380
|
}
|
2054
|
-
|
2055
|
-
|
2381
|
+
default:
|
2382
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2383
|
+
break;
|
2384
|
+
}
|
2385
|
+
} else if (instr->CoprocessorField() == 0xB) {
|
2386
|
+
switch (instr->OpcodeField()) {
|
2387
|
+
case 0x2:
|
2388
|
+
// Load and store double to two GP registers
|
2389
|
+
if (instr->Bits(7, 4) != 0x1) {
|
2390
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2391
|
+
} else {
|
2392
|
+
int rt = instr->RtField();
|
2393
|
+
int rn = instr->RnField();
|
2394
|
+
int vm = instr->VmField();
|
2395
|
+
if (instr->HasL()) {
|
2396
|
+
int32_t rt_int_value = get_sinteger_from_s_register(2*vm);
|
2397
|
+
int32_t rn_int_value = get_sinteger_from_s_register(2*vm+1);
|
2398
|
+
|
2399
|
+
set_register(rt, rt_int_value);
|
2400
|
+
set_register(rn, rn_int_value);
|
2401
|
+
} else {
|
2402
|
+
int32_t rs_val = get_register(rt);
|
2403
|
+
int32_t rn_val = get_register(rn);
|
2404
|
+
|
2405
|
+
set_s_register_from_sinteger(2*vm, rs_val);
|
2406
|
+
set_s_register_from_sinteger((2*vm+1), rn_val);
|
2407
|
+
}
|
2408
|
+
}
|
2409
|
+
break;
|
2410
|
+
case 0x8:
|
2411
|
+
case 0xC: { // Load and store double to memory.
|
2412
|
+
int rn = instr->RnField();
|
2413
|
+
int vd = instr->VdField();
|
2414
|
+
int offset = instr->Immed8Field();
|
2415
|
+
if (!instr->HasU()) {
|
2416
|
+
offset = -offset;
|
2417
|
+
}
|
2418
|
+
int32_t address = get_register(rn) + 4 * offset;
|
2419
|
+
if (instr->HasL()) {
|
2420
|
+
// Load double from memory: vldr.
|
2421
|
+
set_s_register_from_sinteger(2*vd, ReadW(address, instr));
|
2422
|
+
set_s_register_from_sinteger(2*vd + 1, ReadW(address + 4, instr));
|
2423
|
+
} else {
|
2424
|
+
// Store double to memory: vstr.
|
2425
|
+
WriteW(address, get_sinteger_from_s_register(2*vd), instr);
|
2426
|
+
WriteW(address + 4, get_sinteger_from_s_register(2*vd + 1), instr);
|
2427
|
+
}
|
2428
|
+
break;
|
2429
|
+
}
|
2430
|
+
default:
|
2431
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2432
|
+
break;
|
2056
2433
|
}
|
2057
|
-
} else if (instr->Bit(21) == 1) {
|
2058
|
-
UNIMPLEMENTED();
|
2059
2434
|
} else {
|
2060
|
-
UNIMPLEMENTED();
|
2435
|
+
UNIMPLEMENTED(); // Not used by V8.
|
2061
2436
|
}
|
2062
2437
|
}
|
2063
2438
|
|
2064
2439
|
|
2065
2440
|
// Executes the current instruction.
|
2066
2441
|
void Simulator::InstructionDecode(Instr* instr) {
|
2442
|
+
if (v8::internal::FLAG_check_icache) {
|
2443
|
+
CheckICache(instr);
|
2444
|
+
}
|
2067
2445
|
pc_modified_ = false;
|
2068
2446
|
if (::v8::internal::FLAG_trace_sim) {
|
2069
2447
|
disasm::NameConverter converter;
|
@@ -2258,7 +2636,6 @@ uintptr_t Simulator::PopAddress() {
|
|
2258
2636
|
return address;
|
2259
2637
|
}
|
2260
2638
|
|
2261
|
-
|
2262
2639
|
} } // namespace assembler::arm
|
2263
2640
|
|
2264
|
-
#endif //
|
2641
|
+
#endif // __arm__
|