libv8 3.11.8.17 → 3.16.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (754) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/Gemfile +1 -1
  4. data/Rakefile +6 -7
  5. data/lib/libv8/version.rb +1 -1
  6. data/vendor/v8/.gitignore +24 -3
  7. data/vendor/v8/AUTHORS +7 -0
  8. data/vendor/v8/ChangeLog +839 -0
  9. data/vendor/v8/DEPS +1 -1
  10. data/vendor/v8/Makefile.android +92 -0
  11. data/vendor/v8/OWNERS +11 -0
  12. data/vendor/v8/PRESUBMIT.py +71 -0
  13. data/vendor/v8/SConstruct +34 -39
  14. data/vendor/v8/build/android.gypi +56 -37
  15. data/vendor/v8/build/common.gypi +112 -30
  16. data/vendor/v8/build/gyp_v8 +1 -1
  17. data/vendor/v8/build/standalone.gypi +15 -11
  18. data/vendor/v8/include/v8-debug.h +9 -1
  19. data/vendor/v8/include/v8-preparser.h +4 -3
  20. data/vendor/v8/include/v8-profiler.h +25 -25
  21. data/vendor/v8/include/v8-testing.h +4 -3
  22. data/vendor/v8/include/v8.h +994 -540
  23. data/vendor/v8/preparser/preparser-process.cc +3 -3
  24. data/vendor/v8/samples/lineprocessor.cc +20 -27
  25. data/vendor/v8/samples/process.cc +18 -14
  26. data/vendor/v8/samples/shell.cc +16 -15
  27. data/vendor/v8/src/SConscript +15 -14
  28. data/vendor/v8/src/accessors.cc +169 -77
  29. data/vendor/v8/src/accessors.h +4 -0
  30. data/vendor/v8/src/allocation-inl.h +2 -2
  31. data/vendor/v8/src/allocation.h +7 -7
  32. data/vendor/v8/src/api.cc +810 -497
  33. data/vendor/v8/src/api.h +85 -60
  34. data/vendor/v8/src/arm/assembler-arm-inl.h +179 -22
  35. data/vendor/v8/src/arm/assembler-arm.cc +633 -264
  36. data/vendor/v8/src/arm/assembler-arm.h +264 -197
  37. data/vendor/v8/src/arm/builtins-arm.cc +117 -27
  38. data/vendor/v8/src/arm/code-stubs-arm.cc +1241 -700
  39. data/vendor/v8/src/arm/code-stubs-arm.h +35 -138
  40. data/vendor/v8/src/arm/codegen-arm.cc +285 -16
  41. data/vendor/v8/src/arm/codegen-arm.h +22 -0
  42. data/vendor/v8/src/arm/constants-arm.cc +5 -3
  43. data/vendor/v8/src/arm/constants-arm.h +24 -11
  44. data/vendor/v8/src/arm/debug-arm.cc +3 -3
  45. data/vendor/v8/src/arm/deoptimizer-arm.cc +382 -92
  46. data/vendor/v8/src/arm/disasm-arm.cc +61 -12
  47. data/vendor/v8/src/arm/frames-arm.h +0 -14
  48. data/vendor/v8/src/arm/full-codegen-arm.cc +332 -304
  49. data/vendor/v8/src/arm/ic-arm.cc +180 -259
  50. data/vendor/v8/src/arm/lithium-arm.cc +364 -316
  51. data/vendor/v8/src/arm/lithium-arm.h +512 -275
  52. data/vendor/v8/src/arm/lithium-codegen-arm.cc +1768 -809
  53. data/vendor/v8/src/arm/lithium-codegen-arm.h +97 -35
  54. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +12 -5
  55. data/vendor/v8/src/arm/macro-assembler-arm.cc +439 -228
  56. data/vendor/v8/src/arm/macro-assembler-arm.h +116 -70
  57. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +54 -44
  58. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +3 -10
  59. data/vendor/v8/src/arm/simulator-arm.cc +272 -238
  60. data/vendor/v8/src/arm/simulator-arm.h +38 -8
  61. data/vendor/v8/src/arm/stub-cache-arm.cc +522 -895
  62. data/vendor/v8/src/array.js +101 -70
  63. data/vendor/v8/src/assembler.cc +270 -19
  64. data/vendor/v8/src/assembler.h +110 -15
  65. data/vendor/v8/src/ast.cc +79 -69
  66. data/vendor/v8/src/ast.h +255 -301
  67. data/vendor/v8/src/atomicops.h +7 -1
  68. data/vendor/v8/src/atomicops_internals_tsan.h +335 -0
  69. data/vendor/v8/src/bootstrapper.cc +481 -418
  70. data/vendor/v8/src/bootstrapper.h +4 -4
  71. data/vendor/v8/src/builtins.cc +498 -311
  72. data/vendor/v8/src/builtins.h +75 -47
  73. data/vendor/v8/src/checks.cc +2 -1
  74. data/vendor/v8/src/checks.h +8 -0
  75. data/vendor/v8/src/code-stubs-hydrogen.cc +253 -0
  76. data/vendor/v8/src/code-stubs.cc +249 -84
  77. data/vendor/v8/src/code-stubs.h +501 -169
  78. data/vendor/v8/src/codegen.cc +36 -18
  79. data/vendor/v8/src/codegen.h +25 -3
  80. data/vendor/v8/src/collection.js +54 -17
  81. data/vendor/v8/src/compilation-cache.cc +24 -16
  82. data/vendor/v8/src/compilation-cache.h +15 -6
  83. data/vendor/v8/src/compiler.cc +497 -195
  84. data/vendor/v8/src/compiler.h +246 -38
  85. data/vendor/v8/src/contexts.cc +64 -24
  86. data/vendor/v8/src/contexts.h +60 -29
  87. data/vendor/v8/src/conversions-inl.h +24 -14
  88. data/vendor/v8/src/conversions.h +7 -4
  89. data/vendor/v8/src/counters.cc +21 -12
  90. data/vendor/v8/src/counters.h +44 -16
  91. data/vendor/v8/src/cpu-profiler.h +1 -1
  92. data/vendor/v8/src/d8-debug.cc +2 -2
  93. data/vendor/v8/src/d8-readline.cc +13 -2
  94. data/vendor/v8/src/d8.cc +681 -273
  95. data/vendor/v8/src/d8.gyp +4 -4
  96. data/vendor/v8/src/d8.h +38 -18
  97. data/vendor/v8/src/d8.js +0 -617
  98. data/vendor/v8/src/data-flow.h +55 -0
  99. data/vendor/v8/src/date.js +1 -42
  100. data/vendor/v8/src/dateparser-inl.h +5 -1
  101. data/vendor/v8/src/debug-agent.cc +10 -15
  102. data/vendor/v8/src/debug-debugger.js +147 -149
  103. data/vendor/v8/src/debug.cc +323 -164
  104. data/vendor/v8/src/debug.h +26 -14
  105. data/vendor/v8/src/deoptimizer.cc +765 -290
  106. data/vendor/v8/src/deoptimizer.h +130 -28
  107. data/vendor/v8/src/disassembler.cc +10 -4
  108. data/vendor/v8/src/elements-kind.cc +7 -2
  109. data/vendor/v8/src/elements-kind.h +19 -0
  110. data/vendor/v8/src/elements.cc +607 -285
  111. data/vendor/v8/src/elements.h +36 -13
  112. data/vendor/v8/src/execution.cc +52 -31
  113. data/vendor/v8/src/execution.h +4 -4
  114. data/vendor/v8/src/extensions/externalize-string-extension.cc +5 -4
  115. data/vendor/v8/src/extensions/gc-extension.cc +5 -1
  116. data/vendor/v8/src/extensions/statistics-extension.cc +153 -0
  117. data/vendor/v8/src/{inspector.h → extensions/statistics-extension.h} +12 -23
  118. data/vendor/v8/src/factory.cc +101 -134
  119. data/vendor/v8/src/factory.h +36 -31
  120. data/vendor/v8/src/flag-definitions.h +102 -25
  121. data/vendor/v8/src/flags.cc +9 -5
  122. data/vendor/v8/src/frames-inl.h +10 -0
  123. data/vendor/v8/src/frames.cc +116 -26
  124. data/vendor/v8/src/frames.h +96 -12
  125. data/vendor/v8/src/full-codegen.cc +219 -74
  126. data/vendor/v8/src/full-codegen.h +63 -21
  127. data/vendor/v8/src/func-name-inferrer.cc +8 -7
  128. data/vendor/v8/src/func-name-inferrer.h +5 -3
  129. data/vendor/v8/src/gdb-jit.cc +71 -57
  130. data/vendor/v8/src/global-handles.cc +230 -101
  131. data/vendor/v8/src/global-handles.h +26 -27
  132. data/vendor/v8/src/globals.h +17 -19
  133. data/vendor/v8/src/handles-inl.h +59 -12
  134. data/vendor/v8/src/handles.cc +180 -200
  135. data/vendor/v8/src/handles.h +80 -11
  136. data/vendor/v8/src/hashmap.h +60 -40
  137. data/vendor/v8/src/heap-inl.h +107 -45
  138. data/vendor/v8/src/heap-profiler.cc +38 -19
  139. data/vendor/v8/src/heap-profiler.h +24 -14
  140. data/vendor/v8/src/heap.cc +1123 -738
  141. data/vendor/v8/src/heap.h +385 -146
  142. data/vendor/v8/src/hydrogen-instructions.cc +700 -217
  143. data/vendor/v8/src/hydrogen-instructions.h +1158 -472
  144. data/vendor/v8/src/hydrogen.cc +3319 -1662
  145. data/vendor/v8/src/hydrogen.h +411 -170
  146. data/vendor/v8/src/ia32/assembler-ia32-inl.h +46 -16
  147. data/vendor/v8/src/ia32/assembler-ia32.cc +131 -61
  148. data/vendor/v8/src/ia32/assembler-ia32.h +115 -57
  149. data/vendor/v8/src/ia32/builtins-ia32.cc +99 -5
  150. data/vendor/v8/src/ia32/code-stubs-ia32.cc +787 -495
  151. data/vendor/v8/src/ia32/code-stubs-ia32.h +10 -100
  152. data/vendor/v8/src/ia32/codegen-ia32.cc +227 -23
  153. data/vendor/v8/src/ia32/codegen-ia32.h +14 -0
  154. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +428 -87
  155. data/vendor/v8/src/ia32/disasm-ia32.cc +28 -1
  156. data/vendor/v8/src/ia32/frames-ia32.h +6 -16
  157. data/vendor/v8/src/ia32/full-codegen-ia32.cc +280 -272
  158. data/vendor/v8/src/ia32/ic-ia32.cc +150 -250
  159. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +1600 -517
  160. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +90 -24
  161. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +10 -6
  162. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.h +2 -2
  163. data/vendor/v8/src/ia32/lithium-ia32.cc +405 -302
  164. data/vendor/v8/src/ia32/lithium-ia32.h +526 -271
  165. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +378 -119
  166. data/vendor/v8/src/ia32/macro-assembler-ia32.h +62 -28
  167. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +43 -30
  168. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +2 -10
  169. data/vendor/v8/src/ia32/stub-cache-ia32.cc +492 -678
  170. data/vendor/v8/src/ic-inl.h +9 -4
  171. data/vendor/v8/src/ic.cc +836 -923
  172. data/vendor/v8/src/ic.h +228 -247
  173. data/vendor/v8/src/incremental-marking-inl.h +26 -30
  174. data/vendor/v8/src/incremental-marking.cc +276 -248
  175. data/vendor/v8/src/incremental-marking.h +29 -37
  176. data/vendor/v8/src/interface.cc +34 -25
  177. data/vendor/v8/src/interface.h +69 -25
  178. data/vendor/v8/src/interpreter-irregexp.cc +2 -2
  179. data/vendor/v8/src/isolate.cc +382 -76
  180. data/vendor/v8/src/isolate.h +109 -56
  181. data/vendor/v8/src/json-parser.h +217 -104
  182. data/vendor/v8/src/json-stringifier.h +745 -0
  183. data/vendor/v8/src/json.js +10 -132
  184. data/vendor/v8/src/jsregexp-inl.h +106 -0
  185. data/vendor/v8/src/jsregexp.cc +517 -285
  186. data/vendor/v8/src/jsregexp.h +145 -117
  187. data/vendor/v8/src/list-inl.h +35 -22
  188. data/vendor/v8/src/list.h +46 -19
  189. data/vendor/v8/src/lithium-allocator-inl.h +22 -2
  190. data/vendor/v8/src/lithium-allocator.cc +85 -70
  191. data/vendor/v8/src/lithium-allocator.h +21 -39
  192. data/vendor/v8/src/lithium.cc +259 -5
  193. data/vendor/v8/src/lithium.h +131 -32
  194. data/vendor/v8/src/liveedit-debugger.js +52 -3
  195. data/vendor/v8/src/liveedit.cc +393 -113
  196. data/vendor/v8/src/liveedit.h +7 -3
  197. data/vendor/v8/src/log-utils.cc +4 -2
  198. data/vendor/v8/src/log.cc +170 -140
  199. data/vendor/v8/src/log.h +62 -11
  200. data/vendor/v8/src/macro-assembler.h +17 -0
  201. data/vendor/v8/src/macros.py +2 -0
  202. data/vendor/v8/src/mark-compact-inl.h +3 -23
  203. data/vendor/v8/src/mark-compact.cc +801 -830
  204. data/vendor/v8/src/mark-compact.h +154 -47
  205. data/vendor/v8/src/marking-thread.cc +85 -0
  206. data/vendor/v8/src/{inspector.cc → marking-thread.h} +32 -24
  207. data/vendor/v8/src/math.js +12 -18
  208. data/vendor/v8/src/messages.cc +18 -8
  209. data/vendor/v8/src/messages.js +314 -261
  210. data/vendor/v8/src/mips/assembler-mips-inl.h +58 -6
  211. data/vendor/v8/src/mips/assembler-mips.cc +92 -75
  212. data/vendor/v8/src/mips/assembler-mips.h +54 -60
  213. data/vendor/v8/src/mips/builtins-mips.cc +116 -17
  214. data/vendor/v8/src/mips/code-stubs-mips.cc +919 -556
  215. data/vendor/v8/src/mips/code-stubs-mips.h +22 -131
  216. data/vendor/v8/src/mips/codegen-mips.cc +281 -6
  217. data/vendor/v8/src/mips/codegen-mips.h +22 -0
  218. data/vendor/v8/src/mips/constants-mips.cc +2 -0
  219. data/vendor/v8/src/mips/constants-mips.h +12 -2
  220. data/vendor/v8/src/mips/deoptimizer-mips.cc +286 -50
  221. data/vendor/v8/src/mips/disasm-mips.cc +13 -0
  222. data/vendor/v8/src/mips/full-codegen-mips.cc +297 -284
  223. data/vendor/v8/src/mips/ic-mips.cc +182 -263
  224. data/vendor/v8/src/mips/lithium-codegen-mips.cc +1208 -556
  225. data/vendor/v8/src/mips/lithium-codegen-mips.h +72 -19
  226. data/vendor/v8/src/mips/lithium-gap-resolver-mips.cc +9 -2
  227. data/vendor/v8/src/mips/lithium-mips.cc +290 -302
  228. data/vendor/v8/src/mips/lithium-mips.h +463 -266
  229. data/vendor/v8/src/mips/macro-assembler-mips.cc +208 -115
  230. data/vendor/v8/src/mips/macro-assembler-mips.h +67 -24
  231. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +40 -25
  232. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +3 -9
  233. data/vendor/v8/src/mips/simulator-mips.cc +112 -40
  234. data/vendor/v8/src/mips/simulator-mips.h +5 -0
  235. data/vendor/v8/src/mips/stub-cache-mips.cc +502 -884
  236. data/vendor/v8/src/mirror-debugger.js +157 -30
  237. data/vendor/v8/src/mksnapshot.cc +88 -14
  238. data/vendor/v8/src/object-observe.js +235 -0
  239. data/vendor/v8/src/objects-debug.cc +178 -176
  240. data/vendor/v8/src/objects-inl.h +1333 -486
  241. data/vendor/v8/src/objects-printer.cc +125 -43
  242. data/vendor/v8/src/objects-visiting-inl.h +578 -6
  243. data/vendor/v8/src/objects-visiting.cc +2 -2
  244. data/vendor/v8/src/objects-visiting.h +172 -79
  245. data/vendor/v8/src/objects.cc +3533 -2885
  246. data/vendor/v8/src/objects.h +1352 -1131
  247. data/vendor/v8/src/optimizing-compiler-thread.cc +152 -0
  248. data/vendor/v8/src/optimizing-compiler-thread.h +111 -0
  249. data/vendor/v8/src/parser.cc +390 -500
  250. data/vendor/v8/src/parser.h +45 -33
  251. data/vendor/v8/src/platform-cygwin.cc +10 -21
  252. data/vendor/v8/src/platform-freebsd.cc +36 -41
  253. data/vendor/v8/src/platform-linux.cc +160 -124
  254. data/vendor/v8/src/platform-macos.cc +30 -27
  255. data/vendor/v8/src/platform-nullos.cc +17 -1
  256. data/vendor/v8/src/platform-openbsd.cc +19 -50
  257. data/vendor/v8/src/platform-posix.cc +14 -0
  258. data/vendor/v8/src/platform-solaris.cc +20 -53
  259. data/vendor/v8/src/platform-win32.cc +49 -26
  260. data/vendor/v8/src/platform.h +40 -1
  261. data/vendor/v8/src/preparser.cc +8 -5
  262. data/vendor/v8/src/preparser.h +2 -2
  263. data/vendor/v8/src/prettyprinter.cc +16 -0
  264. data/vendor/v8/src/prettyprinter.h +2 -0
  265. data/vendor/v8/src/profile-generator-inl.h +1 -0
  266. data/vendor/v8/src/profile-generator.cc +209 -147
  267. data/vendor/v8/src/profile-generator.h +15 -12
  268. data/vendor/v8/src/property-details.h +46 -31
  269. data/vendor/v8/src/property.cc +27 -46
  270. data/vendor/v8/src/property.h +163 -83
  271. data/vendor/v8/src/proxy.js +7 -2
  272. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +4 -13
  273. data/vendor/v8/src/regexp-macro-assembler-irregexp.h +1 -2
  274. data/vendor/v8/src/regexp-macro-assembler-tracer.cc +1 -11
  275. data/vendor/v8/src/regexp-macro-assembler-tracer.h +0 -1
  276. data/vendor/v8/src/regexp-macro-assembler.cc +31 -14
  277. data/vendor/v8/src/regexp-macro-assembler.h +14 -11
  278. data/vendor/v8/src/regexp-stack.cc +1 -0
  279. data/vendor/v8/src/regexp.js +9 -8
  280. data/vendor/v8/src/rewriter.cc +18 -7
  281. data/vendor/v8/src/runtime-profiler.cc +52 -43
  282. data/vendor/v8/src/runtime-profiler.h +0 -25
  283. data/vendor/v8/src/runtime.cc +2006 -2023
  284. data/vendor/v8/src/runtime.h +56 -49
  285. data/vendor/v8/src/safepoint-table.cc +12 -18
  286. data/vendor/v8/src/safepoint-table.h +11 -8
  287. data/vendor/v8/src/scanner.cc +1 -0
  288. data/vendor/v8/src/scanner.h +4 -10
  289. data/vendor/v8/src/scopeinfo.cc +35 -9
  290. data/vendor/v8/src/scopeinfo.h +64 -3
  291. data/vendor/v8/src/scopes.cc +251 -156
  292. data/vendor/v8/src/scopes.h +61 -27
  293. data/vendor/v8/src/serialize.cc +348 -396
  294. data/vendor/v8/src/serialize.h +125 -114
  295. data/vendor/v8/src/small-pointer-list.h +11 -11
  296. data/vendor/v8/src/{smart-array-pointer.h → smart-pointers.h} +64 -15
  297. data/vendor/v8/src/snapshot-common.cc +64 -15
  298. data/vendor/v8/src/snapshot-empty.cc +7 -1
  299. data/vendor/v8/src/snapshot.h +9 -2
  300. data/vendor/v8/src/spaces-inl.h +17 -0
  301. data/vendor/v8/src/spaces.cc +477 -183
  302. data/vendor/v8/src/spaces.h +238 -58
  303. data/vendor/v8/src/splay-tree-inl.h +8 -7
  304. data/vendor/v8/src/splay-tree.h +24 -10
  305. data/vendor/v8/src/store-buffer.cc +12 -5
  306. data/vendor/v8/src/store-buffer.h +2 -4
  307. data/vendor/v8/src/string-search.h +22 -6
  308. data/vendor/v8/src/string-stream.cc +11 -8
  309. data/vendor/v8/src/string.js +47 -15
  310. data/vendor/v8/src/stub-cache.cc +461 -224
  311. data/vendor/v8/src/stub-cache.h +164 -102
  312. data/vendor/v8/src/sweeper-thread.cc +105 -0
  313. data/vendor/v8/src/sweeper-thread.h +81 -0
  314. data/vendor/v8/src/token.h +1 -0
  315. data/vendor/v8/src/transitions-inl.h +220 -0
  316. data/vendor/v8/src/transitions.cc +160 -0
  317. data/vendor/v8/src/transitions.h +207 -0
  318. data/vendor/v8/src/type-info.cc +182 -181
  319. data/vendor/v8/src/type-info.h +31 -19
  320. data/vendor/v8/src/unicode-inl.h +62 -106
  321. data/vendor/v8/src/unicode.cc +57 -67
  322. data/vendor/v8/src/unicode.h +45 -91
  323. data/vendor/v8/src/uri.js +57 -29
  324. data/vendor/v8/src/utils.h +105 -5
  325. data/vendor/v8/src/v8-counters.cc +54 -11
  326. data/vendor/v8/src/v8-counters.h +134 -19
  327. data/vendor/v8/src/v8.cc +29 -29
  328. data/vendor/v8/src/v8.h +1 -0
  329. data/vendor/v8/src/v8conversions.cc +26 -22
  330. data/vendor/v8/src/v8globals.h +56 -43
  331. data/vendor/v8/src/v8natives.js +83 -30
  332. data/vendor/v8/src/v8threads.cc +42 -21
  333. data/vendor/v8/src/v8threads.h +4 -1
  334. data/vendor/v8/src/v8utils.cc +9 -93
  335. data/vendor/v8/src/v8utils.h +37 -33
  336. data/vendor/v8/src/variables.cc +6 -3
  337. data/vendor/v8/src/variables.h +6 -13
  338. data/vendor/v8/src/version.cc +2 -2
  339. data/vendor/v8/src/vm-state-inl.h +11 -0
  340. data/vendor/v8/src/x64/assembler-x64-inl.h +39 -8
  341. data/vendor/v8/src/x64/assembler-x64.cc +78 -64
  342. data/vendor/v8/src/x64/assembler-x64.h +38 -33
  343. data/vendor/v8/src/x64/builtins-x64.cc +105 -7
  344. data/vendor/v8/src/x64/code-stubs-x64.cc +790 -413
  345. data/vendor/v8/src/x64/code-stubs-x64.h +10 -106
  346. data/vendor/v8/src/x64/codegen-x64.cc +210 -8
  347. data/vendor/v8/src/x64/codegen-x64.h +20 -1
  348. data/vendor/v8/src/x64/deoptimizer-x64.cc +336 -75
  349. data/vendor/v8/src/x64/disasm-x64.cc +15 -0
  350. data/vendor/v8/src/x64/frames-x64.h +0 -14
  351. data/vendor/v8/src/x64/full-codegen-x64.cc +293 -270
  352. data/vendor/v8/src/x64/ic-x64.cc +153 -251
  353. data/vendor/v8/src/x64/lithium-codegen-x64.cc +1379 -531
  354. data/vendor/v8/src/x64/lithium-codegen-x64.h +67 -23
  355. data/vendor/v8/src/x64/lithium-gap-resolver-x64.cc +2 -2
  356. data/vendor/v8/src/x64/lithium-x64.cc +349 -289
  357. data/vendor/v8/src/x64/lithium-x64.h +460 -250
  358. data/vendor/v8/src/x64/macro-assembler-x64.cc +350 -177
  359. data/vendor/v8/src/x64/macro-assembler-x64.h +67 -49
  360. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +46 -33
  361. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +2 -3
  362. data/vendor/v8/src/x64/stub-cache-x64.cc +484 -653
  363. data/vendor/v8/src/zone-inl.h +9 -27
  364. data/vendor/v8/src/zone.cc +5 -5
  365. data/vendor/v8/src/zone.h +53 -27
  366. data/vendor/v8/test/benchmarks/testcfg.py +5 -0
  367. data/vendor/v8/test/cctest/cctest.cc +4 -0
  368. data/vendor/v8/test/cctest/cctest.gyp +3 -1
  369. data/vendor/v8/test/cctest/cctest.h +57 -9
  370. data/vendor/v8/test/cctest/cctest.status +15 -15
  371. data/vendor/v8/test/cctest/test-accessors.cc +26 -0
  372. data/vendor/v8/test/cctest/test-alloc.cc +22 -30
  373. data/vendor/v8/test/cctest/test-api.cc +1943 -314
  374. data/vendor/v8/test/cctest/test-assembler-arm.cc +133 -13
  375. data/vendor/v8/test/cctest/test-assembler-ia32.cc +1 -1
  376. data/vendor/v8/test/cctest/test-assembler-mips.cc +12 -0
  377. data/vendor/v8/test/cctest/test-ast.cc +4 -2
  378. data/vendor/v8/test/cctest/test-compiler.cc +61 -29
  379. data/vendor/v8/test/cctest/test-dataflow.cc +2 -2
  380. data/vendor/v8/test/cctest/test-debug.cc +212 -33
  381. data/vendor/v8/test/cctest/test-decls.cc +257 -11
  382. data/vendor/v8/test/cctest/test-dictionary.cc +24 -10
  383. data/vendor/v8/test/cctest/test-disasm-arm.cc +118 -1
  384. data/vendor/v8/test/cctest/test-disasm-ia32.cc +3 -2
  385. data/vendor/v8/test/cctest/test-flags.cc +14 -1
  386. data/vendor/v8/test/cctest/test-func-name-inference.cc +7 -4
  387. data/vendor/v8/test/cctest/test-global-object.cc +51 -0
  388. data/vendor/v8/test/cctest/test-hashing.cc +32 -23
  389. data/vendor/v8/test/cctest/test-heap-profiler.cc +131 -77
  390. data/vendor/v8/test/cctest/test-heap.cc +1084 -143
  391. data/vendor/v8/test/cctest/test-list.cc +1 -1
  392. data/vendor/v8/test/cctest/test-liveedit.cc +3 -2
  393. data/vendor/v8/test/cctest/test-lockers.cc +12 -13
  394. data/vendor/v8/test/cctest/test-log.cc +10 -8
  395. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +2 -2
  396. data/vendor/v8/test/cctest/test-mark-compact.cc +44 -22
  397. data/vendor/v8/test/cctest/test-object-observe.cc +434 -0
  398. data/vendor/v8/test/cctest/test-parsing.cc +86 -39
  399. data/vendor/v8/test/cctest/test-platform-linux.cc +6 -0
  400. data/vendor/v8/test/cctest/test-platform-win32.cc +7 -0
  401. data/vendor/v8/test/cctest/test-random.cc +5 -4
  402. data/vendor/v8/test/cctest/test-regexp.cc +137 -101
  403. data/vendor/v8/test/cctest/test-serialize.cc +150 -230
  404. data/vendor/v8/test/cctest/test-sockets.cc +1 -1
  405. data/vendor/v8/test/cctest/test-spaces.cc +139 -0
  406. data/vendor/v8/test/cctest/test-strings.cc +736 -74
  407. data/vendor/v8/test/cctest/test-thread-termination.cc +10 -11
  408. data/vendor/v8/test/cctest/test-threads.cc +4 -4
  409. data/vendor/v8/test/cctest/test-utils.cc +16 -0
  410. data/vendor/v8/test/cctest/test-weakmaps.cc +7 -3
  411. data/vendor/v8/test/cctest/testcfg.py +64 -5
  412. data/vendor/v8/test/es5conform/testcfg.py +5 -0
  413. data/vendor/v8/test/message/message.status +1 -1
  414. data/vendor/v8/test/message/overwritten-builtins.out +3 -0
  415. data/vendor/v8/test/message/testcfg.py +89 -8
  416. data/vendor/v8/test/message/try-catch-finally-no-message.out +26 -26
  417. data/vendor/v8/test/mjsunit/accessor-map-sharing.js +18 -2
  418. data/vendor/v8/test/mjsunit/allocation-site-info.js +126 -0
  419. data/vendor/v8/test/mjsunit/array-bounds-check-removal.js +62 -1
  420. data/vendor/v8/test/mjsunit/array-iteration.js +1 -1
  421. data/vendor/v8/test/mjsunit/array-literal-transitions.js +2 -0
  422. data/vendor/v8/test/mjsunit/array-natives-elements.js +317 -0
  423. data/vendor/v8/test/mjsunit/array-reduce.js +8 -8
  424. data/vendor/v8/test/mjsunit/array-slice.js +12 -0
  425. data/vendor/v8/test/mjsunit/array-store-and-grow.js +4 -1
  426. data/vendor/v8/test/mjsunit/assert-opt-and-deopt.js +1 -1
  427. data/vendor/v8/test/mjsunit/bugs/bug-2337.js +53 -0
  428. data/vendor/v8/test/mjsunit/compare-known-objects-slow.js +69 -0
  429. data/vendor/v8/test/mjsunit/compiler/alloc-object-huge.js +3 -1
  430. data/vendor/v8/test/mjsunit/compiler/inline-accessors.js +368 -0
  431. data/vendor/v8/test/mjsunit/compiler/inline-arguments.js +87 -1
  432. data/vendor/v8/test/mjsunit/compiler/inline-closures.js +49 -0
  433. data/vendor/v8/test/mjsunit/compiler/inline-construct.js +55 -43
  434. data/vendor/v8/test/mjsunit/compiler/inline-literals.js +39 -0
  435. data/vendor/v8/test/mjsunit/compiler/multiply-add.js +69 -0
  436. data/vendor/v8/test/mjsunit/compiler/optimized-closures.js +57 -0
  437. data/vendor/v8/test/mjsunit/compiler/parallel-proto-change.js +44 -0
  438. data/vendor/v8/test/mjsunit/compiler/property-static.js +69 -0
  439. data/vendor/v8/test/mjsunit/compiler/proto-chain-constant.js +55 -0
  440. data/vendor/v8/test/mjsunit/compiler/proto-chain-load.js +44 -0
  441. data/vendor/v8/test/mjsunit/compiler/regress-gvn.js +3 -2
  442. data/vendor/v8/test/mjsunit/compiler/regress-or.js +6 -2
  443. data/vendor/v8/test/mjsunit/compiler/rotate.js +224 -0
  444. data/vendor/v8/test/mjsunit/compiler/uint32.js +173 -0
  445. data/vendor/v8/test/mjsunit/count-based-osr.js +2 -1
  446. data/vendor/v8/test/mjsunit/d8-os.js +3 -3
  447. data/vendor/v8/test/mjsunit/date-parse.js +3 -0
  448. data/vendor/v8/test/mjsunit/date.js +22 -0
  449. data/vendor/v8/test/mjsunit/debug-break-inline.js +1 -0
  450. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +22 -12
  451. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized.js +21 -10
  452. data/vendor/v8/test/mjsunit/debug-liveedit-compile-error.js +60 -0
  453. data/vendor/v8/test/mjsunit/debug-liveedit-double-call.js +142 -0
  454. data/vendor/v8/test/mjsunit/debug-liveedit-literals.js +94 -0
  455. data/vendor/v8/test/mjsunit/debug-liveedit-restart-frame.js +153 -0
  456. data/vendor/v8/test/mjsunit/debug-multiple-breakpoints.js +1 -1
  457. data/vendor/v8/test/mjsunit/debug-script-breakpoints-closure.js +67 -0
  458. data/vendor/v8/test/mjsunit/debug-script-breakpoints-nested.js +82 -0
  459. data/vendor/v8/test/mjsunit/debug-script.js +4 -2
  460. data/vendor/v8/test/mjsunit/debug-set-variable-value.js +308 -0
  461. data/vendor/v8/test/mjsunit/debug-stepout-scope-part1.js +190 -0
  462. data/vendor/v8/test/mjsunit/debug-stepout-scope-part2.js +83 -0
  463. data/vendor/v8/test/mjsunit/debug-stepout-scope-part3.js +80 -0
  464. data/vendor/v8/test/mjsunit/debug-stepout-scope-part4.js +80 -0
  465. data/vendor/v8/test/mjsunit/debug-stepout-scope-part5.js +77 -0
  466. data/vendor/v8/test/mjsunit/debug-stepout-scope-part6.js +79 -0
  467. data/vendor/v8/test/mjsunit/debug-stepout-scope-part7.js +79 -0
  468. data/vendor/v8/test/mjsunit/{debug-stepout-scope.js → debug-stepout-scope-part8.js} +0 -189
  469. data/vendor/v8/test/mjsunit/delete-non-configurable.js +74 -0
  470. data/vendor/v8/test/mjsunit/deopt-minus-zero.js +56 -0
  471. data/vendor/v8/test/mjsunit/elements-kind.js +6 -4
  472. data/vendor/v8/test/mjsunit/elements-length-no-holey.js +33 -0
  473. data/vendor/v8/test/mjsunit/elements-transition-hoisting.js +46 -19
  474. data/vendor/v8/test/mjsunit/error-accessors.js +54 -0
  475. data/vendor/v8/test/mjsunit/error-constructors.js +1 -14
  476. data/vendor/v8/test/mjsunit/error-tostring.js +8 -0
  477. data/vendor/v8/test/mjsunit/eval-stack-trace.js +204 -0
  478. data/vendor/v8/test/mjsunit/external-array.js +364 -1
  479. data/vendor/v8/test/mjsunit/fast-array-length.js +37 -0
  480. data/vendor/v8/test/mjsunit/fast-non-keyed.js +113 -0
  481. data/vendor/v8/test/mjsunit/fast-prototype.js +117 -0
  482. data/vendor/v8/test/mjsunit/function-call.js +14 -18
  483. data/vendor/v8/test/mjsunit/fuzz-natives-part1.js +230 -0
  484. data/vendor/v8/test/mjsunit/fuzz-natives-part2.js +229 -0
  485. data/vendor/v8/test/mjsunit/fuzz-natives-part3.js +229 -0
  486. data/vendor/v8/test/mjsunit/{fuzz-natives.js → fuzz-natives-part4.js} +12 -2
  487. data/vendor/v8/test/mjsunit/generated-transition-stub.js +218 -0
  488. data/vendor/v8/test/mjsunit/greedy.js +1 -1
  489. data/vendor/v8/test/mjsunit/harmony/block-conflicts.js +2 -1
  490. data/vendor/v8/test/mjsunit/harmony/block-let-crankshaft.js +1 -1
  491. data/vendor/v8/test/mjsunit/harmony/collections.js +69 -11
  492. data/vendor/v8/test/mjsunit/harmony/debug-blockscopes.js +2 -2
  493. data/vendor/v8/test/mjsunit/harmony/module-linking.js +180 -3
  494. data/vendor/v8/test/mjsunit/harmony/module-parsing.js +31 -0
  495. data/vendor/v8/test/mjsunit/harmony/module-recompile.js +87 -0
  496. data/vendor/v8/test/mjsunit/harmony/module-resolution.js +15 -2
  497. data/vendor/v8/test/mjsunit/harmony/object-observe.js +1056 -0
  498. data/vendor/v8/test/mjsunit/harmony/proxies-json.js +178 -0
  499. data/vendor/v8/test/mjsunit/harmony/proxies.js +25 -10
  500. data/vendor/v8/test/mjsunit/json-parser-recursive.js +33 -0
  501. data/vendor/v8/test/mjsunit/json-stringify-recursive.js +52 -0
  502. data/vendor/v8/test/mjsunit/json.js +38 -2
  503. data/vendor/v8/test/mjsunit/json2.js +153 -0
  504. data/vendor/v8/test/mjsunit/limit-locals.js +5 -4
  505. data/vendor/v8/test/mjsunit/manual-parallel-recompile.js +79 -0
  506. data/vendor/v8/test/mjsunit/math-exp-precision.js +64 -0
  507. data/vendor/v8/test/mjsunit/math-floor-negative.js +59 -0
  508. data/vendor/v8/test/mjsunit/math-floor-of-div-minus-zero.js +41 -0
  509. data/vendor/v8/test/mjsunit/math-floor-of-div-nosudiv.js +288 -0
  510. data/vendor/v8/test/mjsunit/math-floor-of-div.js +81 -9
  511. data/vendor/v8/test/mjsunit/{math-floor.js → math-floor-part1.js} +1 -72
  512. data/vendor/v8/test/mjsunit/math-floor-part2.js +76 -0
  513. data/vendor/v8/test/mjsunit/math-floor-part3.js +78 -0
  514. data/vendor/v8/test/mjsunit/math-floor-part4.js +76 -0
  515. data/vendor/v8/test/mjsunit/mirror-object.js +43 -9
  516. data/vendor/v8/test/mjsunit/mjsunit.js +1 -1
  517. data/vendor/v8/test/mjsunit/mjsunit.status +52 -27
  518. data/vendor/v8/test/mjsunit/mul-exhaustive-part1.js +491 -0
  519. data/vendor/v8/test/mjsunit/mul-exhaustive-part10.js +470 -0
  520. data/vendor/v8/test/mjsunit/mul-exhaustive-part2.js +525 -0
  521. data/vendor/v8/test/mjsunit/mul-exhaustive-part3.js +532 -0
  522. data/vendor/v8/test/mjsunit/mul-exhaustive-part4.js +509 -0
  523. data/vendor/v8/test/mjsunit/mul-exhaustive-part5.js +505 -0
  524. data/vendor/v8/test/mjsunit/mul-exhaustive-part6.js +554 -0
  525. data/vendor/v8/test/mjsunit/mul-exhaustive-part7.js +497 -0
  526. data/vendor/v8/test/mjsunit/mul-exhaustive-part8.js +526 -0
  527. data/vendor/v8/test/mjsunit/mul-exhaustive-part9.js +533 -0
  528. data/vendor/v8/test/mjsunit/new-function.js +34 -0
  529. data/vendor/v8/test/mjsunit/numops-fuzz-part1.js +1172 -0
  530. data/vendor/v8/test/mjsunit/numops-fuzz-part2.js +1178 -0
  531. data/vendor/v8/test/mjsunit/numops-fuzz-part3.js +1178 -0
  532. data/vendor/v8/test/mjsunit/numops-fuzz-part4.js +1177 -0
  533. data/vendor/v8/test/mjsunit/object-define-property.js +107 -2
  534. data/vendor/v8/test/mjsunit/override-read-only-property.js +6 -4
  535. data/vendor/v8/test/mjsunit/packed-elements.js +2 -2
  536. data/vendor/v8/test/mjsunit/parse-int-float.js +4 -4
  537. data/vendor/v8/test/mjsunit/pixel-array-rounding.js +1 -1
  538. data/vendor/v8/test/mjsunit/readonly.js +228 -0
  539. data/vendor/v8/test/mjsunit/regexp-capture-3.js +16 -18
  540. data/vendor/v8/test/mjsunit/regexp-capture.js +2 -0
  541. data/vendor/v8/test/mjsunit/regexp-global.js +122 -0
  542. data/vendor/v8/test/mjsunit/regexp-results-cache.js +78 -0
  543. data/vendor/v8/test/mjsunit/regress/regress-1117.js +12 -3
  544. data/vendor/v8/test/mjsunit/regress/regress-1118.js +1 -1
  545. data/vendor/v8/test/mjsunit/regress/regress-115100.js +36 -0
  546. data/vendor/v8/test/mjsunit/regress/regress-1199637.js +1 -3
  547. data/vendor/v8/test/mjsunit/regress/regress-121407.js +1 -1
  548. data/vendor/v8/test/mjsunit/regress/regress-131923.js +30 -0
  549. data/vendor/v8/test/mjsunit/regress/regress-131994.js +70 -0
  550. data/vendor/v8/test/mjsunit/regress/regress-133211.js +35 -0
  551. data/vendor/v8/test/mjsunit/regress/regress-133211b.js +39 -0
  552. data/vendor/v8/test/mjsunit/regress/regress-136048.js +34 -0
  553. data/vendor/v8/test/mjsunit/regress/regress-137768.js +73 -0
  554. data/vendor/v8/test/mjsunit/regress/regress-143967.js +34 -0
  555. data/vendor/v8/test/mjsunit/regress/regress-145201.js +107 -0
  556. data/vendor/v8/test/mjsunit/regress/regress-147497.js +45 -0
  557. data/vendor/v8/test/mjsunit/regress/regress-148378.js +38 -0
  558. data/vendor/v8/test/mjsunit/regress/regress-1563.js +1 -1
  559. data/vendor/v8/test/mjsunit/regress/regress-1591.js +48 -0
  560. data/vendor/v8/test/mjsunit/regress/regress-164442.js +45 -0
  561. data/vendor/v8/test/mjsunit/regress/regress-165637.js +61 -0
  562. data/vendor/v8/test/mjsunit/regress/regress-166379.js +39 -0
  563. data/vendor/v8/test/mjsunit/regress/regress-166553.js +33 -0
  564. data/vendor/v8/test/mjsunit/regress/regress-1692.js +1 -1
  565. data/vendor/v8/test/mjsunit/regress/regress-171641.js +40 -0
  566. data/vendor/v8/test/mjsunit/regress/regress-1980.js +1 -1
  567. data/vendor/v8/test/mjsunit/regress/regress-2073.js +99 -0
  568. data/vendor/v8/test/mjsunit/regress/regress-2119.js +36 -0
  569. data/vendor/v8/test/mjsunit/regress/regress-2156.js +39 -0
  570. data/vendor/v8/test/mjsunit/regress/regress-2163.js +70 -0
  571. data/vendor/v8/test/mjsunit/regress/regress-2170.js +58 -0
  572. data/vendor/v8/test/mjsunit/regress/regress-2172.js +35 -0
  573. data/vendor/v8/test/mjsunit/regress/regress-2185-2.js +145 -0
  574. data/vendor/v8/test/mjsunit/regress/regress-2185.js +38 -0
  575. data/vendor/v8/test/mjsunit/regress/regress-2186.js +49 -0
  576. data/vendor/v8/test/mjsunit/regress/regress-2193.js +58 -0
  577. data/vendor/v8/test/mjsunit/regress/regress-2219.js +32 -0
  578. data/vendor/v8/test/mjsunit/regress/regress-2225.js +65 -0
  579. data/vendor/v8/test/mjsunit/regress/regress-2226.js +36 -0
  580. data/vendor/v8/test/mjsunit/regress/regress-2234.js +41 -0
  581. data/vendor/v8/test/mjsunit/regress/regress-2243.js +31 -0
  582. data/vendor/v8/test/mjsunit/regress/regress-2249.js +33 -0
  583. data/vendor/v8/test/mjsunit/regress/regress-2250.js +68 -0
  584. data/vendor/v8/test/mjsunit/regress/regress-2261.js +113 -0
  585. data/vendor/v8/test/mjsunit/regress/regress-2263.js +30 -0
  586. data/vendor/v8/test/mjsunit/regress/regress-2284.js +32 -0
  587. data/vendor/v8/test/mjsunit/regress/regress-2285.js +32 -0
  588. data/vendor/v8/test/mjsunit/regress/regress-2286.js +32 -0
  589. data/vendor/v8/test/mjsunit/regress/regress-2289.js +34 -0
  590. data/vendor/v8/test/mjsunit/regress/regress-2291.js +36 -0
  591. data/vendor/v8/test/mjsunit/regress/regress-2294.js +70 -0
  592. data/vendor/v8/test/mjsunit/regress/regress-2296.js +40 -0
  593. data/vendor/v8/test/mjsunit/regress/regress-2315.js +40 -0
  594. data/vendor/v8/test/mjsunit/regress/regress-2318.js +66 -0
  595. data/vendor/v8/test/mjsunit/regress/regress-2322.js +36 -0
  596. data/vendor/v8/test/mjsunit/regress/regress-2326.js +54 -0
  597. data/vendor/v8/test/mjsunit/regress/regress-2336.js +53 -0
  598. data/vendor/v8/test/mjsunit/regress/regress-2339.js +59 -0
  599. data/vendor/v8/test/mjsunit/regress/regress-2346.js +123 -0
  600. data/vendor/v8/test/mjsunit/regress/regress-2373.js +29 -0
  601. data/vendor/v8/test/mjsunit/regress/regress-2374.js +33 -0
  602. data/vendor/v8/test/mjsunit/regress/regress-2398.js +41 -0
  603. data/vendor/v8/test/mjsunit/regress/regress-2410.js +36 -0
  604. data/vendor/v8/test/mjsunit/regress/regress-2416.js +75 -0
  605. data/vendor/v8/test/mjsunit/regress/regress-2419.js +37 -0
  606. data/vendor/v8/test/mjsunit/regress/regress-2433.js +36 -0
  607. data/vendor/v8/test/mjsunit/regress/regress-2437.js +156 -0
  608. data/vendor/v8/test/mjsunit/regress/regress-2438.js +52 -0
  609. data/vendor/v8/test/mjsunit/regress/regress-2443.js +129 -0
  610. data/vendor/v8/test/mjsunit/regress/regress-2444.js +120 -0
  611. data/vendor/v8/test/mjsunit/regress/regress-2489.js +50 -0
  612. data/vendor/v8/test/mjsunit/regress/regress-2499.js +40 -0
  613. data/vendor/v8/test/mjsunit/regress/regress-334.js +1 -1
  614. data/vendor/v8/test/mjsunit/regress/regress-492.js +39 -1
  615. data/vendor/v8/test/mjsunit/regress/regress-builtin-array-op.js +38 -0
  616. data/vendor/v8/test/mjsunit/regress/regress-cnlt-elements.js +43 -0
  617. data/vendor/v8/test/mjsunit/regress/regress-cnlt-enum-indices.js +45 -0
  618. data/vendor/v8/test/mjsunit/regress/regress-cntl-descriptors-enum.js +46 -0
  619. data/vendor/v8/test/mjsunit/regress/regress-convert-enum.js +60 -0
  620. data/vendor/v8/test/mjsunit/regress/regress-convert-enum2.js +46 -0
  621. data/vendor/v8/test/mjsunit/regress/regress-convert-transition.js +40 -0
  622. data/vendor/v8/test/mjsunit/regress/regress-crbug-119926.js +3 -1
  623. data/vendor/v8/test/mjsunit/regress/regress-crbug-125148.js +90 -0
  624. data/vendor/v8/test/mjsunit/regress/regress-crbug-134055.js +63 -0
  625. data/vendor/v8/test/mjsunit/regress/regress-crbug-134609.js +59 -0
  626. data/vendor/v8/test/mjsunit/regress/regress-crbug-135008.js +45 -0
  627. data/vendor/v8/test/mjsunit/regress/regress-crbug-135066.js +55 -0
  628. data/vendor/v8/test/mjsunit/regress/regress-crbug-137689.js +47 -0
  629. data/vendor/v8/test/mjsunit/regress/regress-crbug-138887.js +48 -0
  630. data/vendor/v8/test/mjsunit/regress/regress-crbug-140083.js +44 -0
  631. data/vendor/v8/test/mjsunit/regress/regress-crbug-142087.js +38 -0
  632. data/vendor/v8/test/mjsunit/regress/regress-crbug-142218.js +44 -0
  633. data/vendor/v8/test/mjsunit/regress/regress-crbug-145961.js +39 -0
  634. data/vendor/v8/test/mjsunit/regress/regress-crbug-146910.js +33 -0
  635. data/vendor/v8/test/mjsunit/regress/regress-crbug-147475.js +48 -0
  636. data/vendor/v8/test/mjsunit/regress/regress-crbug-148376.js +35 -0
  637. data/vendor/v8/test/mjsunit/regress/regress-crbug-150545.js +53 -0
  638. data/vendor/v8/test/mjsunit/regress/regress-crbug-150729.js +39 -0
  639. data/vendor/v8/test/mjsunit/regress/regress-crbug-157019.js +54 -0
  640. data/vendor/v8/test/mjsunit/regress/regress-crbug-157520.js +38 -0
  641. data/vendor/v8/test/mjsunit/regress/regress-crbug-158185.js +39 -0
  642. data/vendor/v8/test/mjsunit/regress/regress-crbug-160010.js +35 -0
  643. data/vendor/v8/test/mjsunit/regress/regress-crbug-162085.js +71 -0
  644. data/vendor/v8/test/mjsunit/regress/regress-crbug-168545.js +34 -0
  645. data/vendor/v8/test/mjsunit/regress/regress-crbug-170856.js +33 -0
  646. data/vendor/v8/test/mjsunit/regress/regress-crbug-172345.js +34 -0
  647. data/vendor/v8/test/mjsunit/regress/regress-crbug-173974.js +36 -0
  648. data/vendor/v8/test/mjsunit/regress/regress-crbug-18639.js +9 -5
  649. data/vendor/v8/test/mjsunit/regress/regress-debug-code-recompilation.js +2 -1
  650. data/vendor/v8/test/mjsunit/regress/regress-deep-proto.js +45 -0
  651. data/vendor/v8/test/mjsunit/regress/regress-delete-empty-double.js +40 -0
  652. data/vendor/v8/test/mjsunit/regress/regress-iteration-order.js +42 -0
  653. data/vendor/v8/test/mjsunit/regress/regress-json-stringify-gc.js +41 -0
  654. data/vendor/v8/test/mjsunit/regress/regress-latin-1.js +78 -0
  655. data/vendor/v8/test/mjsunit/regress/regress-load-elements.js +49 -0
  656. data/vendor/v8/test/mjsunit/regress/regress-observe-empty-double-array.js +38 -0
  657. data/vendor/v8/test/mjsunit/regress/regress-undefined-store-keyed-fast-element.js +37 -0
  658. data/vendor/v8/test/mjsunit/shift-for-integer-div.js +59 -0
  659. data/vendor/v8/test/mjsunit/stack-traces-gc.js +119 -0
  660. data/vendor/v8/test/mjsunit/stack-traces-overflow.js +122 -0
  661. data/vendor/v8/test/mjsunit/stack-traces.js +39 -1
  662. data/vendor/v8/test/mjsunit/str-to-num.js +7 -2
  663. data/vendor/v8/test/mjsunit/strict-mode.js +36 -11
  664. data/vendor/v8/test/mjsunit/string-charcodeat.js +3 -0
  665. data/vendor/v8/test/mjsunit/string-natives.js +72 -0
  666. data/vendor/v8/test/mjsunit/string-split.js +17 -0
  667. data/vendor/v8/test/mjsunit/testcfg.py +76 -6
  668. data/vendor/v8/test/mjsunit/tools/tickprocessor.js +4 -1
  669. data/vendor/v8/test/mjsunit/try-finally-continue.js +72 -0
  670. data/vendor/v8/test/mjsunit/typed-array-slice.js +61 -0
  671. data/vendor/v8/test/mjsunit/unbox-double-arrays.js +2 -0
  672. data/vendor/v8/test/mjsunit/uri.js +12 -0
  673. data/vendor/v8/test/mjsunit/with-readonly.js +4 -2
  674. data/vendor/v8/test/mozilla/mozilla.status +19 -113
  675. data/vendor/v8/test/mozilla/testcfg.py +122 -3
  676. data/vendor/v8/test/preparser/preparser.status +5 -0
  677. data/vendor/v8/test/preparser/strict-identifiers.pyt +1 -1
  678. data/vendor/v8/test/preparser/testcfg.py +101 -5
  679. data/vendor/v8/test/sputnik/sputnik.status +1 -1
  680. data/vendor/v8/test/sputnik/testcfg.py +5 -0
  681. data/vendor/v8/test/test262/README +2 -2
  682. data/vendor/v8/test/test262/test262.status +13 -36
  683. data/vendor/v8/test/test262/testcfg.py +102 -8
  684. data/vendor/v8/tools/android-build.sh +0 -0
  685. data/vendor/v8/tools/android-ll-prof.sh +69 -0
  686. data/vendor/v8/tools/android-run.py +109 -0
  687. data/vendor/v8/tools/android-sync.sh +105 -0
  688. data/vendor/v8/tools/bash-completion.sh +0 -0
  689. data/vendor/v8/tools/check-static-initializers.sh +0 -0
  690. data/vendor/v8/tools/common-includes.sh +15 -22
  691. data/vendor/v8/tools/disasm.py +4 -4
  692. data/vendor/v8/tools/fuzz-harness.sh +0 -0
  693. data/vendor/v8/tools/gen-postmortem-metadata.py +6 -8
  694. data/vendor/v8/tools/grokdump.py +404 -129
  695. data/vendor/v8/tools/gyp/v8.gyp +105 -43
  696. data/vendor/v8/tools/linux-tick-processor +5 -5
  697. data/vendor/v8/tools/ll_prof.py +75 -15
  698. data/vendor/v8/tools/merge-to-branch.sh +2 -2
  699. data/vendor/v8/tools/plot-timer-events +70 -0
  700. data/vendor/v8/tools/plot-timer-events.js +510 -0
  701. data/vendor/v8/tools/presubmit.py +1 -0
  702. data/vendor/v8/tools/push-to-trunk.sh +14 -4
  703. data/vendor/v8/tools/run-llprof.sh +69 -0
  704. data/vendor/v8/tools/run-tests.py +372 -0
  705. data/vendor/v8/tools/run-valgrind.py +1 -1
  706. data/vendor/v8/tools/status-file-converter.py +39 -0
  707. data/vendor/v8/tools/test-server.py +224 -0
  708. data/vendor/v8/tools/test-wrapper-gypbuild.py +13 -16
  709. data/vendor/v8/tools/test.py +10 -19
  710. data/vendor/v8/tools/testrunner/README +174 -0
  711. data/vendor/v8/tools/testrunner/__init__.py +26 -0
  712. data/vendor/v8/tools/testrunner/local/__init__.py +26 -0
  713. data/vendor/v8/tools/testrunner/local/commands.py +153 -0
  714. data/vendor/v8/tools/testrunner/local/execution.py +182 -0
  715. data/vendor/v8/tools/testrunner/local/old_statusfile.py +460 -0
  716. data/vendor/v8/tools/testrunner/local/progress.py +238 -0
  717. data/vendor/v8/tools/testrunner/local/statusfile.py +145 -0
  718. data/vendor/v8/tools/testrunner/local/testsuite.py +187 -0
  719. data/vendor/v8/tools/testrunner/local/utils.py +108 -0
  720. data/vendor/v8/tools/testrunner/local/verbose.py +99 -0
  721. data/vendor/v8/tools/testrunner/network/__init__.py +26 -0
  722. data/vendor/v8/tools/testrunner/network/distro.py +90 -0
  723. data/vendor/v8/tools/testrunner/network/endpoint.py +124 -0
  724. data/vendor/v8/tools/testrunner/network/network_execution.py +253 -0
  725. data/vendor/v8/tools/testrunner/network/perfdata.py +120 -0
  726. data/vendor/v8/tools/testrunner/objects/__init__.py +26 -0
  727. data/vendor/v8/tools/testrunner/objects/context.py +50 -0
  728. data/vendor/v8/tools/testrunner/objects/output.py +60 -0
  729. data/vendor/v8/tools/testrunner/objects/peer.py +80 -0
  730. data/vendor/v8/tools/testrunner/objects/testcase.py +83 -0
  731. data/vendor/v8/tools/testrunner/objects/workpacket.py +90 -0
  732. data/vendor/v8/tools/testrunner/server/__init__.py +26 -0
  733. data/vendor/v8/tools/testrunner/server/compression.py +111 -0
  734. data/vendor/v8/tools/testrunner/server/constants.py +51 -0
  735. data/vendor/v8/tools/testrunner/server/daemon.py +147 -0
  736. data/vendor/v8/tools/testrunner/server/local_handler.py +119 -0
  737. data/vendor/v8/tools/testrunner/server/main.py +245 -0
  738. data/vendor/v8/tools/testrunner/server/presence_handler.py +120 -0
  739. data/vendor/v8/tools/testrunner/server/signatures.py +63 -0
  740. data/vendor/v8/tools/testrunner/server/status_handler.py +112 -0
  741. data/vendor/v8/tools/testrunner/server/work_handler.py +150 -0
  742. data/vendor/v8/tools/tick-processor.html +168 -0
  743. data/vendor/v8/tools/tickprocessor-driver.js +5 -3
  744. data/vendor/v8/tools/tickprocessor.js +58 -15
  745. metadata +534 -30
  746. data/patches/add-freebsd9-and-freebsd10-to-gyp-GetFlavor.patch +0 -11
  747. data/patches/do-not-imply-vfp3-and-armv7.patch +0 -44
  748. data/patches/fPIC-on-x64.patch +0 -14
  749. data/vendor/v8/src/liveobjectlist-inl.h +0 -126
  750. data/vendor/v8/src/liveobjectlist.cc +0 -2631
  751. data/vendor/v8/src/liveobjectlist.h +0 -319
  752. data/vendor/v8/test/mjsunit/mul-exhaustive.js +0 -4629
  753. data/vendor/v8/test/mjsunit/numops-fuzz.js +0 -4609
  754. data/vendor/v8/test/mjsunit/regress/regress-1969.js +0 -5045
@@ -47,6 +47,116 @@
47
47
  namespace v8 {
48
48
  namespace internal {
49
49
 
50
+ // CpuFeatures keeps track of which features are supported by the target CPU.
51
+ // Supported features must be enabled by a Scope before use.
52
+ class CpuFeatures : public AllStatic {
53
+ public:
54
+ // Detect features of the target CPU. Set safe defaults if the serializer
55
+ // is enabled (snapshots must be portable).
56
+ static void Probe();
57
+
58
+ // Check whether a feature is supported by the target CPU.
59
+ static bool IsSupported(CpuFeature f) {
60
+ ASSERT(initialized_);
61
+ if (f == VFP3 && !FLAG_enable_vfp3) return false;
62
+ if (f == VFP2 && !FLAG_enable_vfp2) return false;
63
+ if (f == SUDIV && !FLAG_enable_sudiv) return false;
64
+ if (f == UNALIGNED_ACCESSES && !FLAG_enable_unaligned_accesses) {
65
+ return false;
66
+ }
67
+ if (f == VFP32DREGS && !FLAG_enable_32dregs) return false;
68
+ return (supported_ & (1u << f)) != 0;
69
+ }
70
+
71
+ #ifdef DEBUG
72
+ // Check whether a feature is currently enabled.
73
+ static bool IsEnabled(CpuFeature f) {
74
+ ASSERT(initialized_);
75
+ Isolate* isolate = Isolate::UncheckedCurrent();
76
+ if (isolate == NULL) {
77
+ // When no isolate is available, work as if we're running in
78
+ // release mode.
79
+ return IsSupported(f);
80
+ }
81
+ unsigned enabled = static_cast<unsigned>(isolate->enabled_cpu_features());
82
+ return (enabled & (1u << f)) != 0;
83
+ }
84
+ #endif
85
+
86
+ // Enable a specified feature within a scope.
87
+ class Scope BASE_EMBEDDED {
88
+ #ifdef DEBUG
89
+
90
+ public:
91
+ explicit Scope(CpuFeature f) {
92
+ unsigned mask = 1u << f;
93
+ // VFP2 and ARMv7 are implied by VFP3.
94
+ if (f == VFP3) mask |= 1u << VFP2 | 1u << ARMv7;
95
+ ASSERT(CpuFeatures::IsSupported(f));
96
+ ASSERT(!Serializer::enabled() ||
97
+ (CpuFeatures::found_by_runtime_probing_ & mask) == 0);
98
+ isolate_ = Isolate::UncheckedCurrent();
99
+ old_enabled_ = 0;
100
+ if (isolate_ != NULL) {
101
+ old_enabled_ = static_cast<unsigned>(isolate_->enabled_cpu_features());
102
+ isolate_->set_enabled_cpu_features(old_enabled_ | mask);
103
+ }
104
+ }
105
+ ~Scope() {
106
+ ASSERT_EQ(Isolate::UncheckedCurrent(), isolate_);
107
+ if (isolate_ != NULL) {
108
+ isolate_->set_enabled_cpu_features(old_enabled_);
109
+ }
110
+ }
111
+
112
+ private:
113
+ Isolate* isolate_;
114
+ unsigned old_enabled_;
115
+ #else
116
+
117
+ public:
118
+ explicit Scope(CpuFeature f) {}
119
+ #endif
120
+ };
121
+
122
+ class TryForceFeatureScope BASE_EMBEDDED {
123
+ public:
124
+ explicit TryForceFeatureScope(CpuFeature f)
125
+ : old_supported_(CpuFeatures::supported_) {
126
+ if (CanForce()) {
127
+ CpuFeatures::supported_ |= (1u << f);
128
+ }
129
+ }
130
+
131
+ ~TryForceFeatureScope() {
132
+ if (CanForce()) {
133
+ CpuFeatures::supported_ = old_supported_;
134
+ }
135
+ }
136
+
137
+ private:
138
+ static bool CanForce() {
139
+ // It's only safe to temporarily force support of CPU features
140
+ // when there's only a single isolate, which is guaranteed when
141
+ // the serializer is enabled.
142
+ return Serializer::enabled();
143
+ }
144
+
145
+ const unsigned old_supported_;
146
+ };
147
+
148
+ private:
149
+ #ifdef DEBUG
150
+ static bool initialized_;
151
+ #endif
152
+ static unsigned supported_;
153
+ static unsigned found_by_runtime_probing_;
154
+
155
+ friend class ExternalReference;
156
+ DISALLOW_COPY_AND_ASSIGN(CpuFeatures);
157
+ };
158
+
159
+
50
160
  // CPU Registers.
51
161
  //
52
162
  // 1) We would prefer to use an enum, but enum values are assignment-
@@ -71,21 +181,24 @@ namespace internal {
71
181
  // Core register
72
182
  struct Register {
73
183
  static const int kNumRegisters = 16;
74
- static const int kNumAllocatableRegisters = 8;
184
+ static const int kMaxNumAllocatableRegisters = 8;
75
185
  static const int kSizeInBytes = 4;
186
+ static const int kGPRsPerNonVFP2Double = 2;
187
+
188
+ inline static int NumAllocatableRegisters();
76
189
 
77
190
  static int ToAllocationIndex(Register reg) {
78
- ASSERT(reg.code() < kNumAllocatableRegisters);
191
+ ASSERT(reg.code() < kMaxNumAllocatableRegisters);
79
192
  return reg.code();
80
193
  }
81
194
 
82
195
  static Register FromAllocationIndex(int index) {
83
- ASSERT(index >= 0 && index < kNumAllocatableRegisters);
196
+ ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters);
84
197
  return from_code(index);
85
198
  }
86
199
 
87
200
  static const char* AllocationIndexToString(int index) {
88
- ASSERT(index >= 0 && index < kNumAllocatableRegisters);
201
+ ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters);
89
202
  const char* const names[] = {
90
203
  "r0",
91
204
  "r1",
@@ -165,7 +278,6 @@ const Register sp = { kRegister_sp_Code };
165
278
  const Register lr = { kRegister_lr_Code };
166
279
  const Register pc = { kRegister_pc_Code };
167
280
 
168
-
169
281
  // Single word VFP register.
170
282
  struct SwVfpRegister {
171
283
  bool is_valid() const { return 0 <= code_ && code_ < 32; }
@@ -190,52 +302,36 @@ struct SwVfpRegister {
190
302
 
191
303
  // Double word VFP register.
192
304
  struct DwVfpRegister {
193
- static const int kNumRegisters = 16;
305
+ static const int kMaxNumRegisters = 32;
194
306
  // A few double registers are reserved: one as a scratch register and one to
195
307
  // hold 0.0, that does not fit in the immediate field of vmov instructions.
196
308
  // d14: 0.0
197
309
  // d15: scratch register.
198
310
  static const int kNumReservedRegisters = 2;
199
- static const int kNumAllocatableRegisters = kNumRegisters -
311
+ static const int kMaxNumAllocatableRegisters = kMaxNumRegisters -
200
312
  kNumReservedRegisters;
201
313
 
202
- inline static int ToAllocationIndex(DwVfpRegister reg);
203
-
204
- static DwVfpRegister FromAllocationIndex(int index) {
205
- ASSERT(index >= 0 && index < kNumAllocatableRegisters);
206
- return from_code(index);
207
- }
314
+ // Note: the number of registers can be different at snapshot and run-time.
315
+ // Any code included in the snapshot must be able to run both with 16 or 32
316
+ // registers.
317
+ inline static int NumRegisters();
318
+ inline static int NumAllocatableRegisters();
208
319
 
209
- static const char* AllocationIndexToString(int index) {
210
- ASSERT(index >= 0 && index < kNumAllocatableRegisters);
211
- const char* const names[] = {
212
- "d0",
213
- "d1",
214
- "d2",
215
- "d3",
216
- "d4",
217
- "d5",
218
- "d6",
219
- "d7",
220
- "d8",
221
- "d9",
222
- "d10",
223
- "d11",
224
- "d12",
225
- "d13"
226
- };
227
- return names[index];
228
- }
320
+ inline static int ToAllocationIndex(DwVfpRegister reg);
321
+ static const char* AllocationIndexToString(int index);
322
+ inline static DwVfpRegister FromAllocationIndex(int index);
229
323
 
230
324
  static DwVfpRegister from_code(int code) {
231
325
  DwVfpRegister r = { code };
232
326
  return r;
233
327
  }
234
328
 
235
- // Supporting d0 to d15, can be later extended to d31.
236
- bool is_valid() const { return 0 <= code_ && code_ < 16; }
329
+ bool is_valid() const {
330
+ return 0 <= code_ && code_ < kMaxNumRegisters;
331
+ }
237
332
  bool is(DwVfpRegister reg) const { return code_ == reg.code_; }
238
333
  SwVfpRegister low() const {
334
+ ASSERT(code_ < 16);
239
335
  SwVfpRegister reg;
240
336
  reg.code_ = code_ * 2;
241
337
 
@@ -243,6 +339,7 @@ struct DwVfpRegister {
243
339
  return reg;
244
340
  }
245
341
  SwVfpRegister high() const {
342
+ ASSERT(code_ < 16);
246
343
  SwVfpRegister reg;
247
344
  reg.code_ = (code_ * 2) + 1;
248
345
 
@@ -322,6 +419,25 @@ const DwVfpRegister d12 = { 12 };
322
419
  const DwVfpRegister d13 = { 13 };
323
420
  const DwVfpRegister d14 = { 14 };
324
421
  const DwVfpRegister d15 = { 15 };
422
+ const DwVfpRegister d16 = { 16 };
423
+ const DwVfpRegister d17 = { 17 };
424
+ const DwVfpRegister d18 = { 18 };
425
+ const DwVfpRegister d19 = { 19 };
426
+ const DwVfpRegister d20 = { 20 };
427
+ const DwVfpRegister d21 = { 21 };
428
+ const DwVfpRegister d22 = { 22 };
429
+ const DwVfpRegister d23 = { 23 };
430
+ const DwVfpRegister d24 = { 24 };
431
+ const DwVfpRegister d25 = { 25 };
432
+ const DwVfpRegister d26 = { 26 };
433
+ const DwVfpRegister d27 = { 27 };
434
+ const DwVfpRegister d28 = { 28 };
435
+ const DwVfpRegister d29 = { 29 };
436
+ const DwVfpRegister d30 = { 30 };
437
+ const DwVfpRegister d31 = { 31 };
438
+
439
+ const Register sfpd_lo = { kRegister_r6_Code };
440
+ const Register sfpd_hi = { kRegister_r7_Code };
325
441
 
326
442
  // Aliases for double registers. Defined using #define instead of
327
443
  // "static const DwVfpRegister&" because Clang complains otherwise when a
@@ -399,7 +515,7 @@ class Operand BASE_EMBEDDED {
399
515
  public:
400
516
  // immediate
401
517
  INLINE(explicit Operand(int32_t immediate,
402
- RelocInfo::Mode rmode = RelocInfo::NONE));
518
+ RelocInfo::Mode rmode = RelocInfo::NONE32));
403
519
  INLINE(static Operand Zero()) {
404
520
  return Operand(static_cast<int32_t>(0));
405
521
  }
@@ -424,8 +540,8 @@ class Operand BASE_EMBEDDED {
424
540
  // the instruction this operand is used for is a MOV or MVN instruction the
425
541
  // actual instruction to use is required for this calculation. For other
426
542
  // instructions instr is ignored.
427
- bool is_single_instruction(Instr instr = 0) const;
428
- bool must_use_constant_pool() const;
543
+ bool is_single_instruction(const Assembler* assembler, Instr instr = 0) const;
544
+ bool must_output_reloc_info(const Assembler* assembler) const;
429
545
 
430
546
  inline int32_t immediate() const {
431
547
  ASSERT(!rm_.is_valid());
@@ -498,107 +614,6 @@ class MemOperand BASE_EMBEDDED {
498
614
  friend class Assembler;
499
615
  };
500
616
 
501
- // CpuFeatures keeps track of which features are supported by the target CPU.
502
- // Supported features must be enabled by a Scope before use.
503
- class CpuFeatures : public AllStatic {
504
- public:
505
- // Detect features of the target CPU. Set safe defaults if the serializer
506
- // is enabled (snapshots must be portable).
507
- static void Probe();
508
-
509
- // Check whether a feature is supported by the target CPU.
510
- static bool IsSupported(CpuFeature f) {
511
- ASSERT(initialized_);
512
- if (f == VFP3 && !FLAG_enable_vfp3) return false;
513
- return (supported_ & (1u << f)) != 0;
514
- }
515
-
516
- #ifdef DEBUG
517
- // Check whether a feature is currently enabled.
518
- static bool IsEnabled(CpuFeature f) {
519
- ASSERT(initialized_);
520
- Isolate* isolate = Isolate::UncheckedCurrent();
521
- if (isolate == NULL) {
522
- // When no isolate is available, work as if we're running in
523
- // release mode.
524
- return IsSupported(f);
525
- }
526
- unsigned enabled = static_cast<unsigned>(isolate->enabled_cpu_features());
527
- return (enabled & (1u << f)) != 0;
528
- }
529
- #endif
530
-
531
- // Enable a specified feature within a scope.
532
- class Scope BASE_EMBEDDED {
533
- #ifdef DEBUG
534
-
535
- public:
536
- explicit Scope(CpuFeature f) {
537
- unsigned mask = 1u << f;
538
- ASSERT(CpuFeatures::IsSupported(f));
539
- ASSERT(!Serializer::enabled() ||
540
- (CpuFeatures::found_by_runtime_probing_ & mask) == 0);
541
- isolate_ = Isolate::UncheckedCurrent();
542
- old_enabled_ = 0;
543
- if (isolate_ != NULL) {
544
- old_enabled_ = static_cast<unsigned>(isolate_->enabled_cpu_features());
545
- isolate_->set_enabled_cpu_features(old_enabled_ | mask);
546
- }
547
- }
548
- ~Scope() {
549
- ASSERT_EQ(Isolate::UncheckedCurrent(), isolate_);
550
- if (isolate_ != NULL) {
551
- isolate_->set_enabled_cpu_features(old_enabled_);
552
- }
553
- }
554
-
555
- private:
556
- Isolate* isolate_;
557
- unsigned old_enabled_;
558
- #else
559
-
560
- public:
561
- explicit Scope(CpuFeature f) {}
562
- #endif
563
- };
564
-
565
- class TryForceFeatureScope BASE_EMBEDDED {
566
- public:
567
- explicit TryForceFeatureScope(CpuFeature f)
568
- : old_supported_(CpuFeatures::supported_) {
569
- if (CanForce()) {
570
- CpuFeatures::supported_ |= (1u << f);
571
- }
572
- }
573
-
574
- ~TryForceFeatureScope() {
575
- if (CanForce()) {
576
- CpuFeatures::supported_ = old_supported_;
577
- }
578
- }
579
-
580
- private:
581
- static bool CanForce() {
582
- // It's only safe to temporarily force support of CPU features
583
- // when there's only a single isolate, which is guaranteed when
584
- // the serializer is enabled.
585
- return Serializer::enabled();
586
- }
587
-
588
- const unsigned old_supported_;
589
- };
590
-
591
- private:
592
- #ifdef DEBUG
593
- static bool initialized_;
594
- #endif
595
- static unsigned supported_;
596
- static unsigned found_by_runtime_probing_;
597
-
598
- DISALLOW_COPY_AND_ASSIGN(CpuFeatures);
599
- };
600
-
601
-
602
617
  extern const Instr kMovLrPc;
603
618
  extern const Instr kLdrPCMask;
604
619
  extern const Instr kLdrPCPattern;
@@ -640,10 +655,7 @@ class Assembler : public AssemblerBase {
640
655
  // is too small, a fatal error occurs. No deallocation of the buffer is done
641
656
  // upon destruction of the assembler.
642
657
  Assembler(Isolate* isolate, void* buffer, int buffer_size);
643
- ~Assembler();
644
-
645
- // Overrides the default provided by FLAG_debug_code.
646
- void set_emit_debug_code(bool value) { emit_debug_code_ = value; }
658
+ virtual ~Assembler();
647
659
 
648
660
  // GetCode emits any pending (non-emitted) code and fills the descriptor
649
661
  // desc. GetCode() is idempotent; it returns the same result if no other
@@ -677,13 +689,25 @@ class Assembler : public AssemblerBase {
677
689
  void label_at_put(Label* L, int at_offset);
678
690
 
679
691
  // Return the address in the constant pool of the code target address used by
680
- // the branch/call instruction at pc.
681
- INLINE(static Address target_address_address_at(Address pc));
692
+ // the branch/call instruction at pc, or the object in a mov.
693
+ INLINE(static Address target_pointer_address_at(Address pc));
694
+
695
+ // Read/Modify the pointer in the branch/call/move instruction at pc.
696
+ INLINE(static Address target_pointer_at(Address pc));
697
+ INLINE(static void set_target_pointer_at(Address pc, Address target));
682
698
 
683
699
  // Read/Modify the code target address in the branch/call instruction at pc.
684
700
  INLINE(static Address target_address_at(Address pc));
685
701
  INLINE(static void set_target_address_at(Address pc, Address target));
686
702
 
703
+ // Return the code target address at a call site from the return address
704
+ // of that call in the instruction stream.
705
+ INLINE(static Address target_address_from_return_address(Address pc));
706
+
707
+ // Given the address of the beginning of a call, return the address
708
+ // in the instruction stream that the call will return from.
709
+ INLINE(static Address return_address_from_call_start(Address pc));
710
+
687
711
  // This sets the branch destination (which is in the constant pool on ARM).
688
712
  // This is for calls and branches within generated code.
689
713
  inline static void deserialization_set_special_target_at(
@@ -702,22 +726,6 @@ class Assembler : public AssemblerBase {
702
726
  // Size of an instruction.
703
727
  static const int kInstrSize = sizeof(Instr);
704
728
 
705
- // Distance between the instruction referring to the address of the call
706
- // target and the return address.
707
- #ifdef USE_BLX
708
- // Call sequence is:
709
- // ldr ip, [pc, #...] @ call address
710
- // blx ip
711
- // @ return address
712
- static const int kCallTargetAddressOffset = 2 * kInstrSize;
713
- #else
714
- // Call sequence is:
715
- // mov lr, pc
716
- // ldr pc, [pc, #...] @ call address
717
- // @ return address
718
- static const int kCallTargetAddressOffset = kInstrSize;
719
- #endif
720
-
721
729
  // Distance between start of patched return sequence and the emitted address
722
730
  // to jump to.
723
731
  #ifdef USE_BLX
@@ -746,6 +754,12 @@ class Assembler : public AssemblerBase {
746
754
  static const int kPatchDebugBreakSlotAddressOffset = kInstrSize;
747
755
  #endif
748
756
 
757
+ #ifdef USE_BLX
758
+ static const int kPatchDebugBreakSlotReturnOffset = 2 * kInstrSize;
759
+ #else
760
+ static const int kPatchDebugBreakSlotReturnOffset = kInstrSize;
761
+ #endif
762
+
749
763
  // Difference between address of current opcode and value read from pc
750
764
  // register.
751
765
  static const int kPcLoadDelta = 8;
@@ -861,6 +875,12 @@ class Assembler : public AssemblerBase {
861
875
  void mla(Register dst, Register src1, Register src2, Register srcA,
862
876
  SBit s = LeaveCC, Condition cond = al);
863
877
 
878
+ void mls(Register dst, Register src1, Register src2, Register srcA,
879
+ Condition cond = al);
880
+
881
+ void sdiv(Register dst, Register src1, Register src2,
882
+ Condition cond = al);
883
+
864
884
  void mul(Register dst, Register src1, Register src2,
865
885
  SBit s = LeaveCC, Condition cond = al);
866
886
 
@@ -982,10 +1002,7 @@ class Assembler : public AssemblerBase {
982
1002
  LFlag l = Short); // v5 and above
983
1003
 
984
1004
  // Support for VFP.
985
- // All these APIs support S0 to S31 and D0 to D15.
986
- // Currently these APIs do not support extended D registers, i.e, D16 to D31.
987
- // However, some simple modifications can allow
988
- // these APIs to support D16 to D31.
1005
+ // All these APIs support S0 to S31 and D0 to D31.
989
1006
 
990
1007
  void vldr(const DwVfpRegister dst,
991
1008
  const Register base,
@@ -1045,6 +1062,7 @@ class Assembler : public AssemblerBase {
1045
1062
 
1046
1063
  void vmov(const DwVfpRegister dst,
1047
1064
  double imm,
1065
+ const Register scratch = no_reg,
1048
1066
  const Condition cond = al);
1049
1067
  void vmov(const SwVfpRegister dst,
1050
1068
  const SwVfpRegister src,
@@ -1052,6 +1070,10 @@ class Assembler : public AssemblerBase {
1052
1070
  void vmov(const DwVfpRegister dst,
1053
1071
  const DwVfpRegister src,
1054
1072
  const Condition cond = al);
1073
+ void vmov(const DwVfpRegister dst,
1074
+ int index,
1075
+ const Register src,
1076
+ const Condition cond = al);
1055
1077
  void vmov(const DwVfpRegister dst,
1056
1078
  const Register src1,
1057
1079
  const Register src2,
@@ -1113,6 +1135,10 @@ class Assembler : public AssemblerBase {
1113
1135
  const DwVfpRegister src1,
1114
1136
  const DwVfpRegister src2,
1115
1137
  const Condition cond = al);
1138
+ void vmla(const DwVfpRegister dst,
1139
+ const DwVfpRegister src1,
1140
+ const DwVfpRegister src2,
1141
+ const Condition cond = al);
1116
1142
  void vdiv(const DwVfpRegister dst,
1117
1143
  const DwVfpRegister src1,
1118
1144
  const DwVfpRegister src2,
@@ -1164,6 +1190,20 @@ class Assembler : public AssemblerBase {
1164
1190
  // Jump unconditionally to given label.
1165
1191
  void jmp(Label* L) { b(L, al); }
1166
1192
 
1193
+ static bool use_immediate_embedded_pointer_loads(
1194
+ const Assembler* assembler) {
1195
+ #ifdef USE_BLX
1196
+ return CpuFeatures::IsSupported(MOVW_MOVT_IMMEDIATE_LOADS) &&
1197
+ (assembler == NULL || !assembler->predictable_code_size());
1198
+ #else
1199
+ // If not using BLX, all loads from the constant pool cannot be immediate,
1200
+ // because the ldr pc, [pc + #xxxx] used for calls must be a single
1201
+ // instruction and cannot be easily distinguished out of context from
1202
+ // other loads that could use movw/movt.
1203
+ return false;
1204
+ #endif
1205
+ }
1206
+
1167
1207
  // Check the code size generated from label to here.
1168
1208
  int SizeOfCodeGeneratedSince(Label* label) {
1169
1209
  return pc_offset() - label->pos();
@@ -1203,22 +1243,41 @@ class Assembler : public AssemblerBase {
1203
1243
 
1204
1244
  // Record the AST id of the CallIC being compiled, so that it can be placed
1205
1245
  // in the relocation information.
1206
- void SetRecordedAstId(unsigned ast_id) {
1207
- ASSERT(recorded_ast_id_ == kNoASTId);
1246
+ void SetRecordedAstId(TypeFeedbackId ast_id) {
1247
+ ASSERT(recorded_ast_id_.IsNone());
1208
1248
  recorded_ast_id_ = ast_id;
1209
1249
  }
1210
1250
 
1211
- unsigned RecordedAstId() {
1212
- ASSERT(recorded_ast_id_ != kNoASTId);
1251
+ TypeFeedbackId RecordedAstId() {
1252
+ ASSERT(!recorded_ast_id_.IsNone());
1213
1253
  return recorded_ast_id_;
1214
1254
  }
1215
1255
 
1216
- void ClearRecordedAstId() { recorded_ast_id_ = kNoASTId; }
1256
+ void ClearRecordedAstId() { recorded_ast_id_ = TypeFeedbackId::None(); }
1217
1257
 
1218
1258
  // Record a comment relocation entry that can be used by a disassembler.
1219
1259
  // Use --code-comments to enable.
1220
1260
  void RecordComment(const char* msg);
1221
1261
 
1262
+ // Record the emission of a constant pool.
1263
+ //
1264
+ // The emission of constant pool depends on the size of the code generated and
1265
+ // the number of RelocInfo recorded.
1266
+ // The Debug mechanism needs to map code offsets between two versions of a
1267
+ // function, compiled with and without debugger support (see for example
1268
+ // Debug::PrepareForBreakPoints()).
1269
+ // Compiling functions with debugger support generates additional code
1270
+ // (Debug::GenerateSlot()). This may affect the emission of the constant
1271
+ // pools and cause the version of the code with debugger support to have
1272
+ // constant pools generated in different places.
1273
+ // Recording the position and size of emitted constant pools allows to
1274
+ // correctly compute the offset mappings between the different versions of a
1275
+ // function in all situations.
1276
+ //
1277
+ // The parameter indicates the size of the constant pool (in bytes), including
1278
+ // the marker and branch over the data.
1279
+ void RecordConstPool(int size);
1280
+
1222
1281
  // Writes a single byte or word of data in the code stream. Used
1223
1282
  // for inline tables, e.g., jump-tables. The constant pool should be
1224
1283
  // emitted before any use of db and dd to ensure that constant pools
@@ -1226,8 +1285,6 @@ class Assembler : public AssemblerBase {
1226
1285
  void db(uint8_t data);
1227
1286
  void dd(uint32_t data);
1228
1287
 
1229
- int pc_offset() const { return pc_ - buffer_; }
1230
-
1231
1288
  PositionsRecorder* positions_recorder() { return &positions_recorder_; }
1232
1289
 
1233
1290
  // Read/patch instructions
@@ -1243,8 +1300,11 @@ class Assembler : public AssemblerBase {
1243
1300
  static bool IsBranch(Instr instr);
1244
1301
  static int GetBranchOffset(Instr instr);
1245
1302
  static bool IsLdrRegisterImmediate(Instr instr);
1303
+ static bool IsVldrDRegisterImmediate(Instr instr);
1246
1304
  static int GetLdrRegisterImmediateOffset(Instr instr);
1305
+ static int GetVldrDRegisterImmediateOffset(Instr instr);
1247
1306
  static Instr SetLdrRegisterImmediateOffset(Instr instr, int offset);
1307
+ static Instr SetVldrDRegisterImmediateOffset(Instr instr, int offset);
1248
1308
  static bool IsStrRegisterImmediate(Instr instr);
1249
1309
  static Instr SetStrRegisterImmediateOffset(Instr instr, int offset);
1250
1310
  static bool IsAddRegisterImmediate(Instr instr);
@@ -1259,18 +1319,24 @@ class Assembler : public AssemblerBase {
1259
1319
  static bool IsStrRegFpNegOffset(Instr instr);
1260
1320
  static bool IsLdrRegFpNegOffset(Instr instr);
1261
1321
  static bool IsLdrPcImmediateOffset(Instr instr);
1322
+ static bool IsVldrDPcImmediateOffset(Instr instr);
1262
1323
  static bool IsTstImmediate(Instr instr);
1263
1324
  static bool IsCmpRegister(Instr instr);
1264
1325
  static bool IsCmpImmediate(Instr instr);
1265
1326
  static Register GetCmpImmediateRegister(Instr instr);
1266
1327
  static int GetCmpImmediateRawImmediate(Instr instr);
1267
1328
  static bool IsNop(Instr instr, int type = NON_MARKING_NOP);
1329
+ static bool IsMovT(Instr instr);
1330
+ static bool IsMovW(Instr instr);
1268
1331
 
1269
1332
  // Constants in pools are accessed via pc relative addressing, which can
1270
- // reach +/-4KB thereby defining a maximum distance between the instruction
1271
- // and the accessed constant.
1272
- static const int kMaxDistToPool = 4*KB;
1273
- static const int kMaxNumPendingRelocInfo = kMaxDistToPool/kInstrSize;
1333
+ // reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point
1334
+ // PC-relative loads, thereby defining a maximum distance between the
1335
+ // instruction and the accessed constant.
1336
+ static const int kMaxDistToIntPool = 4*KB;
1337
+ static const int kMaxDistToFPPool = 1*KB;
1338
+ // All relocations could be integer, it therefore acts as the limit.
1339
+ static const int kMaxNumPendingRelocInfo = kMaxDistToIntPool/kInstrSize;
1274
1340
 
1275
1341
  // Postpone the generation of the constant pool for the specified number of
1276
1342
  // instructions.
@@ -1283,9 +1349,7 @@ class Assembler : public AssemblerBase {
1283
1349
  // Relocation for a type-recording IC has the AST id added to it. This
1284
1350
  // member variable is a way to pass the information from the call site to
1285
1351
  // the relocation info.
1286
- unsigned recorded_ast_id_;
1287
-
1288
- bool emit_debug_code() const { return emit_debug_code_; }
1352
+ TypeFeedbackId recorded_ast_id_;
1289
1353
 
1290
1354
  int buffer_space() const { return reloc_info_writer.pos() - pc_; }
1291
1355
 
@@ -1312,7 +1376,9 @@ class Assembler : public AssemblerBase {
1312
1376
  if (--const_pool_blocked_nesting_ == 0) {
1313
1377
  // Check the constant pool hasn't been blocked for too long.
1314
1378
  ASSERT((num_pending_reloc_info_ == 0) ||
1315
- (pc_offset() < (first_const_pool_use_ + kMaxDistToPool)));
1379
+ (pc_offset() < (first_const_pool_use_ + kMaxDistToIntPool)));
1380
+ ASSERT((num_pending_64_bit_reloc_info_ == 0) ||
1381
+ (pc_offset() < (first_const_pool_use_ + kMaxDistToFPPool)));
1316
1382
  // Two cases:
1317
1383
  // * no_const_pool_before_ >= next_buffer_check_ and the emission is
1318
1384
  // still blocked
@@ -1328,13 +1394,6 @@ class Assembler : public AssemblerBase {
1328
1394
  }
1329
1395
 
1330
1396
  private:
1331
- // Code buffer:
1332
- // The buffer into which code and relocation info are generated.
1333
- byte* buffer_;
1334
- int buffer_size_;
1335
- // True if the assembler owns the buffer, false if buffer is external.
1336
- bool own_buffer_;
1337
-
1338
1397
  int next_buffer_check_; // pc offset of next buffer check
1339
1398
 
1340
1399
  // Code generation
@@ -1343,7 +1402,6 @@ class Assembler : public AssemblerBase {
1343
1402
  // not have to check for overflow. The same is true for writes of large
1344
1403
  // relocation info entries.
1345
1404
  static const int kGap = 32;
1346
- byte* pc_; // the program counter; moves forward
1347
1405
 
1348
1406
  // Constant pool generation
1349
1407
  // Pools are emitted in the instruction stream, preferably after unconditional
@@ -1363,13 +1421,6 @@ class Assembler : public AssemblerBase {
1363
1421
  static const int kCheckPoolInterval = kCheckPoolIntervalInst * kInstrSize;
1364
1422
 
1365
1423
 
1366
- // Average distance beetween a constant pool and the first instruction
1367
- // accessing the constant pool. Longer distance should result in less I-cache
1368
- // pollution.
1369
- // In practice the distance will be smaller since constant pool emission is
1370
- // forced after function return and sometimes after unconditional branches.
1371
- static const int kAvgDistToPool = kMaxDistToPool - kCheckPoolInterval;
1372
-
1373
1424
  // Emission of the constant pool may be blocked in some code sequences.
1374
1425
  int const_pool_blocked_nesting_; // Block emission if this is not zero.
1375
1426
  int no_const_pool_before_; // Block emission before this pc offset.
@@ -1394,6 +1445,9 @@ class Assembler : public AssemblerBase {
1394
1445
  RelocInfo pending_reloc_info_[kMaxNumPendingRelocInfo];
1395
1446
  // number of pending reloc info entries in the buffer
1396
1447
  int num_pending_reloc_info_;
1448
+ // Number of pending reloc info entries included above which also happen to
1449
+ // be 64-bit.
1450
+ int num_pending_64_bit_reloc_info_;
1397
1451
 
1398
1452
  // The bound position, before this we cannot do instruction elimination.
1399
1453
  int last_bound_pos_;
@@ -1403,6 +1457,12 @@ class Assembler : public AssemblerBase {
1403
1457
  void GrowBuffer();
1404
1458
  inline void emit(Instr x);
1405
1459
 
1460
+ // 32-bit immediate values
1461
+ void move_32_bit_immediate(Condition cond,
1462
+ Register rd,
1463
+ SBit s,
1464
+ const Operand& x);
1465
+
1406
1466
  // Instruction generation
1407
1467
  void addrmod1(Instr instr, Register rn, Register rd, const Operand& x);
1408
1468
  void addrmod2(Instr instr, Register rd, const MemOperand& x);
@@ -1416,8 +1476,16 @@ class Assembler : public AssemblerBase {
1416
1476
  void link_to(Label* L, Label* appendix);
1417
1477
  void next(Label* L);
1418
1478
 
1479
+ enum UseConstantPoolMode {
1480
+ USE_CONSTANT_POOL,
1481
+ DONT_USE_CONSTANT_POOL
1482
+ };
1483
+
1419
1484
  // Record reloc info for current pc_
1420
- void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0);
1485
+ void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0,
1486
+ UseConstantPoolMode mode = USE_CONSTANT_POOL);
1487
+ void RecordRelocInfo(double data);
1488
+ void RecordRelocInfoConstantPoolEntryHelper(const RelocInfo& rinfo);
1421
1489
 
1422
1490
  friend class RegExpMacroAssemblerARM;
1423
1491
  friend class RelocInfo;
@@ -1425,7 +1493,6 @@ class Assembler : public AssemblerBase {
1425
1493
  friend class BlockConstPoolScope;
1426
1494
 
1427
1495
  PositionsRecorder positions_recorder_;
1428
- bool emit_debug_code_;
1429
1496
  friend class PositionsRecorder;
1430
1497
  friend class EnsureSpace;
1431
1498
  };