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.

Files changed (520) hide show
  1. data/Rakefile +10 -9
  2. data/ext/v8/callbacks.cpp +15 -8
  3. data/ext/v8/converters.cpp +7 -8
  4. data/ext/v8/converters.h +0 -2
  5. data/ext/v8/extconf.rb +2 -0
  6. data/ext/v8/rr.cpp +169 -0
  7. data/ext/v8/rr.h +34 -0
  8. data/ext/v8/upstream/{2.0.6 → 2.1.10}/AUTHORS +8 -1
  9. data/ext/v8/upstream/{2.0.6 → 2.1.10}/ChangeLog +198 -0
  10. data/ext/v8/upstream/{2.0.6 → 2.1.10}/LICENSE +0 -0
  11. data/ext/v8/upstream/{2.0.6 → 2.1.10}/SConstruct +152 -38
  12. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8-debug.h +52 -4
  13. data/ext/v8/upstream/2.1.10/include/v8-profiler.h +176 -0
  14. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8.h +227 -48
  15. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/SConscript +60 -10
  16. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.cc +5 -39
  17. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.h +0 -0
  18. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.cc +0 -0
  19. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.h +0 -0
  20. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.cc +477 -57
  21. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.h +8 -4
  22. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apinatives.js +1 -1
  23. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apiutils.h +0 -0
  24. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arguments.h +5 -6
  25. data/ext/v8/upstream/{2.0.6/src/arm/assembler-thumb2-inl.h → 2.1.10/src/arm/assembler-arm-inl.h} +42 -27
  26. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.cc +430 -216
  27. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.h +199 -110
  28. data/ext/v8/upstream/{2.0.6/src/arm/assembler-arm-inl.h → 2.1.10/src/arm/assembler-thumb2-inl.h} +4 -18
  29. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.cc +142 -85
  30. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.h +18 -9
  31. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/builtins-arm.cc +127 -87
  32. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm-inl.h +3 -5
  33. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm.cc +4634 -1427
  34. data/ext/v8/upstream/2.1.10/src/arm/codegen-arm.h +946 -0
  35. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.cc +21 -3
  36. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.h +39 -13
  37. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/cpu-arm.cc +9 -3
  38. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/debug-arm.cc +34 -8
  39. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/disasm-arm.cc +262 -117
  40. data/ext/v8/upstream/2.1.10/src/arm/fast-codegen-arm.cc +238 -0
  41. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.cc +0 -0
  42. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.h +0 -0
  43. data/ext/v8/upstream/{2.0.6/src/arm/fast-codegen-arm.cc → 2.1.10/src/arm/full-codegen-arm.cc} +453 -283
  44. data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +1833 -0
  45. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/jump-target-arm.cc +3 -29
  46. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.cc +564 -104
  47. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.h +255 -46
  48. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.cc +78 -104
  49. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.h +6 -22
  50. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm-inl.h +0 -3
  51. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.cc +0 -0
  52. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.h +2 -1
  53. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.cc +557 -180
  54. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.h +52 -4
  55. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/stub-cache-arm.cc +904 -240
  56. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.cc +668 -0
  57. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.h +503 -0
  58. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/array.js +82 -109
  59. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.cc +49 -13
  60. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.h +27 -5
  61. data/ext/v8/upstream/2.1.10/src/ast.cc +1138 -0
  62. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ast.h +354 -53
  63. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.cc +609 -501
  64. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.h +27 -8
  65. data/ext/v8/upstream/2.1.10/src/builtins.cc +1512 -0
  66. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/builtins.h +41 -25
  67. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bytecodes-irregexp.h +0 -0
  68. data/ext/v8/upstream/2.1.10/src/cached-powers.h +119 -0
  69. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates-inl.h +0 -0
  70. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates.h +0 -0
  71. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.cc +0 -0
  72. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.h +25 -1
  73. data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +101 -0
  74. data/ext/v8/upstream/2.1.10/src/circular-queue.cc +121 -0
  75. data/ext/v8/upstream/2.1.10/src/circular-queue.h +129 -0
  76. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.cc +23 -8
  77. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.h +16 -4
  78. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code.h +0 -0
  79. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen-inl.h +6 -34
  80. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.cc +73 -92
  81. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.h +164 -68
  82. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.cc +117 -73
  83. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.h +18 -17
  84. data/ext/v8/upstream/2.1.10/src/compiler.cc +623 -0
  85. data/ext/v8/upstream/2.1.10/src/compiler.h +299 -0
  86. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.cc +0 -0
  87. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.h +8 -11
  88. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions-inl.h +28 -13
  89. data/ext/v8/upstream/2.1.10/src/conversions.cc +1105 -0
  90. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions.h +9 -4
  91. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.cc +0 -0
  92. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.h +1 -1
  93. data/ext/v8/upstream/2.1.10/src/cpu-profiler-inl.h +99 -0
  94. data/ext/v8/upstream/2.1.10/src/cpu-profiler.cc +494 -0
  95. data/ext/v8/upstream/2.1.10/src/cpu-profiler.h +277 -0
  96. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/cpu.h +0 -0
  97. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.cc +15 -4
  98. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.h +0 -0
  99. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-posix.cc +18 -0
  100. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-readline.cc +2 -2
  101. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-windows.cc +0 -0
  102. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.cc +10 -6
  103. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.h +2 -0
  104. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.js +43 -38
  105. data/ext/v8/upstream/2.1.10/src/data-flow.cc +755 -0
  106. data/ext/v8/upstream/2.1.10/src/data-flow.h +278 -0
  107. data/ext/v8/upstream/{2.0.6/src/date-delay.js → 2.1.10/src/date.js} +100 -110
  108. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser-inl.h +11 -2
  109. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.cc +24 -26
  110. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.h +8 -4
  111. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.cc +3 -1
  112. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.h +0 -0
  113. data/ext/v8/upstream/{2.0.6/src/debug-delay.js → 2.1.10/src/debug-debugger.js} +111 -15
  114. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.cc +156 -96
  115. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.h +53 -5
  116. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disasm.h +0 -0
  117. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.cc +2 -8
  118. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.h +0 -0
  119. data/ext/v8/upstream/2.1.10/src/diy-fp.cc +58 -0
  120. data/ext/v8/upstream/2.1.10/src/diy-fp.h +117 -0
  121. data/ext/v8/upstream/2.1.10/src/double.h +169 -0
  122. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dtoa-config.c +4 -3
  123. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.cc +22 -22
  124. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.h +17 -4
  125. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.cc +70 -46
  126. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.h +27 -17
  127. data/ext/v8/upstream/2.1.10/src/fast-codegen.cc +746 -0
  128. data/ext/v8/upstream/2.1.10/src/fast-codegen.h +161 -0
  129. data/ext/v8/upstream/2.1.10/src/fast-dtoa.cc +512 -0
  130. data/ext/v8/upstream/2.1.10/src/fast-dtoa.h +59 -0
  131. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flag-definitions.h +32 -11
  132. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.cc +0 -0
  133. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.h +0 -0
  134. data/ext/v8/upstream/2.1.10/src/flow-graph.cc +763 -0
  135. data/ext/v8/upstream/2.1.10/src/flow-graph.h +180 -0
  136. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.cc +1 -4
  137. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.h +49 -11
  138. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames-inl.h +2 -0
  139. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.cc +91 -17
  140. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.h +24 -2
  141. data/ext/v8/upstream/{2.0.6/src/fast-codegen.cc → 2.1.10/src/full-codegen.cc} +549 -198
  142. data/ext/v8/upstream/{2.0.6/src/fast-codegen.h → 2.1.10/src/full-codegen.h} +109 -29
  143. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.cc +0 -0
  144. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.h +0 -0
  145. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.cc +0 -0
  146. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.h +0 -0
  147. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/globals.h +67 -43
  148. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles-inl.h +0 -0
  149. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.cc +124 -129
  150. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.h +33 -15
  151. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.cc +0 -0
  152. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.h +0 -0
  153. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-inl.h +56 -12
  154. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.cc +2 -2
  155. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.h +2 -0
  156. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.cc +413 -221
  157. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.h +192 -67
  158. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32-inl.h +6 -0
  159. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.cc +187 -32
  160. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.h +31 -4
  161. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/builtins-ia32.cc +160 -133
  162. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32-inl.h +0 -0
  163. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32.cc +5533 -2177
  164. data/ext/v8/upstream/{2.0.6/src/x64/codegen-x64.h → 2.1.10/src/ia32/codegen-ia32.h} +453 -134
  165. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/cpu-ia32.cc +0 -0
  166. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/debug-ia32.cc +63 -8
  167. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/disasm-ia32.cc +99 -16
  168. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.cc +950 -0
  169. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.h +155 -0
  170. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.cc +0 -0
  171. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.h +0 -0
  172. data/ext/v8/upstream/{2.0.6/src/ia32/fast-codegen-ia32.cc → 2.1.10/src/ia32/full-codegen-ia32.cc} +454 -253
  173. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/ic-ia32.cc +545 -390
  174. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/jump-target-ia32.cc +1 -0
  175. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.cc +330 -139
  176. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.h +96 -30
  177. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.cc +73 -89
  178. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.h +6 -21
  179. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32-inl.h +0 -0
  180. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.cc +59 -5
  181. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.h +0 -0
  182. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.cc +0 -0
  183. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.h +2 -2
  184. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/stub-cache-ia32.cc +745 -303
  185. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.cc +278 -71
  186. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.h +78 -22
  187. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic-inl.h +0 -0
  188. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.cc +172 -89
  189. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.h +51 -20
  190. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.cc +0 -0
  191. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.h +0 -0
  192. data/ext/v8/upstream/{2.0.6/src/json-delay.js → 2.1.10/src/json.js} +26 -12
  193. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.cc +151 -118
  194. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.h +31 -7
  195. data/ext/v8/upstream/2.1.10/src/jump-target-heavy-inl.h +51 -0
  196. data/ext/v8/upstream/{2.0.6/src/jump-target.cc → 2.1.10/src/jump-target-heavy.cc} +164 -184
  197. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target-inl.h +8 -9
  198. data/ext/v8/upstream/{2.0.6/src/usage-analyzer.h → 2.1.10/src/jump-target-light-inl.h} +9 -7
  199. data/ext/v8/upstream/2.1.10/src/jump-target-light.cc +86 -0
  200. data/ext/v8/upstream/2.1.10/src/jump-target.cc +155 -0
  201. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target.h +6 -0
  202. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list-inl.h +0 -0
  203. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list.h +2 -1
  204. data/ext/v8/upstream/2.1.10/src/liveedit-debugger.js +944 -0
  205. data/ext/v8/upstream/2.1.10/src/liveedit.cc +1468 -0
  206. data/ext/v8/upstream/2.1.10/src/liveedit.h +170 -0
  207. data/ext/v8/upstream/2.1.10/src/log-inl.h +59 -0
  208. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.cc +3 -9
  209. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.h +1 -4
  210. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.cc +198 -95
  211. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.h +50 -49
  212. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macro-assembler.h +9 -0
  213. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macros.py +30 -11
  214. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.cc +464 -152
  215. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.h +41 -20
  216. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/math.js +9 -8
  217. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/memory.h +0 -0
  218. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.cc +1 -0
  219. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.h +0 -0
  220. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.js +46 -9
  221. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips-inl.h +215 -0
  222. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.cc +1208 -0
  223. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.h +665 -0
  224. data/ext/v8/upstream/2.1.10/src/mips/builtins-mips.cc +202 -0
  225. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips-inl.h +70 -0
  226. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips.cc +1428 -0
  227. data/ext/v8/upstream/{2.0.6/src/arm/codegen-arm.h → 2.1.10/src/mips/codegen-mips.h} +103 -205
  228. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.cc +323 -0
  229. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.h +525 -0
  230. data/ext/v8/upstream/2.1.10/src/mips/cpu-mips.cc +69 -0
  231. data/ext/v8/upstream/2.1.10/src/mips/debug-mips.cc +128 -0
  232. data/ext/v8/upstream/2.1.10/src/mips/disasm-mips.cc +784 -0
  233. data/ext/v8/upstream/2.1.10/src/mips/fast-codegen-mips.cc +74 -0
  234. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.cc +99 -0
  235. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.h +164 -0
  236. data/ext/v8/upstream/2.1.10/src/mips/full-codegen-mips.cc +273 -0
  237. data/ext/v8/upstream/2.1.10/src/mips/ic-mips.cc +217 -0
  238. data/ext/v8/upstream/2.1.10/src/mips/jump-target-mips.cc +172 -0
  239. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.cc +1323 -0
  240. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.h +461 -0
  241. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips-inl.h +137 -0
  242. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.cc +60 -0
  243. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.h +46 -0
  244. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.cc +1648 -0
  245. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.h +311 -0
  246. data/ext/v8/upstream/2.1.10/src/mips/stub-cache-mips.cc +400 -0
  247. data/ext/v8/upstream/2.1.10/src/mips/virtual-frame-mips.cc +316 -0
  248. data/ext/v8/upstream/{2.0.6/src/arm/virtual-frame-arm.h → 2.1.10/src/mips/virtual-frame-mips.h} +87 -71
  249. data/ext/v8/upstream/{2.0.6/src/mirror-delay.js → 2.1.10/src/mirror-debugger.js} +51 -45
  250. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mksnapshot.cc +97 -10
  251. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/natives.h +6 -6
  252. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-debug.cc +47 -5
  253. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-inl.h +154 -38
  254. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.cc +528 -280
  255. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.h +302 -95
  256. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.cc +25 -33
  257. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.h +9 -1
  258. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.cc +444 -72
  259. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.h +4 -2
  260. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-freebsd.cc +32 -13
  261. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-linux.cc +59 -25
  262. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-macos.cc +30 -13
  263. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-nullos.cc +0 -0
  264. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-openbsd.cc +21 -2
  265. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-posix.cc +0 -18
  266. data/ext/v8/upstream/2.1.10/src/platform-solaris.cc +607 -0
  267. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-win32.cc +16 -17
  268. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform.h +25 -8
  269. data/ext/v8/upstream/2.1.10/src/powers-ten.h +2461 -0
  270. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.cc +49 -29
  271. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.h +3 -1
  272. data/ext/v8/upstream/2.1.10/src/profile-generator-inl.h +124 -0
  273. data/ext/v8/upstream/2.1.10/src/profile-generator.cc +583 -0
  274. data/ext/v8/upstream/2.1.10/src/profile-generator.h +364 -0
  275. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.cc +1 -1
  276. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.h +12 -24
  277. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp-inl.h +2 -2
  278. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.cc +2 -2
  279. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.h +2 -2
  280. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.cc +2 -2
  281. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.h +0 -0
  282. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.cc +33 -10
  283. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.h +12 -4
  284. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.cc +0 -0
  285. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.h +0 -0
  286. data/ext/v8/upstream/{2.0.6/src/regexp-delay.js → 2.1.10/src/regexp.js} +180 -58
  287. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator-inl.h +68 -1
  288. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.cc +5 -2
  289. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.h +42 -17
  290. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.cc +110 -4
  291. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.h +0 -0
  292. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.cc +2733 -623
  293. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.h +43 -20
  294. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.js +46 -35
  295. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.cc +278 -36
  296. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.h +97 -26
  297. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.cc +3 -3
  298. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.h +1 -0
  299. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.cc +11 -12
  300. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.h +0 -1
  301. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.cc +298 -175
  302. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.h +184 -40
  303. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/shell.h +0 -0
  304. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/simulator.h +2 -0
  305. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/smart-pointer.h +0 -0
  306. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot-common.cc +16 -31
  307. data/ext/v8/upstream/2.1.10/src/snapshot-empty.cc +50 -0
  308. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot.h +13 -1
  309. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces-inl.h +35 -27
  310. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.cc +256 -42
  311. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.h +136 -42
  312. data/ext/v8/upstream/{2.0.6/src/zone-inl.h → 2.1.10/src/splay-tree-inl.h} +102 -89
  313. data/ext/v8/upstream/2.1.10/src/splay-tree.h +203 -0
  314. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.cc +0 -0
  315. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.h +0 -0
  316. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string.js +260 -149
  317. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.cc +195 -69
  318. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.h +127 -12
  319. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/COPYING +0 -0
  320. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/dtoa.c +0 -0
  321. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/valgrind/valgrind.h +0 -0
  322. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.cc +0 -0
  323. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.h +0 -0
  324. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.cc +26 -31
  325. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.h +3 -4
  326. data/ext/v8/upstream/2.1.10/src/type-info.cc +53 -0
  327. data/ext/v8/upstream/2.1.10/src/type-info.h +244 -0
  328. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode-inl.h +0 -0
  329. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.cc +0 -0
  330. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.h +0 -0
  331. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/uri.js +6 -6
  332. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.cc +0 -37
  333. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.h +121 -50
  334. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.cc +0 -0
  335. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.h +130 -98
  336. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.cc +42 -11
  337. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.h +4 -2
  338. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8natives.js +202 -37
  339. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.cc +11 -0
  340. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.h +15 -0
  341. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.cc +7 -51
  342. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.h +5 -35
  343. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.cc +3 -3
  344. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.h +0 -0
  345. data/ext/v8/upstream/2.1.10/src/virtual-frame-heavy-inl.h +152 -0
  346. data/ext/v8/upstream/{2.0.6/src/virtual-frame.cc → 2.1.10/src/virtual-frame-heavy.cc} +107 -176
  347. data/ext/v8/upstream/2.1.10/src/virtual-frame-inl.h +39 -0
  348. data/ext/v8/upstream/2.1.10/src/virtual-frame-light-inl.h +69 -0
  349. data/ext/v8/upstream/2.1.10/src/virtual-frame-light.cc +49 -0
  350. data/ext/v8/upstream/2.1.10/src/virtual-frame.cc +49 -0
  351. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/virtual-frame.h +2 -0
  352. data/ext/v8/upstream/{2.0.6/src/log-inl.h → 2.1.10/src/vm-state-inl.h} +28 -20
  353. data/ext/v8/upstream/{2.0.6/src/snapshot-empty.cc → 2.1.10/src/vm-state.cc} +5 -6
  354. data/ext/v8/upstream/2.1.10/src/vm-state.h +75 -0
  355. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64-inl.h +11 -0
  356. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.cc +285 -93
  357. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.h +81 -78
  358. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/builtins-x64.cc +130 -87
  359. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64-inl.h +0 -0
  360. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64.cc +4520 -1317
  361. data/ext/v8/upstream/{2.0.6/src/ia32/codegen-ia32.h → 2.1.10/src/x64/codegen-x64.h} +362 -141
  362. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/cpu-x64.cc +0 -0
  363. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/debug-x64.cc +20 -4
  364. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/disasm-x64.cc +121 -44
  365. data/ext/v8/upstream/2.1.10/src/x64/fast-codegen-x64.cc +246 -0
  366. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.cc +0 -0
  367. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.h +0 -0
  368. data/ext/v8/upstream/{2.0.6/src/x64/fast-codegen-x64.cc → 2.1.10/src/x64/full-codegen-x64.cc} +404 -231
  369. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/ic-x64.cc +346 -117
  370. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/jump-target-x64.cc +1 -0
  371. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.cc +537 -181
  372. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.h +140 -34
  373. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.cc +74 -96
  374. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.h +8 -25
  375. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64-inl.h +1 -1
  376. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.cc +3 -0
  377. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.h +0 -0
  378. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.cc +0 -0
  379. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.h +2 -2
  380. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/stub-cache-x64.cc +785 -288
  381. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.cc +128 -52
  382. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.h +40 -19
  383. data/ext/v8/upstream/2.1.10/src/zone-inl.h +82 -0
  384. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.cc +1 -0
  385. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.h +6 -90
  386. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/codemap.js +12 -0
  387. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/consarray.js +0 -0
  388. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/csvparser.js +22 -37
  389. data/ext/v8/upstream/2.1.10/tools/generate-ten-powers.scm +286 -0
  390. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/gyp/v8.gyp +86 -24
  391. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/js2c.py +22 -22
  392. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/jsmin.py +0 -0
  393. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor +10 -1
  394. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor.py +0 -0
  395. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/logreader.js +34 -16
  396. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-nm +0 -0
  397. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-tick-processor +0 -0
  398. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/annotate +0 -0
  399. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/common +0 -0
  400. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/dump +0 -0
  401. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/report +0 -0
  402. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/reset +0 -0
  403. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/run +0 -0
  404. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/shutdown +0 -0
  405. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/start +0 -0
  406. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/presubmit.py +0 -0
  407. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/process-heap-prof.py +0 -0
  408. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile.js +70 -0
  409. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile_view.js +0 -0
  410. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/run-valgrind.py +0 -0
  411. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.js +0 -0
  412. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.py +0 -0
  413. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/stats-viewer.py +0 -0
  414. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/test.py +7 -7
  415. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor-driver.js +7 -1
  416. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.js +140 -9
  417. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.py +40 -4
  418. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/utils.py +6 -0
  419. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/README.txt +0 -0
  420. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/arm.vsprops +1 -1
  421. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/common.vsprops +1 -2
  422. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8.vcproj +0 -6
  423. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_arm.vcproj +193 -199
  424. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_x64.vcproj +16 -8
  425. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8js2c.cmd +0 -0
  426. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/debug.vsprops +0 -0
  427. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/ia32.vsprops +5 -1
  428. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/js2c.cmd +1 -1
  429. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/release.vsprops +0 -0
  430. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.sln +0 -0
  431. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.vcproj +11 -7
  432. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.sln +0 -0
  433. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.vcproj +227 -223
  434. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base.vcproj +137 -5
  435. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_arm.vcproj +116 -4
  436. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_x64.vcproj +125 -4
  437. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest.vcproj +12 -6
  438. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_arm.vcproj +12 -6
  439. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_x64.vcproj +11 -11
  440. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot.vcproj +0 -6
  441. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -6
  442. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample.vcproj +0 -6
  443. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_arm.vcproj +145 -151
  444. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_x64.vcproj +16 -6
  445. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample.vcproj +0 -6
  446. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -151
  447. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_x64.vcproj +16 -8
  448. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  449. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  450. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  451. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  452. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.sln +0 -0
  453. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.vcproj +11 -7
  454. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/x64.vsprops +5 -1
  455. data/ext/v8/upstream/2.1.10/tools/windows-tick-processor.bat +29 -0
  456. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/windows-tick-processor.py +0 -0
  457. data/ext/v8/upstream/Makefile +8 -2
  458. data/ext/v8/v8.cpp +21 -73
  459. data/ext/v8/v8_array.cpp +56 -0
  460. data/ext/v8/v8_array.h +8 -0
  461. data/ext/v8/v8_callbacks.cpp +121 -0
  462. data/ext/v8/v8_callbacks.h +8 -0
  463. data/ext/v8/v8_cxt.cpp +74 -77
  464. data/ext/v8/v8_cxt.h +2 -9
  465. data/ext/v8/v8_date.cpp +26 -0
  466. data/ext/v8/v8_date.h +6 -0
  467. data/ext/v8/v8_exception.cpp +55 -0
  468. data/ext/v8/v8_exception.h +6 -0
  469. data/ext/v8/v8_external.cpp +50 -0
  470. data/ext/v8/v8_external.h +8 -0
  471. data/ext/v8/v8_func.cpp +76 -18
  472. data/ext/v8/v8_func.h +5 -4
  473. data/ext/v8/v8_msg.cpp +55 -46
  474. data/ext/v8/v8_msg.h +3 -11
  475. data/ext/v8/v8_obj.cpp +67 -36
  476. data/ext/v8/v8_obj.h +6 -8
  477. data/ext/v8/v8_ref.cpp +25 -9
  478. data/ext/v8/v8_ref.h +3 -5
  479. data/ext/v8/v8_script.cpp +17 -10
  480. data/ext/v8/v8_script.h +3 -3
  481. data/ext/v8/v8_str.cpp +34 -6
  482. data/ext/v8/v8_str.h +4 -2
  483. data/ext/v8/v8_template.cpp +195 -33
  484. data/ext/v8/v8_template.h +4 -5
  485. data/ext/v8/v8_try_catch.cpp +99 -0
  486. data/ext/v8/v8_try_catch.h +5 -0
  487. data/ext/v8/v8_value.cpp +164 -0
  488. data/ext/v8/v8_value.h +10 -0
  489. data/lib/v8.rb +3 -1
  490. data/lib/v8/access.rb +60 -0
  491. data/lib/v8/array.rb +15 -0
  492. data/lib/v8/callbacks.rb +88 -0
  493. data/lib/v8/cli.rb +1 -1
  494. data/lib/v8/context.rb +55 -66
  495. data/lib/v8/function.rb +20 -2
  496. data/lib/v8/object.rb +14 -12
  497. data/lib/v8/ruby_error.rb +3 -0
  498. data/lib/v8/to.rb +59 -7
  499. data/spec/ext/cxt_spec.rb +2 -15
  500. data/spec/ext/func_spec.rb +17 -10
  501. data/spec/ext/try_catch_spec.rb +32 -0
  502. data/spec/foo.rb +17 -0
  503. data/spec/redjs/jsapi_spec.rb +173 -96
  504. data/spec/spec_helper.rb +7 -0
  505. data/spec/v8/to_spec.rb +0 -1
  506. data/therubyracer.gemspec +6 -6
  507. metadata +493 -386
  508. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
  509. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
  510. data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
  511. data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
  512. data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
  513. data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
  514. data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
  515. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
  516. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
  517. data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
  518. data/ext/v8/v8_standalone.cpp +0 -69
  519. data/ext/v8/v8_standalone.h +0 -31
  520. data/spec/ext/obj_spec.rb +0 -13
@@ -81,9 +81,27 @@ const char* VFPRegisters::names_[kNumVFPRegisters] = {
81
81
  };
82
82
 
83
83
 
84
- const char* VFPRegisters::Name(int reg) {
84
+ const char* VFPRegisters::Name(int reg, bool is_double) {
85
85
  ASSERT((0 <= reg) && (reg < kNumVFPRegisters));
86
- return names_[reg];
86
+ return names_[reg + is_double ? kNumVFPSingleRegisters : 0];
87
+ }
88
+
89
+
90
+ int VFPRegisters::Number(const char* name, bool* is_double) {
91
+ for (int i = 0; i < kNumVFPRegisters; i++) {
92
+ if (strcmp(names_[i], name) == 0) {
93
+ if (i < kNumVFPSingleRegisters) {
94
+ *is_double = false;
95
+ return i;
96
+ } else {
97
+ *is_double = true;
98
+ return i - kNumVFPSingleRegisters;
99
+ }
100
+ }
101
+ }
102
+
103
+ // No register with the requested name found.
104
+ return kNoRegister;
87
105
  }
88
106
 
89
107
 
@@ -104,7 +122,7 @@ int Registers::Number(const char* name) {
104
122
  i++;
105
123
  }
106
124
 
107
- // No register with the reguested name found.
125
+ // No register with the requested name found.
108
126
  return kNoRegister;
109
127
  }
110
128
 
@@ -1,4 +1,4 @@
1
- // Copyright 2009 the V8 project authors. All rights reserved.
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:
@@ -72,6 +72,11 @@
72
72
  # define CAN_USE_THUMB_INSTRUCTIONS 1
73
73
  #endif
74
74
 
75
+ // Using blx may yield better code, so use it when required or when available
76
+ #if defined(USE_THUMB_INTERWORK) || defined(CAN_USE_ARMV5_INSTRUCTIONS)
77
+ #define USE_BLX 1
78
+ #endif
79
+
75
80
  namespace assembler {
76
81
  namespace arm {
77
82
 
@@ -79,7 +84,10 @@ namespace arm {
79
84
  static const int kNumRegisters = 16;
80
85
 
81
86
  // VFP support.
82
- static const int kNumVFPRegisters = 48;
87
+ static const int kNumVFPSingleRegisters = 32;
88
+ static const int kNumVFPDoubleRegisters = 16;
89
+ static const int kNumVFPRegisters =
90
+ kNumVFPSingleRegisters + kNumVFPDoubleRegisters;
83
91
 
84
92
  // PC is register 15.
85
93
  static const int kPCRegister = 15;
@@ -143,24 +151,19 @@ enum Opcode {
143
151
  };
144
152
 
145
153
 
146
- // Some special instructions encoded as a TEQ with S=0 (bit 20).
147
- enum Opcode9Bits {
154
+ // The bits for bit 7-4 for some type 0 miscellaneous instructions.
155
+ enum MiscInstructionsBits74 {
156
+ // With bits 22-21 01.
148
157
  BX = 1,
149
158
  BXJ = 2,
150
159
  BLX = 3,
151
- BKPT = 7
152
- };
160
+ BKPT = 7,
153
161
 
154
-
155
- // Some special instructions encoded as a CMN with S=0 (bit 20).
156
- enum Opcode11Bits {
162
+ // With bits 22-21 11.
157
163
  CLZ = 1
158
164
  };
159
165
 
160
166
 
161
- // S
162
-
163
-
164
167
  // Shifter types for Data-processing operands as defined in section A5.1.2.
165
168
  enum Shift {
166
169
  no_shift = -1,
@@ -237,6 +240,7 @@ class Instr {
237
240
  inline int RnField() const { return Bits(19, 16); }
238
241
  inline int RdField() const { return Bits(15, 12); }
239
242
 
243
+ inline int CoprocessorField() const { return Bits(11, 8); }
240
244
  // Support for VFP.
241
245
  // Vn(19-16) | Vd(15-12) | Vm(3-0)
242
246
  inline int VnField() const { return Bits(19, 16); }
@@ -246,6 +250,16 @@ class Instr {
246
250
  inline int MField() const { return Bit(5); }
247
251
  inline int DField() const { return Bit(22); }
248
252
  inline int RtField() const { return Bits(15, 12); }
253
+ inline int PField() const { return Bit(24); }
254
+ inline int UField() const { return Bit(23); }
255
+ inline int Opc1Field() const { return (Bit(23) << 2) | Bits(21, 20); }
256
+ inline int Opc2Field() const { return Bits(19, 16); }
257
+ inline int Opc3Field() const { return Bits(7, 6); }
258
+ inline int SzField() const { return Bit(8); }
259
+ inline int VLField() const { return Bit(20); }
260
+ inline int VCField() const { return Bit(8); }
261
+ inline int VAField() const { return Bits(23, 21); }
262
+ inline int VBField() const { return Bits(6, 5); }
249
263
 
250
264
  // Fields used in Data processing instructions
251
265
  inline Opcode OpcodeField() const {
@@ -291,11 +305,18 @@ class Instr {
291
305
  // as well as multiplications).
292
306
  inline bool IsSpecialType0() const { return (Bit(7) == 1) && (Bit(4) == 1); }
293
307
 
308
+ // Test for miscellaneous instructions encodings of type 0 instructions.
309
+ inline bool IsMiscType0() const { return (Bit(24) == 1)
310
+ && (Bit(23) == 0)
311
+ && (Bit(20) == 0)
312
+ && ((Bit(7) == 0)); }
313
+
294
314
  // Special accessors that test for existence of a value.
295
315
  inline bool HasS() const { return SField() == 1; }
296
316
  inline bool HasB() const { return BField() == 1; }
297
317
  inline bool HasW() const { return WField() == 1; }
298
318
  inline bool HasL() const { return LField() == 1; }
319
+ inline bool HasU() const { return UField() == 1; }
299
320
  inline bool HasSign() const { return SignField() == 1; }
300
321
  inline bool HasH() const { return HField() == 1; }
301
322
  inline bool HasLink() const { return LinkField() == 1; }
@@ -335,7 +356,12 @@ class Registers {
335
356
  class VFPRegisters {
336
357
  public:
337
358
  // Return the name of the register.
338
- static const char* Name(int reg);
359
+ static const char* Name(int reg, bool is_double);
360
+
361
+ // Lookup the register number for the name provided.
362
+ // Set flag pointed by is_double to true if register
363
+ // is double-precision.
364
+ static int Number(const char* name, bool* is_double);
339
365
 
340
366
  private:
341
367
  static const char* names_[kNumVFPRegisters];
@@ -26,7 +26,7 @@
26
26
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  // CPU specific code for arm independent of OS goes here.
29
- #if defined(__arm__)
29
+ #ifdef __arm__
30
30
  #include <sys/syscall.h> // for cache flushing.
31
31
  #endif
32
32
 
@@ -35,6 +35,10 @@
35
35
  #include "cpu.h"
36
36
  #include "macro-assembler.h"
37
37
 
38
+ #ifndef __arm__
39
+ #include "simulator-arm.h" // for cache flushing.
40
+ #endif
41
+
38
42
  namespace v8 {
39
43
  namespace internal {
40
44
 
@@ -46,9 +50,11 @@ void CPU::Setup() {
46
50
  void CPU::FlushICache(void* start, size_t size) {
47
51
  #if !defined (__arm__)
48
52
  // Not generating ARM instructions for C-code. This means that we are
49
- // building an ARM emulator based target. No I$ flushes are necessary.
53
+ // building an ARM emulator based target. We should notify the simulator
54
+ // that the Icache was flushed.
50
55
  // None of this code ends up in the snapshot so there are no issues
51
56
  // around whether or not to generate the code when building snapshots.
57
+ assembler::arm::Simulator::FlushICache(start, size);
52
58
  #else
53
59
  // Ideally, we would call
54
60
  // syscall(__ARM_NR_cacheflush, start,
@@ -122,7 +128,7 @@ void CPU::FlushICache(void* start, size_t size) {
122
128
 
123
129
 
124
130
  void CPU::DebugBreak() {
125
- #if !defined (__arm__)
131
+ #if !defined (__arm__) || !defined(CAN_USE_ARMV5_INSTRUCTIONS)
126
132
  UNIMPLEMENTED(); // when building ARM emulator target
127
133
  #else
128
134
  asm volatile("bkpt 0");
@@ -46,13 +46,23 @@ void BreakLocationIterator::SetDebugBreakAtReturn() {
46
46
  // add sp, sp, #4
47
47
  // bx lr
48
48
  // to a call to the debug break return code.
49
+ // #if USE_BLX
50
+ // ldr ip, [pc, #0]
51
+ // blx ip
52
+ // #else
49
53
  // mov lr, pc
50
54
  // ldr pc, [pc, #-4]
55
+ // #endif
51
56
  // <debug break return code entry point address>
52
57
  // bktp 0
53
58
  CodePatcher patcher(rinfo()->pc(), 4);
59
+ #ifdef USE_BLX
60
+ patcher.masm()->ldr(v8::internal::ip, MemOperand(v8::internal::pc, 0));
61
+ patcher.masm()->blx(v8::internal::ip);
62
+ #else
54
63
  patcher.masm()->mov(v8::internal::lr, v8::internal::pc);
55
64
  patcher.masm()->ldr(v8::internal::pc, MemOperand(v8::internal::pc, -4));
65
+ #endif
56
66
  patcher.Emit(Debug::debug_break_return()->entry());
57
67
  patcher.masm()->bkpt(0);
58
68
  }
@@ -98,7 +108,7 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
98
108
  __ mov(r0, Operand(0)); // no arguments
99
109
  __ mov(r1, Operand(ExternalReference::debug_break()));
100
110
 
101
- CEntryDebugBreakStub ceb;
111
+ CEntryStub ceb(1, ExitFrame::MODE_DEBUG);
102
112
  __ CallStub(&ceb);
103
113
 
104
114
  // Restore the register values containing object pointers from the expression
@@ -123,12 +133,12 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
123
133
  void Debug::GenerateLoadICDebugBreak(MacroAssembler* masm) {
124
134
  // Calling convention for IC load (from ic-arm.cc).
125
135
  // ----------- S t a t e -------------
126
- // -- r0 : receiver
127
136
  // -- r2 : name
128
137
  // -- lr : return address
138
+ // -- r0 : receiver
129
139
  // -- [sp] : receiver
130
140
  // -----------------------------------
131
- // Registers r0 and r2 contain objects that needs to be pushed on the
141
+ // Registers r0 and r2 contain objects that need to be pushed on the
132
142
  // expression stack of the fake JS frame.
133
143
  Generate_DebugBreakCallHelper(masm, r0.bit() | r2.bit());
134
144
  }
@@ -137,23 +147,24 @@ void Debug::GenerateLoadICDebugBreak(MacroAssembler* masm) {
137
147
  void Debug::GenerateStoreICDebugBreak(MacroAssembler* masm) {
138
148
  // Calling convention for IC store (from ic-arm.cc).
139
149
  // ----------- S t a t e -------------
140
- // -- r0 : receiver
150
+ // -- r0 : value
151
+ // -- r1 : receiver
141
152
  // -- r2 : name
142
153
  // -- lr : return address
143
- // -- [sp] : receiver
144
154
  // -----------------------------------
145
- // Registers r0 and r2 contain objects that needs to be pushed on the
155
+ // Registers r0, r1, and r2 contain objects that need to be pushed on the
146
156
  // expression stack of the fake JS frame.
147
- Generate_DebugBreakCallHelper(masm, r0.bit() | r2.bit());
157
+ Generate_DebugBreakCallHelper(masm, r0.bit() | r1.bit() | r2.bit());
148
158
  }
149
159
 
150
160
 
151
161
  void Debug::GenerateKeyedLoadICDebugBreak(MacroAssembler* masm) {
152
162
  // ---------- S t a t e --------------
153
163
  // -- lr : return address
164
+ // -- r0 : key
154
165
  // -- sp[0] : key
155
166
  // -- sp[4] : receiver
156
- Generate_DebugBreakCallHelper(masm, 0);
167
+ Generate_DebugBreakCallHelper(masm, r0.bit());
157
168
  }
158
169
 
159
170
 
@@ -206,8 +217,23 @@ void Debug::GenerateStubNoRegistersDebugBreak(MacroAssembler* masm) {
206
217
  }
207
218
 
208
219
 
220
+ void Debug::GeneratePlainReturnLiveEdit(MacroAssembler* masm) {
221
+ masm->Abort("LiveEdit frame dropping is not supported on arm");
222
+ }
223
+
224
+ void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) {
225
+ masm->Abort("LiveEdit frame dropping is not supported on arm");
226
+ }
227
+
209
228
  #undef __
210
229
 
230
+
231
+ void Debug::SetUpFrameDropperFrame(StackFrame* bottom_js_frame,
232
+ Handle<Code> code) {
233
+ UNREACHABLE();
234
+ }
235
+ const int Debug::kFrameDropperFrameSize = -1;
236
+
211
237
  #endif // ENABLE_DEBUGGER_SUPPORT
212
238
 
213
239
  } } // namespace v8::internal
@@ -1,4 +1,4 @@
1
- // Copyright 2007-2009 the V8 project authors. All rights reserved.
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:
@@ -34,10 +34,9 @@
34
34
  // NameConverter converter;
35
35
  // Disassembler d(converter);
36
36
  // for (byte* pc = begin; pc < end;) {
37
- // char buffer[128];
38
- // buffer[0] = '\0';
37
+ // v8::internal::EmbeddedVector<char, 256> buffer;
39
38
  // byte* prev_pc = pc;
40
- // pc += d.InstructionDecode(buffer, sizeof buffer, pc);
39
+ // pc += d.InstructionDecode(buffer, pc);
41
40
  // printf("%p %08x %s\n",
42
41
  // prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer);
43
42
  // }
@@ -129,6 +128,10 @@ class Decoder {
129
128
  void DecodeTypeVFP(Instr* instr);
130
129
  void DecodeType6CoprocessorIns(Instr* instr);
131
130
 
131
+ void DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(Instr* instr);
132
+ void DecodeVCMP(Instr* instr);
133
+ void DecodeVCVTBetweenDoubleAndSingle(Instr* instr);
134
+ void DecodeVCVTBetweenFloatingPointAndInteger(Instr* instr);
132
135
 
133
136
  const disasm::NameConverter& converter_;
134
137
  v8::internal::Vector<char> out_buffer_;
@@ -181,12 +184,12 @@ void Decoder::PrintRegister(int reg) {
181
184
 
182
185
  // Print the VFP S register name according to the active name converter.
183
186
  void Decoder::PrintSRegister(int reg) {
184
- Print(assembler::arm::VFPRegisters::Name(reg));
187
+ Print(assembler::arm::VFPRegisters::Name(reg, false));
185
188
  }
186
189
 
187
190
  // Print the VFP D register name according to the active name converter.
188
191
  void Decoder::PrintDRegister(int reg) {
189
- Print(assembler::arm::VFPRegisters::Name(reg + 32));
192
+ Print(assembler::arm::VFPRegisters::Name(reg, true));
190
193
  }
191
194
 
192
195
 
@@ -429,12 +432,30 @@ int Decoder::FormatOption(Instr* instr, const char* format) {
429
432
  return 3;
430
433
  }
431
434
  case 'o': {
432
- if (format[3] == '1') {
435
+ if ((format[3] == '1') && (format[4] == '2')) {
433
436
  // 'off12: 12-bit offset for load and store instructions
434
437
  ASSERT(STRING_STARTS_WITH(format, "off12"));
435
438
  out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
436
439
  "%d", instr->Offset12Field());
437
440
  return 5;
441
+ } else if ((format[3] == '1') && (format[4] == '6')) {
442
+ ASSERT(STRING_STARTS_WITH(format, "off16to20"));
443
+ out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
444
+ "%d", instr->Bits(20, 16) +1);
445
+ return 9;
446
+ } else if (format[3] == '7') {
447
+ ASSERT(STRING_STARTS_WITH(format, "off7to11"));
448
+ out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
449
+ "%d", instr->ShiftAmountField());
450
+ return 8;
451
+ } else if (format[3] == '0') {
452
+ // 'off0to3and8to19 16-bit immediate encoded in bits 19-8 and 3-0.
453
+ ASSERT(STRING_STARTS_WITH(format, "off0to3and8to19"));
454
+ out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
455
+ "%d",
456
+ (instr->Bits(19, 8) << 4) +
457
+ instr->Bits(3, 0));
458
+ return 15;
438
459
  }
439
460
  // 'off8: 8-bit offset for extra load and store instructions
440
461
  ASSERT(STRING_STARTS_WITH(format, "off8"));
@@ -636,6 +657,34 @@ void Decoder::DecodeType01(Instr* instr) {
636
657
  }
637
658
  return;
638
659
  }
660
+ } else if ((type == 0) && instr->IsMiscType0()) {
661
+ if (instr->Bits(22, 21) == 1) {
662
+ switch (instr->Bits(7, 4)) {
663
+ case BX:
664
+ Format(instr, "bx'cond 'rm");
665
+ break;
666
+ case BLX:
667
+ Format(instr, "blx'cond 'rm");
668
+ break;
669
+ case BKPT:
670
+ Format(instr, "bkpt 'off0to3and8to19");
671
+ break;
672
+ default:
673
+ Unknown(instr); // not used by V8
674
+ break;
675
+ }
676
+ } else if (instr->Bits(22, 21) == 3) {
677
+ switch (instr->Bits(7, 4)) {
678
+ case CLZ:
679
+ Format(instr, "clz'cond 'rd, 'rm");
680
+ break;
681
+ default:
682
+ Unknown(instr); // not used by V8
683
+ break;
684
+ }
685
+ } else {
686
+ Unknown(instr); // not used by V8
687
+ }
639
688
  } else {
640
689
  switch (instr->OpcodeField()) {
641
690
  case AND: {
@@ -682,17 +731,9 @@ void Decoder::DecodeType01(Instr* instr) {
682
731
  if (instr->HasS()) {
683
732
  Format(instr, "teq'cond 'rn, 'shift_op");
684
733
  } else {
685
- switch (instr->Bits(7, 4)) {
686
- case BX:
687
- Format(instr, "bx'cond 'rm");
688
- break;
689
- case BLX:
690
- Format(instr, "blx'cond 'rm");
691
- break;
692
- default:
693
- Unknown(instr); // not used by V8
694
- break;
695
- }
734
+ // Other instructions matching this pattern are handled in the
735
+ // miscellaneous instructions part above.
736
+ UNREACHABLE();
696
737
  }
697
738
  break;
698
739
  }
@@ -708,14 +749,9 @@ void Decoder::DecodeType01(Instr* instr) {
708
749
  if (instr->HasS()) {
709
750
  Format(instr, "cmn'cond 'rn, 'shift_op");
710
751
  } else {
711
- switch (instr->Bits(7, 4)) {
712
- case CLZ:
713
- Format(instr, "clz'cond 'rd, 'rm");
714
- break;
715
- default:
716
- Unknown(instr); // not used by V8
717
- break;
718
- }
752
+ // Other instructions matching this pattern are handled in the
753
+ // miscellaneous instructions part above.
754
+ UNREACHABLE();
719
755
  }
720
756
  break;
721
757
  }
@@ -795,7 +831,18 @@ void Decoder::DecodeType3(Instr* instr) {
795
831
  break;
796
832
  }
797
833
  case 3: {
798
- Format(instr, "'memop'cond'b 'rd, ['rn, +'shift_rm]'w");
834
+ if (instr->HasW() && (instr->Bits(6, 4) == 0x5)) {
835
+ uint32_t widthminus1 = static_cast<uint32_t>(instr->Bits(20, 16));
836
+ uint32_t lsbit = static_cast<uint32_t>(instr->ShiftAmountField());
837
+ uint32_t msbit = widthminus1 + lsbit;
838
+ if (msbit <= 31) {
839
+ Format(instr, "ubfx'cond 'rd, 'rm, #'off7to11, #'off16to20");
840
+ } else {
841
+ UNREACHABLE();
842
+ }
843
+ } else {
844
+ Format(instr, "'memop'cond'b 'rd, ['rn, +'shift_rm]'w");
845
+ }
799
846
  break;
800
847
  }
801
848
  default: {
@@ -909,87 +956,151 @@ void Decoder::DecodeUnconditional(Instr* instr) {
909
956
  // VMRS
910
957
  void Decoder::DecodeTypeVFP(Instr* instr) {
911
958
  ASSERT((instr->TypeField() == 7) && (instr->Bit(24) == 0x0) );
912
-
913
- if (instr->Bit(23) == 1) {
914
- if ((instr->Bits(21, 19) == 0x7) &&
915
- (instr->Bits(18, 16) == 0x5) &&
916
- (instr->Bits(11, 9) == 0x5) &&
917
- (instr->Bit(8) == 1) &&
918
- (instr->Bit(6) == 1) &&
919
- (instr->Bit(4) == 0)) {
920
- Format(instr, "vcvt.s32.f64'cond 'Sd, 'Dm");
921
- } else if ((instr->Bits(21, 19) == 0x7) &&
922
- (instr->Bits(18, 16) == 0x0) &&
923
- (instr->Bits(11, 9) == 0x5) &&
924
- (instr->Bit(8) == 1) &&
925
- (instr->Bit(7) == 1) &&
926
- (instr->Bit(6) == 1) &&
927
- (instr->Bit(4) == 0)) {
928
- Format(instr, "vcvt.f64.s32'cond 'Dd, 'Sm");
929
- } else if ((instr->Bit(21) == 0x0) &&
930
- (instr->Bit(20) == 0x0) &&
931
- (instr->Bits(11, 9) == 0x5) &&
932
- (instr->Bit(8) == 1) &&
933
- (instr->Bit(6) == 0) &&
934
- (instr->Bit(4) == 0)) {
959
+ ASSERT(instr->Bits(11, 9) == 0x5);
960
+
961
+ if (instr->Bit(4) == 0) {
962
+ if (instr->Opc1Field() == 0x7) {
963
+ // Other data processing instructions
964
+ if ((instr->Opc2Field() == 0x7) && (instr->Opc3Field() == 0x3)) {
965
+ DecodeVCVTBetweenDoubleAndSingle(instr);
966
+ } else if ((instr->Opc2Field() == 0x8) && (instr->Opc3Field() & 0x1)) {
967
+ DecodeVCVTBetweenFloatingPointAndInteger(instr);
968
+ } else if (((instr->Opc2Field() >> 1) == 0x6) &&
969
+ (instr->Opc3Field() & 0x1)) {
970
+ DecodeVCVTBetweenFloatingPointAndInteger(instr);
971
+ } else if (((instr->Opc2Field() == 0x4) || (instr->Opc2Field() == 0x5)) &&
972
+ (instr->Opc3Field() & 0x1)) {
973
+ DecodeVCMP(instr);
974
+ } else {
975
+ Unknown(instr); // Not used by V8.
976
+ }
977
+ } else if (instr->Opc1Field() == 0x3) {
978
+ if (instr->SzField() == 0x1) {
979
+ if (instr->Opc3Field() & 0x1) {
980
+ Format(instr, "vsub.f64'cond 'Dd, 'Dn, 'Dm");
981
+ } else {
982
+ Format(instr, "vadd.f64'cond 'Dd, 'Dn, 'Dm");
983
+ }
984
+ } else {
985
+ Unknown(instr); // Not used by V8.
986
+ }
987
+ } else if ((instr->Opc1Field() == 0x2) && !(instr->Opc3Field() & 0x1)) {
988
+ if (instr->SzField() == 0x1) {
989
+ Format(instr, "vmul.f64'cond 'Dd, 'Dn, 'Dm");
990
+ } else {
991
+ Unknown(instr); // Not used by V8.
992
+ }
993
+ } else if ((instr->Opc1Field() == 0x4) && !(instr->Opc3Field() & 0x1)) {
994
+ if (instr->SzField() == 0x1) {
935
995
  Format(instr, "vdiv.f64'cond 'Dd, 'Dn, 'Dm");
936
- } else if ((instr->Bits(21, 20) == 0x3) &&
937
- (instr->Bits(19, 16) == 0x4) &&
938
- (instr->Bits(11, 9) == 0x5) &&
939
- (instr->Bit(8) == 0x1) &&
940
- (instr->Bit(6) == 0x1) &&
941
- (instr->Bit(4) == 0x0)) {
942
- Format(instr, "vcmp.f64'cond 'Dd, 'Dm");
943
- } else if ((instr->Bits(23, 20) == 0xF) &&
944
- (instr->Bits(19, 16) == 0x1) &&
945
- (instr->Bits(11, 8) == 0xA) &&
946
- (instr->Bits(7, 5) == 0x0) &&
947
- (instr->Bit(4) == 0x1) &&
948
- (instr->Bits(3, 0) == 0x0)) {
949
- if (instr->Bits(15, 12) == 0xF)
950
- Format(instr, "vmrs'cond APSR, FPSCR");
951
- else
952
- Unknown(instr); // Not used by V8.
996
+ } else {
997
+ Unknown(instr); // Not used by V8.
998
+ }
953
999
  } else {
954
1000
  Unknown(instr); // Not used by V8.
955
1001
  }
956
- } else if (instr->Bit(21) == 1) {
957
- if ((instr->Bit(20) == 0x1) &&
958
- (instr->Bits(11, 9) == 0x5) &&
959
- (instr->Bit(8) == 0x1) &&
960
- (instr->Bit(6) == 0) &&
961
- (instr->Bit(4) == 0)) {
962
- Format(instr, "vadd.f64'cond 'Dd, 'Dn, 'Dm");
963
- } else if ((instr->Bit(20) == 0x1) &&
964
- (instr->Bits(11, 9) == 0x5) &&
965
- (instr->Bit(8) == 0x1) &&
966
- (instr->Bit(6) == 1) &&
967
- (instr->Bit(4) == 0)) {
968
- Format(instr, "vsub.f64'cond 'Dd, 'Dn, 'Dm");
969
- } else if ((instr->Bit(20) == 0x0) &&
970
- (instr->Bits(11, 9) == 0x5) &&
971
- (instr->Bit(8) == 0x1) &&
972
- (instr->Bit(6) == 0) &&
973
- (instr->Bit(4) == 0)) {
974
- Format(instr, "vmul.f64'cond 'Dd, 'Dn, 'Dm");
1002
+ } else {
1003
+ if ((instr->VCField() == 0x0) &&
1004
+ (instr->VAField() == 0x0)) {
1005
+ DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(instr);
1006
+ } else if ((instr->VLField() == 0x1) &&
1007
+ (instr->VCField() == 0x0) &&
1008
+ (instr->VAField() == 0x7) &&
1009
+ (instr->Bits(19, 16) == 0x1)) {
1010
+ if (instr->Bits(15, 12) == 0xF)
1011
+ Format(instr, "vmrs'cond APSR, FPSCR");
1012
+ else
1013
+ Unknown(instr); // Not used by V8.
975
1014
  } else {
976
1015
  Unknown(instr); // Not used by V8.
977
1016
  }
1017
+ }
1018
+ }
1019
+
1020
+
1021
+ void Decoder::DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(Instr* instr) {
1022
+ ASSERT((instr->Bit(4) == 1) && (instr->VCField() == 0x0) &&
1023
+ (instr->VAField() == 0x0));
1024
+
1025
+ bool to_arm_register = (instr->VLField() == 0x1);
1026
+
1027
+ if (to_arm_register) {
1028
+ Format(instr, "vmov'cond 'rt, 'Sn");
978
1029
  } else {
979
- if ((instr->Bit(20) == 0x0) &&
980
- (instr->Bits(11, 8) == 0xA) &&
981
- (instr->Bits(6, 5) == 0x0) &&
982
- (instr->Bit(4) == 1) &&
983
- (instr->Bits(3, 0) == 0x0)) {
984
- Format(instr, "vmov'cond 'Sn, 'rt");
985
- } else if ((instr->Bit(20) == 0x1) &&
986
- (instr->Bits(11, 8) == 0xA) &&
987
- (instr->Bits(6, 5) == 0x0) &&
988
- (instr->Bit(4) == 1) &&
989
- (instr->Bits(3, 0) == 0x0)) {
990
- Format(instr, "vmov'cond 'rt, 'Sn");
1030
+ Format(instr, "vmov'cond 'Sn, 'rt");
1031
+ }
1032
+ }
1033
+
1034
+
1035
+ void Decoder::DecodeVCMP(Instr* instr) {
1036
+ ASSERT((instr->Bit(4) == 0) && (instr->Opc1Field() == 0x7));
1037
+ ASSERT(((instr->Opc2Field() == 0x4) || (instr->Opc2Field() == 0x5)) &&
1038
+ (instr->Opc3Field() & 0x1));
1039
+
1040
+ // Comparison.
1041
+ bool dp_operation = (instr->SzField() == 1);
1042
+ bool raise_exception_for_qnan = (instr->Bit(7) == 0x1);
1043
+
1044
+ if (dp_operation && !raise_exception_for_qnan) {
1045
+ Format(instr, "vcmp.f64'cond 'Dd, 'Dm");
1046
+ } else {
1047
+ Unknown(instr); // Not used by V8.
1048
+ }
1049
+ }
1050
+
1051
+
1052
+ void Decoder::DecodeVCVTBetweenDoubleAndSingle(Instr* instr) {
1053
+ ASSERT((instr->Bit(4) == 0) && (instr->Opc1Field() == 0x7));
1054
+ ASSERT((instr->Opc2Field() == 0x7) && (instr->Opc3Field() == 0x3));
1055
+
1056
+ bool double_to_single = (instr->SzField() == 1);
1057
+
1058
+ if (double_to_single) {
1059
+ Format(instr, "vcvt.f32.f64'cond 'Sd, 'Dm");
1060
+ } else {
1061
+ Format(instr, "vcvt.f64.f32'cond 'Dd, 'Sm");
1062
+ }
1063
+ }
1064
+
1065
+
1066
+ void Decoder::DecodeVCVTBetweenFloatingPointAndInteger(Instr* instr) {
1067
+ ASSERT((instr->Bit(4) == 0) && (instr->Opc1Field() == 0x7));
1068
+ ASSERT(((instr->Opc2Field() == 0x8) && (instr->Opc3Field() & 0x1)) ||
1069
+ (((instr->Opc2Field() >> 1) == 0x6) && (instr->Opc3Field() & 0x1)));
1070
+
1071
+ bool to_integer = (instr->Bit(18) == 1);
1072
+ bool dp_operation = (instr->SzField() == 1);
1073
+ if (to_integer) {
1074
+ bool unsigned_integer = (instr->Bit(16) == 0);
1075
+
1076
+ if (dp_operation) {
1077
+ if (unsigned_integer) {
1078
+ Format(instr, "vcvt.u32.f64'cond 'Sd, 'Dm");
1079
+ } else {
1080
+ Format(instr, "vcvt.s32.f64'cond 'Sd, 'Dm");
1081
+ }
991
1082
  } else {
992
- Unknown(instr); // Not used by V8.
1083
+ if (unsigned_integer) {
1084
+ Format(instr, "vcvt.u32.f32'cond 'Sd, 'Sm");
1085
+ } else {
1086
+ Format(instr, "vcvt.s32.f32'cond 'Sd, 'Sm");
1087
+ }
1088
+ }
1089
+ } else {
1090
+ bool unsigned_integer = (instr->Bit(7) == 0);
1091
+
1092
+ if (dp_operation) {
1093
+ if (unsigned_integer) {
1094
+ Format(instr, "vcvt.f64.u32'cond 'Dd, 'Sm");
1095
+ } else {
1096
+ Format(instr, "vcvt.f64.s32'cond 'Dd, 'Sm");
1097
+ }
1098
+ } else {
1099
+ if (unsigned_integer) {
1100
+ Format(instr, "vcvt.f32.u32'cond 'Sd, 'Sm");
1101
+ } else {
1102
+ Format(instr, "vcvt.f32.s32'cond 'Sd, 'Sm");
1103
+ }
993
1104
  }
994
1105
  }
995
1106
  }
@@ -998,29 +1109,63 @@ void Decoder::DecodeTypeVFP(Instr* instr) {
998
1109
  // Decode Type 6 coprocessor instructions.
999
1110
  // Dm = vmov(Rt, Rt2)
1000
1111
  // <Rt, Rt2> = vmov(Dm)
1112
+ // Ddst = MEM(Rbase + 4*offset).
1113
+ // MEM(Rbase + 4*offset) = Dsrc.
1001
1114
  void Decoder::DecodeType6CoprocessorIns(Instr* instr) {
1002
1115
  ASSERT((instr->TypeField() == 6));
1003
1116
 
1004
- if (instr->Bit(23) == 1) {
1005
- Unknown(instr); // Not used by V8.
1006
- } else if (instr->Bit(22) == 1) {
1007
- if ((instr->Bits(27, 24) == 0xC) &&
1008
- (instr->Bit(22) == 1) &&
1009
- (instr->Bits(11, 8) == 0xB) &&
1010
- (instr->Bits(7, 6) == 0x0) &&
1011
- (instr->Bit(4) == 1)) {
1012
- if (instr->Bit(20) == 0) {
1013
- Format(instr, "vmov'cond 'Dm, 'rt, 'rn");
1014
- } else if (instr->Bit(20) == 1) {
1015
- Format(instr, "vmov'cond 'rt, 'rn, 'Dm");
1016
- }
1017
- } else {
1018
- Unknown(instr); // Not used by V8.
1117
+ if (instr->CoprocessorField() == 0xA) {
1118
+ switch (instr->OpcodeField()) {
1119
+ case 0x8:
1120
+ if (instr->HasL()) {
1121
+ Format(instr, "vldr'cond 'Sd, ['rn - 4*'off8]");
1122
+ } else {
1123
+ Format(instr, "vstr'cond 'Sd, ['rn - 4*'off8]");
1124
+ }
1125
+ break;
1126
+ case 0xC:
1127
+ if (instr->HasL()) {
1128
+ Format(instr, "vldr'cond 'Sd, ['rn + 4*'off8]");
1129
+ } else {
1130
+ Format(instr, "vstr'cond 'Sd, ['rn + 4*'off8]");
1131
+ }
1132
+ break;
1133
+ default:
1134
+ Unknown(instr); // Not used by V8.
1135
+ break;
1136
+ }
1137
+ } else if (instr->CoprocessorField() == 0xB) {
1138
+ switch (instr->OpcodeField()) {
1139
+ case 0x2:
1140
+ // Load and store double to two GP registers
1141
+ if (instr->Bits(7, 4) != 0x1) {
1142
+ Unknown(instr); // Not used by V8.
1143
+ } else if (instr->HasL()) {
1144
+ Format(instr, "vmov'cond 'rt, 'rn, 'Dm");
1145
+ } else {
1146
+ Format(instr, "vmov'cond 'Dm, 'rt, 'rn");
1147
+ }
1148
+ break;
1149
+ case 0x8:
1150
+ if (instr->HasL()) {
1151
+ Format(instr, "vldr'cond 'Dd, ['rn - 4*'off8]");
1152
+ } else {
1153
+ Format(instr, "vstr'cond 'Dd, ['rn - 4*'off8]");
1154
+ }
1155
+ break;
1156
+ case 0xC:
1157
+ if (instr->HasL()) {
1158
+ Format(instr, "vldr'cond 'Dd, ['rn + 4*'off8]");
1159
+ } else {
1160
+ Format(instr, "vstr'cond 'Dd, ['rn + 4*'off8]");
1161
+ }
1162
+ break;
1163
+ default:
1164
+ Unknown(instr); // Not used by V8.
1165
+ break;
1019
1166
  }
1020
- } else if (instr->Bit(21) == 1) {
1021
- Unknown(instr); // Not used by V8.
1022
1167
  } else {
1023
- Unknown(instr); // Not used by V8.
1168
+ UNIMPLEMENTED(); // Not used by V8.
1024
1169
  }
1025
1170
  }
1026
1171