therubyracer 0.9.0beta2 → 0.9.0beta3

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 (920) hide show
  1. data/.gitmodules +3 -0
  2. data/ext/v8/upstream/Makefile +1 -2
  3. data/ext/v8/upstream/v8/.gitignore +33 -0
  4. data/ext/v8/upstream/v8/AUTHORS +42 -0
  5. data/ext/v8/upstream/v8/ChangeLog +2663 -0
  6. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE +0 -0
  7. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.strongtalk +0 -0
  8. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.v8 +0 -0
  9. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.valgrind +0 -0
  10. data/ext/v8/upstream/v8/SConstruct +1473 -0
  11. data/ext/v8/upstream/{3.1.8 → v8}/build/README.txt +0 -0
  12. data/ext/v8/upstream/{3.1.8 → v8}/build/all.gyp +0 -0
  13. data/ext/v8/upstream/{3.1.8 → v8}/build/armu.gypi +0 -0
  14. data/ext/v8/upstream/{3.1.8 → v8}/build/common.gypi +0 -0
  15. data/ext/v8/upstream/{3.1.8 → v8}/build/gyp_v8 +0 -0
  16. data/ext/v8/upstream/v8/include/v8-debug.h +394 -0
  17. data/ext/v8/upstream/v8/include/v8-preparser.h +116 -0
  18. data/ext/v8/upstream/v8/include/v8-profiler.h +505 -0
  19. data/ext/v8/upstream/v8/include/v8-testing.h +104 -0
  20. data/ext/v8/upstream/v8/include/v8.h +4000 -0
  21. data/ext/v8/upstream/{3.1.8 → v8}/include/v8stdint.h +0 -0
  22. data/ext/v8/upstream/v8/preparser/SConscript +38 -0
  23. data/ext/v8/upstream/v8/preparser/preparser-process.cc +169 -0
  24. data/ext/v8/upstream/v8/src/SConscript +380 -0
  25. data/ext/v8/upstream/v8/src/accessors.cc +766 -0
  26. data/ext/v8/upstream/{3.1.8 → v8}/src/accessors.h +0 -0
  27. data/ext/v8/upstream/v8/src/allocation-inl.h +49 -0
  28. data/ext/v8/upstream/v8/src/allocation.cc +122 -0
  29. data/ext/v8/upstream/v8/src/allocation.h +143 -0
  30. data/ext/v8/upstream/v8/src/api.cc +5678 -0
  31. data/ext/v8/upstream/v8/src/api.h +572 -0
  32. data/ext/v8/upstream/{3.1.8 → v8}/src/apinatives.js +0 -0
  33. data/ext/v8/upstream/v8/src/apiutils.h +73 -0
  34. data/ext/v8/upstream/v8/src/arguments.h +116 -0
  35. data/ext/v8/upstream/v8/src/arm/assembler-arm-inl.h +353 -0
  36. data/ext/v8/upstream/v8/src/arm/assembler-arm.cc +2877 -0
  37. data/ext/v8/upstream/v8/src/arm/assembler-arm.h +1382 -0
  38. data/ext/v8/upstream/v8/src/arm/builtins-arm.cc +1634 -0
  39. data/ext/v8/upstream/v8/src/arm/code-stubs-arm.cc +6917 -0
  40. data/ext/v8/upstream/v8/src/arm/code-stubs-arm.h +623 -0
  41. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/codegen-arm-inl.h +0 -0
  42. data/ext/v8/upstream/v8/src/arm/codegen-arm.cc +7437 -0
  43. data/ext/v8/upstream/v8/src/arm/codegen-arm.h +595 -0
  44. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/constants-arm.cc +0 -0
  45. data/ext/v8/upstream/v8/src/arm/constants-arm.h +778 -0
  46. data/ext/v8/upstream/v8/src/arm/cpu-arm.cc +149 -0
  47. data/ext/v8/upstream/v8/src/arm/debug-arm.cc +317 -0
  48. data/ext/v8/upstream/v8/src/arm/deoptimizer-arm.cc +737 -0
  49. data/ext/v8/upstream/v8/src/arm/disasm-arm.cc +1503 -0
  50. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/frames-arm.cc +0 -0
  51. data/ext/v8/upstream/v8/src/arm/frames-arm.h +168 -0
  52. data/ext/v8/upstream/v8/src/arm/full-codegen-arm.cc +4374 -0
  53. data/ext/v8/upstream/v8/src/arm/ic-arm.cc +1793 -0
  54. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/jump-target-arm.cc +0 -0
  55. data/ext/v8/upstream/v8/src/arm/lithium-arm.cc +2120 -0
  56. data/ext/v8/upstream/v8/src/arm/lithium-arm.h +2179 -0
  57. data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.cc +4132 -0
  58. data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.h +329 -0
  59. data/ext/v8/upstream/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
  60. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/lithium-gap-resolver-arm.h +0 -0
  61. data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.cc +2939 -0
  62. data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.h +1071 -0
  63. data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
  64. data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
  65. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm-inl.h +0 -0
  66. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.cc +0 -0
  67. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.h +0 -0
  68. data/ext/v8/upstream/v8/src/arm/simulator-arm.cc +3288 -0
  69. data/ext/v8/upstream/v8/src/arm/simulator-arm.h +413 -0
  70. data/ext/v8/upstream/v8/src/arm/stub-cache-arm.cc +4034 -0
  71. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/virtual-frame-arm-inl.h +0 -0
  72. data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.cc +843 -0
  73. data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.h +523 -0
  74. data/ext/v8/upstream/v8/src/array.js +1249 -0
  75. data/ext/v8/upstream/v8/src/assembler.cc +1067 -0
  76. data/ext/v8/upstream/v8/src/assembler.h +823 -0
  77. data/ext/v8/upstream/v8/src/ast-inl.h +112 -0
  78. data/ext/v8/upstream/v8/src/ast.cc +1078 -0
  79. data/ext/v8/upstream/v8/src/ast.h +2234 -0
  80. data/ext/v8/upstream/v8/src/atomicops.h +167 -0
  81. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_arm_gcc.h +0 -0
  82. data/ext/v8/upstream/v8/src/atomicops_internals_mips_gcc.h +169 -0
  83. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.cc +0 -0
  84. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.h +0 -0
  85. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_macosx.h +0 -0
  86. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_msvc.h +0 -0
  87. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.cc +0 -0
  88. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.h +0 -0
  89. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.cc +0 -0
  90. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.h +0 -0
  91. data/ext/v8/upstream/v8/src/bootstrapper.cc +2138 -0
  92. data/ext/v8/upstream/v8/src/bootstrapper.h +185 -0
  93. data/ext/v8/upstream/v8/src/builtins.cc +1708 -0
  94. data/ext/v8/upstream/v8/src/builtins.h +368 -0
  95. data/ext/v8/upstream/{3.1.8 → v8}/src/bytecodes-irregexp.h +0 -0
  96. data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.cc +0 -0
  97. data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.h +0 -0
  98. data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates-inl.h +0 -0
  99. data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates.h +0 -0
  100. data/ext/v8/upstream/v8/src/checks.cc +110 -0
  101. data/ext/v8/upstream/v8/src/checks.h +296 -0
  102. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue-inl.h +0 -0
  103. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.cc +0 -0
  104. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.h +0 -0
  105. data/ext/v8/upstream/v8/src/code-stubs.cc +240 -0
  106. data/ext/v8/upstream/v8/src/code-stubs.h +971 -0
  107. data/ext/v8/upstream/{3.1.8 → v8}/src/code.h +0 -0
  108. data/ext/v8/upstream/v8/src/codegen-inl.h +68 -0
  109. data/ext/v8/upstream/v8/src/codegen.cc +505 -0
  110. data/ext/v8/upstream/v8/src/codegen.h +245 -0
  111. data/ext/v8/upstream/v8/src/compilation-cache.cc +540 -0
  112. data/ext/v8/upstream/v8/src/compilation-cache.h +287 -0
  113. data/ext/v8/upstream/v8/src/compiler.cc +792 -0
  114. data/ext/v8/upstream/v8/src/compiler.h +307 -0
  115. data/ext/v8/upstream/v8/src/contexts.cc +327 -0
  116. data/ext/v8/upstream/v8/src/contexts.h +382 -0
  117. data/ext/v8/upstream/{3.1.8 → v8}/src/conversions-inl.h +0 -0
  118. data/ext/v8/upstream/v8/src/conversions.cc +1125 -0
  119. data/ext/v8/upstream/{3.1.8 → v8}/src/conversions.h +0 -0
  120. data/ext/v8/upstream/v8/src/counters.cc +93 -0
  121. data/ext/v8/upstream/v8/src/counters.h +254 -0
  122. data/ext/v8/upstream/v8/src/cpu-profiler-inl.h +101 -0
  123. data/ext/v8/upstream/v8/src/cpu-profiler.cc +606 -0
  124. data/ext/v8/upstream/v8/src/cpu-profiler.h +305 -0
  125. data/ext/v8/upstream/v8/src/cpu.h +67 -0
  126. data/ext/v8/upstream/v8/src/d8-debug.cc +367 -0
  127. data/ext/v8/upstream/v8/src/d8-debug.h +158 -0
  128. data/ext/v8/upstream/v8/src/d8-posix.cc +695 -0
  129. data/ext/v8/upstream/{3.1.8 → v8}/src/d8-readline.cc +0 -0
  130. data/ext/v8/upstream/{3.1.8 → v8}/src/d8-windows.cc +0 -0
  131. data/ext/v8/upstream/v8/src/d8.cc +796 -0
  132. data/ext/v8/upstream/v8/src/d8.gyp +88 -0
  133. data/ext/v8/upstream/{3.1.8 → v8}/src/d8.h +0 -0
  134. data/ext/v8/upstream/{3.1.8 → v8}/src/d8.js +0 -0
  135. data/ext/v8/upstream/{3.1.8 → v8}/src/data-flow.cc +0 -0
  136. data/ext/v8/upstream/v8/src/data-flow.h +379 -0
  137. data/ext/v8/upstream/{3.1.8 → v8}/src/date.js +0 -0
  138. data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser-inl.h +0 -0
  139. data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser.cc +0 -0
  140. data/ext/v8/upstream/v8/src/dateparser.h +265 -0
  141. data/ext/v8/upstream/v8/src/debug-agent.cc +447 -0
  142. data/ext/v8/upstream/v8/src/debug-agent.h +129 -0
  143. data/ext/v8/upstream/{3.1.8 → v8}/src/debug-debugger.js +0 -0
  144. data/ext/v8/upstream/v8/src/debug.cc +3188 -0
  145. data/ext/v8/upstream/v8/src/debug.h +1055 -0
  146. data/ext/v8/upstream/v8/src/deoptimizer.cc +1296 -0
  147. data/ext/v8/upstream/v8/src/deoptimizer.h +629 -0
  148. data/ext/v8/upstream/v8/src/disasm.h +80 -0
  149. data/ext/v8/upstream/v8/src/disassembler.cc +339 -0
  150. data/ext/v8/upstream/{3.1.8 → v8}/src/disassembler.h +0 -0
  151. data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.cc +0 -0
  152. data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.h +0 -0
  153. data/ext/v8/upstream/{3.1.8 → v8}/src/double.h +0 -0
  154. data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.cc +0 -0
  155. data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.h +0 -0
  156. data/ext/v8/upstream/v8/src/execution.cc +791 -0
  157. data/ext/v8/upstream/v8/src/execution.h +291 -0
  158. data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.cc +250 -0
  159. data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.h +89 -0
  160. data/ext/v8/upstream/v8/src/extensions/experimental/experimental.gyp +55 -0
  161. data/ext/v8/upstream/v8/src/extensions/experimental/i18n-extension.cc +284 -0
  162. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/experimental/i18n-extension.h +0 -0
  163. data/ext/v8/upstream/v8/src/extensions/externalize-string-extension.cc +141 -0
  164. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/externalize-string-extension.h +0 -0
  165. data/ext/v8/upstream/v8/src/extensions/gc-extension.cc +58 -0
  166. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/gc-extension.h +0 -0
  167. data/ext/v8/upstream/v8/src/factory.cc +1194 -0
  168. data/ext/v8/upstream/v8/src/factory.h +436 -0
  169. data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.cc +0 -0
  170. data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.h +0 -0
  171. data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.cc +0 -0
  172. data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.h +0 -0
  173. data/ext/v8/upstream/v8/src/flag-definitions.h +556 -0
  174. data/ext/v8/upstream/{3.1.8 → v8}/src/flags.cc +0 -0
  175. data/ext/v8/upstream/{3.1.8 → v8}/src/flags.h +0 -0
  176. data/ext/v8/upstream/v8/src/frame-element.cc +37 -0
  177. data/ext/v8/upstream/v8/src/frame-element.h +269 -0
  178. data/ext/v8/upstream/v8/src/frames-inl.h +236 -0
  179. data/ext/v8/upstream/v8/src/frames.cc +1273 -0
  180. data/ext/v8/upstream/v8/src/frames.h +854 -0
  181. data/ext/v8/upstream/v8/src/full-codegen.cc +1385 -0
  182. data/ext/v8/upstream/v8/src/full-codegen.h +753 -0
  183. data/ext/v8/upstream/v8/src/func-name-inferrer.cc +91 -0
  184. data/ext/v8/upstream/v8/src/func-name-inferrer.h +111 -0
  185. data/ext/v8/upstream/v8/src/gdb-jit.cc +1548 -0
  186. data/ext/v8/upstream/{3.1.8 → v8}/src/gdb-jit.h +0 -0
  187. data/ext/v8/upstream/v8/src/global-handles.cc +596 -0
  188. data/ext/v8/upstream/v8/src/global-handles.h +239 -0
  189. data/ext/v8/upstream/v8/src/globals.h +325 -0
  190. data/ext/v8/upstream/v8/src/handles-inl.h +177 -0
  191. data/ext/v8/upstream/v8/src/handles.cc +965 -0
  192. data/ext/v8/upstream/v8/src/handles.h +372 -0
  193. data/ext/v8/upstream/{3.1.8 → v8}/src/hashmap.cc +0 -0
  194. data/ext/v8/upstream/v8/src/hashmap.h +121 -0
  195. data/ext/v8/upstream/v8/src/heap-inl.h +703 -0
  196. data/ext/v8/upstream/v8/src/heap-profiler.cc +1173 -0
  197. data/ext/v8/upstream/v8/src/heap-profiler.h +396 -0
  198. data/ext/v8/upstream/v8/src/heap.cc +5856 -0
  199. data/ext/v8/upstream/v8/src/heap.h +2264 -0
  200. data/ext/v8/upstream/v8/src/hydrogen-instructions.cc +1639 -0
  201. data/ext/v8/upstream/v8/src/hydrogen-instructions.h +3657 -0
  202. data/ext/v8/upstream/v8/src/hydrogen.cc +6011 -0
  203. data/ext/v8/upstream/v8/src/hydrogen.h +1137 -0
  204. data/ext/v8/upstream/v8/src/ia32/assembler-ia32-inl.h +430 -0
  205. data/ext/v8/upstream/v8/src/ia32/assembler-ia32.cc +2846 -0
  206. data/ext/v8/upstream/v8/src/ia32/assembler-ia32.h +1159 -0
  207. data/ext/v8/upstream/v8/src/ia32/builtins-ia32.cc +1596 -0
  208. data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.cc +6549 -0
  209. data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.h +495 -0
  210. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/codegen-ia32-inl.h +0 -0
  211. data/ext/v8/upstream/v8/src/ia32/codegen-ia32.cc +10385 -0
  212. data/ext/v8/upstream/v8/src/ia32/codegen-ia32.h +801 -0
  213. data/ext/v8/upstream/v8/src/ia32/cpu-ia32.cc +88 -0
  214. data/ext/v8/upstream/v8/src/ia32/debug-ia32.cc +312 -0
  215. data/ext/v8/upstream/v8/src/ia32/deoptimizer-ia32.cc +774 -0
  216. data/ext/v8/upstream/v8/src/ia32/disasm-ia32.cc +1620 -0
  217. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/frames-ia32.cc +0 -0
  218. data/ext/v8/upstream/v8/src/ia32/frames-ia32.h +140 -0
  219. data/ext/v8/upstream/v8/src/ia32/full-codegen-ia32.cc +4357 -0
  220. data/ext/v8/upstream/v8/src/ia32/ic-ia32.cc +1779 -0
  221. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/jump-target-ia32.cc +0 -0
  222. data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.cc +4158 -0
  223. data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.h +318 -0
  224. data/ext/v8/upstream/v8/src/ia32/lithium-gap-resolver-ia32.cc +466 -0
  225. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/lithium-gap-resolver-ia32.h +0 -0
  226. data/ext/v8/upstream/v8/src/ia32/lithium-ia32.cc +2181 -0
  227. data/ext/v8/upstream/v8/src/ia32/lithium-ia32.h +2235 -0
  228. data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.cc +2056 -0
  229. data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.h +807 -0
  230. data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.cc +1264 -0
  231. data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
  232. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32-inl.h +0 -0
  233. data/ext/v8/upstream/v8/src/ia32/register-allocator-ia32.cc +157 -0
  234. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32.h +0 -0
  235. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/simulator-ia32.cc +0 -0
  236. data/ext/v8/upstream/v8/src/ia32/simulator-ia32.h +72 -0
  237. data/ext/v8/upstream/v8/src/ia32/stub-cache-ia32.cc +3711 -0
  238. data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.cc +1366 -0
  239. data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.h +650 -0
  240. data/ext/v8/upstream/v8/src/ic-inl.h +130 -0
  241. data/ext/v8/upstream/v8/src/ic.cc +2389 -0
  242. data/ext/v8/upstream/v8/src/ic.h +675 -0
  243. data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.cc +0 -0
  244. data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.h +0 -0
  245. data/ext/v8/upstream/v8/src/interpreter-irregexp.cc +659 -0
  246. data/ext/v8/upstream/v8/src/interpreter-irregexp.h +49 -0
  247. data/ext/v8/upstream/v8/src/isolate.cc +883 -0
  248. data/ext/v8/upstream/v8/src/isolate.h +1306 -0
  249. data/ext/v8/upstream/v8/src/json.js +342 -0
  250. data/ext/v8/upstream/v8/src/jsregexp.cc +5371 -0
  251. data/ext/v8/upstream/v8/src/jsregexp.h +1483 -0
  252. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-heavy-inl.h +0 -0
  253. data/ext/v8/upstream/v8/src/jump-target-heavy.cc +427 -0
  254. data/ext/v8/upstream/v8/src/jump-target-heavy.h +238 -0
  255. data/ext/v8/upstream/v8/src/jump-target-inl.h +48 -0
  256. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light-inl.h +0 -0
  257. data/ext/v8/upstream/v8/src/jump-target-light.cc +111 -0
  258. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light.h +0 -0
  259. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.cc +0 -0
  260. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.h +0 -0
  261. data/ext/v8/upstream/{3.1.8 → v8}/src/list-inl.h +0 -0
  262. data/ext/v8/upstream/{3.1.8 → v8}/src/list.h +0 -0
  263. data/ext/v8/upstream/v8/src/lithium-allocator-inl.h +142 -0
  264. data/ext/v8/upstream/v8/src/lithium-allocator.cc +2105 -0
  265. data/ext/v8/upstream/v8/src/lithium-allocator.h +630 -0
  266. data/ext/v8/upstream/v8/src/lithium.cc +169 -0
  267. data/ext/v8/upstream/{3.1.8 → v8}/src/lithium.h +0 -0
  268. data/ext/v8/upstream/{3.1.8 → v8}/src/liveedit-debugger.js +0 -0
  269. data/ext/v8/upstream/v8/src/liveedit.cc +1693 -0
  270. data/ext/v8/upstream/v8/src/liveedit.h +179 -0
  271. data/ext/v8/upstream/{3.1.8 → v8}/src/liveobjectlist-inl.h +0 -0
  272. data/ext/v8/upstream/v8/src/liveobjectlist.cc +2589 -0
  273. data/ext/v8/upstream/v8/src/liveobjectlist.h +322 -0
  274. data/ext/v8/upstream/{3.1.8 → v8}/src/log-inl.h +0 -0
  275. data/ext/v8/upstream/v8/src/log-utils.cc +423 -0
  276. data/ext/v8/upstream/v8/src/log-utils.h +229 -0
  277. data/ext/v8/upstream/v8/src/log.cc +1666 -0
  278. data/ext/v8/upstream/v8/src/log.h +446 -0
  279. data/ext/v8/upstream/{3.1.8 → v8}/src/macro-assembler.h +0 -0
  280. data/ext/v8/upstream/{3.1.8 → v8}/src/macros.py +0 -0
  281. data/ext/v8/upstream/v8/src/mark-compact.cc +3092 -0
  282. data/ext/v8/upstream/v8/src/mark-compact.h +506 -0
  283. data/ext/v8/upstream/{3.1.8 → v8}/src/math.js +0 -0
  284. data/ext/v8/upstream/v8/src/messages.cc +166 -0
  285. data/ext/v8/upstream/{3.1.8 → v8}/src/messages.h +0 -0
  286. data/ext/v8/upstream/v8/src/messages.js +1090 -0
  287. data/ext/v8/upstream/v8/src/mips/assembler-mips-inl.h +335 -0
  288. data/ext/v8/upstream/v8/src/mips/assembler-mips.cc +2093 -0
  289. data/ext/v8/upstream/v8/src/mips/assembler-mips.h +1066 -0
  290. data/ext/v8/upstream/v8/src/mips/builtins-mips.cc +148 -0
  291. data/ext/v8/upstream/v8/src/mips/code-stubs-mips.cc +752 -0
  292. data/ext/v8/upstream/v8/src/mips/code-stubs-mips.h +511 -0
  293. data/ext/v8/upstream/v8/src/mips/codegen-mips-inl.h +64 -0
  294. data/ext/v8/upstream/v8/src/mips/codegen-mips.cc +1213 -0
  295. data/ext/v8/upstream/v8/src/mips/codegen-mips.h +633 -0
  296. data/ext/v8/upstream/v8/src/mips/constants-mips.cc +352 -0
  297. data/ext/v8/upstream/v8/src/mips/constants-mips.h +723 -0
  298. data/ext/v8/upstream/v8/src/mips/cpu-mips.cc +90 -0
  299. data/ext/v8/upstream/v8/src/mips/debug-mips.cc +155 -0
  300. data/ext/v8/upstream/v8/src/mips/deoptimizer-mips.cc +91 -0
  301. data/ext/v8/upstream/v8/src/mips/disasm-mips.cc +1023 -0
  302. data/ext/v8/upstream/v8/src/mips/frames-mips.cc +48 -0
  303. data/ext/v8/upstream/v8/src/mips/frames-mips.h +179 -0
  304. data/ext/v8/upstream/v8/src/mips/full-codegen-mips.cc +727 -0
  305. data/ext/v8/upstream/v8/src/mips/ic-mips.cc +244 -0
  306. data/ext/v8/upstream/v8/src/mips/jump-target-mips.cc +80 -0
  307. data/ext/v8/upstream/v8/src/mips/lithium-codegen-mips.h +65 -0
  308. data/ext/v8/upstream/v8/src/mips/lithium-mips.h +304 -0
  309. data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.cc +3327 -0
  310. data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.h +1058 -0
  311. data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  312. data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  313. data/ext/v8/upstream/v8/src/mips/register-allocator-mips-inl.h +134 -0
  314. data/ext/v8/upstream/{3.1.8 → v8}/src/mips/register-allocator-mips.cc +0 -0
  315. data/ext/v8/upstream/v8/src/mips/register-allocator-mips.h +47 -0
  316. data/ext/v8/upstream/v8/src/mips/simulator-mips.cc +2438 -0
  317. data/ext/v8/upstream/v8/src/mips/simulator-mips.h +394 -0
  318. data/ext/v8/upstream/v8/src/mips/stub-cache-mips.cc +601 -0
  319. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips-inl.h +58 -0
  320. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.cc +307 -0
  321. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.h +530 -0
  322. data/ext/v8/upstream/v8/src/mirror-debugger.js +2381 -0
  323. data/ext/v8/upstream/v8/src/mksnapshot.cc +256 -0
  324. data/ext/v8/upstream/{3.1.8 → v8}/src/natives.h +0 -0
  325. data/ext/v8/upstream/v8/src/objects-debug.cc +722 -0
  326. data/ext/v8/upstream/v8/src/objects-inl.h +4166 -0
  327. data/ext/v8/upstream/v8/src/objects-printer.cc +801 -0
  328. data/ext/v8/upstream/v8/src/objects-visiting.cc +142 -0
  329. data/ext/v8/upstream/v8/src/objects-visiting.h +422 -0
  330. data/ext/v8/upstream/v8/src/objects.cc +10296 -0
  331. data/ext/v8/upstream/v8/src/objects.h +6662 -0
  332. data/ext/v8/upstream/v8/src/parser.cc +5168 -0
  333. data/ext/v8/upstream/v8/src/parser.h +823 -0
  334. data/ext/v8/upstream/v8/src/platform-cygwin.cc +811 -0
  335. data/ext/v8/upstream/v8/src/platform-freebsd.cc +854 -0
  336. data/ext/v8/upstream/v8/src/platform-linux.cc +1120 -0
  337. data/ext/v8/upstream/v8/src/platform-macos.cc +865 -0
  338. data/ext/v8/upstream/v8/src/platform-nullos.cc +504 -0
  339. data/ext/v8/upstream/v8/src/platform-openbsd.cc +672 -0
  340. data/ext/v8/upstream/v8/src/platform-posix.cc +424 -0
  341. data/ext/v8/upstream/v8/src/platform-solaris.cc +796 -0
  342. data/ext/v8/upstream/v8/src/platform-tls-mac.h +62 -0
  343. data/ext/v8/upstream/v8/src/platform-tls-win32.h +62 -0
  344. data/ext/v8/upstream/v8/src/platform-tls.h +50 -0
  345. data/ext/v8/upstream/v8/src/platform-win32.cc +2072 -0
  346. data/ext/v8/upstream/v8/src/platform.h +693 -0
  347. data/ext/v8/upstream/v8/src/preparse-data.cc +185 -0
  348. data/ext/v8/upstream/{3.1.8 → v8}/src/preparse-data.h +0 -0
  349. data/ext/v8/upstream/v8/src/preparser-api.cc +219 -0
  350. data/ext/v8/upstream/v8/src/preparser.cc +1205 -0
  351. data/ext/v8/upstream/{3.1.8 → v8}/src/preparser.h +0 -0
  352. data/ext/v8/upstream/v8/src/prettyprinter.cc +1530 -0
  353. data/ext/v8/upstream/v8/src/prettyprinter.h +223 -0
  354. data/ext/v8/upstream/{3.1.8 → v8}/src/profile-generator-inl.h +0 -0
  355. data/ext/v8/upstream/v8/src/profile-generator.cc +3095 -0
  356. data/ext/v8/upstream/v8/src/profile-generator.h +1125 -0
  357. data/ext/v8/upstream/v8/src/property.cc +102 -0
  358. data/ext/v8/upstream/v8/src/property.h +348 -0
  359. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
  360. data/ext/v8/upstream/v8/src/regexp-macro-assembler-irregexp.cc +470 -0
  361. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp.h +0 -0
  362. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.cc +0 -0
  363. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.h +0 -0
  364. data/ext/v8/upstream/v8/src/regexp-macro-assembler.cc +266 -0
  365. data/ext/v8/upstream/v8/src/regexp-macro-assembler.h +236 -0
  366. data/ext/v8/upstream/v8/src/regexp-stack.cc +111 -0
  367. data/ext/v8/upstream/v8/src/regexp-stack.h +147 -0
  368. data/ext/v8/upstream/v8/src/regexp.js +483 -0
  369. data/ext/v8/upstream/v8/src/register-allocator-inl.h +141 -0
  370. data/ext/v8/upstream/v8/src/register-allocator.cc +98 -0
  371. data/ext/v8/upstream/v8/src/register-allocator.h +310 -0
  372. data/ext/v8/upstream/v8/src/rewriter.cc +1024 -0
  373. data/ext/v8/upstream/{3.1.8 → v8}/src/rewriter.h +0 -0
  374. data/ext/v8/upstream/v8/src/runtime-profiler.cc +478 -0
  375. data/ext/v8/upstream/v8/src/runtime-profiler.h +192 -0
  376. data/ext/v8/upstream/v8/src/runtime.cc +11949 -0
  377. data/ext/v8/upstream/v8/src/runtime.h +643 -0
  378. data/ext/v8/upstream/{3.1.8 → v8}/src/runtime.js +0 -0
  379. data/ext/v8/upstream/v8/src/safepoint-table.cc +256 -0
  380. data/ext/v8/upstream/v8/src/safepoint-table.h +269 -0
  381. data/ext/v8/upstream/v8/src/scanner-base.cc +964 -0
  382. data/ext/v8/upstream/v8/src/scanner-base.h +664 -0
  383. data/ext/v8/upstream/v8/src/scanner.cc +584 -0
  384. data/ext/v8/upstream/v8/src/scanner.h +196 -0
  385. data/ext/v8/upstream/v8/src/scopeinfo.cc +631 -0
  386. data/ext/v8/upstream/v8/src/scopeinfo.h +249 -0
  387. data/ext/v8/upstream/v8/src/scopes.cc +1093 -0
  388. data/ext/v8/upstream/v8/src/scopes.h +508 -0
  389. data/ext/v8/upstream/v8/src/serialize.cc +1574 -0
  390. data/ext/v8/upstream/v8/src/serialize.h +589 -0
  391. data/ext/v8/upstream/{3.1.8 → v8}/src/shell.h +0 -0
  392. data/ext/v8/upstream/{3.1.8 → v8}/src/simulator.h +0 -0
  393. data/ext/v8/upstream/v8/src/small-pointer-list.h +163 -0
  394. data/ext/v8/upstream/{3.1.8 → v8}/src/smart-pointer.h +0 -0
  395. data/ext/v8/upstream/v8/src/snapshot-common.cc +82 -0
  396. data/ext/v8/upstream/{3.1.8 → v8}/src/snapshot-empty.cc +0 -0
  397. data/ext/v8/upstream/v8/src/snapshot.h +73 -0
  398. data/ext/v8/upstream/v8/src/spaces-inl.h +529 -0
  399. data/ext/v8/upstream/v8/src/spaces.cc +3147 -0
  400. data/ext/v8/upstream/v8/src/spaces.h +2368 -0
  401. data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree-inl.h +0 -0
  402. data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree.h +0 -0
  403. data/ext/v8/upstream/v8/src/string-search.cc +41 -0
  404. data/ext/v8/upstream/v8/src/string-search.h +568 -0
  405. data/ext/v8/upstream/v8/src/string-stream.cc +592 -0
  406. data/ext/v8/upstream/{3.1.8 → v8}/src/string-stream.h +0 -0
  407. data/ext/v8/upstream/v8/src/string.js +915 -0
  408. data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.cc +0 -0
  409. data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.h +0 -0
  410. data/ext/v8/upstream/v8/src/stub-cache.cc +1940 -0
  411. data/ext/v8/upstream/v8/src/stub-cache.h +866 -0
  412. data/ext/v8/upstream/{3.1.8 → v8}/src/third_party/valgrind/valgrind.h +0 -0
  413. data/ext/v8/upstream/v8/src/token.cc +63 -0
  414. data/ext/v8/upstream/v8/src/token.h +288 -0
  415. data/ext/v8/upstream/v8/src/top.cc +983 -0
  416. data/ext/v8/upstream/v8/src/type-info.cc +472 -0
  417. data/ext/v8/upstream/v8/src/type-info.h +290 -0
  418. data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue-inl.h +0 -0
  419. data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue.h +0 -0
  420. data/ext/v8/upstream/{3.1.8 → v8}/src/unicode-inl.h +0 -0
  421. data/ext/v8/upstream/v8/src/unicode.cc +1624 -0
  422. data/ext/v8/upstream/v8/src/unicode.h +280 -0
  423. data/ext/v8/upstream/{3.1.8 → v8}/src/uri.js +0 -0
  424. data/ext/v8/upstream/{3.1.8 → v8}/src/utils.cc +0 -0
  425. data/ext/v8/upstream/v8/src/utils.h +796 -0
  426. data/ext/v8/upstream/v8/src/v8-counters.cc +62 -0
  427. data/ext/v8/upstream/v8/src/v8-counters.h +311 -0
  428. data/ext/v8/upstream/v8/src/v8.cc +215 -0
  429. data/ext/v8/upstream/v8/src/v8.h +130 -0
  430. data/ext/v8/upstream/{3.1.8 → v8}/src/v8checks.h +0 -0
  431. data/ext/v8/upstream/{3.1.8 → v8}/src/v8dll-main.cc +0 -0
  432. data/ext/v8/upstream/v8/src/v8globals.h +486 -0
  433. data/ext/v8/upstream/{3.1.8/src/memory.h → v8/src/v8memory.h} +0 -0
  434. data/ext/v8/upstream/v8/src/v8natives.js +1293 -0
  435. data/ext/v8/upstream/{3.1.8 → v8}/src/v8preparserdll-main.cc +0 -0
  436. data/ext/v8/upstream/v8/src/v8threads.cc +453 -0
  437. data/ext/v8/upstream/v8/src/v8threads.h +164 -0
  438. data/ext/v8/upstream/v8/src/v8utils.h +317 -0
  439. data/ext/v8/upstream/{3.1.8 → v8}/src/variables.cc +0 -0
  440. data/ext/v8/upstream/v8/src/variables.h +212 -0
  441. data/ext/v8/upstream/v8/src/version.cc +116 -0
  442. data/ext/v8/upstream/v8/src/version.h +68 -0
  443. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy-inl.h +0 -0
  444. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy.cc +0 -0
  445. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-inl.h +0 -0
  446. data/ext/v8/upstream/v8/src/virtual-frame-light-inl.h +171 -0
  447. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-light.cc +0 -0
  448. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.cc +0 -0
  449. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.h +0 -0
  450. data/ext/v8/upstream/v8/src/vm-state-inl.h +138 -0
  451. data/ext/v8/upstream/v8/src/vm-state.h +70 -0
  452. data/ext/v8/upstream/v8/src/win32-headers.h +96 -0
  453. data/ext/v8/upstream/v8/src/x64/assembler-x64-inl.h +456 -0
  454. data/ext/v8/upstream/v8/src/x64/assembler-x64.cc +2954 -0
  455. data/ext/v8/upstream/v8/src/x64/assembler-x64.h +1630 -0
  456. data/ext/v8/upstream/v8/src/x64/builtins-x64.cc +1493 -0
  457. data/ext/v8/upstream/v8/src/x64/code-stubs-x64.cc +5132 -0
  458. data/ext/v8/upstream/v8/src/x64/code-stubs-x64.h +477 -0
  459. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/codegen-x64-inl.h +0 -0
  460. data/ext/v8/upstream/v8/src/x64/codegen-x64.cc +8843 -0
  461. data/ext/v8/upstream/v8/src/x64/codegen-x64.h +753 -0
  462. data/ext/v8/upstream/v8/src/x64/cpu-x64.cc +88 -0
  463. data/ext/v8/upstream/v8/src/x64/debug-x64.cc +318 -0
  464. data/ext/v8/upstream/v8/src/x64/deoptimizer-x64.cc +815 -0
  465. data/ext/v8/upstream/v8/src/x64/disasm-x64.cc +1752 -0
  466. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/frames-x64.cc +0 -0
  467. data/ext/v8/upstream/v8/src/x64/frames-x64.h +130 -0
  468. data/ext/v8/upstream/v8/src/x64/full-codegen-x64.cc +4339 -0
  469. data/ext/v8/upstream/v8/src/x64/ic-x64.cc +1752 -0
  470. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/jump-target-x64.cc +0 -0
  471. data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.cc +3970 -0
  472. data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.h +318 -0
  473. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.cc +0 -0
  474. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.h +0 -0
  475. data/ext/v8/upstream/v8/src/x64/lithium-x64.cc +2115 -0
  476. data/ext/v8/upstream/v8/src/x64/lithium-x64.h +2161 -0
  477. data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.cc +2911 -0
  478. data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.h +1984 -0
  479. data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
  480. data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
  481. data/ext/v8/upstream/v8/src/x64/register-allocator-x64-inl.h +87 -0
  482. data/ext/v8/upstream/v8/src/x64/register-allocator-x64.cc +95 -0
  483. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/register-allocator-x64.h +0 -0
  484. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/simulator-x64.cc +0 -0
  485. data/ext/v8/upstream/v8/src/x64/simulator-x64.h +71 -0
  486. data/ext/v8/upstream/v8/src/x64/stub-cache-x64.cc +3460 -0
  487. data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.cc +1296 -0
  488. data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.h +597 -0
  489. data/ext/v8/upstream/v8/src/zone-inl.h +129 -0
  490. data/ext/v8/upstream/v8/src/zone.cc +196 -0
  491. data/ext/v8/upstream/v8/src/zone.h +236 -0
  492. data/ext/v8/upstream/{3.1.8 → v8}/tools/codemap.js +0 -0
  493. data/ext/v8/upstream/{3.1.8 → v8}/tools/consarray.js +0 -0
  494. data/ext/v8/upstream/{3.1.8 → v8}/tools/csvparser.js +0 -0
  495. data/ext/v8/upstream/{3.1.8 → v8}/tools/disasm.py +0 -0
  496. data/ext/v8/upstream/v8/tools/freebsd-tick-processor +10 -0
  497. data/ext/v8/upstream/{3.1.8 → v8}/tools/gc-nvp-trace-processor.py +0 -0
  498. data/ext/v8/upstream/{3.1.8 → v8}/tools/generate-ten-powers.scm +0 -0
  499. data/ext/v8/upstream/{3.1.8 → v8}/tools/grokdump.py +0 -0
  500. data/ext/v8/upstream/v8/tools/gyp/v8.gyp +844 -0
  501. data/ext/v8/upstream/{3.1.8 → v8}/tools/js2c.py +0 -0
  502. data/ext/v8/upstream/{3.1.8 → v8}/tools/jsmin.py +0 -0
  503. data/ext/v8/upstream/v8/tools/linux-tick-processor +35 -0
  504. data/ext/v8/upstream/{3.1.8 → v8}/tools/ll_prof.py +0 -0
  505. data/ext/v8/upstream/{3.1.8 → v8}/tools/logreader.js +0 -0
  506. data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-nm +0 -0
  507. data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-tick-processor +0 -0
  508. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/README +0 -0
  509. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/SConstruct +0 -0
  510. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/oom_dump.cc +0 -0
  511. data/ext/v8/upstream/{3.1.8 → v8}/tools/presubmit.py +0 -0
  512. data/ext/v8/upstream/{3.1.8 → v8}/tools/process-heap-prof.py +0 -0
  513. data/ext/v8/upstream/{3.1.8 → v8}/tools/profile.js +0 -0
  514. data/ext/v8/upstream/{3.1.8 → v8}/tools/profile_view.js +0 -0
  515. data/ext/v8/upstream/{3.1.8 → v8}/tools/run-valgrind.py +0 -0
  516. data/ext/v8/upstream/{3.1.8 → v8}/tools/splaytree.js +0 -0
  517. data/ext/v8/upstream/{3.1.8 → v8}/tools/stats-viewer.py +0 -0
  518. data/ext/v8/upstream/v8/tools/test.py +1490 -0
  519. data/ext/v8/upstream/{3.1.8 → v8}/tools/tickprocessor-driver.js +0 -0
  520. data/ext/v8/upstream/v8/tools/tickprocessor.js +877 -0
  521. data/ext/v8/upstream/{3.1.8 → v8}/tools/utils.py +0 -0
  522. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/README.txt +0 -0
  523. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/arm.vsprops +0 -0
  524. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/common.vsprops +0 -0
  525. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8.vcproj +0 -0
  526. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_arm.vcproj +0 -0
  527. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_x64.vcproj +0 -0
  528. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8js2c.cmd +0 -0
  529. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/debug.vsprops +0 -0
  530. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/ia32.vsprops +0 -0
  531. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/js2c.cmd +0 -0
  532. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/release.vsprops +0 -0
  533. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.sln +0 -0
  534. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.vcproj +0 -0
  535. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.sln +0 -0
  536. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.vcproj +0 -0
  537. data/ext/v8/upstream/v8/tools/visual_studio/v8_base.vcproj +1308 -0
  538. data/ext/v8/upstream/v8/tools/visual_studio/v8_base_arm.vcproj +1238 -0
  539. data/ext/v8/upstream/v8/tools/visual_studio/v8_base_x64.vcproj +1300 -0
  540. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest.vcproj +0 -0
  541. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
  542. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
  543. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
  544. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
  545. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample.vcproj +0 -0
  546. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
  547. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
  548. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
  549. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
  550. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
  551. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  552. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  553. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  554. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  555. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.sln +0 -0
  556. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.vcproj +0 -0
  557. data/ext/v8/upstream/v8/tools/visual_studio/x64.vsprops +18 -0
  558. data/ext/v8/upstream/{3.1.8 → v8}/tools/windows-tick-processor.bat +0 -0
  559. data/ext/v8/v8_callbacks.cpp +52 -92
  560. data/ext/v8/v8_date.cpp +2 -3
  561. data/ext/v8/v8_object.cpp +4 -0
  562. data/ext/v8/v8_template.cpp +2 -2
  563. data/ext/v8/v8_try_catch.cpp +8 -38
  564. data/lib/v8/version.rb +1 -1
  565. data/spec/ext/ext_spec_helper.rb +2 -20
  566. data/spec/ext/object_spec.rb +0 -12
  567. data/spec/ext/try_catch_spec.rb +29 -1
  568. data/spec/spec_helper.rb +1 -0
  569. data/spec/v8/portal/proxies_spec.rb +1 -84
  570. data/specmem/handle_memspec.rb +41 -0
  571. data/specmem/object_memspec.rb +16 -0
  572. data/specmem/proxies_memspec.rb +86 -0
  573. data/specmem/spec_helper.rb +24 -0
  574. data/therubyracer.gemspec +7 -2
  575. metadata +564 -541
  576. data/ext/v8/upstream/3.1.8/.gitignore +0 -31
  577. data/ext/v8/upstream/3.1.8/AUTHORS +0 -40
  578. data/ext/v8/upstream/3.1.8/ChangeLog +0 -2566
  579. data/ext/v8/upstream/3.1.8/SConstruct +0 -1192
  580. data/ext/v8/upstream/3.1.8/include/v8-debug.h +0 -384
  581. data/ext/v8/upstream/3.1.8/include/v8-preparser.h +0 -116
  582. data/ext/v8/upstream/3.1.8/include/v8-profiler.h +0 -426
  583. data/ext/v8/upstream/3.1.8/include/v8-testing.h +0 -99
  584. data/ext/v8/upstream/3.1.8/include/v8.h +0 -3846
  585. data/ext/v8/upstream/3.1.8/preparser/preparser-process.cc +0 -206
  586. data/ext/v8/upstream/3.1.8/src/SConscript +0 -356
  587. data/ext/v8/upstream/3.1.8/src/accessors.cc +0 -907
  588. data/ext/v8/upstream/3.1.8/src/allocation.cc +0 -204
  589. data/ext/v8/upstream/3.1.8/src/allocation.h +0 -176
  590. data/ext/v8/upstream/3.1.8/src/api.cc +0 -5191
  591. data/ext/v8/upstream/3.1.8/src/api.h +0 -508
  592. data/ext/v8/upstream/3.1.8/src/apiutils.h +0 -80
  593. data/ext/v8/upstream/3.1.8/src/arguments.h +0 -105
  594. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm-inl.h +0 -352
  595. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.cc +0 -2756
  596. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.h +0 -1294
  597. data/ext/v8/upstream/3.1.8/src/arm/builtins-arm.cc +0 -1628
  598. data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.cc +0 -6783
  599. data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.h +0 -657
  600. data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.cc +0 -7403
  601. data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.h +0 -595
  602. data/ext/v8/upstream/3.1.8/src/arm/constants-arm.h +0 -769
  603. data/ext/v8/upstream/3.1.8/src/arm/cpu-arm.cc +0 -147
  604. data/ext/v8/upstream/3.1.8/src/arm/debug-arm.cc +0 -315
  605. data/ext/v8/upstream/3.1.8/src/arm/deoptimizer-arm.cc +0 -700
  606. data/ext/v8/upstream/3.1.8/src/arm/disasm-arm.cc +0 -1439
  607. data/ext/v8/upstream/3.1.8/src/arm/frames-arm.h +0 -168
  608. data/ext/v8/upstream/3.1.8/src/arm/full-codegen-arm.cc +0 -4230
  609. data/ext/v8/upstream/3.1.8/src/arm/ic-arm.cc +0 -1799
  610. data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.cc +0 -2041
  611. data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.h +0 -2046
  612. data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.cc +0 -3822
  613. data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.h +0 -312
  614. data/ext/v8/upstream/3.1.8/src/arm/lithium-gap-resolver-arm.cc +0 -303
  615. data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.cc +0 -2701
  616. data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.h +0 -1015
  617. data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.cc +0 -1280
  618. data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.h +0 -252
  619. data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.cc +0 -3165
  620. data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.h +0 -402
  621. data/ext/v8/upstream/3.1.8/src/arm/stub-cache-arm.cc +0 -4077
  622. data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.cc +0 -843
  623. data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.h +0 -520
  624. data/ext/v8/upstream/3.1.8/src/array.js +0 -1231
  625. data/ext/v8/upstream/3.1.8/src/assembler.cc +0 -973
  626. data/ext/v8/upstream/3.1.8/src/assembler.h +0 -787
  627. data/ext/v8/upstream/3.1.8/src/ast-inl.h +0 -107
  628. data/ext/v8/upstream/3.1.8/src/ast.cc +0 -1067
  629. data/ext/v8/upstream/3.1.8/src/ast.h +0 -2177
  630. data/ext/v8/upstream/3.1.8/src/atomicops.h +0 -165
  631. data/ext/v8/upstream/3.1.8/src/bootstrapper.cc +0 -1888
  632. data/ext/v8/upstream/3.1.8/src/bootstrapper.h +0 -118
  633. data/ext/v8/upstream/3.1.8/src/builtins.cc +0 -1586
  634. data/ext/v8/upstream/3.1.8/src/builtins.h +0 -339
  635. data/ext/v8/upstream/3.1.8/src/checks.cc +0 -110
  636. data/ext/v8/upstream/3.1.8/src/checks.h +0 -292
  637. data/ext/v8/upstream/3.1.8/src/code-stubs.cc +0 -230
  638. data/ext/v8/upstream/3.1.8/src/code-stubs.h +0 -950
  639. data/ext/v8/upstream/3.1.8/src/codegen-inl.h +0 -64
  640. data/ext/v8/upstream/3.1.8/src/codegen.cc +0 -495
  641. data/ext/v8/upstream/3.1.8/src/codegen.h +0 -245
  642. data/ext/v8/upstream/3.1.8/src/compilation-cache.cc +0 -654
  643. data/ext/v8/upstream/3.1.8/src/compilation-cache.h +0 -112
  644. data/ext/v8/upstream/3.1.8/src/compiler.cc +0 -806
  645. data/ext/v8/upstream/3.1.8/src/compiler.h +0 -290
  646. data/ext/v8/upstream/3.1.8/src/contexts.cc +0 -320
  647. data/ext/v8/upstream/3.1.8/src/contexts.h +0 -376
  648. data/ext/v8/upstream/3.1.8/src/conversions.cc +0 -1069
  649. data/ext/v8/upstream/3.1.8/src/counters.cc +0 -78
  650. data/ext/v8/upstream/3.1.8/src/counters.h +0 -242
  651. data/ext/v8/upstream/3.1.8/src/cpu-profiler-inl.h +0 -100
  652. data/ext/v8/upstream/3.1.8/src/cpu-profiler.cc +0 -554
  653. data/ext/v8/upstream/3.1.8/src/cpu-profiler.h +0 -291
  654. data/ext/v8/upstream/3.1.8/src/cpu.h +0 -65
  655. data/ext/v8/upstream/3.1.8/src/d8-debug.cc +0 -367
  656. data/ext/v8/upstream/3.1.8/src/d8-debug.h +0 -157
  657. data/ext/v8/upstream/3.1.8/src/d8-posix.cc +0 -693
  658. data/ext/v8/upstream/3.1.8/src/d8.cc +0 -792
  659. data/ext/v8/upstream/3.1.8/src/d8.gyp +0 -85
  660. data/ext/v8/upstream/3.1.8/src/data-flow.h +0 -379
  661. data/ext/v8/upstream/3.1.8/src/dateparser.h +0 -263
  662. data/ext/v8/upstream/3.1.8/src/debug-agent.cc +0 -446
  663. data/ext/v8/upstream/3.1.8/src/debug-agent.h +0 -131
  664. data/ext/v8/upstream/3.1.8/src/debug.cc +0 -3085
  665. data/ext/v8/upstream/3.1.8/src/debug.h +0 -1025
  666. data/ext/v8/upstream/3.1.8/src/deoptimizer.cc +0 -1185
  667. data/ext/v8/upstream/3.1.8/src/deoptimizer.h +0 -529
  668. data/ext/v8/upstream/3.1.8/src/disasm.h +0 -77
  669. data/ext/v8/upstream/3.1.8/src/disassembler.cc +0 -338
  670. data/ext/v8/upstream/3.1.8/src/execution.cc +0 -735
  671. data/ext/v8/upstream/3.1.8/src/execution.h +0 -322
  672. data/ext/v8/upstream/3.1.8/src/extensions/experimental/experimental.gyp +0 -53
  673. data/ext/v8/upstream/3.1.8/src/extensions/experimental/i18n-extension.cc +0 -264
  674. data/ext/v8/upstream/3.1.8/src/extensions/externalize-string-extension.cc +0 -141
  675. data/ext/v8/upstream/3.1.8/src/extensions/gc-extension.cc +0 -58
  676. data/ext/v8/upstream/3.1.8/src/factory.cc +0 -1087
  677. data/ext/v8/upstream/3.1.8/src/factory.h +0 -432
  678. data/ext/v8/upstream/3.1.8/src/flag-definitions.h +0 -552
  679. data/ext/v8/upstream/3.1.8/src/frame-element.cc +0 -42
  680. data/ext/v8/upstream/3.1.8/src/frame-element.h +0 -277
  681. data/ext/v8/upstream/3.1.8/src/frames-inl.h +0 -210
  682. data/ext/v8/upstream/3.1.8/src/frames.cc +0 -1232
  683. data/ext/v8/upstream/3.1.8/src/frames.h +0 -826
  684. data/ext/v8/upstream/3.1.8/src/full-codegen.cc +0 -1382
  685. data/ext/v8/upstream/3.1.8/src/full-codegen.h +0 -751
  686. data/ext/v8/upstream/3.1.8/src/func-name-inferrer.cc +0 -90
  687. data/ext/v8/upstream/3.1.8/src/func-name-inferrer.h +0 -111
  688. data/ext/v8/upstream/3.1.8/src/gdb-jit.cc +0 -1547
  689. data/ext/v8/upstream/3.1.8/src/global-handles.cc +0 -534
  690. data/ext/v8/upstream/3.1.8/src/global-handles.h +0 -181
  691. data/ext/v8/upstream/3.1.8/src/globals.h +0 -325
  692. data/ext/v8/upstream/3.1.8/src/handles-inl.h +0 -80
  693. data/ext/v8/upstream/3.1.8/src/handles.cc +0 -910
  694. data/ext/v8/upstream/3.1.8/src/handles.h +0 -424
  695. data/ext/v8/upstream/3.1.8/src/hashmap.h +0 -121
  696. data/ext/v8/upstream/3.1.8/src/heap-inl.h +0 -587
  697. data/ext/v8/upstream/3.1.8/src/heap-profiler.cc +0 -1128
  698. data/ext/v8/upstream/3.1.8/src/heap-profiler.h +0 -381
  699. data/ext/v8/upstream/3.1.8/src/heap.cc +0 -5610
  700. data/ext/v8/upstream/3.1.8/src/heap.h +0 -2218
  701. data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.cc +0 -1490
  702. data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.h +0 -3493
  703. data/ext/v8/upstream/3.1.8/src/hydrogen.cc +0 -6056
  704. data/ext/v8/upstream/3.1.8/src/hydrogen.h +0 -1091
  705. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32-inl.h +0 -429
  706. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.cc +0 -2800
  707. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.h +0 -1093
  708. data/ext/v8/upstream/3.1.8/src/ia32/builtins-ia32.cc +0 -1590
  709. data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.cc +0 -6624
  710. data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.h +0 -536
  711. data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.cc +0 -10354
  712. data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.h +0 -798
  713. data/ext/v8/upstream/3.1.8/src/ia32/cpu-ia32.cc +0 -87
  714. data/ext/v8/upstream/3.1.8/src/ia32/debug-ia32.cc +0 -309
  715. data/ext/v8/upstream/3.1.8/src/ia32/deoptimizer-ia32.cc +0 -664
  716. data/ext/v8/upstream/3.1.8/src/ia32/disasm-ia32.cc +0 -1597
  717. data/ext/v8/upstream/3.1.8/src/ia32/frames-ia32.h +0 -140
  718. data/ext/v8/upstream/3.1.8/src/ia32/full-codegen-ia32.cc +0 -4278
  719. data/ext/v8/upstream/3.1.8/src/ia32/ic-ia32.cc +0 -1786
  720. data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.cc +0 -3880
  721. data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.h +0 -309
  722. data/ext/v8/upstream/3.1.8/src/ia32/lithium-gap-resolver-ia32.cc +0 -460
  723. data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.cc +0 -2095
  724. data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.h +0 -2127
  725. data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.cc +0 -2031
  726. data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.h +0 -798
  727. data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.cc +0 -1253
  728. data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.h +0 -215
  729. data/ext/v8/upstream/3.1.8/src/ia32/register-allocator-ia32.cc +0 -157
  730. data/ext/v8/upstream/3.1.8/src/ia32/simulator-ia32.h +0 -72
  731. data/ext/v8/upstream/3.1.8/src/ia32/stub-cache-ia32.cc +0 -3732
  732. data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.cc +0 -1360
  733. data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.h +0 -646
  734. data/ext/v8/upstream/3.1.8/src/ic-inl.h +0 -129
  735. data/ext/v8/upstream/3.1.8/src/ic.cc +0 -2333
  736. data/ext/v8/upstream/3.1.8/src/ic.h +0 -639
  737. data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.cc +0 -655
  738. data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.h +0 -48
  739. data/ext/v8/upstream/3.1.8/src/json.js +0 -342
  740. data/ext/v8/upstream/3.1.8/src/jsregexp.cc +0 -5340
  741. data/ext/v8/upstream/3.1.8/src/jsregexp.h +0 -1484
  742. data/ext/v8/upstream/3.1.8/src/jump-target-heavy.cc +0 -430
  743. data/ext/v8/upstream/3.1.8/src/jump-target-heavy.h +0 -244
  744. data/ext/v8/upstream/3.1.8/src/jump-target-inl.h +0 -48
  745. data/ext/v8/upstream/3.1.8/src/jump-target-light.cc +0 -111
  746. data/ext/v8/upstream/3.1.8/src/lithium-allocator-inl.h +0 -140
  747. data/ext/v8/upstream/3.1.8/src/lithium-allocator.cc +0 -2093
  748. data/ext/v8/upstream/3.1.8/src/lithium-allocator.h +0 -644
  749. data/ext/v8/upstream/3.1.8/src/lithium.cc +0 -168
  750. data/ext/v8/upstream/3.1.8/src/liveedit.cc +0 -1650
  751. data/ext/v8/upstream/3.1.8/src/liveedit.h +0 -174
  752. data/ext/v8/upstream/3.1.8/src/liveobjectlist.cc +0 -2527
  753. data/ext/v8/upstream/3.1.8/src/liveobjectlist.h +0 -322
  754. data/ext/v8/upstream/3.1.8/src/log-utils.cc +0 -336
  755. data/ext/v8/upstream/3.1.8/src/log-utils.h +0 -232
  756. data/ext/v8/upstream/3.1.8/src/log.cc +0 -1608
  757. data/ext/v8/upstream/3.1.8/src/log.h +0 -379
  758. data/ext/v8/upstream/3.1.8/src/mark-compact.cc +0 -2957
  759. data/ext/v8/upstream/3.1.8/src/mark-compact.h +0 -433
  760. data/ext/v8/upstream/3.1.8/src/messages.cc +0 -164
  761. data/ext/v8/upstream/3.1.8/src/messages.js +0 -1071
  762. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips-inl.h +0 -215
  763. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.cc +0 -1219
  764. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.h +0 -667
  765. data/ext/v8/upstream/3.1.8/src/mips/builtins-mips.cc +0 -205
  766. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips-inl.h +0 -70
  767. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.cc +0 -1437
  768. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.h +0 -431
  769. data/ext/v8/upstream/3.1.8/src/mips/constants-mips.cc +0 -328
  770. data/ext/v8/upstream/3.1.8/src/mips/constants-mips.h +0 -525
  771. data/ext/v8/upstream/3.1.8/src/mips/cpu-mips.cc +0 -73
  772. data/ext/v8/upstream/3.1.8/src/mips/debug-mips.cc +0 -127
  773. data/ext/v8/upstream/3.1.8/src/mips/disasm-mips.cc +0 -787
  774. data/ext/v8/upstream/3.1.8/src/mips/fast-codegen-mips.cc +0 -77
  775. data/ext/v8/upstream/3.1.8/src/mips/frames-mips.cc +0 -96
  776. data/ext/v8/upstream/3.1.8/src/mips/frames-mips.h +0 -164
  777. data/ext/v8/upstream/3.1.8/src/mips/full-codegen-mips.cc +0 -277
  778. data/ext/v8/upstream/3.1.8/src/mips/ic-mips.cc +0 -208
  779. data/ext/v8/upstream/3.1.8/src/mips/jump-target-mips.cc +0 -175
  780. data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.cc +0 -1326
  781. data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.h +0 -461
  782. data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips-inl.h +0 -137
  783. data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips.h +0 -46
  784. data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.cc +0 -1650
  785. data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.h +0 -311
  786. data/ext/v8/upstream/3.1.8/src/mips/stub-cache-mips.cc +0 -418
  787. data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.cc +0 -319
  788. data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.h +0 -548
  789. data/ext/v8/upstream/3.1.8/src/mirror-debugger.js +0 -2380
  790. data/ext/v8/upstream/3.1.8/src/mksnapshot.cc +0 -256
  791. data/ext/v8/upstream/3.1.8/src/objects-debug.cc +0 -722
  792. data/ext/v8/upstream/3.1.8/src/objects-inl.h +0 -3946
  793. data/ext/v8/upstream/3.1.8/src/objects-printer.cc +0 -801
  794. data/ext/v8/upstream/3.1.8/src/objects-visiting.cc +0 -142
  795. data/ext/v8/upstream/3.1.8/src/objects-visiting.h +0 -401
  796. data/ext/v8/upstream/3.1.8/src/objects.cc +0 -10044
  797. data/ext/v8/upstream/3.1.8/src/objects.h +0 -6571
  798. data/ext/v8/upstream/3.1.8/src/parser.cc +0 -5165
  799. data/ext/v8/upstream/3.1.8/src/parser.h +0 -802
  800. data/ext/v8/upstream/3.1.8/src/platform-cygwin.cc +0 -745
  801. data/ext/v8/upstream/3.1.8/src/platform-freebsd.cc +0 -702
  802. data/ext/v8/upstream/3.1.8/src/platform-linux.cc +0 -981
  803. data/ext/v8/upstream/3.1.8/src/platform-macos.cc +0 -732
  804. data/ext/v8/upstream/3.1.8/src/platform-nullos.cc +0 -498
  805. data/ext/v8/upstream/3.1.8/src/platform-openbsd.cc +0 -657
  806. data/ext/v8/upstream/3.1.8/src/platform-posix.cc +0 -399
  807. data/ext/v8/upstream/3.1.8/src/platform-solaris.cc +0 -714
  808. data/ext/v8/upstream/3.1.8/src/platform-win32.cc +0 -1974
  809. data/ext/v8/upstream/3.1.8/src/platform.h +0 -636
  810. data/ext/v8/upstream/3.1.8/src/preparse-data.cc +0 -183
  811. data/ext/v8/upstream/3.1.8/src/preparser-api.cc +0 -213
  812. data/ext/v8/upstream/3.1.8/src/preparser.cc +0 -1205
  813. data/ext/v8/upstream/3.1.8/src/prettyprinter.cc +0 -1539
  814. data/ext/v8/upstream/3.1.8/src/prettyprinter.h +0 -223
  815. data/ext/v8/upstream/3.1.8/src/profile-generator.cc +0 -2899
  816. data/ext/v8/upstream/3.1.8/src/profile-generator.h +0 -1151
  817. data/ext/v8/upstream/3.1.8/src/property.cc +0 -96
  818. data/ext/v8/upstream/3.1.8/src/property.h +0 -337
  819. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler-irregexp.cc +0 -470
  820. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.cc +0 -257
  821. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.h +0 -231
  822. data/ext/v8/upstream/3.1.8/src/regexp-stack.cc +0 -103
  823. data/ext/v8/upstream/3.1.8/src/regexp-stack.h +0 -123
  824. data/ext/v8/upstream/3.1.8/src/regexp.js +0 -483
  825. data/ext/v8/upstream/3.1.8/src/register-allocator-inl.h +0 -141
  826. data/ext/v8/upstream/3.1.8/src/register-allocator.cc +0 -104
  827. data/ext/v8/upstream/3.1.8/src/register-allocator.h +0 -320
  828. data/ext/v8/upstream/3.1.8/src/rewriter.cc +0 -1023
  829. data/ext/v8/upstream/3.1.8/src/runtime-profiler.cc +0 -443
  830. data/ext/v8/upstream/3.1.8/src/runtime-profiler.h +0 -77
  831. data/ext/v8/upstream/3.1.8/src/runtime.cc +0 -11592
  832. data/ext/v8/upstream/3.1.8/src/runtime.h +0 -582
  833. data/ext/v8/upstream/3.1.8/src/safepoint-table.cc +0 -253
  834. data/ext/v8/upstream/3.1.8/src/safepoint-table.h +0 -263
  835. data/ext/v8/upstream/3.1.8/src/scanner-base.cc +0 -971
  836. data/ext/v8/upstream/3.1.8/src/scanner-base.h +0 -653
  837. data/ext/v8/upstream/3.1.8/src/scanner.cc +0 -586
  838. data/ext/v8/upstream/3.1.8/src/scanner.h +0 -194
  839. data/ext/v8/upstream/3.1.8/src/scopeinfo.cc +0 -636
  840. data/ext/v8/upstream/3.1.8/src/scopeinfo.h +0 -238
  841. data/ext/v8/upstream/3.1.8/src/scopes.cc +0 -1063
  842. data/ext/v8/upstream/3.1.8/src/scopes.h +0 -494
  843. data/ext/v8/upstream/3.1.8/src/serialize.cc +0 -1535
  844. data/ext/v8/upstream/3.1.8/src/serialize.h +0 -584
  845. data/ext/v8/upstream/3.1.8/src/snapshot-common.cc +0 -82
  846. data/ext/v8/upstream/3.1.8/src/snapshot.h +0 -71
  847. data/ext/v8/upstream/3.1.8/src/spaces-inl.h +0 -524
  848. data/ext/v8/upstream/3.1.8/src/spaces.cc +0 -3254
  849. data/ext/v8/upstream/3.1.8/src/spaces.h +0 -2362
  850. data/ext/v8/upstream/3.1.8/src/string-search.cc +0 -40
  851. data/ext/v8/upstream/3.1.8/src/string-search.h +0 -567
  852. data/ext/v8/upstream/3.1.8/src/string-stream.cc +0 -584
  853. data/ext/v8/upstream/3.1.8/src/string.js +0 -915
  854. data/ext/v8/upstream/3.1.8/src/stub-cache.cc +0 -1878
  855. data/ext/v8/upstream/3.1.8/src/stub-cache.h +0 -849
  856. data/ext/v8/upstream/3.1.8/src/token.cc +0 -63
  857. data/ext/v8/upstream/3.1.8/src/token.h +0 -288
  858. data/ext/v8/upstream/3.1.8/src/top.cc +0 -1152
  859. data/ext/v8/upstream/3.1.8/src/top.h +0 -608
  860. data/ext/v8/upstream/3.1.8/src/type-info.cc +0 -406
  861. data/ext/v8/upstream/3.1.8/src/type-info.h +0 -283
  862. data/ext/v8/upstream/3.1.8/src/unicode.cc +0 -1624
  863. data/ext/v8/upstream/3.1.8/src/unicode.h +0 -280
  864. data/ext/v8/upstream/3.1.8/src/utils.h +0 -793
  865. data/ext/v8/upstream/3.1.8/src/v8-counters.cc +0 -55
  866. data/ext/v8/upstream/3.1.8/src/v8-counters.h +0 -290
  867. data/ext/v8/upstream/3.1.8/src/v8.cc +0 -270
  868. data/ext/v8/upstream/3.1.8/src/v8.h +0 -127
  869. data/ext/v8/upstream/3.1.8/src/v8globals.h +0 -480
  870. data/ext/v8/upstream/3.1.8/src/v8natives.js +0 -1252
  871. data/ext/v8/upstream/3.1.8/src/v8threads.cc +0 -440
  872. data/ext/v8/upstream/3.1.8/src/v8threads.h +0 -157
  873. data/ext/v8/upstream/3.1.8/src/v8utils.h +0 -354
  874. data/ext/v8/upstream/3.1.8/src/variables.h +0 -212
  875. data/ext/v8/upstream/3.1.8/src/version.cc +0 -95
  876. data/ext/v8/upstream/3.1.8/src/version.h +0 -64
  877. data/ext/v8/upstream/3.1.8/src/virtual-frame-light-inl.h +0 -170
  878. data/ext/v8/upstream/3.1.8/src/vm-state-inl.h +0 -134
  879. data/ext/v8/upstream/3.1.8/src/vm-state.h +0 -68
  880. data/ext/v8/upstream/3.1.8/src/win32-headers.h +0 -95
  881. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64-inl.h +0 -455
  882. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.cc +0 -3162
  883. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.h +0 -1584
  884. data/ext/v8/upstream/3.1.8/src/x64/builtins-x64.cc +0 -1492
  885. data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.cc +0 -5150
  886. data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.h +0 -519
  887. data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.cc +0 -8835
  888. data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.h +0 -750
  889. data/ext/v8/upstream/3.1.8/src/x64/cpu-x64.cc +0 -86
  890. data/ext/v8/upstream/3.1.8/src/x64/debug-x64.cc +0 -316
  891. data/ext/v8/upstream/3.1.8/src/x64/deoptimizer-x64.cc +0 -781
  892. data/ext/v8/upstream/3.1.8/src/x64/disasm-x64.cc +0 -1737
  893. data/ext/v8/upstream/3.1.8/src/x64/frames-x64.h +0 -130
  894. data/ext/v8/upstream/3.1.8/src/x64/full-codegen-x64.cc +0 -3984
  895. data/ext/v8/upstream/3.1.8/src/x64/ic-x64.cc +0 -1761
  896. data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.cc +0 -3639
  897. data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.h +0 -305
  898. data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.cc +0 -2044
  899. data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.h +0 -2052
  900. data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.cc +0 -2660
  901. data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.h +0 -1852
  902. data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.cc +0 -1382
  903. data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.h +0 -278
  904. data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64-inl.h +0 -87
  905. data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64.cc +0 -91
  906. data/ext/v8/upstream/3.1.8/src/x64/simulator-x64.h +0 -71
  907. data/ext/v8/upstream/3.1.8/src/x64/stub-cache-x64.cc +0 -3509
  908. data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.cc +0 -1292
  909. data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.h +0 -593
  910. data/ext/v8/upstream/3.1.8/src/zone-inl.h +0 -83
  911. data/ext/v8/upstream/3.1.8/src/zone.cc +0 -195
  912. data/ext/v8/upstream/3.1.8/src/zone.h +0 -233
  913. data/ext/v8/upstream/3.1.8/tools/gyp/v8.gyp +0 -869
  914. data/ext/v8/upstream/3.1.8/tools/linux-tick-processor +0 -33
  915. data/ext/v8/upstream/3.1.8/tools/tickprocessor.js +0 -863
  916. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base.vcproj +0 -1296
  917. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_arm.vcproj +0 -1234
  918. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_x64.vcproj +0 -1296
  919. data/ext/v8/upstream/3.1.8/tools/visual_studio/x64.vsprops +0 -17
  920. data/spec/ext/mem_spec.rb +0 -42
@@ -0,0 +1,1159 @@
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 are
6
+ // 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 distribution.
14
+ //
15
+ // - Neither the name of Sun Microsystems or the names of contributors may
16
+ // be used to endorse or promote products derived from this software without
17
+ // specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
+ // IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
+ // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
+ // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
+ // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
+ // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
+ // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
+ // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
+ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
+ // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // The original source code covered by the above license above has been
32
+ // modified significantly by Google Inc.
33
+ // Copyright 2011 the V8 project authors. All rights reserved.
34
+
35
+ // A light-weight IA32 Assembler.
36
+
37
+ #ifndef V8_IA32_ASSEMBLER_IA32_H_
38
+ #define V8_IA32_ASSEMBLER_IA32_H_
39
+
40
+ #include "isolate.h"
41
+ #include "serialize.h"
42
+
43
+ namespace v8 {
44
+ namespace internal {
45
+
46
+ // CPU Registers.
47
+ //
48
+ // 1) We would prefer to use an enum, but enum values are assignment-
49
+ // compatible with int, which has caused code-generation bugs.
50
+ //
51
+ // 2) We would prefer to use a class instead of a struct but we don't like
52
+ // the register initialization to depend on the particular initialization
53
+ // order (which appears to be different on OS X, Linux, and Windows for the
54
+ // installed versions of C++ we tried). Using a struct permits C-style
55
+ // "initialization". Also, the Register objects cannot be const as this
56
+ // forces initialization stubs in MSVC, making us dependent on initialization
57
+ // order.
58
+ //
59
+ // 3) By not using an enum, we are possibly preventing the compiler from
60
+ // doing certain constant folds, which may significantly reduce the
61
+ // code generated for some assembly instructions (because they boil down
62
+ // to a few constants). If this is a problem, we could change the code
63
+ // such that we use an enum in optimized mode, and the struct in debug
64
+ // mode. This way we get the compile-time error checking in debug mode
65
+ // and best performance in optimized code.
66
+ //
67
+ struct Register {
68
+ static const int kNumAllocatableRegisters = 6;
69
+ static const int kNumRegisters = 8;
70
+
71
+ static inline const char* AllocationIndexToString(int index);
72
+
73
+ static inline int ToAllocationIndex(Register reg);
74
+
75
+ static inline Register FromAllocationIndex(int index);
76
+
77
+ static Register from_code(int code) {
78
+ Register r = { code };
79
+ return r;
80
+ }
81
+ bool is_valid() const { return 0 <= code_ && code_ < kNumRegisters; }
82
+ bool is(Register reg) const { return code_ == reg.code_; }
83
+ // eax, ebx, ecx and edx are byte registers, the rest are not.
84
+ bool is_byte_register() const { return code_ <= 3; }
85
+ int code() const {
86
+ ASSERT(is_valid());
87
+ return code_;
88
+ }
89
+ int bit() const {
90
+ ASSERT(is_valid());
91
+ return 1 << code_;
92
+ }
93
+
94
+ // Unfortunately we can't make this private in a struct.
95
+ int code_;
96
+ };
97
+
98
+
99
+ const Register eax = { 0 };
100
+ const Register ecx = { 1 };
101
+ const Register edx = { 2 };
102
+ const Register ebx = { 3 };
103
+ const Register esp = { 4 };
104
+ const Register ebp = { 5 };
105
+ const Register esi = { 6 };
106
+ const Register edi = { 7 };
107
+ const Register no_reg = { -1 };
108
+
109
+
110
+ inline const char* Register::AllocationIndexToString(int index) {
111
+ ASSERT(index >= 0 && index < kNumAllocatableRegisters);
112
+ // This is the mapping of allocation indices to registers.
113
+ const char* const kNames[] = { "eax", "ecx", "edx", "ebx", "esi", "edi" };
114
+ return kNames[index];
115
+ }
116
+
117
+
118
+ inline int Register::ToAllocationIndex(Register reg) {
119
+ ASSERT(reg.is_valid() && !reg.is(esp) && !reg.is(ebp));
120
+ return (reg.code() >= 6) ? reg.code() - 2 : reg.code();
121
+ }
122
+
123
+
124
+ inline Register Register::FromAllocationIndex(int index) {
125
+ ASSERT(index >= 0 && index < kNumAllocatableRegisters);
126
+ return (index >= 4) ? from_code(index + 2) : from_code(index);
127
+ }
128
+
129
+
130
+ struct XMMRegister {
131
+ static const int kNumAllocatableRegisters = 7;
132
+ static const int kNumRegisters = 8;
133
+
134
+ static int ToAllocationIndex(XMMRegister reg) {
135
+ ASSERT(reg.code() != 0);
136
+ return reg.code() - 1;
137
+ }
138
+
139
+ static XMMRegister FromAllocationIndex(int index) {
140
+ ASSERT(index >= 0 && index < kNumAllocatableRegisters);
141
+ return from_code(index + 1);
142
+ }
143
+
144
+ static const char* AllocationIndexToString(int index) {
145
+ ASSERT(index >= 0 && index < kNumAllocatableRegisters);
146
+ const char* const names[] = {
147
+ "xmm1",
148
+ "xmm2",
149
+ "xmm3",
150
+ "xmm4",
151
+ "xmm5",
152
+ "xmm6",
153
+ "xmm7"
154
+ };
155
+ return names[index];
156
+ }
157
+
158
+ static XMMRegister from_code(int code) {
159
+ XMMRegister r = { code };
160
+ return r;
161
+ }
162
+
163
+ bool is_valid() const { return 0 <= code_ && code_ < kNumRegisters; }
164
+ bool is(XMMRegister reg) const { return code_ == reg.code_; }
165
+ int code() const {
166
+ ASSERT(is_valid());
167
+ return code_;
168
+ }
169
+
170
+ int code_;
171
+ };
172
+
173
+
174
+ const XMMRegister xmm0 = { 0 };
175
+ const XMMRegister xmm1 = { 1 };
176
+ const XMMRegister xmm2 = { 2 };
177
+ const XMMRegister xmm3 = { 3 };
178
+ const XMMRegister xmm4 = { 4 };
179
+ const XMMRegister xmm5 = { 5 };
180
+ const XMMRegister xmm6 = { 6 };
181
+ const XMMRegister xmm7 = { 7 };
182
+
183
+
184
+ typedef XMMRegister DoubleRegister;
185
+
186
+
187
+ enum Condition {
188
+ // any value < 0 is considered no_condition
189
+ no_condition = -1,
190
+
191
+ overflow = 0,
192
+ no_overflow = 1,
193
+ below = 2,
194
+ above_equal = 3,
195
+ equal = 4,
196
+ not_equal = 5,
197
+ below_equal = 6,
198
+ above = 7,
199
+ negative = 8,
200
+ positive = 9,
201
+ parity_even = 10,
202
+ parity_odd = 11,
203
+ less = 12,
204
+ greater_equal = 13,
205
+ less_equal = 14,
206
+ greater = 15,
207
+
208
+ // aliases
209
+ carry = below,
210
+ not_carry = above_equal,
211
+ zero = equal,
212
+ not_zero = not_equal,
213
+ sign = negative,
214
+ not_sign = positive
215
+ };
216
+
217
+
218
+ // Returns the equivalent of !cc.
219
+ // Negation of the default no_condition (-1) results in a non-default
220
+ // no_condition value (-2). As long as tests for no_condition check
221
+ // for condition < 0, this will work as expected.
222
+ inline Condition NegateCondition(Condition cc) {
223
+ return static_cast<Condition>(cc ^ 1);
224
+ }
225
+
226
+
227
+ // Corresponds to transposing the operands of a comparison.
228
+ inline Condition ReverseCondition(Condition cc) {
229
+ switch (cc) {
230
+ case below:
231
+ return above;
232
+ case above:
233
+ return below;
234
+ case above_equal:
235
+ return below_equal;
236
+ case below_equal:
237
+ return above_equal;
238
+ case less:
239
+ return greater;
240
+ case greater:
241
+ return less;
242
+ case greater_equal:
243
+ return less_equal;
244
+ case less_equal:
245
+ return greater_equal;
246
+ default:
247
+ return cc;
248
+ };
249
+ }
250
+
251
+
252
+ enum Hint {
253
+ no_hint = 0,
254
+ not_taken = 0x2e,
255
+ taken = 0x3e
256
+ };
257
+
258
+
259
+ // The result of negating a hint is as if the corresponding condition
260
+ // were negated by NegateCondition. That is, no_hint is mapped to
261
+ // itself and not_taken and taken are mapped to each other.
262
+ inline Hint NegateHint(Hint hint) {
263
+ return (hint == no_hint)
264
+ ? no_hint
265
+ : ((hint == not_taken) ? taken : not_taken);
266
+ }
267
+
268
+
269
+ // -----------------------------------------------------------------------------
270
+ // Machine instruction Immediates
271
+
272
+ class Immediate BASE_EMBEDDED {
273
+ public:
274
+ inline explicit Immediate(int x);
275
+ inline explicit Immediate(const ExternalReference& ext);
276
+ inline explicit Immediate(Handle<Object> handle);
277
+ inline explicit Immediate(Smi* value);
278
+ inline explicit Immediate(Address addr);
279
+
280
+ static Immediate CodeRelativeOffset(Label* label) {
281
+ return Immediate(label);
282
+ }
283
+
284
+ bool is_zero() const { return x_ == 0 && rmode_ == RelocInfo::NONE; }
285
+ bool is_int8() const {
286
+ return -128 <= x_ && x_ < 128 && rmode_ == RelocInfo::NONE;
287
+ }
288
+ bool is_int16() const {
289
+ return -32768 <= x_ && x_ < 32768 && rmode_ == RelocInfo::NONE;
290
+ }
291
+
292
+ private:
293
+ inline explicit Immediate(Label* value);
294
+
295
+ int x_;
296
+ RelocInfo::Mode rmode_;
297
+
298
+ friend class Assembler;
299
+ };
300
+
301
+
302
+ // -----------------------------------------------------------------------------
303
+ // Machine instruction Operands
304
+
305
+ enum ScaleFactor {
306
+ times_1 = 0,
307
+ times_2 = 1,
308
+ times_4 = 2,
309
+ times_8 = 3,
310
+ times_int_size = times_4,
311
+ times_half_pointer_size = times_2,
312
+ times_pointer_size = times_4,
313
+ times_twice_pointer_size = times_8
314
+ };
315
+
316
+
317
+ class Operand BASE_EMBEDDED {
318
+ public:
319
+ // reg
320
+ INLINE(explicit Operand(Register reg));
321
+
322
+ // XMM reg
323
+ INLINE(explicit Operand(XMMRegister xmm_reg));
324
+
325
+ // [disp/r]
326
+ INLINE(explicit Operand(int32_t disp, RelocInfo::Mode rmode));
327
+ // disp only must always be relocated
328
+
329
+ // [base + disp/r]
330
+ explicit Operand(Register base, int32_t disp,
331
+ RelocInfo::Mode rmode = RelocInfo::NONE);
332
+
333
+ // [base + index*scale + disp/r]
334
+ explicit Operand(Register base,
335
+ Register index,
336
+ ScaleFactor scale,
337
+ int32_t disp,
338
+ RelocInfo::Mode rmode = RelocInfo::NONE);
339
+
340
+ // [index*scale + disp/r]
341
+ explicit Operand(Register index,
342
+ ScaleFactor scale,
343
+ int32_t disp,
344
+ RelocInfo::Mode rmode = RelocInfo::NONE);
345
+
346
+ static Operand StaticVariable(const ExternalReference& ext) {
347
+ return Operand(reinterpret_cast<int32_t>(ext.address()),
348
+ RelocInfo::EXTERNAL_REFERENCE);
349
+ }
350
+
351
+ static Operand StaticArray(Register index,
352
+ ScaleFactor scale,
353
+ const ExternalReference& arr) {
354
+ return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()),
355
+ RelocInfo::EXTERNAL_REFERENCE);
356
+ }
357
+
358
+ static Operand Cell(Handle<JSGlobalPropertyCell> cell) {
359
+ return Operand(reinterpret_cast<int32_t>(cell.location()),
360
+ RelocInfo::GLOBAL_PROPERTY_CELL);
361
+ }
362
+
363
+ // Returns true if this Operand is a wrapper for the specified register.
364
+ bool is_reg(Register reg) const;
365
+
366
+ private:
367
+ byte buf_[6];
368
+ // The number of bytes in buf_.
369
+ unsigned int len_;
370
+ // Only valid if len_ > 4.
371
+ RelocInfo::Mode rmode_;
372
+
373
+ // Set the ModRM byte without an encoded 'reg' register. The
374
+ // register is encoded later as part of the emit_operand operation.
375
+ inline void set_modrm(int mod, Register rm);
376
+
377
+ inline void set_sib(ScaleFactor scale, Register index, Register base);
378
+ inline void set_disp8(int8_t disp);
379
+ inline void set_dispr(int32_t disp, RelocInfo::Mode rmode);
380
+
381
+ friend class Assembler;
382
+ };
383
+
384
+
385
+ // -----------------------------------------------------------------------------
386
+ // A Displacement describes the 32bit immediate field of an instruction which
387
+ // may be used together with a Label in order to refer to a yet unknown code
388
+ // position. Displacements stored in the instruction stream are used to describe
389
+ // the instruction and to chain a list of instructions using the same Label.
390
+ // A Displacement contains 2 different fields:
391
+ //
392
+ // next field: position of next displacement in the chain (0 = end of list)
393
+ // type field: instruction type
394
+ //
395
+ // A next value of null (0) indicates the end of a chain (note that there can
396
+ // be no displacement at position zero, because there is always at least one
397
+ // instruction byte before the displacement).
398
+ //
399
+ // Displacement _data field layout
400
+ //
401
+ // |31.....2|1......0|
402
+ // [ next | type |
403
+
404
+ class Displacement BASE_EMBEDDED {
405
+ public:
406
+ enum Type {
407
+ UNCONDITIONAL_JUMP,
408
+ CODE_RELATIVE,
409
+ OTHER
410
+ };
411
+
412
+ int data() const { return data_; }
413
+ Type type() const { return TypeField::decode(data_); }
414
+ void next(Label* L) const {
415
+ int n = NextField::decode(data_);
416
+ n > 0 ? L->link_to(n) : L->Unuse();
417
+ }
418
+ void link_to(Label* L) { init(L, type()); }
419
+
420
+ explicit Displacement(int data) { data_ = data; }
421
+
422
+ Displacement(Label* L, Type type) { init(L, type); }
423
+
424
+ void print() {
425
+ PrintF("%s (%x) ", (type() == UNCONDITIONAL_JUMP ? "jmp" : "[other]"),
426
+ NextField::decode(data_));
427
+ }
428
+
429
+ private:
430
+ int data_;
431
+
432
+ class TypeField: public BitField<Type, 0, 2> {};
433
+ class NextField: public BitField<int, 2, 32-2> {};
434
+
435
+ void init(Label* L, Type type);
436
+ };
437
+
438
+
439
+
440
+ // CpuFeatures keeps track of which features are supported by the target CPU.
441
+ // Supported features must be enabled by a Scope before use.
442
+ // Example:
443
+ // if (CpuFeatures::IsSupported(SSE2)) {
444
+ // CpuFeatures::Scope fscope(SSE2);
445
+ // // Generate SSE2 floating point code.
446
+ // } else {
447
+ // // Generate standard x87 floating point code.
448
+ // }
449
+ class CpuFeatures : public AllStatic {
450
+ public:
451
+ // Detect features of the target CPU. Set safe defaults if the serializer
452
+ // is enabled (snapshots must be portable).
453
+ static void Probe();
454
+
455
+ // Check whether a feature is supported by the target CPU.
456
+ static bool IsSupported(CpuFeature f) {
457
+ ASSERT(initialized_);
458
+ if (f == SSE2 && !FLAG_enable_sse2) return false;
459
+ if (f == SSE3 && !FLAG_enable_sse3) return false;
460
+ if (f == SSE4_1 && !FLAG_enable_sse4_1) return false;
461
+ if (f == CMOV && !FLAG_enable_cmov) return false;
462
+ if (f == RDTSC && !FLAG_enable_rdtsc) return false;
463
+ return (supported_ & (static_cast<uint64_t>(1) << f)) != 0;
464
+ }
465
+
466
+ #ifdef DEBUG
467
+ // Check whether a feature is currently enabled.
468
+ static bool IsEnabled(CpuFeature f) {
469
+ ASSERT(initialized_);
470
+ Isolate* isolate = Isolate::UncheckedCurrent();
471
+ if (isolate == NULL) {
472
+ // When no isolate is available, work as if we're running in
473
+ // release mode.
474
+ return IsSupported(f);
475
+ }
476
+ uint64_t enabled = isolate->enabled_cpu_features();
477
+ return (enabled & (static_cast<uint64_t>(1) << f)) != 0;
478
+ }
479
+ #endif
480
+
481
+ // Enable a specified feature within a scope.
482
+ class Scope BASE_EMBEDDED {
483
+ #ifdef DEBUG
484
+ public:
485
+ explicit Scope(CpuFeature f) {
486
+ uint64_t mask = static_cast<uint64_t>(1) << f;
487
+ ASSERT(CpuFeatures::IsSupported(f));
488
+ ASSERT(!Serializer::enabled() ||
489
+ (CpuFeatures::found_by_runtime_probing_ & mask) == 0);
490
+ isolate_ = Isolate::UncheckedCurrent();
491
+ old_enabled_ = 0;
492
+ if (isolate_ != NULL) {
493
+ old_enabled_ = isolate_->enabled_cpu_features();
494
+ isolate_->set_enabled_cpu_features(old_enabled_ | mask);
495
+ }
496
+ }
497
+ ~Scope() {
498
+ ASSERT_EQ(Isolate::UncheckedCurrent(), isolate_);
499
+ if (isolate_ != NULL) {
500
+ isolate_->set_enabled_cpu_features(old_enabled_);
501
+ }
502
+ }
503
+ private:
504
+ Isolate* isolate_;
505
+ uint64_t old_enabled_;
506
+ #else
507
+ public:
508
+ explicit Scope(CpuFeature f) {}
509
+ #endif
510
+ };
511
+
512
+ class TryForceFeatureScope BASE_EMBEDDED {
513
+ public:
514
+ explicit TryForceFeatureScope(CpuFeature f)
515
+ : old_supported_(CpuFeatures::supported_) {
516
+ if (CanForce()) {
517
+ CpuFeatures::supported_ |= (static_cast<uint64_t>(1) << f);
518
+ }
519
+ }
520
+
521
+ ~TryForceFeatureScope() {
522
+ if (CanForce()) {
523
+ CpuFeatures::supported_ = old_supported_;
524
+ }
525
+ }
526
+
527
+ private:
528
+ static bool CanForce() {
529
+ // It's only safe to temporarily force support of CPU features
530
+ // when there's only a single isolate, which is guaranteed when
531
+ // the serializer is enabled.
532
+ return Serializer::enabled();
533
+ }
534
+
535
+ const uint64_t old_supported_;
536
+ };
537
+
538
+ private:
539
+ #ifdef DEBUG
540
+ static bool initialized_;
541
+ #endif
542
+ static uint64_t supported_;
543
+ static uint64_t found_by_runtime_probing_;
544
+
545
+ DISALLOW_COPY_AND_ASSIGN(CpuFeatures);
546
+ };
547
+
548
+
549
+ class Assembler : public AssemblerBase {
550
+ private:
551
+ // We check before assembling an instruction that there is sufficient
552
+ // space to write an instruction and its relocation information.
553
+ // The relocation writer's position must be kGap bytes above the end of
554
+ // the generated instructions. This leaves enough space for the
555
+ // longest possible ia32 instruction, 15 bytes, and the longest possible
556
+ // relocation information encoding, RelocInfoWriter::kMaxLength == 16.
557
+ // (There is a 15 byte limit on ia32 instruction length that rules out some
558
+ // otherwise valid instructions.)
559
+ // This allows for a single, fast space check per instruction.
560
+ static const int kGap = 32;
561
+
562
+ public:
563
+ // Create an assembler. Instructions and relocation information are emitted
564
+ // into a buffer, with the instructions starting from the beginning and the
565
+ // relocation information starting from the end of the buffer. See CodeDesc
566
+ // for a detailed comment on the layout (globals.h).
567
+ //
568
+ // If the provided buffer is NULL, the assembler allocates and grows its own
569
+ // buffer, and buffer_size determines the initial buffer size. The buffer is
570
+ // owned by the assembler and deallocated upon destruction of the assembler.
571
+ //
572
+ // If the provided buffer is not NULL, the assembler uses the provided buffer
573
+ // for code generation and assumes its size to be buffer_size. If the buffer
574
+ // is too small, a fatal error occurs. No deallocation of the buffer is done
575
+ // upon destruction of the assembler.
576
+ // TODO(vitalyr): the assembler does not need an isolate.
577
+ Assembler(Isolate* isolate, void* buffer, int buffer_size);
578
+ ~Assembler();
579
+
580
+ // Overrides the default provided by FLAG_debug_code.
581
+ void set_emit_debug_code(bool value) { emit_debug_code_ = value; }
582
+
583
+ // GetCode emits any pending (non-emitted) code and fills the descriptor
584
+ // desc. GetCode() is idempotent; it returns the same result if no other
585
+ // Assembler functions are invoked in between GetCode() calls.
586
+ void GetCode(CodeDesc* desc);
587
+
588
+ // Read/Modify the code target in the branch/call instruction at pc.
589
+ inline static Address target_address_at(Address pc);
590
+ inline static void set_target_address_at(Address pc, Address target);
591
+
592
+ // This sets the branch destination (which is in the instruction on x86).
593
+ // This is for calls and branches within generated code.
594
+ inline static void set_target_at(Address instruction_payload,
595
+ Address target) {
596
+ set_target_address_at(instruction_payload, target);
597
+ }
598
+
599
+ // This sets the branch destination (which is in the instruction on x86).
600
+ // This is for calls and branches to runtime code.
601
+ inline static void set_external_target_at(Address instruction_payload,
602
+ Address target) {
603
+ set_target_address_at(instruction_payload, target);
604
+ }
605
+
606
+ static const int kCallTargetSize = kPointerSize;
607
+ static const int kExternalTargetSize = kPointerSize;
608
+
609
+ // Distance between the address of the code target in the call instruction
610
+ // and the return address
611
+ static const int kCallTargetAddressOffset = kPointerSize;
612
+ // Distance between start of patched return sequence and the emitted address
613
+ // to jump to.
614
+ static const int kPatchReturnSequenceAddressOffset = 1; // JMP imm32.
615
+
616
+ // Distance between start of patched debug break slot and the emitted address
617
+ // to jump to.
618
+ static const int kPatchDebugBreakSlotAddressOffset = 1; // JMP imm32.
619
+
620
+ static const int kCallInstructionLength = 5;
621
+ static const int kJSReturnSequenceLength = 6;
622
+
623
+ // The debug break slot must be able to contain a call instruction.
624
+ static const int kDebugBreakSlotLength = kCallInstructionLength;
625
+
626
+ // One byte opcode for test eax,0xXXXXXXXX.
627
+ static const byte kTestEaxByte = 0xA9;
628
+ // One byte opcode for test al, 0xXX.
629
+ static const byte kTestAlByte = 0xA8;
630
+ // One byte opcode for nop.
631
+ static const byte kNopByte = 0x90;
632
+
633
+ // One byte opcode for a short unconditional jump.
634
+ static const byte kJmpShortOpcode = 0xEB;
635
+ // One byte prefix for a short conditional jump.
636
+ static const byte kJccShortPrefix = 0x70;
637
+ static const byte kJncShortOpcode = kJccShortPrefix | not_carry;
638
+ static const byte kJcShortOpcode = kJccShortPrefix | carry;
639
+
640
+ // ---------------------------------------------------------------------------
641
+ // Code generation
642
+ //
643
+ // - function names correspond one-to-one to ia32 instruction mnemonics
644
+ // - unless specified otherwise, instructions operate on 32bit operands
645
+ // - instructions on 8bit (byte) operands/registers have a trailing '_b'
646
+ // - instructions on 16bit (word) operands/registers have a trailing '_w'
647
+ // - naming conflicts with C++ keywords are resolved via a trailing '_'
648
+
649
+ // NOTE ON INTERFACE: Currently, the interface is not very consistent
650
+ // in the sense that some operations (e.g. mov()) can be called in more
651
+ // the one way to generate the same instruction: The Register argument
652
+ // can in some cases be replaced with an Operand(Register) argument.
653
+ // This should be cleaned up and made more orthogonal. The questions
654
+ // is: should we always use Operands instead of Registers where an
655
+ // Operand is possible, or should we have a Register (overloaded) form
656
+ // instead? We must be careful to make sure that the selected instruction
657
+ // is obvious from the parameters to avoid hard-to-find code generation
658
+ // bugs.
659
+
660
+ // Insert the smallest number of nop instructions
661
+ // possible to align the pc offset to a multiple
662
+ // of m. m must be a power of 2.
663
+ void Align(int m);
664
+ // Aligns code to something that's optimal for a jump target for the platform.
665
+ void CodeTargetAlign();
666
+
667
+ // Stack
668
+ void pushad();
669
+ void popad();
670
+
671
+ void pushfd();
672
+ void popfd();
673
+
674
+ void push(const Immediate& x);
675
+ void push_imm32(int32_t imm32);
676
+ void push(Register src);
677
+ void push(const Operand& src);
678
+
679
+ void pop(Register dst);
680
+ void pop(const Operand& dst);
681
+
682
+ void enter(const Immediate& size);
683
+ void leave();
684
+
685
+ // Moves
686
+ void mov_b(Register dst, const Operand& src);
687
+ void mov_b(const Operand& dst, int8_t imm8);
688
+ void mov_b(const Operand& dst, Register src);
689
+
690
+ void mov_w(Register dst, const Operand& src);
691
+ void mov_w(const Operand& dst, Register src);
692
+
693
+ void mov(Register dst, int32_t imm32);
694
+ void mov(Register dst, const Immediate& x);
695
+ void mov(Register dst, Handle<Object> handle);
696
+ void mov(Register dst, const Operand& src);
697
+ void mov(Register dst, Register src);
698
+ void mov(const Operand& dst, const Immediate& x);
699
+ void mov(const Operand& dst, Handle<Object> handle);
700
+ void mov(const Operand& dst, Register src);
701
+
702
+ void movsx_b(Register dst, const Operand& src);
703
+
704
+ void movsx_w(Register dst, const Operand& src);
705
+
706
+ void movzx_b(Register dst, const Operand& src);
707
+
708
+ void movzx_w(Register dst, const Operand& src);
709
+
710
+ // Conditional moves
711
+ void cmov(Condition cc, Register dst, int32_t imm32);
712
+ void cmov(Condition cc, Register dst, Handle<Object> handle);
713
+ void cmov(Condition cc, Register dst, const Operand& src);
714
+
715
+ // Flag management.
716
+ void cld();
717
+
718
+ // Repetitive string instructions.
719
+ void rep_movs();
720
+ void rep_stos();
721
+ void stos();
722
+
723
+ // Exchange two registers
724
+ void xchg(Register dst, Register src);
725
+
726
+ // Arithmetics
727
+ void adc(Register dst, int32_t imm32);
728
+ void adc(Register dst, const Operand& src);
729
+
730
+ void add(Register dst, const Operand& src);
731
+ void add(const Operand& dst, const Immediate& x);
732
+
733
+ void and_(Register dst, int32_t imm32);
734
+ void and_(Register dst, const Immediate& x);
735
+ void and_(Register dst, const Operand& src);
736
+ void and_(const Operand& src, Register dst);
737
+ void and_(const Operand& dst, const Immediate& x);
738
+
739
+ void cmpb(const Operand& op, int8_t imm8);
740
+ void cmpb(Register src, const Operand& dst);
741
+ void cmpb(const Operand& dst, Register src);
742
+ void cmpb_al(const Operand& op);
743
+ void cmpw_ax(const Operand& op);
744
+ void cmpw(const Operand& op, Immediate imm16);
745
+ void cmp(Register reg, int32_t imm32);
746
+ void cmp(Register reg, Handle<Object> handle);
747
+ void cmp(Register reg, const Operand& op);
748
+ void cmp(const Operand& op, const Immediate& imm);
749
+ void cmp(const Operand& op, Handle<Object> handle);
750
+
751
+ void dec_b(Register dst);
752
+ void dec_b(const Operand& dst);
753
+
754
+ void dec(Register dst);
755
+ void dec(const Operand& dst);
756
+
757
+ void cdq();
758
+
759
+ void idiv(Register src);
760
+
761
+ // Signed multiply instructions.
762
+ void imul(Register src); // edx:eax = eax * src.
763
+ void imul(Register dst, const Operand& src); // dst = dst * src.
764
+ void imul(Register dst, Register src, int32_t imm32); // dst = src * imm32.
765
+
766
+ void inc(Register dst);
767
+ void inc(const Operand& dst);
768
+
769
+ void lea(Register dst, const Operand& src);
770
+
771
+ // Unsigned multiply instruction.
772
+ void mul(Register src); // edx:eax = eax * reg.
773
+
774
+ void neg(Register dst);
775
+
776
+ void not_(Register dst);
777
+
778
+ void or_(Register dst, int32_t imm32);
779
+ void or_(Register dst, const Operand& src);
780
+ void or_(const Operand& dst, Register src);
781
+ void or_(const Operand& dst, const Immediate& x);
782
+
783
+ void rcl(Register dst, uint8_t imm8);
784
+ void rcr(Register dst, uint8_t imm8);
785
+
786
+ void sar(Register dst, uint8_t imm8);
787
+ void sar_cl(Register dst);
788
+
789
+ void sbb(Register dst, const Operand& src);
790
+
791
+ void shld(Register dst, const Operand& src);
792
+
793
+ void shl(Register dst, uint8_t imm8);
794
+ void shl_cl(Register dst);
795
+
796
+ void shrd(Register dst, const Operand& src);
797
+
798
+ void shr(Register dst, uint8_t imm8);
799
+ void shr_cl(Register dst);
800
+
801
+ void subb(const Operand& dst, int8_t imm8);
802
+ void subb(Register dst, const Operand& src);
803
+ void sub(const Operand& dst, const Immediate& x);
804
+ void sub(Register dst, const Operand& src);
805
+ void sub(const Operand& dst, Register src);
806
+
807
+ void test(Register reg, const Immediate& imm);
808
+ void test(Register reg, const Operand& op);
809
+ void test_b(Register reg, const Operand& op);
810
+ void test(const Operand& op, const Immediate& imm);
811
+ void test_b(const Operand& op, uint8_t imm8);
812
+
813
+ void xor_(Register dst, int32_t imm32);
814
+ void xor_(Register dst, const Operand& src);
815
+ void xor_(const Operand& src, Register dst);
816
+ void xor_(const Operand& dst, const Immediate& x);
817
+
818
+ // Bit operations.
819
+ void bt(const Operand& dst, Register src);
820
+ void bts(const Operand& dst, Register src);
821
+
822
+ // Miscellaneous
823
+ void hlt();
824
+ void int3();
825
+ void nop();
826
+ void rdtsc();
827
+ void ret(int imm16);
828
+
829
+ // Label operations & relative jumps (PPUM Appendix D)
830
+ //
831
+ // Takes a branch opcode (cc) and a label (L) and generates
832
+ // either a backward branch or a forward branch and links it
833
+ // to the label fixup chain. Usage:
834
+ //
835
+ // Label L; // unbound label
836
+ // j(cc, &L); // forward branch to unbound label
837
+ // bind(&L); // bind label to the current pc
838
+ // j(cc, &L); // backward branch to bound label
839
+ // bind(&L); // illegal: a label may be bound only once
840
+ //
841
+ // Note: The same Label can be used for forward and backward branches
842
+ // but it may be bound only once.
843
+
844
+ void bind(Label* L); // binds an unbound label L to the current code position
845
+ void bind(NearLabel* L);
846
+
847
+ // Calls
848
+ void call(Label* L);
849
+ void call(byte* entry, RelocInfo::Mode rmode);
850
+ void call(const Operand& adr);
851
+ void call(Handle<Code> code, RelocInfo::Mode rmode);
852
+
853
+ // Jumps
854
+ void jmp(Label* L); // unconditional jump to L
855
+ void jmp(byte* entry, RelocInfo::Mode rmode);
856
+ void jmp(const Operand& adr);
857
+ void jmp(Handle<Code> code, RelocInfo::Mode rmode);
858
+
859
+ // Short jump
860
+ void jmp(NearLabel* L);
861
+
862
+ // Conditional jumps
863
+ void j(Condition cc, Label* L, Hint hint = no_hint);
864
+ void j(Condition cc, byte* entry, RelocInfo::Mode rmode, Hint hint = no_hint);
865
+ void j(Condition cc, Handle<Code> code, Hint hint = no_hint);
866
+
867
+ // Conditional short jump
868
+ void j(Condition cc, NearLabel* L, Hint hint = no_hint);
869
+
870
+ // Floating-point operations
871
+ void fld(int i);
872
+ void fstp(int i);
873
+
874
+ void fld1();
875
+ void fldz();
876
+ void fldpi();
877
+ void fldln2();
878
+
879
+ void fld_s(const Operand& adr);
880
+ void fld_d(const Operand& adr);
881
+
882
+ void fstp_s(const Operand& adr);
883
+ void fstp_d(const Operand& adr);
884
+ void fst_d(const Operand& adr);
885
+
886
+ void fild_s(const Operand& adr);
887
+ void fild_d(const Operand& adr);
888
+
889
+ void fist_s(const Operand& adr);
890
+
891
+ void fistp_s(const Operand& adr);
892
+ void fistp_d(const Operand& adr);
893
+
894
+ // The fisttp instructions require SSE3.
895
+ void fisttp_s(const Operand& adr);
896
+ void fisttp_d(const Operand& adr);
897
+
898
+ void fabs();
899
+ void fchs();
900
+ void fcos();
901
+ void fsin();
902
+ void fyl2x();
903
+
904
+ void fadd(int i);
905
+ void fsub(int i);
906
+ void fmul(int i);
907
+ void fdiv(int i);
908
+
909
+ void fisub_s(const Operand& adr);
910
+
911
+ void faddp(int i = 1);
912
+ void fsubp(int i = 1);
913
+ void fsubrp(int i = 1);
914
+ void fmulp(int i = 1);
915
+ void fdivp(int i = 1);
916
+ void fprem();
917
+ void fprem1();
918
+
919
+ void fxch(int i = 1);
920
+ void fincstp();
921
+ void ffree(int i = 0);
922
+
923
+ void ftst();
924
+ void fucomp(int i);
925
+ void fucompp();
926
+ void fucomi(int i);
927
+ void fucomip();
928
+ void fcompp();
929
+ void fnstsw_ax();
930
+ void fwait();
931
+ void fnclex();
932
+
933
+ void frndint();
934
+
935
+ void sahf();
936
+ void setcc(Condition cc, Register reg);
937
+
938
+ void cpuid();
939
+
940
+ // SSE2 instructions
941
+ void cvttss2si(Register dst, const Operand& src);
942
+ void cvttsd2si(Register dst, const Operand& src);
943
+
944
+ void cvtsi2sd(XMMRegister dst, const Operand& src);
945
+ void cvtss2sd(XMMRegister dst, XMMRegister src);
946
+ void cvtsd2ss(XMMRegister dst, XMMRegister src);
947
+
948
+ void addsd(XMMRegister dst, XMMRegister src);
949
+ void subsd(XMMRegister dst, XMMRegister src);
950
+ void mulsd(XMMRegister dst, XMMRegister src);
951
+ void divsd(XMMRegister dst, XMMRegister src);
952
+ void xorpd(XMMRegister dst, XMMRegister src);
953
+ void sqrtsd(XMMRegister dst, XMMRegister src);
954
+
955
+ void andpd(XMMRegister dst, XMMRegister src);
956
+
957
+ void ucomisd(XMMRegister dst, XMMRegister src);
958
+ void movmskpd(Register dst, XMMRegister src);
959
+
960
+ void cmpltsd(XMMRegister dst, XMMRegister src);
961
+
962
+ void movaps(XMMRegister dst, XMMRegister src);
963
+
964
+ void movdqa(XMMRegister dst, const Operand& src);
965
+ void movdqa(const Operand& dst, XMMRegister src);
966
+ void movdqu(XMMRegister dst, const Operand& src);
967
+ void movdqu(const Operand& dst, XMMRegister src);
968
+
969
+ // Use either movsd or movlpd.
970
+ void movdbl(XMMRegister dst, const Operand& src);
971
+ void movdbl(const Operand& dst, XMMRegister src);
972
+
973
+ void movd(XMMRegister dst, const Operand& src);
974
+ void movd(const Operand& src, XMMRegister dst);
975
+ void movsd(XMMRegister dst, XMMRegister src);
976
+
977
+ void movss(XMMRegister dst, const Operand& src);
978
+ void movss(const Operand& src, XMMRegister dst);
979
+ void movss(XMMRegister dst, XMMRegister src);
980
+
981
+ void pand(XMMRegister dst, XMMRegister src);
982
+ void pxor(XMMRegister dst, XMMRegister src);
983
+ void por(XMMRegister dst, XMMRegister src);
984
+ void ptest(XMMRegister dst, XMMRegister src);
985
+
986
+ void psllq(XMMRegister reg, int8_t shift);
987
+ void psllq(XMMRegister dst, XMMRegister src);
988
+ void psrlq(XMMRegister reg, int8_t shift);
989
+ void psrlq(XMMRegister dst, XMMRegister src);
990
+ void pshufd(XMMRegister dst, XMMRegister src, int8_t shuffle);
991
+ void pextrd(const Operand& dst, XMMRegister src, int8_t offset);
992
+ void pinsrd(XMMRegister dst, const Operand& src, int8_t offset);
993
+
994
+ // Parallel XMM operations.
995
+ void movntdqa(XMMRegister src, const Operand& dst);
996
+ void movntdq(const Operand& dst, XMMRegister src);
997
+ // Prefetch src position into cache level.
998
+ // Level 1, 2 or 3 specifies CPU cache level. Level 0 specifies a
999
+ // non-temporal
1000
+ void prefetch(const Operand& src, int level);
1001
+ // TODO(lrn): Need SFENCE for movnt?
1002
+
1003
+ // Debugging
1004
+ void Print();
1005
+
1006
+ // Check the code size generated from label to here.
1007
+ int SizeOfCodeGeneratedSince(Label* l) { return pc_offset() - l->pos(); }
1008
+
1009
+ // Mark address of the ExitJSFrame code.
1010
+ void RecordJSReturn();
1011
+
1012
+ // Mark address of a debug break slot.
1013
+ void RecordDebugBreakSlot();
1014
+
1015
+ // Record a comment relocation entry that can be used by a disassembler.
1016
+ // Use --code-comments to enable, or provide "force = true" flag to always
1017
+ // write a comment.
1018
+ void RecordComment(const char* msg, bool force = false);
1019
+
1020
+ // Writes a single byte or word of data in the code stream. Used for
1021
+ // inline tables, e.g., jump-tables.
1022
+ void db(uint8_t data);
1023
+ void dd(uint32_t data);
1024
+
1025
+ int pc_offset() const { return pc_ - buffer_; }
1026
+
1027
+ // Check if there is less than kGap bytes available in the buffer.
1028
+ // If this is the case, we need to grow the buffer before emitting
1029
+ // an instruction or relocation information.
1030
+ inline bool overflow() const { return pc_ >= reloc_info_writer.pos() - kGap; }
1031
+
1032
+ // Get the number of bytes available in the buffer.
1033
+ inline int available_space() const { return reloc_info_writer.pos() - pc_; }
1034
+
1035
+ static bool IsNop(Address addr) { return *addr == 0x90; }
1036
+
1037
+ PositionsRecorder* positions_recorder() { return &positions_recorder_; }
1038
+
1039
+ int relocation_writer_size() {
1040
+ return (buffer_ + buffer_size_) - reloc_info_writer.pos();
1041
+ }
1042
+
1043
+ // Avoid overflows for displacements etc.
1044
+ static const int kMaximalBufferSize = 512*MB;
1045
+ static const int kMinimalBufferSize = 4*KB;
1046
+
1047
+ protected:
1048
+ bool emit_debug_code() const { return emit_debug_code_; }
1049
+
1050
+ void movsd(XMMRegister dst, const Operand& src);
1051
+ void movsd(const Operand& dst, XMMRegister src);
1052
+
1053
+ void emit_sse_operand(XMMRegister reg, const Operand& adr);
1054
+ void emit_sse_operand(XMMRegister dst, XMMRegister src);
1055
+ void emit_sse_operand(Register dst, XMMRegister src);
1056
+
1057
+ byte* addr_at(int pos) { return buffer_ + pos; }
1058
+
1059
+ private:
1060
+ byte byte_at(int pos) { return buffer_[pos]; }
1061
+ void set_byte_at(int pos, byte value) { buffer_[pos] = value; }
1062
+ uint32_t long_at(int pos) {
1063
+ return *reinterpret_cast<uint32_t*>(addr_at(pos));
1064
+ }
1065
+ void long_at_put(int pos, uint32_t x) {
1066
+ *reinterpret_cast<uint32_t*>(addr_at(pos)) = x;
1067
+ }
1068
+
1069
+ // code emission
1070
+ void GrowBuffer();
1071
+ inline void emit(uint32_t x);
1072
+ inline void emit(Handle<Object> handle);
1073
+ inline void emit(uint32_t x, RelocInfo::Mode rmode);
1074
+ inline void emit(const Immediate& x);
1075
+ inline void emit_w(const Immediate& x);
1076
+
1077
+ // Emit the code-object-relative offset of the label's position
1078
+ inline void emit_code_relative_offset(Label* label);
1079
+
1080
+ // instruction generation
1081
+ void emit_arith_b(int op1, int op2, Register dst, int imm8);
1082
+
1083
+ // Emit a basic arithmetic instruction (i.e. first byte of the family is 0x81)
1084
+ // with a given destination expression and an immediate operand. It attempts
1085
+ // to use the shortest encoding possible.
1086
+ // sel specifies the /n in the modrm byte (see the Intel PRM).
1087
+ void emit_arith(int sel, Operand dst, const Immediate& x);
1088
+
1089
+ void emit_operand(Register reg, const Operand& adr);
1090
+
1091
+ void emit_farith(int b1, int b2, int i);
1092
+
1093
+ // labels
1094
+ void print(Label* L);
1095
+ void bind_to(Label* L, int pos);
1096
+
1097
+ // displacements
1098
+ inline Displacement disp_at(Label* L);
1099
+ inline void disp_at_put(Label* L, Displacement disp);
1100
+ inline void emit_disp(Label* L, Displacement::Type type);
1101
+
1102
+ // record reloc info for current pc_
1103
+ void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0);
1104
+
1105
+ friend class CodePatcher;
1106
+ friend class EnsureSpace;
1107
+
1108
+ // Code buffer:
1109
+ // The buffer into which code and relocation info are generated.
1110
+ byte* buffer_;
1111
+ int buffer_size_;
1112
+ // True if the assembler owns the buffer, false if buffer is external.
1113
+ bool own_buffer_;
1114
+
1115
+ // code generation
1116
+ byte* pc_; // the program counter; moves forward
1117
+ RelocInfoWriter reloc_info_writer;
1118
+
1119
+ // push-pop elimination
1120
+ byte* last_pc_;
1121
+
1122
+ PositionsRecorder positions_recorder_;
1123
+
1124
+ bool emit_debug_code_;
1125
+
1126
+ friend class PositionsRecorder;
1127
+ };
1128
+
1129
+
1130
+ // Helper class that ensures that there is enough space for generating
1131
+ // instructions and relocation information. The constructor makes
1132
+ // sure that there is enough space and (in debug mode) the destructor
1133
+ // checks that we did not generate too much.
1134
+ class EnsureSpace BASE_EMBEDDED {
1135
+ public:
1136
+ explicit EnsureSpace(Assembler* assembler) : assembler_(assembler) {
1137
+ if (assembler_->overflow()) assembler_->GrowBuffer();
1138
+ #ifdef DEBUG
1139
+ space_before_ = assembler_->available_space();
1140
+ #endif
1141
+ }
1142
+
1143
+ #ifdef DEBUG
1144
+ ~EnsureSpace() {
1145
+ int bytes_generated = space_before_ - assembler_->available_space();
1146
+ ASSERT(bytes_generated < assembler_->kGap);
1147
+ }
1148
+ #endif
1149
+
1150
+ private:
1151
+ Assembler* assembler_;
1152
+ #ifdef DEBUG
1153
+ int space_before_;
1154
+ #endif
1155
+ };
1156
+
1157
+ } } // namespace v8::internal
1158
+
1159
+ #endif // V8_IA32_ASSEMBLER_IA32_H_