libv8 3.11.8.17 → 3.16.14.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -35,25 +35,25 @@ namespace internal {
35
35
 
36
36
 
37
37
  template<typename T, class P>
38
- void List<T, P>::Add(const T& element) {
38
+ void List<T, P>::Add(const T& element, P alloc) {
39
39
  if (length_ < capacity_) {
40
40
  data_[length_++] = element;
41
41
  } else {
42
- List<T, P>::ResizeAdd(element);
42
+ List<T, P>::ResizeAdd(element, alloc);
43
43
  }
44
44
  }
45
45
 
46
46
 
47
47
  template<typename T, class P>
48
- void List<T, P>::AddAll(const List<T, P>& other) {
49
- AddAll(other.ToVector());
48
+ void List<T, P>::AddAll(const List<T, P>& other, P alloc) {
49
+ AddAll(other.ToVector(), alloc);
50
50
  }
51
51
 
52
52
 
53
53
  template<typename T, class P>
54
- void List<T, P>::AddAll(const Vector<T>& other) {
54
+ void List<T, P>::AddAll(const Vector<T>& other, P alloc) {
55
55
  int result_length = length_ + other.length();
56
- if (capacity_ < result_length) Resize(result_length);
56
+ if (capacity_ < result_length) Resize(result_length, alloc);
57
57
  for (int i = 0; i < other.length(); i++) {
58
58
  data_[length_ + i] = other.at(i);
59
59
  }
@@ -64,13 +64,13 @@ void List<T, P>::AddAll(const Vector<T>& other) {
64
64
  // Use two layers of inlining so that the non-inlined function can
65
65
  // use the same implementation as the inlined version.
66
66
  template<typename T, class P>
67
- void List<T, P>::ResizeAdd(const T& element) {
68
- ResizeAddInternal(element);
67
+ void List<T, P>::ResizeAdd(const T& element, P alloc) {
68
+ ResizeAddInternal(element, alloc);
69
69
  }
70
70
 
71
71
 
72
72
  template<typename T, class P>
73
- void List<T, P>::ResizeAddInternal(const T& element) {
73
+ void List<T, P>::ResizeAddInternal(const T& element, P alloc) {
74
74
  ASSERT(length_ >= capacity_);
75
75
  // Grow the list capacity by 100%, but make sure to let it grow
76
76
  // even when the capacity is zero (possible initial case).
@@ -78,15 +78,16 @@ void List<T, P>::ResizeAddInternal(const T& element) {
78
78
  // Since the element reference could be an element of the list, copy
79
79
  // it out of the old backing storage before resizing.
80
80
  T temp = element;
81
- Resize(new_capacity);
81
+ Resize(new_capacity, alloc);
82
82
  data_[length_++] = temp;
83
83
  }
84
84
 
85
85
 
86
86
  template<typename T, class P>
87
- void List<T, P>::Resize(int new_capacity) {
88
- T* new_data = List<T, P>::NewData(new_capacity);
89
- memcpy(new_data, data_, capacity_ * sizeof(T));
87
+ void List<T, P>::Resize(int new_capacity, P alloc) {
88
+ ASSERT_LE(length_, new_capacity);
89
+ T* new_data = NewData(new_capacity, alloc);
90
+ memcpy(new_data, data_, length_ * sizeof(T));
90
91
  List<T, P>::DeleteData(data_);
91
92
  data_ = new_data;
92
93
  capacity_ = new_capacity;
@@ -94,17 +95,17 @@ void List<T, P>::Resize(int new_capacity) {
94
95
 
95
96
 
96
97
  template<typename T, class P>
97
- Vector<T> List<T, P>::AddBlock(T value, int count) {
98
+ Vector<T> List<T, P>::AddBlock(T value, int count, P alloc) {
98
99
  int start = length_;
99
- for (int i = 0; i < count; i++) Add(value);
100
+ for (int i = 0; i < count; i++) Add(value, alloc);
100
101
  return Vector<T>(&data_[start], count);
101
102
  }
102
103
 
103
104
 
104
105
  template<typename T, class P>
105
- void List<T, P>::InsertAt(int index, const T& elm) {
106
+ void List<T, P>::InsertAt(int index, const T& elm, P alloc) {
106
107
  ASSERT(index >= 0 && index <= length_);
107
- Add(elm);
108
+ Add(elm, alloc);
108
109
  for (int i = length_ - 1; i > index; --i) {
109
110
  data_[i] = data_[i - 1];
110
111
  }
@@ -137,9 +138,9 @@ bool List<T, P>::RemoveElement(const T& elm) {
137
138
 
138
139
 
139
140
  template<typename T, class P>
140
- void List<T, P>::Allocate(int length) {
141
+ void List<T, P>::Allocate(int length, P allocator) {
141
142
  DeleteData(data_);
142
- Initialize(length);
143
+ Initialize(length, allocator);
143
144
  length_ = length;
144
145
  }
145
146
 
@@ -147,7 +148,11 @@ void List<T, P>::Allocate(int length) {
147
148
  template<typename T, class P>
148
149
  void List<T, P>::Clear() {
149
150
  DeleteData(data_);
150
- Initialize(0);
151
+ // We don't call Initialize(0) since that requires passing a Zone,
152
+ // which we don't really need.
153
+ data_ = NULL;
154
+ capacity_ = 0;
155
+ length_ = 0;
151
156
  }
152
157
 
153
158
 
@@ -157,6 +162,14 @@ void List<T, P>::Rewind(int pos) {
157
162
  }
158
163
 
159
164
 
165
+ template<typename T, class P>
166
+ void List<T, P>::Trim(P alloc) {
167
+ if (length_ < capacity_ / 4) {
168
+ Resize(capacity_ / 2, alloc);
169
+ }
170
+ }
171
+
172
+
160
173
  template<typename T, class P>
161
174
  void List<T, P>::Iterate(void (*callback)(T* x)) {
162
175
  for (int i = 0; i < length_; i++) callback(&data_[i]);
@@ -207,9 +220,9 @@ void List<T, P>::Sort() {
207
220
 
208
221
 
209
222
  template<typename T, class P>
210
- void List<T, P>::Initialize(int capacity) {
223
+ void List<T, P>::Initialize(int capacity, P allocator) {
211
224
  ASSERT(capacity >= 0);
212
- data_ = (capacity > 0) ? NewData(capacity) : NULL;
225
+ data_ = (capacity > 0) ? NewData(capacity, allocator) : NULL;
213
226
  capacity_ = capacity;
214
227
  length_ = 0;
215
228
  }
data/vendor/v8/src/list.h CHANGED
@@ -45,12 +45,18 @@ namespace internal {
45
45
  // the C free store or the zone; see zone.h.
46
46
 
47
47
  // Forward defined as
48
- // template <typename T, class P = FreeStoreAllocationPolicy> class List;
49
- template <typename T, class P>
48
+ // template <typename T,
49
+ // class AllocationPolicy = FreeStoreAllocationPolicy> class List;
50
+ template <typename T, class AllocationPolicy>
50
51
  class List {
51
52
  public:
52
- List() { Initialize(0); }
53
- INLINE(explicit List(int capacity)) { Initialize(capacity); }
53
+ explicit List(AllocationPolicy allocator = AllocationPolicy()) {
54
+ Initialize(0, allocator);
55
+ }
56
+ INLINE(explicit List(int capacity,
57
+ AllocationPolicy allocator = AllocationPolicy())) {
58
+ Initialize(capacity, allocator);
59
+ }
54
60
  INLINE(~List()) { DeleteData(data_); }
55
61
 
56
62
  // Deallocates memory used by the list and leaves the list in a consistent
@@ -60,10 +66,18 @@ class List {
60
66
  Initialize(0);
61
67
  }
62
68
 
63
- INLINE(void* operator new(size_t size)) {
64
- return P::New(static_cast<int>(size));
69
+ INLINE(void* operator new(size_t size,
70
+ AllocationPolicy allocator = AllocationPolicy())) {
71
+ return allocator.New(static_cast<int>(size));
72
+ }
73
+ INLINE(void operator delete(void* p)) {
74
+ AllocationPolicy::Delete(p);
75
+ }
76
+
77
+ // Please the MSVC compiler. We should never have to execute this.
78
+ INLINE(void operator delete(void* p, AllocationPolicy allocator)) {
79
+ UNREACHABLE();
65
80
  }
66
- INLINE(void operator delete(void* p, size_t)) { return P::Delete(p); }
67
81
 
68
82
  // Returns a reference to the element at index i. This reference is
69
83
  // not safe to use after operations that can change the list's
@@ -87,21 +101,25 @@ class List {
87
101
 
88
102
  // Adds a copy of the given 'element' to the end of the list,
89
103
  // expanding the list if necessary.
90
- void Add(const T& element);
104
+ void Add(const T& element, AllocationPolicy allocator = AllocationPolicy());
91
105
 
92
106
  // Add all the elements from the argument list to this list.
93
- void AddAll(const List<T, P>& other);
107
+ void AddAll(const List<T, AllocationPolicy>& other,
108
+ AllocationPolicy allocator = AllocationPolicy());
94
109
 
95
110
  // Add all the elements from the vector to this list.
96
- void AddAll(const Vector<T>& other);
111
+ void AddAll(const Vector<T>& other,
112
+ AllocationPolicy allocator = AllocationPolicy());
97
113
 
98
114
  // Inserts the element at the specific index.
99
- void InsertAt(int index, const T& element);
115
+ void InsertAt(int index, const T& element,
116
+ AllocationPolicy allocator = AllocationPolicy());
100
117
 
101
118
  // Added 'count' elements with the value 'value' and returns a
102
119
  // vector that allows access to the elements. The vector is valid
103
120
  // until the next change is made to this list.
104
- Vector<T> AddBlock(T value, int count);
121
+ Vector<T> AddBlock(T value, int count,
122
+ AllocationPolicy allocator = AllocationPolicy());
105
123
 
106
124
  // Removes the i'th element without deleting it even if T is a
107
125
  // pointer type; moves all elements above i "down". Returns the
@@ -118,7 +136,8 @@ class List {
118
136
  INLINE(T RemoveLast()) { return Remove(length_ - 1); }
119
137
 
120
138
  // Deletes current list contents and allocates space for 'length' elements.
121
- INLINE(void Allocate(int length));
139
+ INLINE(void Allocate(int length,
140
+ AllocationPolicy allocator = AllocationPolicy()));
122
141
 
123
142
  // Clears the list by setting the length to zero. Even if T is a
124
143
  // pointer type, clearing the list doesn't delete the entries.
@@ -130,6 +149,9 @@ class List {
130
149
  // Drop the last 'count' elements from the list.
131
150
  INLINE(void RewindBy(int count)) { Rewind(length_ - count); }
132
151
 
152
+ // Halve the capacity if fill level is less than a quarter.
153
+ INLINE(void Trim(AllocationPolicy allocator = AllocationPolicy()));
154
+
133
155
  bool Contains(const T& elm) const;
134
156
  int CountOccurrences(const T& elm, int start, int end) const;
135
157
 
@@ -142,26 +164,31 @@ class List {
142
164
  void Sort(int (*cmp)(const T* x, const T* y));
143
165
  void Sort();
144
166
 
145
- INLINE(void Initialize(int capacity));
167
+ INLINE(void Initialize(int capacity,
168
+ AllocationPolicy allocator = AllocationPolicy()));
146
169
 
147
170
  private:
148
171
  T* data_;
149
172
  int capacity_;
150
173
  int length_;
151
174
 
152
- INLINE(T* NewData(int n)) { return static_cast<T*>(P::New(n * sizeof(T))); }
153
- INLINE(void DeleteData(T* data)) { P::Delete(data); }
175
+ INLINE(T* NewData(int n, AllocationPolicy allocator)) {
176
+ return static_cast<T*>(allocator.New(n * sizeof(T)));
177
+ }
178
+ INLINE(void DeleteData(T* data)) {
179
+ AllocationPolicy::Delete(data);
180
+ }
154
181
 
155
182
  // Increase the capacity of a full list, and add an element.
156
183
  // List must be full already.
157
- void ResizeAdd(const T& element);
184
+ void ResizeAdd(const T& element, AllocationPolicy allocator);
158
185
 
159
186
  // Inlined implementation of ResizeAdd, shared by inlined and
160
187
  // non-inlined versions of ResizeAdd.
161
- void ResizeAddInternal(const T& element);
188
+ void ResizeAddInternal(const T& element, AllocationPolicy allocator);
162
189
 
163
190
  // Resize the list.
164
- void Resize(int new_capacity);
191
+ void Resize(int new_capacity, AllocationPolicy allocator);
165
192
 
166
193
  DISALLOW_COPY_AND_ASSIGN(List);
167
194
  };
@@ -99,6 +99,7 @@ bool InputIterator::Done() { return current_ >= limit_; }
99
99
 
100
100
  LOperand* InputIterator::Current() {
101
101
  ASSERT(!Done());
102
+ ASSERT(instr_->InputAt(current_) != NULL);
102
103
  return instr_->InputAt(current_);
103
104
  }
104
105
 
@@ -110,7 +111,9 @@ void InputIterator::Advance() {
110
111
 
111
112
 
112
113
  void InputIterator::SkipUninteresting() {
113
- while (current_ < limit_ && instr_->InputAt(current_)->IsConstantOperand()) {
114
+ while (current_ < limit_) {
115
+ LOperand* current = instr_->InputAt(current_);
116
+ if (current != NULL && !current->IsConstantOperand()) break;
114
117
  ++current_;
115
118
  }
116
119
  }
@@ -127,9 +130,11 @@ bool UseIterator::Done() {
127
130
 
128
131
  LOperand* UseIterator::Current() {
129
132
  ASSERT(!Done());
130
- return input_iterator_.Done()
133
+ LOperand* result = input_iterator_.Done()
131
134
  ? env_iterator_.Current()
132
135
  : input_iterator_.Current();
136
+ ASSERT(result != NULL);
137
+ return result;
133
138
  }
134
139
 
135
140
 
@@ -139,6 +144,21 @@ void UseIterator::Advance() {
139
144
  : input_iterator_.Advance();
140
145
  }
141
146
 
147
+
148
+ void LAllocator::SetLiveRangeAssignedRegister(
149
+ LiveRange* range,
150
+ int reg,
151
+ RegisterKind register_kind,
152
+ Zone* zone) {
153
+ if (register_kind == DOUBLE_REGISTERS) {
154
+ assigned_double_registers_->Add(reg);
155
+ } else {
156
+ assigned_registers_->Add(reg);
157
+ }
158
+ range->set_assigned_register(reg, register_kind, zone);
159
+ }
160
+
161
+
142
162
  } } // namespace v8::internal
143
163
 
144
164
  #endif // V8_LITHIUM_ALLOCATOR_INL_H_
@@ -230,9 +230,9 @@ LOperand* LiveRange::CreateAssignedOperand(Zone* zone) {
230
230
  if (HasRegisterAssigned()) {
231
231
  ASSERT(!IsSpilled());
232
232
  if (IsDouble()) {
233
- op = LDoubleRegister::Create(assigned_register());
233
+ op = LDoubleRegister::Create(assigned_register(), zone);
234
234
  } else {
235
- op = LRegister::Create(assigned_register());
235
+ op = LRegister::Create(assigned_register(), zone);
236
236
  }
237
237
  } else if (IsSpilled()) {
238
238
  ASSERT(!HasRegisterAssigned());
@@ -533,14 +533,14 @@ LifetimePosition LiveRange::FirstIntersection(LiveRange* other) {
533
533
  LAllocator::LAllocator(int num_values, HGraph* graph)
534
534
  : zone_(graph->zone()),
535
535
  chunk_(NULL),
536
- live_in_sets_(graph->blocks()->length()),
537
- live_ranges_(num_values * 2),
536
+ live_in_sets_(graph->blocks()->length(), zone_),
537
+ live_ranges_(num_values * 2, zone_),
538
538
  fixed_live_ranges_(NULL),
539
539
  fixed_double_live_ranges_(NULL),
540
- unhandled_live_ranges_(num_values * 2),
541
- active_live_ranges_(8),
542
- inactive_live_ranges_(8),
543
- reusable_slots_(8),
540
+ unhandled_live_ranges_(num_values * 2, zone_),
541
+ active_live_ranges_(8, zone_),
542
+ inactive_live_ranges_(8, zone_),
543
+ reusable_slots_(8, zone_),
544
544
  next_virtual_register_(num_values),
545
545
  first_artificial_register_(num_values),
546
546
  mode_(GENERAL_REGISTERS),
@@ -553,8 +553,8 @@ LAllocator::LAllocator(int num_values, HGraph* graph)
553
553
  void LAllocator::InitializeLivenessAnalysis() {
554
554
  // Initialize the live_in sets for each block to NULL.
555
555
  int block_count = graph_->blocks()->length();
556
- live_in_sets_.Initialize(block_count);
557
- live_in_sets_.AddBlock(NULL, block_count);
556
+ live_in_sets_.Initialize(block_count, zone());
557
+ live_in_sets_.AddBlock(NULL, block_count, zone());
558
558
  }
559
559
 
560
560
 
@@ -606,7 +606,7 @@ void LAllocator::AddInitialIntervals(HBasicBlock* block,
606
606
 
607
607
 
608
608
  int LAllocator::FixedDoubleLiveRangeID(int index) {
609
- return -index - 1 - Register::kNumAllocatableRegisters;
609
+ return -index - 1 - Register::kMaxNumAllocatableRegisters;
610
610
  }
611
611
 
612
612
 
@@ -630,7 +630,7 @@ LOperand* LAllocator::AllocateFixed(LUnallocated* operand,
630
630
  TraceAlloc("Fixed reg is tagged at %d\n", pos);
631
631
  LInstruction* instr = InstructionAt(pos);
632
632
  if (instr->HasPointerMap()) {
633
- instr->pointer_map()->RecordPointer(operand);
633
+ instr->pointer_map()->RecordPointer(operand, zone());
634
634
  }
635
635
  }
636
636
  return operand;
@@ -638,12 +638,12 @@ LOperand* LAllocator::AllocateFixed(LUnallocated* operand,
638
638
 
639
639
 
640
640
  LiveRange* LAllocator::FixedLiveRangeFor(int index) {
641
- ASSERT(index < Register::kNumAllocatableRegisters);
641
+ ASSERT(index < Register::kMaxNumAllocatableRegisters);
642
642
  LiveRange* result = fixed_live_ranges_[index];
643
643
  if (result == NULL) {
644
644
  result = new(zone_) LiveRange(FixedLiveRangeID(index), zone_);
645
645
  ASSERT(result->IsFixed());
646
- result->set_assigned_register(index, GENERAL_REGISTERS, zone_);
646
+ SetLiveRangeAssignedRegister(result, index, GENERAL_REGISTERS, zone_);
647
647
  fixed_live_ranges_[index] = result;
648
648
  }
649
649
  return result;
@@ -651,12 +651,12 @@ LiveRange* LAllocator::FixedLiveRangeFor(int index) {
651
651
 
652
652
 
653
653
  LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
654
- ASSERT(index < DoubleRegister::kNumAllocatableRegisters);
654
+ ASSERT(index < DoubleRegister::NumAllocatableRegisters());
655
655
  LiveRange* result = fixed_double_live_ranges_[index];
656
656
  if (result == NULL) {
657
657
  result = new(zone_) LiveRange(FixedDoubleLiveRangeID(index), zone_);
658
658
  ASSERT(result->IsFixed());
659
- result->set_assigned_register(index, DOUBLE_REGISTERS, zone_);
659
+ SetLiveRangeAssignedRegister(result, index, DOUBLE_REGISTERS, zone_);
660
660
  fixed_double_live_ranges_[index] = result;
661
661
  }
662
662
  return result;
@@ -665,7 +665,7 @@ LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
665
665
 
666
666
  LiveRange* LAllocator::LiveRangeFor(int index) {
667
667
  if (index >= live_ranges_.length()) {
668
- live_ranges_.AddBlock(NULL, index - live_ranges_.length() + 1);
668
+ live_ranges_.AddBlock(NULL, index - live_ranges_.length() + 1, zone());
669
669
  }
670
670
  LiveRange* result = live_ranges_[index];
671
671
  if (result == NULL) {
@@ -746,7 +746,7 @@ void LAllocator::AddConstraintsGapMove(int index,
746
746
  LOperand* from,
747
747
  LOperand* to) {
748
748
  LGap* gap = GapAt(index);
749
- LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START);
749
+ LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START, zone());
750
750
  if (from->IsUnallocated()) {
751
751
  const ZoneList<LMoveOperands>* move_operands = move->move_operands();
752
752
  for (int i = 0; i < move_operands->length(); ++i) {
@@ -755,19 +755,20 @@ void LAllocator::AddConstraintsGapMove(int index,
755
755
  if (cur_to->IsUnallocated()) {
756
756
  if (LUnallocated::cast(cur_to)->virtual_register() ==
757
757
  LUnallocated::cast(from)->virtual_register()) {
758
- move->AddMove(cur.source(), to);
758
+ move->AddMove(cur.source(), to, zone());
759
759
  return;
760
760
  }
761
761
  }
762
762
  }
763
763
  }
764
- move->AddMove(from, to);
764
+ move->AddMove(from, to, zone());
765
765
  }
766
766
 
767
767
 
768
768
  void LAllocator::MeetRegisterConstraints(HBasicBlock* block) {
769
769
  int start = block->first_instruction_index();
770
770
  int end = block->last_instruction_index();
771
+ if (start == -1) return;
771
772
  for (int i = start; i <= end; ++i) {
772
773
  if (IsGapAt(i)) {
773
774
  LInstruction* instr = NULL;
@@ -800,7 +801,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
800
801
  LiveRange* range = LiveRangeFor(first_output->virtual_register());
801
802
  bool assigned = false;
802
803
  if (first_output->HasFixedPolicy()) {
803
- LUnallocated* output_copy = first_output->CopyUnconstrained();
804
+ LUnallocated* output_copy = first_output->CopyUnconstrained(zone());
804
805
  bool is_tagged = HasTaggedValue(first_output->virtual_register());
805
806
  AllocateFixed(first_output, gap_index, is_tagged);
806
807
 
@@ -821,8 +822,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
821
822
  // Thus it should be inserted to a lifetime position corresponding to
822
823
  // the instruction end.
823
824
  LGap* gap = GapAt(gap_index);
824
- LParallelMove* move = gap->GetOrCreateParallelMove(LGap::BEFORE);
825
- move->AddMove(first_output, range->GetSpillOperand());
825
+ LParallelMove* move = gap->GetOrCreateParallelMove(LGap::BEFORE, zone());
826
+ move->AddMove(first_output, range->GetSpillOperand(), zone());
826
827
  }
827
828
  }
828
829
 
@@ -831,7 +832,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
831
832
  for (UseIterator it(second); !it.Done(); it.Advance()) {
832
833
  LUnallocated* cur_input = LUnallocated::cast(it.Current());
833
834
  if (cur_input->HasFixedPolicy()) {
834
- LUnallocated* input_copy = cur_input->CopyUnconstrained();
835
+ LUnallocated* input_copy = cur_input->CopyUnconstrained(zone());
835
836
  bool is_tagged = HasTaggedValue(cur_input->virtual_register());
836
837
  AllocateFixed(cur_input, gap_index + 1, is_tagged);
837
838
  AddConstraintsGapMove(gap_index, input_copy, cur_input);
@@ -840,7 +841,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
840
841
  // of the instruction.
841
842
  ASSERT(!cur_input->IsUsedAtStart());
842
843
 
843
- LUnallocated* input_copy = cur_input->CopyUnconstrained();
844
+ LUnallocated* input_copy = cur_input->CopyUnconstrained(zone());
844
845
  cur_input->set_virtual_register(GetVirtualRegister());
845
846
  if (!AllocationOk()) return;
846
847
 
@@ -864,7 +865,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
864
865
  int output_vreg = second_output->virtual_register();
865
866
  int input_vreg = cur_input->virtual_register();
866
867
 
867
- LUnallocated* input_copy = cur_input->CopyUnconstrained();
868
+ LUnallocated* input_copy = cur_input->CopyUnconstrained(zone());
868
869
  cur_input->set_virtual_register(second_output->virtual_register());
869
870
  AddConstraintsGapMove(gap_index, input_copy, cur_input);
870
871
 
@@ -872,7 +873,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
872
873
  int index = gap_index + 1;
873
874
  LInstruction* instr = InstructionAt(index);
874
875
  if (instr->HasPointerMap()) {
875
- instr->pointer_map()->RecordPointer(input_copy);
876
+ instr->pointer_map()->RecordPointer(input_copy, zone());
876
877
  }
877
878
  } else if (!HasTaggedValue(input_vreg) && HasTaggedValue(output_vreg)) {
878
879
  // The input is assumed to immediately have a tagged representation,
@@ -901,7 +902,7 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
901
902
  if (IsGapAt(index)) {
902
903
  // We have a gap at this position.
903
904
  LGap* gap = GapAt(index);
904
- LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START);
905
+ LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START, zone());
905
906
  const ZoneList<LMoveOperands>* move_operands = move->move_operands();
906
907
  for (int i = 0; i < move_operands->length(); ++i) {
907
908
  LMoveOperands* cur = &move_operands->at(i);
@@ -946,8 +947,8 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
946
947
  Define(curr_position, output, NULL);
947
948
  }
948
949
 
949
- if (instr->IsMarkedAsCall()) {
950
- for (int i = 0; i < Register::kNumAllocatableRegisters; ++i) {
950
+ if (instr->ClobbersRegisters()) {
951
+ for (int i = 0; i < Register::kMaxNumAllocatableRegisters; ++i) {
951
952
  if (output == NULL || !output->IsRegister() ||
952
953
  output->index() != i) {
953
954
  LiveRange* range = FixedLiveRangeFor(i);
@@ -958,8 +959,8 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
958
959
  }
959
960
  }
960
961
 
961
- if (instr->IsMarkedAsCall()) {
962
- for (int i = 0; i < DoubleRegister::kNumAllocatableRegisters; ++i) {
962
+ if (instr->ClobbersDoubleRegisters()) {
963
+ for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) {
963
964
  if (output == NULL || !output->IsDoubleRegister() ||
964
965
  output->index() != i) {
965
966
  LiveRange* range = FixedDoubleLiveRangeFor(i);
@@ -989,7 +990,7 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
989
990
 
990
991
  for (TempIterator it(instr); !it.Done(); it.Advance()) {
991
992
  LOperand* temp = it.Current();
992
- if (instr->IsMarkedAsCall()) {
993
+ if (instr->ClobbersTemps()) {
993
994
  if (temp->IsRegister()) continue;
994
995
  if (temp->IsUnallocated()) {
995
996
  LUnallocated* temp_unalloc = LUnallocated::cast(temp);
@@ -1046,17 +1047,17 @@ void LAllocator::ResolvePhis(HBasicBlock* block) {
1046
1047
  InstructionAt(cur_block->last_instruction_index());
1047
1048
  if (branch->HasPointerMap()) {
1048
1049
  if (phi->representation().IsTagged()) {
1049
- branch->pointer_map()->RecordPointer(phi_operand);
1050
+ branch->pointer_map()->RecordPointer(phi_operand, zone());
1050
1051
  } else if (!phi->representation().IsDouble()) {
1051
- branch->pointer_map()->RecordUntagged(phi_operand);
1052
+ branch->pointer_map()->RecordUntagged(phi_operand, zone());
1052
1053
  }
1053
1054
  }
1054
1055
  }
1055
1056
 
1056
1057
  LiveRange* live_range = LiveRangeFor(phi->id());
1057
1058
  LLabel* label = chunk_->GetLabel(phi->block()->block_id());
1058
- label->GetOrCreateParallelMove(LGap::START)->
1059
- AddMove(phi_operand, live_range->GetSpillOperand());
1059
+ label->GetOrCreateParallelMove(LGap::START, zone())->
1060
+ AddMove(phi_operand, live_range->GetSpillOperand(), zone());
1060
1061
  live_range->SetSpillStartIndex(phi->block()->first_instruction_index());
1061
1062
  }
1062
1063
  }
@@ -1064,7 +1065,14 @@ void LAllocator::ResolvePhis(HBasicBlock* block) {
1064
1065
 
1065
1066
  bool LAllocator::Allocate(LChunk* chunk) {
1066
1067
  ASSERT(chunk_ == NULL);
1067
- chunk_ = chunk;
1068
+ chunk_ = static_cast<LPlatformChunk*>(chunk);
1069
+ assigned_registers_ =
1070
+ new(zone()) BitVector(Register::NumAllocatableRegisters(), zone());
1071
+ assigned_registers_->Clear();
1072
+ assigned_double_registers_ =
1073
+ new(zone()) BitVector(DoubleRegister::NumAllocatableRegisters(),
1074
+ zone());
1075
+ assigned_double_registers_->Clear();
1068
1076
  MeetRegisterConstraints();
1069
1077
  if (!AllocationOk()) return false;
1070
1078
  ResolvePhis();
@@ -1151,14 +1159,15 @@ void LAllocator::ResolveControlFlow(LiveRange* range,
1151
1159
  LInstruction* branch = InstructionAt(pred->last_instruction_index());
1152
1160
  if (branch->HasPointerMap()) {
1153
1161
  if (HasTaggedValue(range->id())) {
1154
- branch->pointer_map()->RecordPointer(cur_op);
1162
+ branch->pointer_map()->RecordPointer(cur_op, zone());
1155
1163
  } else if (!cur_op->IsDoubleStackSlot() &&
1156
1164
  !cur_op->IsDoubleRegister()) {
1157
1165
  branch->pointer_map()->RemovePointer(cur_op);
1158
1166
  }
1159
1167
  }
1160
1168
  }
1161
- gap->GetOrCreateParallelMove(LGap::START)->AddMove(pred_op, cur_op);
1169
+ gap->GetOrCreateParallelMove(
1170
+ LGap::START, zone())->AddMove(pred_op, cur_op, zone());
1162
1171
  }
1163
1172
  }
1164
1173
  }
@@ -1169,11 +1178,11 @@ LParallelMove* LAllocator::GetConnectingParallelMove(LifetimePosition pos) {
1169
1178
  if (IsGapAt(index)) {
1170
1179
  LGap* gap = GapAt(index);
1171
1180
  return gap->GetOrCreateParallelMove(
1172
- pos.IsInstructionStart() ? LGap::START : LGap::END);
1181
+ pos.IsInstructionStart() ? LGap::START : LGap::END, zone());
1173
1182
  }
1174
1183
  int gap_pos = pos.IsInstructionStart() ? (index - 1) : (index + 1);
1175
1184
  return GapAt(gap_pos)->GetOrCreateParallelMove(
1176
- (gap_pos < index) ? LGap::AFTER : LGap::BEFORE);
1185
+ (gap_pos < index) ? LGap::AFTER : LGap::BEFORE, zone());
1177
1186
  }
1178
1187
 
1179
1188
 
@@ -1205,7 +1214,7 @@ void LAllocator::ConnectRanges() {
1205
1214
  LParallelMove* move = GetConnectingParallelMove(pos);
1206
1215
  LOperand* prev_operand = first_range->CreateAssignedOperand(zone_);
1207
1216
  LOperand* cur_operand = second_range->CreateAssignedOperand(zone_);
1208
- move->AddMove(prev_operand, cur_operand);
1217
+ move->AddMove(prev_operand, cur_operand, zone());
1209
1218
  }
1210
1219
  }
1211
1220
  }
@@ -1270,7 +1279,7 @@ void LAllocator::BuildLiveRanges() {
1270
1279
  LOperand* hint = NULL;
1271
1280
  LOperand* phi_operand = NULL;
1272
1281
  LGap* gap = GetLastGap(phi->block()->predecessors()->at(0));
1273
- LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START);
1282
+ LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START, zone());
1274
1283
  for (int j = 0; j < move->move_operands()->length(); ++j) {
1275
1284
  LOperand* to = move->move_operands()->at(j).destination();
1276
1285
  if (to->IsUnallocated() &&
@@ -1323,8 +1332,14 @@ void LAllocator::BuildLiveRanges() {
1323
1332
  while (!iterator.Done()) {
1324
1333
  found = true;
1325
1334
  int operand_index = iterator.Current();
1326
- PrintF("Function: %s\n",
1327
- *chunk_->info()->function()->debug_name()->ToCString());
1335
+ if (chunk_->info()->IsStub()) {
1336
+ CodeStub::Major major_key = chunk_->info()->code_stub()->MajorKey();
1337
+ PrintF("Function: %s\n", CodeStub::MajorName(major_key, false));
1338
+ } else {
1339
+ ASSERT(chunk_->info()->IsOptimizing());
1340
+ PrintF("Function: %s\n",
1341
+ *chunk_->info()->function()->debug_name()->ToCString());
1342
+ }
1328
1343
  PrintF("Value %d used before first definition!\n", operand_index);
1329
1344
  LiveRange* range = LiveRangeFor(operand_index);
1330
1345
  PrintF("First use is at %d\n", range->first_pos()->pos().Value());
@@ -1410,7 +1425,7 @@ void LAllocator::PopulatePointerMaps() {
1410
1425
  LifetimePosition safe_point_pos =
1411
1426
  LifetimePosition::FromInstructionIndex(safe_point);
1412
1427
  LiveRange* cur = range;
1413
- while (cur != NULL && !cur->Covers(safe_point_pos.PrevInstruction())) {
1428
+ while (cur != NULL && !cur->Covers(safe_point_pos)) {
1414
1429
  cur = cur->next();
1415
1430
  }
1416
1431
  if (cur == NULL) continue;
@@ -1421,7 +1436,7 @@ void LAllocator::PopulatePointerMaps() {
1421
1436
  safe_point >= range->spill_start_index()) {
1422
1437
  TraceAlloc("Pointer for range %d (spilled at %d) at safe point %d\n",
1423
1438
  range->id(), range->spill_start_index(), safe_point);
1424
- map->RecordPointer(range->GetSpillOperand());
1439
+ map->RecordPointer(range->GetSpillOperand(), zone());
1425
1440
  }
1426
1441
 
1427
1442
  if (!cur->IsSpilled()) {
@@ -1430,7 +1445,7 @@ void LAllocator::PopulatePointerMaps() {
1430
1445
  cur->id(), cur->Start().Value(), safe_point);
1431
1446
  LOperand* operand = cur->CreateAssignedOperand(zone_);
1432
1447
  ASSERT(!operand->IsStackSlot());
1433
- map->RecordPointer(operand);
1448
+ map->RecordPointer(operand, zone());
1434
1449
  }
1435
1450
  }
1436
1451
  }
@@ -1470,14 +1485,14 @@ void LAllocator::ProcessOsrEntry() {
1470
1485
 
1471
1486
  void LAllocator::AllocateGeneralRegisters() {
1472
1487
  HPhase phase("L_Allocate general registers", this);
1473
- num_registers_ = Register::kNumAllocatableRegisters;
1488
+ num_registers_ = Register::NumAllocatableRegisters();
1474
1489
  AllocateRegisters();
1475
1490
  }
1476
1491
 
1477
1492
 
1478
1493
  void LAllocator::AllocateDoubleRegisters() {
1479
1494
  HPhase phase("L_Allocate double registers", this);
1480
- num_registers_ = DoubleRegister::kNumAllocatableRegisters;
1495
+ num_registers_ = DoubleRegister::NumAllocatableRegisters();
1481
1496
  mode_ = DOUBLE_REGISTERS;
1482
1497
  AllocateRegisters();
1483
1498
  }
@@ -1501,7 +1516,7 @@ void LAllocator::AllocateRegisters() {
1501
1516
  ASSERT(inactive_live_ranges_.is_empty());
1502
1517
 
1503
1518
  if (mode_ == DOUBLE_REGISTERS) {
1504
- for (int i = 0; i < fixed_double_live_ranges_.length(); ++i) {
1519
+ for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) {
1505
1520
  LiveRange* current = fixed_double_live_ranges_.at(i);
1506
1521
  if (current != NULL) {
1507
1522
  AddToInactive(current);
@@ -1632,13 +1647,13 @@ RegisterKind LAllocator::RequiredRegisterKind(int virtual_register) const {
1632
1647
 
1633
1648
  void LAllocator::AddToActive(LiveRange* range) {
1634
1649
  TraceAlloc("Add live range %d to active\n", range->id());
1635
- active_live_ranges_.Add(range);
1650
+ active_live_ranges_.Add(range, zone());
1636
1651
  }
1637
1652
 
1638
1653
 
1639
1654
  void LAllocator::AddToInactive(LiveRange* range) {
1640
1655
  TraceAlloc("Add live range %d to inactive\n", range->id());
1641
- inactive_live_ranges_.Add(range);
1656
+ inactive_live_ranges_.Add(range, zone());
1642
1657
  }
1643
1658
 
1644
1659
 
@@ -1649,13 +1664,13 @@ void LAllocator::AddToUnhandledSorted(LiveRange* range) {
1649
1664
  LiveRange* cur_range = unhandled_live_ranges_.at(i);
1650
1665
  if (range->ShouldBeAllocatedBefore(cur_range)) {
1651
1666
  TraceAlloc("Add live range %d to unhandled at %d\n", range->id(), i + 1);
1652
- unhandled_live_ranges_.InsertAt(i + 1, range);
1667
+ unhandled_live_ranges_.InsertAt(i + 1, range, zone());
1653
1668
  ASSERT(UnhandledIsSorted());
1654
1669
  return;
1655
1670
  }
1656
1671
  }
1657
1672
  TraceAlloc("Add live range %d to unhandled at start\n", range->id());
1658
- unhandled_live_ranges_.InsertAt(0, range);
1673
+ unhandled_live_ranges_.InsertAt(0, range, zone());
1659
1674
  ASSERT(UnhandledIsSorted());
1660
1675
  }
1661
1676
 
@@ -1664,7 +1679,7 @@ void LAllocator::AddToUnhandledUnsorted(LiveRange* range) {
1664
1679
  if (range == NULL || range->IsEmpty()) return;
1665
1680
  ASSERT(!range->HasRegisterAssigned() && !range->IsSpilled());
1666
1681
  TraceAlloc("Add live range %d to unhandled unsorted at end\n", range->id());
1667
- unhandled_live_ranges_.Add(range);
1682
+ unhandled_live_ranges_.Add(range, zone());
1668
1683
  }
1669
1684
 
1670
1685
 
@@ -1705,7 +1720,7 @@ void LAllocator::FreeSpillSlot(LiveRange* range) {
1705
1720
 
1706
1721
  int index = range->TopLevel()->GetSpillOperand()->index();
1707
1722
  if (index >= 0) {
1708
- reusable_slots_.Add(range);
1723
+ reusable_slots_.Add(range, zone());
1709
1724
  }
1710
1725
  }
1711
1726
 
@@ -1733,7 +1748,7 @@ void LAllocator::ActiveToHandled(LiveRange* range) {
1733
1748
  void LAllocator::ActiveToInactive(LiveRange* range) {
1734
1749
  ASSERT(active_live_ranges_.Contains(range));
1735
1750
  active_live_ranges_.RemoveElement(range);
1736
- inactive_live_ranges_.Add(range);
1751
+ inactive_live_ranges_.Add(range, zone());
1737
1752
  TraceAlloc("Moving live range %d from active to inactive\n", range->id());
1738
1753
  }
1739
1754
 
@@ -1749,21 +1764,21 @@ void LAllocator::InactiveToHandled(LiveRange* range) {
1749
1764
  void LAllocator::InactiveToActive(LiveRange* range) {
1750
1765
  ASSERT(inactive_live_ranges_.Contains(range));
1751
1766
  inactive_live_ranges_.RemoveElement(range);
1752
- active_live_ranges_.Add(range);
1767
+ active_live_ranges_.Add(range, zone());
1753
1768
  TraceAlloc("Moving live range %d from inactive to active\n", range->id());
1754
1769
  }
1755
1770
 
1756
1771
 
1757
1772
  // TryAllocateFreeReg and AllocateBlockedReg assume this
1758
1773
  // when allocating local arrays.
1759
- STATIC_ASSERT(DoubleRegister::kNumAllocatableRegisters >=
1760
- Register::kNumAllocatableRegisters);
1774
+ STATIC_ASSERT(DoubleRegister::kMaxNumAllocatableRegisters >=
1775
+ Register::kMaxNumAllocatableRegisters);
1761
1776
 
1762
1777
 
1763
1778
  bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
1764
- LifetimePosition free_until_pos[DoubleRegister::kNumAllocatableRegisters];
1779
+ LifetimePosition free_until_pos[DoubleRegister::kMaxNumAllocatableRegisters];
1765
1780
 
1766
- for (int i = 0; i < DoubleRegister::kNumAllocatableRegisters; i++) {
1781
+ for (int i = 0; i < DoubleRegister::kMaxNumAllocatableRegisters; i++) {
1767
1782
  free_until_pos[i] = LifetimePosition::MaxPosition();
1768
1783
  }
1769
1784
 
@@ -1800,7 +1815,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
1800
1815
  TraceAlloc("Assigning preferred reg %s to live range %d\n",
1801
1816
  RegisterName(register_index),
1802
1817
  current->id());
1803
- current->set_assigned_register(register_index, mode_, zone_);
1818
+ SetLiveRangeAssignedRegister(current, register_index, mode_, zone_);
1804
1819
  return true;
1805
1820
  }
1806
1821
  }
@@ -1836,7 +1851,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
1836
1851
  TraceAlloc("Assigning free reg %s to live range %d\n",
1837
1852
  RegisterName(reg),
1838
1853
  current->id());
1839
- current->set_assigned_register(reg, mode_, zone_);
1854
+ SetLiveRangeAssignedRegister(current, reg, mode_, zone_);
1840
1855
 
1841
1856
  return true;
1842
1857
  }
@@ -1852,10 +1867,10 @@ void LAllocator::AllocateBlockedReg(LiveRange* current) {
1852
1867
  }
1853
1868
 
1854
1869
 
1855
- LifetimePosition use_pos[DoubleRegister::kNumAllocatableRegisters];
1856
- LifetimePosition block_pos[DoubleRegister::kNumAllocatableRegisters];
1870
+ LifetimePosition use_pos[DoubleRegister::kMaxNumAllocatableRegisters];
1871
+ LifetimePosition block_pos[DoubleRegister::kMaxNumAllocatableRegisters];
1857
1872
 
1858
- for (int i = 0; i < DoubleRegister::kNumAllocatableRegisters; i++) {
1873
+ for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); i++) {
1859
1874
  use_pos[i] = block_pos[i] = LifetimePosition::MaxPosition();
1860
1875
  }
1861
1876
 
@@ -1926,7 +1941,7 @@ void LAllocator::AllocateBlockedReg(LiveRange* current) {
1926
1941
  TraceAlloc("Assigning blocked reg %s to live range %d\n",
1927
1942
  RegisterName(reg),
1928
1943
  current->id());
1929
- current->set_assigned_register(reg, mode_, zone_);
1944
+ SetLiveRangeAssignedRegister(current, reg, mode_, zone_);
1930
1945
 
1931
1946
  // This register was not free. Thus we need to find and spill
1932
1947
  // parts of active and inactive live regions that use the same register