therubyracer 0.4.9-x86-linux
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/.gitignore +11 -0
- data/.gitmodules +3 -0
- data/Doxyfile +1514 -0
- data/History.txt +43 -0
- data/README.rdoc +157 -0
- data/Rakefile +51 -0
- data/docs/data_conversion.txt +18 -0
- data/ext/v8/callbacks.cpp +160 -0
- data/ext/v8/callbacks.h +14 -0
- data/ext/v8/convert_ruby.cpp +8 -0
- data/ext/v8/convert_ruby.h +99 -0
- data/ext/v8/convert_string.cpp +10 -0
- data/ext/v8/convert_string.h +73 -0
- data/ext/v8/convert_v8.cpp +9 -0
- data/ext/v8/convert_v8.h +121 -0
- data/ext/v8/converters.cpp +83 -0
- data/ext/v8/converters.h +23 -0
- data/ext/v8/extconf.rb +36 -0
- data/ext/v8/upstream/2.0.6/.gitignore +26 -0
- data/ext/v8/upstream/2.0.6/AUTHORS +23 -0
- data/ext/v8/upstream/2.0.6/ChangeLog +1479 -0
- data/ext/v8/upstream/2.0.6/LICENSE +55 -0
- data/ext/v8/upstream/2.0.6/SConstruct +1028 -0
- data/ext/v8/upstream/2.0.6/include/v8-debug.h +275 -0
- data/ext/v8/upstream/2.0.6/include/v8.h +3236 -0
- data/ext/v8/upstream/2.0.6/src/SConscript +283 -0
- data/ext/v8/upstream/2.0.6/src/accessors.cc +695 -0
- data/ext/v8/upstream/2.0.6/src/accessors.h +114 -0
- data/ext/v8/upstream/2.0.6/src/allocation.cc +198 -0
- data/ext/v8/upstream/2.0.6/src/allocation.h +169 -0
- data/ext/v8/upstream/2.0.6/src/api.cc +3831 -0
- data/ext/v8/upstream/2.0.6/src/api.h +479 -0
- data/ext/v8/upstream/2.0.6/src/apinatives.js +110 -0
- data/ext/v8/upstream/2.0.6/src/apiutils.h +69 -0
- data/ext/v8/upstream/2.0.6/src/arguments.h +97 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +277 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +1821 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +1027 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +267 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +1821 -0
- data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +1027 -0
- data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +1271 -0
- data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +74 -0
- data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +6682 -0
- data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +535 -0
- data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +112 -0
- data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +347 -0
- data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +132 -0
- data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +213 -0
- data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +1166 -0
- data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +1698 -0
- data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +123 -0
- data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +162 -0
- data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +849 -0
- data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +238 -0
- data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +1259 -0
- data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +423 -0
- data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +1266 -0
- data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +282 -0
- data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +103 -0
- data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +59 -0
- data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +43 -0
- data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +2264 -0
- data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +306 -0
- data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +1516 -0
- data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +412 -0
- data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +532 -0
- data/ext/v8/upstream/2.0.6/src/array.js +1154 -0
- data/ext/v8/upstream/2.0.6/src/assembler.cc +772 -0
- data/ext/v8/upstream/2.0.6/src/assembler.h +525 -0
- data/ext/v8/upstream/2.0.6/src/ast.cc +512 -0
- data/ext/v8/upstream/2.0.6/src/ast.h +1820 -0
- data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +1680 -0
- data/ext/v8/upstream/2.0.6/src/bootstrapper.h +103 -0
- data/ext/v8/upstream/2.0.6/src/builtins.cc +851 -0
- data/ext/v8/upstream/2.0.6/src/builtins.h +245 -0
- data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +104 -0
- data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +86 -0
- data/ext/v8/upstream/2.0.6/src/char-predicates.h +65 -0
- data/ext/v8/upstream/2.0.6/src/checks.cc +100 -0
- data/ext/v8/upstream/2.0.6/src/checks.h +284 -0
- data/ext/v8/upstream/2.0.6/src/code-stubs.cc +164 -0
- data/ext/v8/upstream/2.0.6/src/code-stubs.h +164 -0
- data/ext/v8/upstream/2.0.6/src/code.h +68 -0
- data/ext/v8/upstream/2.0.6/src/codegen-inl.h +88 -0
- data/ext/v8/upstream/2.0.6/src/codegen.cc +504 -0
- data/ext/v8/upstream/2.0.6/src/codegen.h +522 -0
- data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +490 -0
- data/ext/v8/upstream/2.0.6/src/compilation-cache.h +98 -0
- data/ext/v8/upstream/2.0.6/src/compiler.cc +1132 -0
- data/ext/v8/upstream/2.0.6/src/compiler.h +107 -0
- data/ext/v8/upstream/2.0.6/src/contexts.cc +256 -0
- data/ext/v8/upstream/2.0.6/src/contexts.h +345 -0
- data/ext/v8/upstream/2.0.6/src/conversions-inl.h +95 -0
- data/ext/v8/upstream/2.0.6/src/conversions.cc +709 -0
- data/ext/v8/upstream/2.0.6/src/conversions.h +118 -0
- data/ext/v8/upstream/2.0.6/src/counters.cc +78 -0
- data/ext/v8/upstream/2.0.6/src/counters.h +239 -0
- data/ext/v8/upstream/2.0.6/src/cpu.h +65 -0
- data/ext/v8/upstream/2.0.6/src/d8-debug.cc +345 -0
- data/ext/v8/upstream/2.0.6/src/d8-debug.h +155 -0
- data/ext/v8/upstream/2.0.6/src/d8-posix.cc +675 -0
- data/ext/v8/upstream/2.0.6/src/d8-readline.cc +128 -0
- data/ext/v8/upstream/2.0.6/src/d8-windows.cc +42 -0
- data/ext/v8/upstream/2.0.6/src/d8.cc +776 -0
- data/ext/v8/upstream/2.0.6/src/d8.h +225 -0
- data/ext/v8/upstream/2.0.6/src/d8.js +1625 -0
- data/ext/v8/upstream/2.0.6/src/date-delay.js +1138 -0
- data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +114 -0
- data/ext/v8/upstream/2.0.6/src/dateparser.cc +186 -0
- data/ext/v8/upstream/2.0.6/src/dateparser.h +240 -0
- data/ext/v8/upstream/2.0.6/src/debug-agent.cc +425 -0
- data/ext/v8/upstream/2.0.6/src/debug-agent.h +129 -0
- data/ext/v8/upstream/2.0.6/src/debug-delay.js +2073 -0
- data/ext/v8/upstream/2.0.6/src/debug.cc +2751 -0
- data/ext/v8/upstream/2.0.6/src/debug.h +866 -0
- data/ext/v8/upstream/2.0.6/src/disasm.h +77 -0
- data/ext/v8/upstream/2.0.6/src/disassembler.cc +318 -0
- data/ext/v8/upstream/2.0.6/src/disassembler.h +56 -0
- data/ext/v8/upstream/2.0.6/src/dtoa-config.c +91 -0
- data/ext/v8/upstream/2.0.6/src/execution.cc +701 -0
- data/ext/v8/upstream/2.0.6/src/execution.h +312 -0
- data/ext/v8/upstream/2.0.6/src/factory.cc +957 -0
- data/ext/v8/upstream/2.0.6/src/factory.h +393 -0
- data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +725 -0
- data/ext/v8/upstream/2.0.6/src/fast-codegen.h +371 -0
- data/ext/v8/upstream/2.0.6/src/flag-definitions.h +426 -0
- data/ext/v8/upstream/2.0.6/src/flags.cc +555 -0
- data/ext/v8/upstream/2.0.6/src/flags.h +81 -0
- data/ext/v8/upstream/2.0.6/src/frame-element.cc +45 -0
- data/ext/v8/upstream/2.0.6/src/frame-element.h +235 -0
- data/ext/v8/upstream/2.0.6/src/frames-inl.h +215 -0
- data/ext/v8/upstream/2.0.6/src/frames.cc +749 -0
- data/ext/v8/upstream/2.0.6/src/frames.h +659 -0
- data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +76 -0
- data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +135 -0
- data/ext/v8/upstream/2.0.6/src/global-handles.cc +516 -0
- data/ext/v8/upstream/2.0.6/src/global-handles.h +180 -0
- data/ext/v8/upstream/2.0.6/src/globals.h +608 -0
- data/ext/v8/upstream/2.0.6/src/handles-inl.h +76 -0
- data/ext/v8/upstream/2.0.6/src/handles.cc +811 -0
- data/ext/v8/upstream/2.0.6/src/handles.h +367 -0
- data/ext/v8/upstream/2.0.6/src/hashmap.cc +226 -0
- data/ext/v8/upstream/2.0.6/src/hashmap.h +120 -0
- data/ext/v8/upstream/2.0.6/src/heap-inl.h +407 -0
- data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +695 -0
- data/ext/v8/upstream/2.0.6/src/heap-profiler.h +277 -0
- data/ext/v8/upstream/2.0.6/src/heap.cc +4204 -0
- data/ext/v8/upstream/2.0.6/src/heap.h +1704 -0
- data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +325 -0
- data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +2375 -0
- data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +914 -0
- data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +1222 -0
- data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +46 -0
- data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +9770 -0
- data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +834 -0
- data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +79 -0
- data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +208 -0
- data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +1357 -0
- data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +1813 -0
- data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +111 -0
- data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +135 -0
- data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +1490 -0
- data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +432 -0
- data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +1517 -0
- data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +528 -0
- data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +1219 -0
- data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +230 -0
- data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +82 -0
- data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +99 -0
- data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +43 -0
- data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +30 -0
- data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +62 -0
- data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +1961 -0
- data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +1105 -0
- data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +580 -0
- data/ext/v8/upstream/2.0.6/src/ic-inl.h +93 -0
- data/ext/v8/upstream/2.0.6/src/ic.cc +1426 -0
- data/ext/v8/upstream/2.0.6/src/ic.h +443 -0
- data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +646 -0
- data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +48 -0
- data/ext/v8/upstream/2.0.6/src/json-delay.js +254 -0
- data/ext/v8/upstream/2.0.6/src/jsregexp.cc +5234 -0
- data/ext/v8/upstream/2.0.6/src/jsregexp.h +1439 -0
- data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +49 -0
- data/ext/v8/upstream/2.0.6/src/jump-target.cc +383 -0
- data/ext/v8/upstream/2.0.6/src/jump-target.h +280 -0
- data/ext/v8/upstream/2.0.6/src/list-inl.h +166 -0
- data/ext/v8/upstream/2.0.6/src/list.h +158 -0
- data/ext/v8/upstream/2.0.6/src/log-inl.h +126 -0
- data/ext/v8/upstream/2.0.6/src/log-utils.cc +503 -0
- data/ext/v8/upstream/2.0.6/src/log-utils.h +292 -0
- data/ext/v8/upstream/2.0.6/src/log.cc +1457 -0
- data/ext/v8/upstream/2.0.6/src/log.h +371 -0
- data/ext/v8/upstream/2.0.6/src/macro-assembler.h +93 -0
- data/ext/v8/upstream/2.0.6/src/macros.py +137 -0
- data/ext/v8/upstream/2.0.6/src/mark-compact.cc +2007 -0
- data/ext/v8/upstream/2.0.6/src/mark-compact.h +442 -0
- data/ext/v8/upstream/2.0.6/src/math.js +263 -0
- data/ext/v8/upstream/2.0.6/src/memory.h +74 -0
- data/ext/v8/upstream/2.0.6/src/messages.cc +177 -0
- data/ext/v8/upstream/2.0.6/src/messages.h +112 -0
- data/ext/v8/upstream/2.0.6/src/messages.js +937 -0
- data/ext/v8/upstream/2.0.6/src/mirror-delay.js +2332 -0
- data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +169 -0
- data/ext/v8/upstream/2.0.6/src/natives.h +63 -0
- data/ext/v8/upstream/2.0.6/src/objects-debug.cc +1317 -0
- data/ext/v8/upstream/2.0.6/src/objects-inl.h +3044 -0
- data/ext/v8/upstream/2.0.6/src/objects.cc +8306 -0
- data/ext/v8/upstream/2.0.6/src/objects.h +4960 -0
- data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +116 -0
- data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +69 -0
- data/ext/v8/upstream/2.0.6/src/parser.cc +4810 -0
- data/ext/v8/upstream/2.0.6/src/parser.h +195 -0
- data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +645 -0
- data/ext/v8/upstream/2.0.6/src/platform-linux.cc +808 -0
- data/ext/v8/upstream/2.0.6/src/platform-macos.cc +643 -0
- data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +454 -0
- data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +597 -0
- data/ext/v8/upstream/2.0.6/src/platform-posix.cc +380 -0
- data/ext/v8/upstream/2.0.6/src/platform-win32.cc +1908 -0
- data/ext/v8/upstream/2.0.6/src/platform.h +556 -0
- data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +1511 -0
- data/ext/v8/upstream/2.0.6/src/prettyprinter.h +219 -0
- data/ext/v8/upstream/2.0.6/src/property.cc +96 -0
- data/ext/v8/upstream/2.0.6/src/property.h +327 -0
- data/ext/v8/upstream/2.0.6/src/regexp-delay.js +406 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +78 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +464 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +141 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +356 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +103 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +240 -0
- data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +220 -0
- data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +103 -0
- data/ext/v8/upstream/2.0.6/src/regexp-stack.h +123 -0
- data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +74 -0
- data/ext/v8/upstream/2.0.6/src/register-allocator.cc +100 -0
- data/ext/v8/upstream/2.0.6/src/register-allocator.h +295 -0
- data/ext/v8/upstream/2.0.6/src/rewriter.cc +855 -0
- data/ext/v8/upstream/2.0.6/src/rewriter.h +54 -0
- data/ext/v8/upstream/2.0.6/src/runtime.cc +8163 -0
- data/ext/v8/upstream/2.0.6/src/runtime.h +432 -0
- data/ext/v8/upstream/2.0.6/src/runtime.js +626 -0
- data/ext/v8/upstream/2.0.6/src/scanner.cc +1098 -0
- data/ext/v8/upstream/2.0.6/src/scanner.h +425 -0
- data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +649 -0
- data/ext/v8/upstream/2.0.6/src/scopeinfo.h +236 -0
- data/ext/v8/upstream/2.0.6/src/scopes.cc +963 -0
- data/ext/v8/upstream/2.0.6/src/scopes.h +401 -0
- data/ext/v8/upstream/2.0.6/src/serialize.cc +1260 -0
- data/ext/v8/upstream/2.0.6/src/serialize.h +404 -0
- data/ext/v8/upstream/2.0.6/src/shell.h +55 -0
- data/ext/v8/upstream/2.0.6/src/simulator.h +41 -0
- data/ext/v8/upstream/2.0.6/src/smart-pointer.h +109 -0
- data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +97 -0
- data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +40 -0
- data/ext/v8/upstream/2.0.6/src/snapshot.h +59 -0
- data/ext/v8/upstream/2.0.6/src/spaces-inl.h +372 -0
- data/ext/v8/upstream/2.0.6/src/spaces.cc +2864 -0
- data/ext/v8/upstream/2.0.6/src/spaces.h +2072 -0
- data/ext/v8/upstream/2.0.6/src/string-stream.cc +584 -0
- data/ext/v8/upstream/2.0.6/src/string-stream.h +189 -0
- data/ext/v8/upstream/2.0.6/src/string.js +901 -0
- data/ext/v8/upstream/2.0.6/src/stub-cache.cc +1108 -0
- data/ext/v8/upstream/2.0.6/src/stub-cache.h +578 -0
- data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +15 -0
- data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +3330 -0
- data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +3925 -0
- data/ext/v8/upstream/2.0.6/src/token.cc +56 -0
- data/ext/v8/upstream/2.0.6/src/token.h +270 -0
- data/ext/v8/upstream/2.0.6/src/top.cc +991 -0
- data/ext/v8/upstream/2.0.6/src/top.h +459 -0
- data/ext/v8/upstream/2.0.6/src/unicode-inl.h +238 -0
- data/ext/v8/upstream/2.0.6/src/unicode.cc +749 -0
- data/ext/v8/upstream/2.0.6/src/unicode.h +279 -0
- data/ext/v8/upstream/2.0.6/src/uri.js +415 -0
- data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +426 -0
- data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +40 -0
- data/ext/v8/upstream/2.0.6/src/utils.cc +322 -0
- data/ext/v8/upstream/2.0.6/src/utils.h +592 -0
- data/ext/v8/upstream/2.0.6/src/v8-counters.cc +55 -0
- data/ext/v8/upstream/2.0.6/src/v8-counters.h +198 -0
- data/ext/v8/upstream/2.0.6/src/v8.cc +193 -0
- data/ext/v8/upstream/2.0.6/src/v8.h +119 -0
- data/ext/v8/upstream/2.0.6/src/v8natives.js +846 -0
- data/ext/v8/upstream/2.0.6/src/v8threads.cc +450 -0
- data/ext/v8/upstream/2.0.6/src/v8threads.h +144 -0
- data/ext/v8/upstream/2.0.6/src/variables.cc +163 -0
- data/ext/v8/upstream/2.0.6/src/variables.h +235 -0
- data/ext/v8/upstream/2.0.6/src/version.cc +88 -0
- data/ext/v8/upstream/2.0.6/src/version.h +64 -0
- data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +381 -0
- data/ext/v8/upstream/2.0.6/src/virtual-frame.h +44 -0
- data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +352 -0
- data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +2539 -0
- data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +1399 -0
- data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +1255 -0
- data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +46 -0
- data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +8223 -0
- data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +785 -0
- data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +79 -0
- data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +202 -0
- data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +1596 -0
- data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +1820 -0
- data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +109 -0
- data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +121 -0
- data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +1392 -0
- data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +432 -0
- data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +2409 -0
- data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +765 -0
- data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +1337 -0
- data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +295 -0
- data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +86 -0
- data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +84 -0
- data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +43 -0
- data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +27 -0
- data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +63 -0
- data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +1884 -0
- data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +1089 -0
- data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +560 -0
- data/ext/v8/upstream/2.0.6/src/zone-inl.h +297 -0
- data/ext/v8/upstream/2.0.6/src/zone.cc +193 -0
- data/ext/v8/upstream/2.0.6/src/zone.h +305 -0
- data/ext/v8/upstream/2.0.6/tools/codemap.js +258 -0
- data/ext/v8/upstream/2.0.6/tools/consarray.js +93 -0
- data/ext/v8/upstream/2.0.6/tools/csvparser.js +98 -0
- data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +620 -0
- data/ext/v8/upstream/2.0.6/tools/js2c.py +376 -0
- data/ext/v8/upstream/2.0.6/tools/jsmin.py +280 -0
- data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +24 -0
- data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +78 -0
- data/ext/v8/upstream/2.0.6/tools/logreader.js +320 -0
- data/ext/v8/upstream/2.0.6/tools/mac-nm +18 -0
- data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +6 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/common +19 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/dump +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/report +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/reset +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/run +14 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +7 -0
- data/ext/v8/upstream/2.0.6/tools/oprofile/start +7 -0
- data/ext/v8/upstream/2.0.6/tools/presubmit.py +299 -0
- data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +120 -0
- data/ext/v8/upstream/2.0.6/tools/profile.js +621 -0
- data/ext/v8/upstream/2.0.6/tools/profile_view.js +224 -0
- data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +77 -0
- data/ext/v8/upstream/2.0.6/tools/splaytree.js +322 -0
- data/ext/v8/upstream/2.0.6/tools/splaytree.py +226 -0
- data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +456 -0
- data/ext/v8/upstream/2.0.6/tools/test.py +1370 -0
- data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +53 -0
- data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +731 -0
- data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +535 -0
- data/ext/v8/upstream/2.0.6/tools/utils.py +82 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +71 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +14 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +35 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +199 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +199 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +201 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +6 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +17 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +13 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +6 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +24 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +101 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +223 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +74 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +223 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +971 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +983 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +959 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +255 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +243 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +151 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +153 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +142 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +101 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +223 -0
- data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +13 -0
- data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +5 -0
- data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +137 -0
- data/ext/v8/upstream/Makefile +31 -0
- data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
- data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
- data/ext/v8/upstream/scons/LICENSE.txt +20 -0
- data/ext/v8/upstream/scons/MANIFEST +202 -0
- data/ext/v8/upstream/scons/PKG-INFO +13 -0
- data/ext/v8/upstream/scons/README.txt +273 -0
- data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
- data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
- data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
- data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
- data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
- data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
- data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
- data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
- data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
- data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
- data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
- data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
- data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
- data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
- data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
- data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
- data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
- data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
- data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
- data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
- data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
- data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
- data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
- data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
- data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
- data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
- data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
- data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
- data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
- data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
- data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
- data/ext/v8/upstream/scons/scons-time.1 +1017 -0
- data/ext/v8/upstream/scons/scons.1 +15179 -0
- data/ext/v8/upstream/scons/sconsign.1 +208 -0
- data/ext/v8/upstream/scons/script/scons +184 -0
- data/ext/v8/upstream/scons/script/scons-time +1529 -0
- data/ext/v8/upstream/scons/script/scons.bat +31 -0
- data/ext/v8/upstream/scons/script/sconsign +508 -0
- data/ext/v8/upstream/scons/setup.cfg +6 -0
- data/ext/v8/upstream/scons/setup.py +427 -0
- data/ext/v8/v8.cpp +89 -0
- data/ext/v8/v8_cxt.cpp +92 -0
- data/ext/v8/v8_cxt.h +20 -0
- data/ext/v8/v8_func.cpp +10 -0
- data/ext/v8/v8_func.h +11 -0
- data/ext/v8/v8_msg.cpp +54 -0
- data/ext/v8/v8_msg.h +18 -0
- data/ext/v8/v8_obj.cpp +52 -0
- data/ext/v8/v8_obj.h +13 -0
- data/ext/v8/v8_ref.cpp +26 -0
- data/ext/v8/v8_ref.h +31 -0
- data/ext/v8/v8_script.cpp +20 -0
- data/ext/v8/v8_script.h +8 -0
- data/ext/v8/v8_standalone.cpp +69 -0
- data/ext/v8/v8_standalone.h +31 -0
- data/ext/v8/v8_str.cpp +17 -0
- data/ext/v8/v8_str.h +9 -0
- data/ext/v8/v8_template.cpp +53 -0
- data/ext/v8/v8_template.h +13 -0
- data/lib/v8.rb +10 -0
- data/lib/v8/context.rb +101 -0
- data/lib/v8/object.rb +38 -0
- data/lib/v8/to.rb +33 -0
- data/lib/v8/v8.so +0 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/ext/cxt_spec.rb +25 -0
- data/spec/ext/obj_spec.rb +13 -0
- data/spec/redjs/jsapi_spec.rb +405 -0
- data/spec/redjs/tap.rb +8 -0
- data/spec/redjs_helper.rb +3 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/v8/to_spec.rb +15 -0
- data/tasks/rspec.rake +21 -0
- data/therubyracer.gemspec +680 -0
- metadata +697 -0
@@ -0,0 +1,1027 @@
|
|
1
|
+
// Copyright (c) 1994-2006 Sun Microsystems Inc.
|
2
|
+
// All Rights Reserved.
|
3
|
+
//
|
4
|
+
// Redistribution and use in source and binary forms, with or without
|
5
|
+
// modification, are permitted provided that the following conditions
|
6
|
+
// are met:
|
7
|
+
//
|
8
|
+
// - Redistributions of source code must retain the above copyright notice,
|
9
|
+
// this list of conditions and the following disclaimer.
|
10
|
+
//
|
11
|
+
// - Redistribution in binary form must reproduce the above copyright
|
12
|
+
// notice, this list of conditions and the following disclaimer in the
|
13
|
+
// documentation and/or other materials provided with the
|
14
|
+
// distribution.
|
15
|
+
//
|
16
|
+
// - Neither the name of Sun Microsystems or the names of contributors may
|
17
|
+
// be used to endorse or promote products derived from this software without
|
18
|
+
// specific prior written permission.
|
19
|
+
//
|
20
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
23
|
+
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
24
|
+
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
25
|
+
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
26
|
+
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
27
|
+
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
28
|
+
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
29
|
+
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
30
|
+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
31
|
+
// OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
|
33
|
+
// The original source code covered by the above license above has been modified
|
34
|
+
// significantly by Google Inc.
|
35
|
+
// Copyright 2006-2008 the V8 project authors. All rights reserved.
|
36
|
+
|
37
|
+
// A light-weight ARM Assembler
|
38
|
+
// Generates user mode instructions for the ARM architecture up to version 5
|
39
|
+
|
40
|
+
#ifndef V8_ARM_ASSEMBLER_ARM_H_
|
41
|
+
#define V8_ARM_ASSEMBLER_ARM_H_
|
42
|
+
#include <stdio.h>
|
43
|
+
#include "assembler.h"
|
44
|
+
#include "serialize.h"
|
45
|
+
|
46
|
+
namespace v8 {
|
47
|
+
namespace internal {
|
48
|
+
|
49
|
+
// CPU Registers.
|
50
|
+
//
|
51
|
+
// 1) We would prefer to use an enum, but enum values are assignment-
|
52
|
+
// compatible with int, which has caused code-generation bugs.
|
53
|
+
//
|
54
|
+
// 2) We would prefer to use a class instead of a struct but we don't like
|
55
|
+
// the register initialization to depend on the particular initialization
|
56
|
+
// order (which appears to be different on OS X, Linux, and Windows for the
|
57
|
+
// installed versions of C++ we tried). Using a struct permits C-style
|
58
|
+
// "initialization". Also, the Register objects cannot be const as this
|
59
|
+
// forces initialization stubs in MSVC, making us dependent on initialization
|
60
|
+
// order.
|
61
|
+
//
|
62
|
+
// 3) By not using an enum, we are possibly preventing the compiler from
|
63
|
+
// doing certain constant folds, which may significantly reduce the
|
64
|
+
// code generated for some assembly instructions (because they boil down
|
65
|
+
// to a few constants). If this is a problem, we could change the code
|
66
|
+
// such that we use an enum in optimized mode, and the struct in debug
|
67
|
+
// mode. This way we get the compile-time error checking in debug mode
|
68
|
+
// and best performance in optimized code.
|
69
|
+
//
|
70
|
+
// Core register
|
71
|
+
struct Register {
|
72
|
+
bool is_valid() const { return 0 <= code_ && code_ < 16; }
|
73
|
+
bool is(Register reg) const { return code_ == reg.code_; }
|
74
|
+
int code() const {
|
75
|
+
ASSERT(is_valid());
|
76
|
+
return code_;
|
77
|
+
}
|
78
|
+
int bit() const {
|
79
|
+
ASSERT(is_valid());
|
80
|
+
return 1 << code_;
|
81
|
+
}
|
82
|
+
|
83
|
+
// (unfortunately we can't make this private in a struct)
|
84
|
+
int code_;
|
85
|
+
};
|
86
|
+
|
87
|
+
|
88
|
+
extern Register no_reg;
|
89
|
+
extern Register r0;
|
90
|
+
extern Register r1;
|
91
|
+
extern Register r2;
|
92
|
+
extern Register r3;
|
93
|
+
extern Register r4;
|
94
|
+
extern Register r5;
|
95
|
+
extern Register r6;
|
96
|
+
extern Register r7;
|
97
|
+
extern Register r8;
|
98
|
+
extern Register r9;
|
99
|
+
extern Register r10;
|
100
|
+
extern Register fp;
|
101
|
+
extern Register ip;
|
102
|
+
extern Register sp;
|
103
|
+
extern Register lr;
|
104
|
+
extern Register pc;
|
105
|
+
|
106
|
+
|
107
|
+
// Single word VFP register.
|
108
|
+
struct SwVfpRegister {
|
109
|
+
bool is_valid() const { return 0 <= code_ && code_ < 32; }
|
110
|
+
bool is(SwVfpRegister reg) const { return code_ == reg.code_; }
|
111
|
+
int code() const {
|
112
|
+
ASSERT(is_valid());
|
113
|
+
return code_;
|
114
|
+
}
|
115
|
+
int bit() const {
|
116
|
+
ASSERT(is_valid());
|
117
|
+
return 1 << code_;
|
118
|
+
}
|
119
|
+
|
120
|
+
int code_;
|
121
|
+
};
|
122
|
+
|
123
|
+
|
124
|
+
// Double word VFP register.
|
125
|
+
struct DwVfpRegister {
|
126
|
+
// Supporting d0 to d15, can be later extended to d31.
|
127
|
+
bool is_valid() const { return 0 <= code_ && code_ < 16; }
|
128
|
+
bool is(DwVfpRegister reg) const { return code_ == reg.code_; }
|
129
|
+
int code() const {
|
130
|
+
ASSERT(is_valid());
|
131
|
+
return code_;
|
132
|
+
}
|
133
|
+
int bit() const {
|
134
|
+
ASSERT(is_valid());
|
135
|
+
return 1 << code_;
|
136
|
+
}
|
137
|
+
|
138
|
+
int code_;
|
139
|
+
};
|
140
|
+
|
141
|
+
|
142
|
+
// Support for VFP registers s0 to s31 (d0 to d15).
|
143
|
+
// Note that "s(N):s(N+1)" is the same as "d(N/2)".
|
144
|
+
extern SwVfpRegister s0;
|
145
|
+
extern SwVfpRegister s1;
|
146
|
+
extern SwVfpRegister s2;
|
147
|
+
extern SwVfpRegister s3;
|
148
|
+
extern SwVfpRegister s4;
|
149
|
+
extern SwVfpRegister s5;
|
150
|
+
extern SwVfpRegister s6;
|
151
|
+
extern SwVfpRegister s7;
|
152
|
+
extern SwVfpRegister s8;
|
153
|
+
extern SwVfpRegister s9;
|
154
|
+
extern SwVfpRegister s10;
|
155
|
+
extern SwVfpRegister s11;
|
156
|
+
extern SwVfpRegister s12;
|
157
|
+
extern SwVfpRegister s13;
|
158
|
+
extern SwVfpRegister s14;
|
159
|
+
extern SwVfpRegister s15;
|
160
|
+
extern SwVfpRegister s16;
|
161
|
+
extern SwVfpRegister s17;
|
162
|
+
extern SwVfpRegister s18;
|
163
|
+
extern SwVfpRegister s19;
|
164
|
+
extern SwVfpRegister s20;
|
165
|
+
extern SwVfpRegister s21;
|
166
|
+
extern SwVfpRegister s22;
|
167
|
+
extern SwVfpRegister s23;
|
168
|
+
extern SwVfpRegister s24;
|
169
|
+
extern SwVfpRegister s25;
|
170
|
+
extern SwVfpRegister s26;
|
171
|
+
extern SwVfpRegister s27;
|
172
|
+
extern SwVfpRegister s28;
|
173
|
+
extern SwVfpRegister s29;
|
174
|
+
extern SwVfpRegister s30;
|
175
|
+
extern SwVfpRegister s31;
|
176
|
+
|
177
|
+
extern DwVfpRegister d0;
|
178
|
+
extern DwVfpRegister d1;
|
179
|
+
extern DwVfpRegister d2;
|
180
|
+
extern DwVfpRegister d3;
|
181
|
+
extern DwVfpRegister d4;
|
182
|
+
extern DwVfpRegister d5;
|
183
|
+
extern DwVfpRegister d6;
|
184
|
+
extern DwVfpRegister d7;
|
185
|
+
extern DwVfpRegister d8;
|
186
|
+
extern DwVfpRegister d9;
|
187
|
+
extern DwVfpRegister d10;
|
188
|
+
extern DwVfpRegister d11;
|
189
|
+
extern DwVfpRegister d12;
|
190
|
+
extern DwVfpRegister d13;
|
191
|
+
extern DwVfpRegister d14;
|
192
|
+
extern DwVfpRegister d15;
|
193
|
+
|
194
|
+
|
195
|
+
// Coprocessor register
|
196
|
+
struct CRegister {
|
197
|
+
bool is_valid() const { return 0 <= code_ && code_ < 16; }
|
198
|
+
bool is(CRegister creg) const { return code_ == creg.code_; }
|
199
|
+
int code() const {
|
200
|
+
ASSERT(is_valid());
|
201
|
+
return code_;
|
202
|
+
}
|
203
|
+
int bit() const {
|
204
|
+
ASSERT(is_valid());
|
205
|
+
return 1 << code_;
|
206
|
+
}
|
207
|
+
|
208
|
+
// (unfortunately we can't make this private in a struct)
|
209
|
+
int code_;
|
210
|
+
};
|
211
|
+
|
212
|
+
|
213
|
+
extern CRegister no_creg;
|
214
|
+
extern CRegister cr0;
|
215
|
+
extern CRegister cr1;
|
216
|
+
extern CRegister cr2;
|
217
|
+
extern CRegister cr3;
|
218
|
+
extern CRegister cr4;
|
219
|
+
extern CRegister cr5;
|
220
|
+
extern CRegister cr6;
|
221
|
+
extern CRegister cr7;
|
222
|
+
extern CRegister cr8;
|
223
|
+
extern CRegister cr9;
|
224
|
+
extern CRegister cr10;
|
225
|
+
extern CRegister cr11;
|
226
|
+
extern CRegister cr12;
|
227
|
+
extern CRegister cr13;
|
228
|
+
extern CRegister cr14;
|
229
|
+
extern CRegister cr15;
|
230
|
+
|
231
|
+
|
232
|
+
// Coprocessor number
|
233
|
+
enum Coprocessor {
|
234
|
+
p0 = 0,
|
235
|
+
p1 = 1,
|
236
|
+
p2 = 2,
|
237
|
+
p3 = 3,
|
238
|
+
p4 = 4,
|
239
|
+
p5 = 5,
|
240
|
+
p6 = 6,
|
241
|
+
p7 = 7,
|
242
|
+
p8 = 8,
|
243
|
+
p9 = 9,
|
244
|
+
p10 = 10,
|
245
|
+
p11 = 11,
|
246
|
+
p12 = 12,
|
247
|
+
p13 = 13,
|
248
|
+
p14 = 14,
|
249
|
+
p15 = 15
|
250
|
+
};
|
251
|
+
|
252
|
+
|
253
|
+
// Condition field in instructions
|
254
|
+
enum Condition {
|
255
|
+
eq = 0 << 28, // Z set equal.
|
256
|
+
ne = 1 << 28, // Z clear not equal.
|
257
|
+
nz = 1 << 28, // Z clear not zero.
|
258
|
+
cs = 2 << 28, // C set carry set.
|
259
|
+
hs = 2 << 28, // C set unsigned higher or same.
|
260
|
+
cc = 3 << 28, // C clear carry clear.
|
261
|
+
lo = 3 << 28, // C clear unsigned lower.
|
262
|
+
mi = 4 << 28, // N set negative.
|
263
|
+
pl = 5 << 28, // N clear positive or zero.
|
264
|
+
vs = 6 << 28, // V set overflow.
|
265
|
+
vc = 7 << 28, // V clear no overflow.
|
266
|
+
hi = 8 << 28, // C set, Z clear unsigned higher.
|
267
|
+
ls = 9 << 28, // C clear or Z set unsigned lower or same.
|
268
|
+
ge = 10 << 28, // N == V greater or equal.
|
269
|
+
lt = 11 << 28, // N != V less than.
|
270
|
+
gt = 12 << 28, // Z clear, N == V greater than.
|
271
|
+
le = 13 << 28, // Z set or N != V less then or equal
|
272
|
+
al = 14 << 28 // always.
|
273
|
+
};
|
274
|
+
|
275
|
+
|
276
|
+
// Returns the equivalent of !cc.
|
277
|
+
INLINE(Condition NegateCondition(Condition cc));
|
278
|
+
|
279
|
+
|
280
|
+
// Corresponds to transposing the operands of a comparison.
|
281
|
+
inline Condition ReverseCondition(Condition cc) {
|
282
|
+
switch (cc) {
|
283
|
+
case lo:
|
284
|
+
return hi;
|
285
|
+
case hi:
|
286
|
+
return lo;
|
287
|
+
case hs:
|
288
|
+
return ls;
|
289
|
+
case ls:
|
290
|
+
return hs;
|
291
|
+
case lt:
|
292
|
+
return gt;
|
293
|
+
case gt:
|
294
|
+
return lt;
|
295
|
+
case ge:
|
296
|
+
return le;
|
297
|
+
case le:
|
298
|
+
return ge;
|
299
|
+
default:
|
300
|
+
return cc;
|
301
|
+
};
|
302
|
+
}
|
303
|
+
|
304
|
+
|
305
|
+
// Branch hints are not used on the ARM. They are defined so that they can
|
306
|
+
// appear in shared function signatures, but will be ignored in ARM
|
307
|
+
// implementations.
|
308
|
+
enum Hint { no_hint };
|
309
|
+
|
310
|
+
// Hints are not used on the arm. Negating is trivial.
|
311
|
+
inline Hint NegateHint(Hint ignored) { return no_hint; }
|
312
|
+
|
313
|
+
|
314
|
+
// -----------------------------------------------------------------------------
|
315
|
+
// Addressing modes and instruction variants
|
316
|
+
|
317
|
+
// Shifter operand shift operation
|
318
|
+
enum ShiftOp {
|
319
|
+
LSL = 0 << 5,
|
320
|
+
LSR = 1 << 5,
|
321
|
+
ASR = 2 << 5,
|
322
|
+
ROR = 3 << 5,
|
323
|
+
RRX = -1
|
324
|
+
};
|
325
|
+
|
326
|
+
|
327
|
+
// Condition code updating mode
|
328
|
+
enum SBit {
|
329
|
+
SetCC = 1 << 20, // set condition code
|
330
|
+
LeaveCC = 0 << 20 // leave condition code unchanged
|
331
|
+
};
|
332
|
+
|
333
|
+
|
334
|
+
// Status register selection
|
335
|
+
enum SRegister {
|
336
|
+
CPSR = 0 << 22,
|
337
|
+
SPSR = 1 << 22
|
338
|
+
};
|
339
|
+
|
340
|
+
|
341
|
+
// Status register fields
|
342
|
+
enum SRegisterField {
|
343
|
+
CPSR_c = CPSR | 1 << 16,
|
344
|
+
CPSR_x = CPSR | 1 << 17,
|
345
|
+
CPSR_s = CPSR | 1 << 18,
|
346
|
+
CPSR_f = CPSR | 1 << 19,
|
347
|
+
SPSR_c = SPSR | 1 << 16,
|
348
|
+
SPSR_x = SPSR | 1 << 17,
|
349
|
+
SPSR_s = SPSR | 1 << 18,
|
350
|
+
SPSR_f = SPSR | 1 << 19
|
351
|
+
};
|
352
|
+
|
353
|
+
// Status register field mask (or'ed SRegisterField enum values)
|
354
|
+
typedef uint32_t SRegisterFieldMask;
|
355
|
+
|
356
|
+
|
357
|
+
// Memory operand addressing mode
|
358
|
+
enum AddrMode {
|
359
|
+
// bit encoding P U W
|
360
|
+
Offset = (8|4|0) << 21, // offset (without writeback to base)
|
361
|
+
PreIndex = (8|4|1) << 21, // pre-indexed addressing with writeback
|
362
|
+
PostIndex = (0|4|0) << 21, // post-indexed addressing with writeback
|
363
|
+
NegOffset = (8|0|0) << 21, // negative offset (without writeback to base)
|
364
|
+
NegPreIndex = (8|0|1) << 21, // negative pre-indexed with writeback
|
365
|
+
NegPostIndex = (0|0|0) << 21 // negative post-indexed with writeback
|
366
|
+
};
|
367
|
+
|
368
|
+
|
369
|
+
// Load/store multiple addressing mode
|
370
|
+
enum BlockAddrMode {
|
371
|
+
// bit encoding P U W
|
372
|
+
da = (0|0|0) << 21, // decrement after
|
373
|
+
ia = (0|4|0) << 21, // increment after
|
374
|
+
db = (8|0|0) << 21, // decrement before
|
375
|
+
ib = (8|4|0) << 21, // increment before
|
376
|
+
da_w = (0|0|1) << 21, // decrement after with writeback to base
|
377
|
+
ia_w = (0|4|1) << 21, // increment after with writeback to base
|
378
|
+
db_w = (8|0|1) << 21, // decrement before with writeback to base
|
379
|
+
ib_w = (8|4|1) << 21 // increment before with writeback to base
|
380
|
+
};
|
381
|
+
|
382
|
+
|
383
|
+
// Coprocessor load/store operand size
|
384
|
+
enum LFlag {
|
385
|
+
Long = 1 << 22, // long load/store coprocessor
|
386
|
+
Short = 0 << 22 // short load/store coprocessor
|
387
|
+
};
|
388
|
+
|
389
|
+
|
390
|
+
// -----------------------------------------------------------------------------
|
391
|
+
// Machine instruction Operands
|
392
|
+
|
393
|
+
// Class Operand represents a shifter operand in data processing instructions
|
394
|
+
class Operand BASE_EMBEDDED {
|
395
|
+
public:
|
396
|
+
// immediate
|
397
|
+
INLINE(explicit Operand(int32_t immediate,
|
398
|
+
RelocInfo::Mode rmode = RelocInfo::NONE));
|
399
|
+
INLINE(explicit Operand(const ExternalReference& f));
|
400
|
+
INLINE(explicit Operand(const char* s));
|
401
|
+
INLINE(explicit Operand(Object** opp));
|
402
|
+
INLINE(explicit Operand(Context** cpp));
|
403
|
+
explicit Operand(Handle<Object> handle);
|
404
|
+
INLINE(explicit Operand(Smi* value));
|
405
|
+
|
406
|
+
// rm
|
407
|
+
INLINE(explicit Operand(Register rm));
|
408
|
+
|
409
|
+
// rm <shift_op> shift_imm
|
410
|
+
explicit Operand(Register rm, ShiftOp shift_op, int shift_imm);
|
411
|
+
|
412
|
+
// rm <shift_op> rs
|
413
|
+
explicit Operand(Register rm, ShiftOp shift_op, Register rs);
|
414
|
+
|
415
|
+
// Return true if this is a register operand.
|
416
|
+
INLINE(bool is_reg() const);
|
417
|
+
|
418
|
+
Register rm() const { return rm_; }
|
419
|
+
|
420
|
+
private:
|
421
|
+
Register rm_;
|
422
|
+
Register rs_;
|
423
|
+
ShiftOp shift_op_;
|
424
|
+
int shift_imm_; // valid if rm_ != no_reg && rs_ == no_reg
|
425
|
+
int32_t imm32_; // valid if rm_ == no_reg
|
426
|
+
RelocInfo::Mode rmode_;
|
427
|
+
|
428
|
+
friend class Assembler;
|
429
|
+
};
|
430
|
+
|
431
|
+
|
432
|
+
// Class MemOperand represents a memory operand in load and store instructions
|
433
|
+
class MemOperand BASE_EMBEDDED {
|
434
|
+
public:
|
435
|
+
// [rn +/- offset] Offset/NegOffset
|
436
|
+
// [rn +/- offset]! PreIndex/NegPreIndex
|
437
|
+
// [rn], +/- offset PostIndex/NegPostIndex
|
438
|
+
// offset is any signed 32-bit value; offset is first loaded to register ip if
|
439
|
+
// it does not fit the addressing mode (12-bit unsigned and sign bit)
|
440
|
+
explicit MemOperand(Register rn, int32_t offset = 0, AddrMode am = Offset);
|
441
|
+
|
442
|
+
// [rn +/- rm] Offset/NegOffset
|
443
|
+
// [rn +/- rm]! PreIndex/NegPreIndex
|
444
|
+
// [rn], +/- rm PostIndex/NegPostIndex
|
445
|
+
explicit MemOperand(Register rn, Register rm, AddrMode am = Offset);
|
446
|
+
|
447
|
+
// [rn +/- rm <shift_op> shift_imm] Offset/NegOffset
|
448
|
+
// [rn +/- rm <shift_op> shift_imm]! PreIndex/NegPreIndex
|
449
|
+
// [rn], +/- rm <shift_op> shift_imm PostIndex/NegPostIndex
|
450
|
+
explicit MemOperand(Register rn, Register rm,
|
451
|
+
ShiftOp shift_op, int shift_imm, AddrMode am = Offset);
|
452
|
+
|
453
|
+
private:
|
454
|
+
Register rn_; // base
|
455
|
+
Register rm_; // register offset
|
456
|
+
int32_t offset_; // valid if rm_ == no_reg
|
457
|
+
ShiftOp shift_op_;
|
458
|
+
int shift_imm_; // valid if rm_ != no_reg && rs_ == no_reg
|
459
|
+
AddrMode am_; // bits P, U, and W
|
460
|
+
|
461
|
+
friend class Assembler;
|
462
|
+
};
|
463
|
+
|
464
|
+
// CpuFeatures keeps track of which features are supported by the target CPU.
|
465
|
+
// Supported features must be enabled by a Scope before use.
|
466
|
+
class CpuFeatures : public AllStatic {
|
467
|
+
public:
|
468
|
+
// Detect features of the target CPU. Set safe defaults if the serializer
|
469
|
+
// is enabled (snapshots must be portable).
|
470
|
+
static void Probe();
|
471
|
+
|
472
|
+
// Check whether a feature is supported by the target CPU.
|
473
|
+
static bool IsSupported(CpuFeature f) {
|
474
|
+
if (f == VFP3 && !FLAG_enable_vfp3) return false;
|
475
|
+
return (supported_ & (1u << f)) != 0;
|
476
|
+
}
|
477
|
+
|
478
|
+
// Check whether a feature is currently enabled.
|
479
|
+
static bool IsEnabled(CpuFeature f) {
|
480
|
+
return (enabled_ & (1u << f)) != 0;
|
481
|
+
}
|
482
|
+
|
483
|
+
// Enable a specified feature within a scope.
|
484
|
+
class Scope BASE_EMBEDDED {
|
485
|
+
#ifdef DEBUG
|
486
|
+
public:
|
487
|
+
explicit Scope(CpuFeature f) {
|
488
|
+
ASSERT(CpuFeatures::IsSupported(f));
|
489
|
+
ASSERT(!Serializer::enabled() ||
|
490
|
+
(found_by_runtime_probing_ & (1u << f)) == 0);
|
491
|
+
old_enabled_ = CpuFeatures::enabled_;
|
492
|
+
CpuFeatures::enabled_ |= 1u << f;
|
493
|
+
}
|
494
|
+
~Scope() { CpuFeatures::enabled_ = old_enabled_; }
|
495
|
+
private:
|
496
|
+
unsigned old_enabled_;
|
497
|
+
#else
|
498
|
+
public:
|
499
|
+
explicit Scope(CpuFeature f) {}
|
500
|
+
#endif
|
501
|
+
};
|
502
|
+
|
503
|
+
private:
|
504
|
+
static unsigned supported_;
|
505
|
+
static unsigned enabled_;
|
506
|
+
static unsigned found_by_runtime_probing_;
|
507
|
+
};
|
508
|
+
|
509
|
+
|
510
|
+
typedef int32_t Instr;
|
511
|
+
|
512
|
+
|
513
|
+
extern const Instr kMovLrPc;
|
514
|
+
extern const Instr kLdrPCPattern;
|
515
|
+
|
516
|
+
|
517
|
+
class Assembler : public Malloced {
|
518
|
+
public:
|
519
|
+
// Create an assembler. Instructions and relocation information are emitted
|
520
|
+
// into a buffer, with the instructions starting from the beginning and the
|
521
|
+
// relocation information starting from the end of the buffer. See CodeDesc
|
522
|
+
// for a detailed comment on the layout (globals.h).
|
523
|
+
//
|
524
|
+
// If the provided buffer is NULL, the assembler allocates and grows its own
|
525
|
+
// buffer, and buffer_size determines the initial buffer size. The buffer is
|
526
|
+
// owned by the assembler and deallocated upon destruction of the assembler.
|
527
|
+
//
|
528
|
+
// If the provided buffer is not NULL, the assembler uses the provided buffer
|
529
|
+
// for code generation and assumes its size to be buffer_size. If the buffer
|
530
|
+
// is too small, a fatal error occurs. No deallocation of the buffer is done
|
531
|
+
// upon destruction of the assembler.
|
532
|
+
Assembler(void* buffer, int buffer_size);
|
533
|
+
~Assembler();
|
534
|
+
|
535
|
+
// GetCode emits any pending (non-emitted) code and fills the descriptor
|
536
|
+
// desc. GetCode() is idempotent; it returns the same result if no other
|
537
|
+
// Assembler functions are invoked in between GetCode() calls.
|
538
|
+
void GetCode(CodeDesc* desc);
|
539
|
+
|
540
|
+
// Label operations & relative jumps (PPUM Appendix D)
|
541
|
+
//
|
542
|
+
// Takes a branch opcode (cc) and a label (L) and generates
|
543
|
+
// either a backward branch or a forward branch and links it
|
544
|
+
// to the label fixup chain. Usage:
|
545
|
+
//
|
546
|
+
// Label L; // unbound label
|
547
|
+
// j(cc, &L); // forward branch to unbound label
|
548
|
+
// bind(&L); // bind label to the current pc
|
549
|
+
// j(cc, &L); // backward branch to bound label
|
550
|
+
// bind(&L); // illegal: a label may be bound only once
|
551
|
+
//
|
552
|
+
// Note: The same Label can be used for forward and backward branches
|
553
|
+
// but it may be bound only once.
|
554
|
+
|
555
|
+
void bind(Label* L); // binds an unbound label L to the current code position
|
556
|
+
|
557
|
+
// Returns the branch offset to the given label from the current code position
|
558
|
+
// Links the label to the current position if it is still unbound
|
559
|
+
// Manages the jump elimination optimization if the second parameter is true.
|
560
|
+
int branch_offset(Label* L, bool jump_elimination_allowed);
|
561
|
+
|
562
|
+
// Puts a labels target address at the given position.
|
563
|
+
// The high 8 bits are set to zero.
|
564
|
+
void label_at_put(Label* L, int at_offset);
|
565
|
+
|
566
|
+
// Return the address in the constant pool of the code target address used by
|
567
|
+
// the branch/call instruction at pc.
|
568
|
+
INLINE(static Address target_address_address_at(Address pc));
|
569
|
+
|
570
|
+
// Read/Modify the code target address in the branch/call instruction at pc.
|
571
|
+
INLINE(static Address target_address_at(Address pc));
|
572
|
+
INLINE(static void set_target_address_at(Address pc, Address target));
|
573
|
+
|
574
|
+
// This sets the branch destination (which is in the constant pool on ARM).
|
575
|
+
// This is for calls and branches within generated code.
|
576
|
+
inline static void set_target_at(Address constant_pool_entry, Address target);
|
577
|
+
|
578
|
+
// This sets the branch destination (which is in the constant pool on ARM).
|
579
|
+
// This is for calls and branches to runtime code.
|
580
|
+
inline static void set_external_target_at(Address constant_pool_entry,
|
581
|
+
Address target) {
|
582
|
+
set_target_at(constant_pool_entry, target);
|
583
|
+
}
|
584
|
+
|
585
|
+
// Here we are patching the address in the constant pool, not the actual call
|
586
|
+
// instruction. The address in the constant pool is the same size as a
|
587
|
+
// pointer.
|
588
|
+
static const int kCallTargetSize = kPointerSize;
|
589
|
+
static const int kExternalTargetSize = kPointerSize;
|
590
|
+
|
591
|
+
// Size of an instruction.
|
592
|
+
static const int kInstrSize = sizeof(Instr);
|
593
|
+
|
594
|
+
// Distance between the instruction referring to the address of the call
|
595
|
+
// target (ldr pc, [target addr in const pool]) and the return address
|
596
|
+
static const int kCallTargetAddressOffset = kInstrSize;
|
597
|
+
|
598
|
+
// Distance between start of patched return sequence and the emitted address
|
599
|
+
// to jump to.
|
600
|
+
static const int kPatchReturnSequenceAddressOffset = kInstrSize;
|
601
|
+
|
602
|
+
// Difference between address of current opcode and value read from pc
|
603
|
+
// register.
|
604
|
+
static const int kPcLoadDelta = 8;
|
605
|
+
|
606
|
+
static const int kJSReturnSequenceLength = 4;
|
607
|
+
|
608
|
+
// ---------------------------------------------------------------------------
|
609
|
+
// Code generation
|
610
|
+
|
611
|
+
// Insert the smallest number of nop instructions
|
612
|
+
// possible to align the pc offset to a multiple
|
613
|
+
// of m. m must be a power of 2 (>= 4).
|
614
|
+
void Align(int m);
|
615
|
+
|
616
|
+
// Branch instructions
|
617
|
+
void b(int branch_offset, Condition cond = al);
|
618
|
+
void bl(int branch_offset, Condition cond = al);
|
619
|
+
void blx(int branch_offset); // v5 and above
|
620
|
+
void blx(Register target, Condition cond = al); // v5 and above
|
621
|
+
void bx(Register target, Condition cond = al); // v5 and above, plus v4t
|
622
|
+
|
623
|
+
// Convenience branch instructions using labels
|
624
|
+
void b(Label* L, Condition cond = al) {
|
625
|
+
b(branch_offset(L, cond == al), cond);
|
626
|
+
}
|
627
|
+
void b(Condition cond, Label* L) { b(branch_offset(L, cond == al), cond); }
|
628
|
+
void bl(Label* L, Condition cond = al) { bl(branch_offset(L, false), cond); }
|
629
|
+
void bl(Condition cond, Label* L) { bl(branch_offset(L, false), cond); }
|
630
|
+
void blx(Label* L) { blx(branch_offset(L, false)); } // v5 and above
|
631
|
+
|
632
|
+
// Data-processing instructions
|
633
|
+
void and_(Register dst, Register src1, const Operand& src2,
|
634
|
+
SBit s = LeaveCC, Condition cond = al);
|
635
|
+
|
636
|
+
void eor(Register dst, Register src1, const Operand& src2,
|
637
|
+
SBit s = LeaveCC, Condition cond = al);
|
638
|
+
|
639
|
+
void sub(Register dst, Register src1, const Operand& src2,
|
640
|
+
SBit s = LeaveCC, Condition cond = al);
|
641
|
+
void sub(Register dst, Register src1, Register src2,
|
642
|
+
SBit s = LeaveCC, Condition cond = al) {
|
643
|
+
sub(dst, src1, Operand(src2), s, cond);
|
644
|
+
}
|
645
|
+
|
646
|
+
void rsb(Register dst, Register src1, const Operand& src2,
|
647
|
+
SBit s = LeaveCC, Condition cond = al);
|
648
|
+
|
649
|
+
void add(Register dst, Register src1, const Operand& src2,
|
650
|
+
SBit s = LeaveCC, Condition cond = al);
|
651
|
+
|
652
|
+
void adc(Register dst, Register src1, const Operand& src2,
|
653
|
+
SBit s = LeaveCC, Condition cond = al);
|
654
|
+
|
655
|
+
void sbc(Register dst, Register src1, const Operand& src2,
|
656
|
+
SBit s = LeaveCC, Condition cond = al);
|
657
|
+
|
658
|
+
void rsc(Register dst, Register src1, const Operand& src2,
|
659
|
+
SBit s = LeaveCC, Condition cond = al);
|
660
|
+
|
661
|
+
void tst(Register src1, const Operand& src2, Condition cond = al);
|
662
|
+
void tst(Register src1, Register src2, Condition cond = al) {
|
663
|
+
tst(src1, Operand(src2), cond);
|
664
|
+
}
|
665
|
+
|
666
|
+
void teq(Register src1, const Operand& src2, Condition cond = al);
|
667
|
+
|
668
|
+
void cmp(Register src1, const Operand& src2, Condition cond = al);
|
669
|
+
void cmp(Register src1, Register src2, Condition cond = al) {
|
670
|
+
cmp(src1, Operand(src2), cond);
|
671
|
+
}
|
672
|
+
|
673
|
+
void cmn(Register src1, const Operand& src2, Condition cond = al);
|
674
|
+
|
675
|
+
void orr(Register dst, Register src1, const Operand& src2,
|
676
|
+
SBit s = LeaveCC, Condition cond = al);
|
677
|
+
void orr(Register dst, Register src1, Register src2,
|
678
|
+
SBit s = LeaveCC, Condition cond = al) {
|
679
|
+
orr(dst, src1, Operand(src2), s, cond);
|
680
|
+
}
|
681
|
+
|
682
|
+
void mov(Register dst, const Operand& src,
|
683
|
+
SBit s = LeaveCC, Condition cond = al);
|
684
|
+
void mov(Register dst, Register src, SBit s = LeaveCC, Condition cond = al) {
|
685
|
+
mov(dst, Operand(src), s, cond);
|
686
|
+
}
|
687
|
+
|
688
|
+
void bic(Register dst, Register src1, const Operand& src2,
|
689
|
+
SBit s = LeaveCC, Condition cond = al);
|
690
|
+
|
691
|
+
void mvn(Register dst, const Operand& src,
|
692
|
+
SBit s = LeaveCC, Condition cond = al);
|
693
|
+
|
694
|
+
// Multiply instructions
|
695
|
+
|
696
|
+
void mla(Register dst, Register src1, Register src2, Register srcA,
|
697
|
+
SBit s = LeaveCC, Condition cond = al);
|
698
|
+
|
699
|
+
void mul(Register dst, Register src1, Register src2,
|
700
|
+
SBit s = LeaveCC, Condition cond = al);
|
701
|
+
|
702
|
+
void smlal(Register dstL, Register dstH, Register src1, Register src2,
|
703
|
+
SBit s = LeaveCC, Condition cond = al);
|
704
|
+
|
705
|
+
void smull(Register dstL, Register dstH, Register src1, Register src2,
|
706
|
+
SBit s = LeaveCC, Condition cond = al);
|
707
|
+
|
708
|
+
void umlal(Register dstL, Register dstH, Register src1, Register src2,
|
709
|
+
SBit s = LeaveCC, Condition cond = al);
|
710
|
+
|
711
|
+
void umull(Register dstL, Register dstH, Register src1, Register src2,
|
712
|
+
SBit s = LeaveCC, Condition cond = al);
|
713
|
+
|
714
|
+
// Miscellaneous arithmetic instructions
|
715
|
+
|
716
|
+
void clz(Register dst, Register src, Condition cond = al); // v5 and above
|
717
|
+
|
718
|
+
// Status register access instructions
|
719
|
+
|
720
|
+
void mrs(Register dst, SRegister s, Condition cond = al);
|
721
|
+
void msr(SRegisterFieldMask fields, const Operand& src, Condition cond = al);
|
722
|
+
|
723
|
+
// Load/Store instructions
|
724
|
+
void ldr(Register dst, const MemOperand& src, Condition cond = al);
|
725
|
+
void str(Register src, const MemOperand& dst, Condition cond = al);
|
726
|
+
void ldrb(Register dst, const MemOperand& src, Condition cond = al);
|
727
|
+
void strb(Register src, const MemOperand& dst, Condition cond = al);
|
728
|
+
void ldrh(Register dst, const MemOperand& src, Condition cond = al);
|
729
|
+
void strh(Register src, const MemOperand& dst, Condition cond = al);
|
730
|
+
void ldrsb(Register dst, const MemOperand& src, Condition cond = al);
|
731
|
+
void ldrsh(Register dst, const MemOperand& src, Condition cond = al);
|
732
|
+
|
733
|
+
// Load/Store multiple instructions
|
734
|
+
void ldm(BlockAddrMode am, Register base, RegList dst, Condition cond = al);
|
735
|
+
void stm(BlockAddrMode am, Register base, RegList src, Condition cond = al);
|
736
|
+
|
737
|
+
// Semaphore instructions
|
738
|
+
void swp(Register dst, Register src, Register base, Condition cond = al);
|
739
|
+
void swpb(Register dst, Register src, Register base, Condition cond = al);
|
740
|
+
|
741
|
+
// Exception-generating instructions and debugging support
|
742
|
+
void stop(const char* msg);
|
743
|
+
|
744
|
+
void bkpt(uint32_t imm16); // v5 and above
|
745
|
+
void swi(uint32_t imm24, Condition cond = al);
|
746
|
+
|
747
|
+
// Coprocessor instructions
|
748
|
+
|
749
|
+
void cdp(Coprocessor coproc, int opcode_1,
|
750
|
+
CRegister crd, CRegister crn, CRegister crm,
|
751
|
+
int opcode_2, Condition cond = al);
|
752
|
+
|
753
|
+
void cdp2(Coprocessor coproc, int opcode_1,
|
754
|
+
CRegister crd, CRegister crn, CRegister crm,
|
755
|
+
int opcode_2); // v5 and above
|
756
|
+
|
757
|
+
void mcr(Coprocessor coproc, int opcode_1,
|
758
|
+
Register rd, CRegister crn, CRegister crm,
|
759
|
+
int opcode_2 = 0, Condition cond = al);
|
760
|
+
|
761
|
+
void mcr2(Coprocessor coproc, int opcode_1,
|
762
|
+
Register rd, CRegister crn, CRegister crm,
|
763
|
+
int opcode_2 = 0); // v5 and above
|
764
|
+
|
765
|
+
void mrc(Coprocessor coproc, int opcode_1,
|
766
|
+
Register rd, CRegister crn, CRegister crm,
|
767
|
+
int opcode_2 = 0, Condition cond = al);
|
768
|
+
|
769
|
+
void mrc2(Coprocessor coproc, int opcode_1,
|
770
|
+
Register rd, CRegister crn, CRegister crm,
|
771
|
+
int opcode_2 = 0); // v5 and above
|
772
|
+
|
773
|
+
void ldc(Coprocessor coproc, CRegister crd, const MemOperand& src,
|
774
|
+
LFlag l = Short, Condition cond = al);
|
775
|
+
void ldc(Coprocessor coproc, CRegister crd, Register base, int option,
|
776
|
+
LFlag l = Short, Condition cond = al);
|
777
|
+
|
778
|
+
void ldc2(Coprocessor coproc, CRegister crd, const MemOperand& src,
|
779
|
+
LFlag l = Short); // v5 and above
|
780
|
+
void ldc2(Coprocessor coproc, CRegister crd, Register base, int option,
|
781
|
+
LFlag l = Short); // v5 and above
|
782
|
+
|
783
|
+
void stc(Coprocessor coproc, CRegister crd, const MemOperand& dst,
|
784
|
+
LFlag l = Short, Condition cond = al);
|
785
|
+
void stc(Coprocessor coproc, CRegister crd, Register base, int option,
|
786
|
+
LFlag l = Short, Condition cond = al);
|
787
|
+
|
788
|
+
void stc2(Coprocessor coproc, CRegister crd, const MemOperand& dst,
|
789
|
+
LFlag l = Short); // v5 and above
|
790
|
+
void stc2(Coprocessor coproc, CRegister crd, Register base, int option,
|
791
|
+
LFlag l = Short); // v5 and above
|
792
|
+
|
793
|
+
// Support for VFP.
|
794
|
+
// All these APIs support S0 to S31 and D0 to D15.
|
795
|
+
// Currently these APIs do not support extended D registers, i.e, D16 to D31.
|
796
|
+
// However, some simple modifications can allow
|
797
|
+
// these APIs to support D16 to D31.
|
798
|
+
|
799
|
+
void vmov(const DwVfpRegister dst,
|
800
|
+
const Register src1,
|
801
|
+
const Register src2,
|
802
|
+
const Condition cond = al);
|
803
|
+
void vmov(const Register dst1,
|
804
|
+
const Register dst2,
|
805
|
+
const DwVfpRegister src,
|
806
|
+
const Condition cond = al);
|
807
|
+
void vmov(const SwVfpRegister dst,
|
808
|
+
const Register src,
|
809
|
+
const Condition cond = al);
|
810
|
+
void vmov(const Register dst,
|
811
|
+
const SwVfpRegister src,
|
812
|
+
const Condition cond = al);
|
813
|
+
void vcvt(const DwVfpRegister dst,
|
814
|
+
const SwVfpRegister src,
|
815
|
+
const Condition cond = al);
|
816
|
+
void vcvt(const SwVfpRegister dst,
|
817
|
+
const DwVfpRegister src,
|
818
|
+
const Condition cond = al);
|
819
|
+
|
820
|
+
void vadd(const DwVfpRegister dst,
|
821
|
+
const DwVfpRegister src1,
|
822
|
+
const DwVfpRegister src2,
|
823
|
+
const Condition cond = al);
|
824
|
+
void vsub(const DwVfpRegister dst,
|
825
|
+
const DwVfpRegister src1,
|
826
|
+
const DwVfpRegister src2,
|
827
|
+
const Condition cond = al);
|
828
|
+
void vmul(const DwVfpRegister dst,
|
829
|
+
const DwVfpRegister src1,
|
830
|
+
const DwVfpRegister src2,
|
831
|
+
const Condition cond = al);
|
832
|
+
void vdiv(const DwVfpRegister dst,
|
833
|
+
const DwVfpRegister src1,
|
834
|
+
const DwVfpRegister src2,
|
835
|
+
const Condition cond = al);
|
836
|
+
void vcmp(const DwVfpRegister src1,
|
837
|
+
const DwVfpRegister src2,
|
838
|
+
const SBit s = LeaveCC,
|
839
|
+
const Condition cond = al);
|
840
|
+
void vmrs(const Register dst,
|
841
|
+
const Condition cond = al);
|
842
|
+
|
843
|
+
// Pseudo instructions
|
844
|
+
void nop() { mov(r0, Operand(r0)); }
|
845
|
+
|
846
|
+
void push(Register src, Condition cond = al) {
|
847
|
+
str(src, MemOperand(sp, 4, NegPreIndex), cond);
|
848
|
+
}
|
849
|
+
|
850
|
+
void pop(Register dst, Condition cond = al) {
|
851
|
+
ldr(dst, MemOperand(sp, 4, PostIndex), cond);
|
852
|
+
}
|
853
|
+
|
854
|
+
void pop() {
|
855
|
+
add(sp, sp, Operand(kPointerSize));
|
856
|
+
}
|
857
|
+
|
858
|
+
// Load effective address of memory operand x into register dst
|
859
|
+
void lea(Register dst, const MemOperand& x,
|
860
|
+
SBit s = LeaveCC, Condition cond = al);
|
861
|
+
|
862
|
+
// Jump unconditionally to given label.
|
863
|
+
void jmp(Label* L) { b(L, al); }
|
864
|
+
|
865
|
+
// Check the code size generated from label to here.
|
866
|
+
int InstructionsGeneratedSince(Label* l) {
|
867
|
+
return (pc_offset() - l->pos()) / kInstrSize;
|
868
|
+
}
|
869
|
+
|
870
|
+
// Check whether an immediate fits an addressing mode 1 instruction.
|
871
|
+
bool ImmediateFitsAddrMode1Instruction(int32_t imm32);
|
872
|
+
|
873
|
+
// Postpone the generation of the constant pool for the specified number of
|
874
|
+
// instructions.
|
875
|
+
void BlockConstPoolFor(int instructions);
|
876
|
+
|
877
|
+
// Debugging
|
878
|
+
|
879
|
+
// Mark address of the ExitJSFrame code.
|
880
|
+
void RecordJSReturn();
|
881
|
+
|
882
|
+
// Record a comment relocation entry that can be used by a disassembler.
|
883
|
+
// Use --debug_code to enable.
|
884
|
+
void RecordComment(const char* msg);
|
885
|
+
|
886
|
+
void RecordPosition(int pos);
|
887
|
+
void RecordStatementPosition(int pos);
|
888
|
+
void WriteRecordedPositions();
|
889
|
+
|
890
|
+
int pc_offset() const { return pc_ - buffer_; }
|
891
|
+
int current_position() const { return current_position_; }
|
892
|
+
int current_statement_position() const { return current_position_; }
|
893
|
+
|
894
|
+
protected:
|
895
|
+
int buffer_space() const { return reloc_info_writer.pos() - pc_; }
|
896
|
+
|
897
|
+
// Read/patch instructions
|
898
|
+
static Instr instr_at(byte* pc) { return *reinterpret_cast<Instr*>(pc); }
|
899
|
+
void instr_at_put(byte* pc, Instr instr) {
|
900
|
+
*reinterpret_cast<Instr*>(pc) = instr;
|
901
|
+
}
|
902
|
+
Instr instr_at(int pos) { return *reinterpret_cast<Instr*>(buffer_ + pos); }
|
903
|
+
void instr_at_put(int pos, Instr instr) {
|
904
|
+
*reinterpret_cast<Instr*>(buffer_ + pos) = instr;
|
905
|
+
}
|
906
|
+
|
907
|
+
// Decode branch instruction at pos and return branch target pos
|
908
|
+
int target_at(int pos);
|
909
|
+
|
910
|
+
// Patch branch instruction at pos to branch to given branch target pos
|
911
|
+
void target_at_put(int pos, int target_pos);
|
912
|
+
|
913
|
+
// Check if is time to emit a constant pool for pending reloc info entries
|
914
|
+
void CheckConstPool(bool force_emit, bool require_jump);
|
915
|
+
|
916
|
+
// Block the emission of the constant pool before pc_offset
|
917
|
+
void BlockConstPoolBefore(int pc_offset) {
|
918
|
+
if (no_const_pool_before_ < pc_offset) no_const_pool_before_ = pc_offset;
|
919
|
+
}
|
920
|
+
|
921
|
+
private:
|
922
|
+
// Code buffer:
|
923
|
+
// The buffer into which code and relocation info are generated.
|
924
|
+
byte* buffer_;
|
925
|
+
int buffer_size_;
|
926
|
+
// True if the assembler owns the buffer, false if buffer is external.
|
927
|
+
bool own_buffer_;
|
928
|
+
|
929
|
+
// Buffer size and constant pool distance are checked together at regular
|
930
|
+
// intervals of kBufferCheckInterval emitted bytes
|
931
|
+
static const int kBufferCheckInterval = 1*KB/2;
|
932
|
+
int next_buffer_check_; // pc offset of next buffer check
|
933
|
+
|
934
|
+
// Code generation
|
935
|
+
// The relocation writer's position is at least kGap bytes below the end of
|
936
|
+
// the generated instructions. This is so that multi-instruction sequences do
|
937
|
+
// not have to check for overflow. The same is true for writes of large
|
938
|
+
// relocation info entries.
|
939
|
+
static const int kGap = 32;
|
940
|
+
byte* pc_; // the program counter; moves forward
|
941
|
+
|
942
|
+
// Constant pool generation
|
943
|
+
// Pools are emitted in the instruction stream, preferably after unconditional
|
944
|
+
// jumps or after returns from functions (in dead code locations).
|
945
|
+
// If a long code sequence does not contain unconditional jumps, it is
|
946
|
+
// necessary to emit the constant pool before the pool gets too far from the
|
947
|
+
// location it is accessed from. In this case, we emit a jump over the emitted
|
948
|
+
// constant pool.
|
949
|
+
// Constants in the pool may be addresses of functions that gets relocated;
|
950
|
+
// if so, a relocation info entry is associated to the constant pool entry.
|
951
|
+
|
952
|
+
// Repeated checking whether the constant pool should be emitted is rather
|
953
|
+
// expensive. By default we only check again once a number of instructions
|
954
|
+
// has been generated. That also means that the sizing of the buffers is not
|
955
|
+
// an exact science, and that we rely on some slop to not overrun buffers.
|
956
|
+
static const int kCheckConstIntervalInst = 32;
|
957
|
+
static const int kCheckConstInterval = kCheckConstIntervalInst * kInstrSize;
|
958
|
+
|
959
|
+
|
960
|
+
// Pools are emitted after function return and in dead code at (more or less)
|
961
|
+
// regular intervals of kDistBetweenPools bytes
|
962
|
+
static const int kDistBetweenPools = 1*KB;
|
963
|
+
|
964
|
+
// Constants in pools are accessed via pc relative addressing, which can
|
965
|
+
// reach +/-4KB thereby defining a maximum distance between the instruction
|
966
|
+
// and the accessed constant. We satisfy this constraint by limiting the
|
967
|
+
// distance between pools.
|
968
|
+
static const int kMaxDistBetweenPools = 4*KB - 2*kBufferCheckInterval;
|
969
|
+
|
970
|
+
// Emission of the constant pool may be blocked in some code sequences
|
971
|
+
int no_const_pool_before_; // block emission before this pc offset
|
972
|
+
|
973
|
+
// Keep track of the last emitted pool to guarantee a maximal distance
|
974
|
+
int last_const_pool_end_; // pc offset following the last constant pool
|
975
|
+
|
976
|
+
// Relocation info generation
|
977
|
+
// Each relocation is encoded as a variable size value
|
978
|
+
static const int kMaxRelocSize = RelocInfoWriter::kMaxSize;
|
979
|
+
RelocInfoWriter reloc_info_writer;
|
980
|
+
// Relocation info records are also used during code generation as temporary
|
981
|
+
// containers for constants and code target addresses until they are emitted
|
982
|
+
// to the constant pool. These pending relocation info records are temporarily
|
983
|
+
// stored in a separate buffer until a constant pool is emitted.
|
984
|
+
// If every instruction in a long sequence is accessing the pool, we need one
|
985
|
+
// pending relocation entry per instruction.
|
986
|
+
static const int kMaxNumPRInfo = kMaxDistBetweenPools/kInstrSize;
|
987
|
+
RelocInfo prinfo_[kMaxNumPRInfo]; // the buffer of pending relocation info
|
988
|
+
int num_prinfo_; // number of pending reloc info entries in the buffer
|
989
|
+
|
990
|
+
// The bound position, before this we cannot do instruction elimination.
|
991
|
+
int last_bound_pos_;
|
992
|
+
|
993
|
+
// source position information
|
994
|
+
int current_position_;
|
995
|
+
int current_statement_position_;
|
996
|
+
int written_position_;
|
997
|
+
int written_statement_position_;
|
998
|
+
|
999
|
+
// Code emission
|
1000
|
+
inline void CheckBuffer();
|
1001
|
+
void GrowBuffer();
|
1002
|
+
inline void emit(Instr x);
|
1003
|
+
|
1004
|
+
// Instruction generation
|
1005
|
+
void addrmod1(Instr instr, Register rn, Register rd, const Operand& x);
|
1006
|
+
void addrmod2(Instr instr, Register rd, const MemOperand& x);
|
1007
|
+
void addrmod3(Instr instr, Register rd, const MemOperand& x);
|
1008
|
+
void addrmod4(Instr instr, Register rn, RegList rl);
|
1009
|
+
void addrmod5(Instr instr, CRegister crd, const MemOperand& x);
|
1010
|
+
|
1011
|
+
// Labels
|
1012
|
+
void print(Label* L);
|
1013
|
+
void bind_to(Label* L, int pos);
|
1014
|
+
void link_to(Label* L, Label* appendix);
|
1015
|
+
void next(Label* L);
|
1016
|
+
|
1017
|
+
// Record reloc info for current pc_
|
1018
|
+
void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0);
|
1019
|
+
|
1020
|
+
friend class RegExpMacroAssemblerARM;
|
1021
|
+
friend class RelocInfo;
|
1022
|
+
friend class CodePatcher;
|
1023
|
+
};
|
1024
|
+
|
1025
|
+
} } // namespace v8::internal
|
1026
|
+
|
1027
|
+
#endif // V8_ARM_ASSEMBLER_ARM_H_
|