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
@@ -43,6 +43,7 @@ class LCodeGen;
43
43
  #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
44
44
  V(AccessArgumentsAt) \
45
45
  V(AddI) \
46
+ V(Allocate) \
46
47
  V(AllocateObject) \
47
48
  V(ApplyArguments) \
48
49
  V(ArgumentsElements) \
@@ -87,6 +88,7 @@ class LCodeGen;
87
88
  V(Deoptimize) \
88
89
  V(DivI) \
89
90
  V(DoubleToI) \
91
+ V(DummyUse) \
90
92
  V(ElementsKind) \
91
93
  V(FastLiteral) \
92
94
  V(FixedArrayBaseLength) \
@@ -102,6 +104,7 @@ class LCodeGen;
102
104
  V(InstanceOfKnownGlobal) \
103
105
  V(InstructionGap) \
104
106
  V(Integer32ToDouble) \
107
+ V(Uint32ToDouble) \
105
108
  V(InvokeFunction) \
106
109
  V(IsConstructCallAndBranch) \
107
110
  V(IsNilAndBranch) \
@@ -109,7 +112,6 @@ class LCodeGen;
109
112
  V(IsStringAndBranch) \
110
113
  V(IsSmiAndBranch) \
111
114
  V(IsUndetectableAndBranch) \
112
- V(StringCompareAndBranch) \
113
115
  V(JSArrayLength) \
114
116
  V(Label) \
115
117
  V(LazyBailout) \
@@ -119,18 +121,21 @@ class LCodeGen;
119
121
  V(LoadFunctionPrototype) \
120
122
  V(LoadGlobalCell) \
121
123
  V(LoadGlobalGeneric) \
122
- V(LoadKeyedFastElement) \
123
- V(LoadKeyedFastDoubleElement) \
124
+ V(LoadKeyed) \
124
125
  V(LoadKeyedGeneric) \
125
- V(LoadKeyedSpecializedArrayElement) \
126
126
  V(LoadNamedField) \
127
127
  V(LoadNamedFieldPolymorphic) \
128
128
  V(LoadNamedGeneric) \
129
+ V(MapEnumLength) \
130
+ V(MathExp) \
131
+ V(MathFloorOfDiv) \
132
+ V(MathMinMax) \
129
133
  V(MathPowHalf) \
130
134
  V(ModI) \
131
135
  V(MulI) \
132
136
  V(NumberTagD) \
133
137
  V(NumberTagI) \
138
+ V(NumberTagU) \
134
139
  V(NumberUntagD) \
135
140
  V(ObjectLiteral) \
136
141
  V(OsrEntry) \
@@ -141,6 +146,7 @@ class LCodeGen;
141
146
  V(PushArgument) \
142
147
  V(RegExpLiteral) \
143
148
  V(Return) \
149
+ V(SeqStringSetChar) \
144
150
  V(ShiftI) \
145
151
  V(SmiTag) \
146
152
  V(SmiUntag) \
@@ -148,15 +154,14 @@ class LCodeGen;
148
154
  V(StoreContextSlot) \
149
155
  V(StoreGlobalCell) \
150
156
  V(StoreGlobalGeneric) \
151
- V(StoreKeyedFastDoubleElement) \
152
- V(StoreKeyedFastElement) \
157
+ V(StoreKeyed) \
153
158
  V(StoreKeyedGeneric) \
154
- V(StoreKeyedSpecializedArrayElement) \
155
159
  V(StoreNamedField) \
156
160
  V(StoreNamedGeneric) \
157
161
  V(StringAdd) \
158
162
  V(StringCharCodeAt) \
159
163
  V(StringCharFromCode) \
164
+ V(StringCompareAndBranch) \
160
165
  V(StringLength) \
161
166
  V(SubI) \
162
167
  V(TaggedToI) \
@@ -164,6 +169,7 @@ class LCodeGen;
164
169
  V(Throw) \
165
170
  V(ToFastProperties) \
166
171
  V(TransitionElementsKind) \
172
+ V(TrapAllocationMemento) \
167
173
  V(Typeof) \
168
174
  V(TypeofIsAndBranch) \
169
175
  V(UnaryMathOperation) \
@@ -247,16 +253,15 @@ class LInstruction: public ZoneObject {
247
253
  void MarkAsCall() { is_call_ = true; }
248
254
 
249
255
  // Interface to the register allocator and iterators.
250
- bool IsMarkedAsCall() const { return is_call_; }
256
+ bool ClobbersTemps() const { return is_call_; }
257
+ bool ClobbersRegisters() const { return is_call_; }
258
+ virtual bool ClobbersDoubleRegisters() const {
259
+ return is_call_ || !CpuFeatures::IsSupported(SSE2);
260
+ }
251
261
 
252
262
  virtual bool HasResult() const = 0;
253
263
  virtual LOperand* result() = 0;
254
264
 
255
- virtual int InputCount() = 0;
256
- virtual LOperand* InputAt(int i) = 0;
257
- virtual int TempCount() = 0;
258
- virtual LOperand* TempAt(int i) = 0;
259
-
260
265
  LOperand* FirstInput() { return InputAt(0); }
261
266
  LOperand* Output() { return HasResult() ? result() : NULL; }
262
267
 
@@ -265,6 +270,15 @@ class LInstruction: public ZoneObject {
265
270
  #endif
266
271
 
267
272
  private:
273
+ // Iterator support.
274
+ friend class InputIterator;
275
+ virtual int InputCount() = 0;
276
+ virtual LOperand* InputAt(int i) = 0;
277
+
278
+ friend class TempIterator;
279
+ virtual int TempCount() = 0;
280
+ virtual LOperand* TempAt(int i) = 0;
281
+
268
282
  LEnvironment* environment_;
269
283
  SetOncePointer<LPointerMap> pointer_map_;
270
284
  HValue* hydrogen_value_;
@@ -284,16 +298,18 @@ class LTemplateInstruction: public LInstruction {
284
298
  void set_result(LOperand* operand) { results_[0] = operand; }
285
299
  LOperand* result() { return results_[0]; }
286
300
 
287
- int InputCount() { return I; }
288
- LOperand* InputAt(int i) { return inputs_[i]; }
289
-
290
- int TempCount() { return T; }
291
- LOperand* TempAt(int i) { return temps_[i]; }
292
-
293
301
  protected:
294
302
  EmbeddedContainer<LOperand*, R> results_;
295
303
  EmbeddedContainer<LOperand*, I> inputs_;
296
304
  EmbeddedContainer<LOperand*, T> temps_;
305
+
306
+ private:
307
+ // Iterator support.
308
+ virtual int InputCount() { return I; }
309
+ virtual LOperand* InputAt(int i) { return inputs_[i]; }
310
+
311
+ virtual int TempCount() { return T; }
312
+ virtual LOperand* TempAt(int i) { return temps_[i]; }
297
313
  };
298
314
 
299
315
 
@@ -327,8 +343,10 @@ class LGap: public LTemplateInstruction<0, 0, 0> {
327
343
  LAST_INNER_POSITION = AFTER
328
344
  };
329
345
 
330
- LParallelMove* GetOrCreateParallelMove(InnerPosition pos) {
331
- if (parallel_moves_[pos] == NULL) parallel_moves_[pos] = new LParallelMove;
346
+ LParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) {
347
+ if (parallel_moves_[pos] == NULL) {
348
+ parallel_moves_[pos] = new(zone) LParallelMove(zone);
349
+ }
332
350
  return parallel_moves_[pos];
333
351
  }
334
352
 
@@ -345,6 +363,7 @@ class LGap: public LTemplateInstruction<0, 0, 0> {
345
363
  class LInstructionGap: public LGap {
346
364
  public:
347
365
  explicit LInstructionGap(HBasicBlock* block) : LGap(block) { }
366
+ virtual bool ClobbersDoubleRegisters() const { return false; }
348
367
 
349
368
  DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap")
350
369
  };
@@ -371,6 +390,15 @@ class LLazyBailout: public LTemplateInstruction<0, 0, 0> {
371
390
  };
372
391
 
373
392
 
393
+ class LDummyUse: public LTemplateInstruction<1, 1, 0> {
394
+ public:
395
+ explicit LDummyUse(LOperand* value) {
396
+ inputs_[0] = value;
397
+ }
398
+ DECLARE_CONCRETE_INSTRUCTION(DummyUse, "dummy-use")
399
+ };
400
+
401
+
374
402
  class LDeoptimize: public LTemplateInstruction<0, 0, 0> {
375
403
  public:
376
404
  DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
@@ -411,11 +439,11 @@ class LCallStub: public LTemplateInstruction<1, 1, 0> {
411
439
  inputs_[0] = context;
412
440
  }
413
441
 
442
+ LOperand* context() { return inputs_[0]; }
443
+
414
444
  DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub")
415
445
  DECLARE_HYDROGEN_ACCESSOR(CallStub)
416
446
 
417
- LOperand* context() { return inputs_[0]; }
418
-
419
447
  TranscendentalCache::Type transcendental_type() {
420
448
  return hydrogen()->transcendental_type();
421
449
  }
@@ -455,10 +483,11 @@ class LWrapReceiver: public LTemplateInstruction<1, 2, 1> {
455
483
  temps_[0] = temp;
456
484
  }
457
485
 
458
- DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver")
459
-
460
486
  LOperand* receiver() { return inputs_[0]; }
461
487
  LOperand* function() { return inputs_[1]; }
488
+ LOperand* temp() { return temps_[0]; }
489
+
490
+ DECLARE_CONCRETE_INSTRUCTION(WrapReceiver, "wrap-receiver")
462
491
  };
463
492
 
464
493
 
@@ -474,12 +503,12 @@ class LApplyArguments: public LTemplateInstruction<1, 4, 0> {
474
503
  inputs_[3] = elements;
475
504
  }
476
505
 
477
- DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments")
478
-
479
506
  LOperand* function() { return inputs_[0]; }
480
507
  LOperand* receiver() { return inputs_[1]; }
481
508
  LOperand* length() { return inputs_[2]; }
482
509
  LOperand* elements() { return inputs_[3]; }
510
+
511
+ DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments")
483
512
  };
484
513
 
485
514
 
@@ -491,12 +520,12 @@ class LAccessArgumentsAt: public LTemplateInstruction<1, 3, 0> {
491
520
  inputs_[2] = index;
492
521
  }
493
522
 
494
- DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at")
495
-
496
523
  LOperand* arguments() { return inputs_[0]; }
497
524
  LOperand* length() { return inputs_[1]; }
498
525
  LOperand* index() { return inputs_[2]; }
499
526
 
527
+ DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at")
528
+
500
529
  virtual void PrintDataTo(StringStream* stream);
501
530
  };
502
531
 
@@ -507,6 +536,8 @@ class LArgumentsLength: public LTemplateInstruction<1, 1, 0> {
507
536
  inputs_[0] = elements;
508
537
  }
509
538
 
539
+ LOperand* elements() { return inputs_[0]; }
540
+
510
541
  DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length")
511
542
  };
512
543
 
@@ -526,6 +557,10 @@ class LModI: public LTemplateInstruction<1, 2, 1> {
526
557
  temps_[0] = temp;
527
558
  }
528
559
 
560
+ LOperand* left() { return inputs_[0]; }
561
+ LOperand* right() { return inputs_[1]; }
562
+ LOperand* temp() { return temps_[0]; }
563
+
529
564
  DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i")
530
565
  DECLARE_HYDROGEN_ACCESSOR(Mod)
531
566
  };
@@ -539,11 +574,35 @@ class LDivI: public LTemplateInstruction<1, 2, 1> {
539
574
  temps_[0] = temp;
540
575
  }
541
576
 
577
+ LOperand* left() { return inputs_[0]; }
578
+ LOperand* right() { return inputs_[1]; }
579
+
580
+ bool is_flooring() { return hydrogen_value()->IsMathFloorOfDiv(); }
581
+
542
582
  DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i")
543
583
  DECLARE_HYDROGEN_ACCESSOR(Div)
544
584
  };
545
585
 
546
586
 
587
+ class LMathFloorOfDiv: public LTemplateInstruction<1, 2, 1> {
588
+ public:
589
+ LMathFloorOfDiv(LOperand* left,
590
+ LOperand* right,
591
+ LOperand* temp = NULL) {
592
+ inputs_[0] = left;
593
+ inputs_[1] = right;
594
+ temps_[0] = temp;
595
+ }
596
+
597
+ LOperand* left() { return inputs_[0]; }
598
+ LOperand* right() { return inputs_[1]; }
599
+ LOperand* temp() { return temps_[0]; }
600
+
601
+ DECLARE_CONCRETE_INSTRUCTION(MathFloorOfDiv, "math-floor-of-div")
602
+ DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
603
+ };
604
+
605
+
547
606
  class LMulI: public LTemplateInstruction<1, 2, 1> {
548
607
  public:
549
608
  LMulI(LOperand* left, LOperand* right, LOperand* temp) {
@@ -552,6 +611,10 @@ class LMulI: public LTemplateInstruction<1, 2, 1> {
552
611
  temps_[0] = temp;
553
612
  }
554
613
 
614
+ LOperand* left() { return inputs_[0]; }
615
+ LOperand* right() { return inputs_[1]; }
616
+ LOperand* temp() { return temps_[0]; }
617
+
555
618
  DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i")
556
619
  DECLARE_HYDROGEN_ACCESSOR(Mul)
557
620
  };
@@ -564,12 +627,15 @@ class LCmpIDAndBranch: public LControlInstruction<2, 0> {
564
627
  inputs_[1] = right;
565
628
  }
566
629
 
630
+ LOperand* left() { return inputs_[0]; }
631
+ LOperand* right() { return inputs_[1]; }
632
+
567
633
  DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch")
568
634
  DECLARE_HYDROGEN_ACCESSOR(CompareIDAndBranch)
569
635
 
570
636
  Token::Value op() const { return hydrogen()->token(); }
571
637
  bool is_double() const {
572
- return hydrogen()->GetInputRepresentation().IsDouble();
638
+ return hydrogen()->representation().IsDouble();
573
639
  }
574
640
 
575
641
  virtual void PrintDataTo(StringStream* stream);
@@ -594,6 +660,27 @@ class LUnaryMathOperation: public LTemplateInstruction<1, 2, 0> {
594
660
  };
595
661
 
596
662
 
663
+ class LMathExp: public LTemplateInstruction<1, 1, 2> {
664
+ public:
665
+ LMathExp(LOperand* value,
666
+ LOperand* temp1,
667
+ LOperand* temp2) {
668
+ inputs_[0] = value;
669
+ temps_[0] = temp1;
670
+ temps_[1] = temp2;
671
+ ExternalReference::InitializeMathExpData();
672
+ }
673
+
674
+ LOperand* value() { return inputs_[0]; }
675
+ LOperand* temp1() { return temps_[0]; }
676
+ LOperand* temp2() { return temps_[1]; }
677
+
678
+ DECLARE_CONCRETE_INSTRUCTION(MathExp, "math-exp")
679
+
680
+ virtual void PrintDataTo(StringStream* stream);
681
+ };
682
+
683
+
597
684
  class LMathPowHalf: public LTemplateInstruction<1, 2, 1> {
598
685
  public:
599
686
  LMathPowHalf(LOperand* context, LOperand* value, LOperand* temp) {
@@ -619,6 +706,9 @@ class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> {
619
706
  inputs_[1] = right;
620
707
  }
621
708
 
709
+ LOperand* left() { return inputs_[0]; }
710
+ LOperand* right() { return inputs_[1]; }
711
+
622
712
  DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch,
623
713
  "cmp-object-eq-and-branch")
624
714
  };
@@ -630,6 +720,8 @@ class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
630
720
  inputs_[0] = left;
631
721
  }
632
722
 
723
+ LOperand* left() { return inputs_[0]; }
724
+
633
725
  DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch,
634
726
  "cmp-constant-eq-and-branch")
635
727
  DECLARE_HYDROGEN_ACCESSOR(CompareConstantEqAndBranch)
@@ -643,6 +735,9 @@ class LIsNilAndBranch: public LControlInstruction<1, 1> {
643
735
  temps_[0] = temp;
644
736
  }
645
737
 
738
+ LOperand* value() { return inputs_[0]; }
739
+ LOperand* temp() { return temps_[0]; }
740
+
646
741
  DECLARE_CONCRETE_INSTRUCTION(IsNilAndBranch, "is-nil-and-branch")
647
742
  DECLARE_HYDROGEN_ACCESSOR(IsNilAndBranch)
648
743
 
@@ -660,6 +755,9 @@ class LIsObjectAndBranch: public LControlInstruction<1, 1> {
660
755
  temps_[0] = temp;
661
756
  }
662
757
 
758
+ LOperand* value() { return inputs_[0]; }
759
+ LOperand* temp() { return temps_[0]; }
760
+
663
761
  DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
664
762
 
665
763
  virtual void PrintDataTo(StringStream* stream);
@@ -673,6 +771,9 @@ class LIsStringAndBranch: public LControlInstruction<1, 1> {
673
771
  temps_[0] = temp;
674
772
  }
675
773
 
774
+ LOperand* value() { return inputs_[0]; }
775
+ LOperand* temp() { return temps_[0]; }
776
+
676
777
  DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch")
677
778
 
678
779
  virtual void PrintDataTo(StringStream* stream);
@@ -685,6 +786,8 @@ class LIsSmiAndBranch: public LControlInstruction<1, 0> {
685
786
  inputs_[0] = value;
686
787
  }
687
788
 
789
+ LOperand* value() { return inputs_[0]; }
790
+
688
791
  DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
689
792
  DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch)
690
793
 
@@ -699,6 +802,9 @@ class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
699
802
  temps_[0] = temp;
700
803
  }
701
804
 
805
+ LOperand* value() { return inputs_[0]; }
806
+ LOperand* temp() { return temps_[0]; }
807
+
702
808
  DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch,
703
809
  "is-undetectable-and-branch")
704
810
 
@@ -714,6 +820,9 @@ class LStringCompareAndBranch: public LControlInstruction<3, 0> {
714
820
  inputs_[2] = right;
715
821
  }
716
822
 
823
+ LOperand* left() { return inputs_[1]; }
824
+ LOperand* right() { return inputs_[2]; }
825
+
717
826
  DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch,
718
827
  "string-compare-and-branch")
719
828
  DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch)
@@ -731,6 +840,9 @@ class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> {
731
840
  temps_[0] = temp;
732
841
  }
733
842
 
843
+ LOperand* value() { return inputs_[0]; }
844
+ LOperand* temp() { return temps_[0]; }
845
+
734
846
  DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch,
735
847
  "has-instance-type-and-branch")
736
848
  DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch)
@@ -745,6 +857,8 @@ class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
745
857
  inputs_[0] = value;
746
858
  }
747
859
 
860
+ LOperand* value() { return inputs_[0]; }
861
+
748
862
  DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index")
749
863
  DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex)
750
864
  };
@@ -756,8 +870,11 @@ class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
756
870
  inputs_[0] = value;
757
871
  }
758
872
 
873
+ LOperand* value() { return inputs_[0]; }
874
+
759
875
  DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch,
760
876
  "has-cached-array-index-and-branch")
877
+
761
878
  virtual void PrintDataTo(StringStream* stream);
762
879
  };
763
880
 
@@ -768,6 +885,8 @@ class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
768
885
  temps_[0] = temp;
769
886
  }
770
887
 
888
+ LOperand* temp() { return temps_[0]; }
889
+
771
890
  DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch,
772
891
  "is-construct-call-and-branch")
773
892
  };
@@ -781,6 +900,10 @@ class LClassOfTestAndBranch: public LControlInstruction<1, 2> {
781
900
  temps_[1] = temp2;
782
901
  }
783
902
 
903
+ LOperand* value() { return inputs_[0]; }
904
+ LOperand* temp() { return temps_[0]; }
905
+ LOperand* temp2() { return temps_[1]; }
906
+
784
907
  DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
785
908
  "class-of-test-and-branch")
786
909
  DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
@@ -812,9 +935,9 @@ class LInstanceOf: public LTemplateInstruction<1, 3, 0> {
812
935
  inputs_[2] = right;
813
936
  }
814
937
 
815
- DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
816
-
817
938
  LOperand* context() { return inputs_[0]; }
939
+
940
+ DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
818
941
  };
819
942
 
820
943
 
@@ -826,6 +949,9 @@ class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> {
826
949
  temps_[0] = temp;
827
950
  }
828
951
 
952
+ LOperand* value() { return inputs_[1]; }
953
+ LOperand* temp() { return temps_[0]; }
954
+
829
955
  DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
830
956
  "instance-of-known-global")
831
957
  DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal)
@@ -854,6 +980,7 @@ class LBoundsCheck: public LTemplateInstruction<0, 2, 0> {
854
980
  LOperand* length() { return inputs_[1]; }
855
981
 
856
982
  DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check")
983
+ DECLARE_HYDROGEN_ACCESSOR(BoundsCheck)
857
984
  };
858
985
 
859
986
 
@@ -864,10 +991,13 @@ class LBitI: public LTemplateInstruction<1, 2, 0> {
864
991
  inputs_[1] = right;
865
992
  }
866
993
 
867
- Token::Value op() const { return hydrogen()->op(); }
994
+ LOperand* left() { return inputs_[0]; }
995
+ LOperand* right() { return inputs_[1]; }
868
996
 
869
997
  DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i")
870
998
  DECLARE_HYDROGEN_ACCESSOR(Bitwise)
999
+
1000
+ Token::Value op() const { return hydrogen()->op(); }
871
1001
  };
872
1002
 
873
1003
 
@@ -879,12 +1009,14 @@ class LShiftI: public LTemplateInstruction<1, 2, 0> {
879
1009
  inputs_[1] = right;
880
1010
  }
881
1011
 
882
- Token::Value op() const { return op_; }
883
-
884
- bool can_deopt() const { return can_deopt_; }
1012
+ LOperand* left() { return inputs_[0]; }
1013
+ LOperand* right() { return inputs_[1]; }
885
1014
 
886
1015
  DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i")
887
1016
 
1017
+ Token::Value op() const { return op_; }
1018
+ bool can_deopt() const { return can_deopt_; }
1019
+
888
1020
  private:
889
1021
  Token::Value op_;
890
1022
  bool can_deopt_;
@@ -898,6 +1030,9 @@ class LSubI: public LTemplateInstruction<1, 2, 0> {
898
1030
  inputs_[1] = right;
899
1031
  }
900
1032
 
1033
+ LOperand* left() { return inputs_[0]; }
1034
+ LOperand* right() { return inputs_[1]; }
1035
+
901
1036
  DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i")
902
1037
  DECLARE_HYDROGEN_ACCESSOR(Sub)
903
1038
  };
@@ -918,6 +1053,8 @@ class LConstantD: public LTemplateInstruction<1, 0, 1> {
918
1053
  temps_[0] = temp;
919
1054
  }
920
1055
 
1056
+ LOperand* temp() { return temps_[0]; }
1057
+
921
1058
  DECLARE_CONCRETE_INSTRUCTION(ConstantD, "constant-d")
922
1059
  DECLARE_HYDROGEN_ACCESSOR(Constant)
923
1060
 
@@ -936,11 +1073,14 @@ class LConstantT: public LTemplateInstruction<1, 0, 0> {
936
1073
 
937
1074
  class LBranch: public LControlInstruction<1, 1> {
938
1075
  public:
939
- explicit LBranch(LOperand* value, LOperand* temp) {
1076
+ LBranch(LOperand* value, LOperand* temp) {
940
1077
  inputs_[0] = value;
941
1078
  temps_[0] = temp;
942
1079
  }
943
1080
 
1081
+ LOperand* value() { return inputs_[0]; }
1082
+ LOperand* temp() { return temps_[0]; }
1083
+
944
1084
  DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
945
1085
  DECLARE_HYDROGEN_ACCESSOR(Branch)
946
1086
 
@@ -954,6 +1094,8 @@ class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
954
1094
  inputs_[0] = value;
955
1095
  }
956
1096
 
1097
+ LOperand* value() { return inputs_[0]; }
1098
+
957
1099
  DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
958
1100
  DECLARE_HYDROGEN_ACCESSOR(CompareMap)
959
1101
 
@@ -975,6 +1117,8 @@ class LJSArrayLength: public LTemplateInstruction<1, 1, 0> {
975
1117
  inputs_[0] = value;
976
1118
  }
977
1119
 
1120
+ LOperand* value() { return inputs_[0]; }
1121
+
978
1122
  DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length")
979
1123
  DECLARE_HYDROGEN_ACCESSOR(JSArrayLength)
980
1124
  };
@@ -986,18 +1130,34 @@ class LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> {
986
1130
  inputs_[0] = value;
987
1131
  }
988
1132
 
1133
+ LOperand* value() { return inputs_[0]; }
1134
+
989
1135
  DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength,
990
1136
  "fixed-array-base-length")
991
1137
  DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength)
992
1138
  };
993
1139
 
994
1140
 
1141
+ class LMapEnumLength: public LTemplateInstruction<1, 1, 0> {
1142
+ public:
1143
+ explicit LMapEnumLength(LOperand* value) {
1144
+ inputs_[0] = value;
1145
+ }
1146
+
1147
+ LOperand* value() { return inputs_[0]; }
1148
+
1149
+ DECLARE_CONCRETE_INSTRUCTION(MapEnumLength, "map-enum-length")
1150
+ };
1151
+
1152
+
995
1153
  class LElementsKind: public LTemplateInstruction<1, 1, 0> {
996
1154
  public:
997
1155
  explicit LElementsKind(LOperand* value) {
998
1156
  inputs_[0] = value;
999
1157
  }
1000
1158
 
1159
+ LOperand* value() { return inputs_[0]; }
1160
+
1001
1161
  DECLARE_CONCRETE_INSTRUCTION(ElementsKind, "elements-kind")
1002
1162
  DECLARE_HYDROGEN_ACCESSOR(ElementsKind)
1003
1163
  };
@@ -1010,6 +1170,9 @@ class LValueOf: public LTemplateInstruction<1, 1, 1> {
1010
1170
  temps_[0] = temp;
1011
1171
  }
1012
1172
 
1173
+ LOperand* value() { return inputs_[0]; }
1174
+ LOperand* temp() { return temps_[0]; }
1175
+
1013
1176
  DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of")
1014
1177
  DECLARE_HYDROGEN_ACCESSOR(ValueOf)
1015
1178
  };
@@ -1023,6 +1186,9 @@ class LDateField: public LTemplateInstruction<1, 1, 1> {
1023
1186
  temps_[0] = temp;
1024
1187
  }
1025
1188
 
1189
+ LOperand* date() { return inputs_[0]; }
1190
+ LOperand* temp() { return temps_[0]; }
1191
+
1026
1192
  DECLARE_CONCRETE_INSTRUCTION(DateField, "date-field")
1027
1193
  DECLARE_HYDROGEN_ACCESSOR(DateField)
1028
1194
 
@@ -1033,6 +1199,30 @@ class LDateField: public LTemplateInstruction<1, 1, 1> {
1033
1199
  };
1034
1200
 
1035
1201
 
1202
+ class LSeqStringSetChar: public LTemplateInstruction<1, 3, 0> {
1203
+ public:
1204
+ LSeqStringSetChar(String::Encoding encoding,
1205
+ LOperand* string,
1206
+ LOperand* index,
1207
+ LOperand* value) : encoding_(encoding) {
1208
+ inputs_[0] = string;
1209
+ inputs_[1] = index;
1210
+ inputs_[2] = value;
1211
+ }
1212
+
1213
+ String::Encoding encoding() { return encoding_; }
1214
+ LOperand* string() { return inputs_[0]; }
1215
+ LOperand* index() { return inputs_[1]; }
1216
+ LOperand* value() { return inputs_[2]; }
1217
+
1218
+ DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar, "seq-string-set-char")
1219
+ DECLARE_HYDROGEN_ACCESSOR(SeqStringSetChar)
1220
+
1221
+ private:
1222
+ String::Encoding encoding_;
1223
+ };
1224
+
1225
+
1036
1226
  class LThrow: public LTemplateInstruction<0, 2, 0> {
1037
1227
  public:
1038
1228
  LThrow(LOperand* context, LOperand* value) {
@@ -1053,6 +1243,8 @@ class LBitNotI: public LTemplateInstruction<1, 1, 0> {
1053
1243
  inputs_[0] = value;
1054
1244
  }
1055
1245
 
1246
+ LOperand* value() { return inputs_[0]; }
1247
+
1056
1248
  DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i")
1057
1249
  };
1058
1250
 
@@ -1064,11 +1256,29 @@ class LAddI: public LTemplateInstruction<1, 2, 0> {
1064
1256
  inputs_[1] = right;
1065
1257
  }
1066
1258
 
1259
+ LOperand* left() { return inputs_[0]; }
1260
+ LOperand* right() { return inputs_[1]; }
1261
+
1067
1262
  DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i")
1068
1263
  DECLARE_HYDROGEN_ACCESSOR(Add)
1069
1264
  };
1070
1265
 
1071
1266
 
1267
+ class LMathMinMax: public LTemplateInstruction<1, 2, 0> {
1268
+ public:
1269
+ LMathMinMax(LOperand* left, LOperand* right) {
1270
+ inputs_[0] = left;
1271
+ inputs_[1] = right;
1272
+ }
1273
+
1274
+ LOperand* left() { return inputs_[0]; }
1275
+ LOperand* right() { return inputs_[1]; }
1276
+
1277
+ DECLARE_CONCRETE_INSTRUCTION(MathMinMax, "min-max")
1278
+ DECLARE_HYDROGEN_ACCESSOR(MathMinMax)
1279
+ };
1280
+
1281
+
1072
1282
  class LPower: public LTemplateInstruction<1, 2, 0> {
1073
1283
  public:
1074
1284
  LPower(LOperand* left, LOperand* right) {
@@ -1076,6 +1286,9 @@ class LPower: public LTemplateInstruction<1, 2, 0> {
1076
1286
  inputs_[1] = right;
1077
1287
  }
1078
1288
 
1289
+ LOperand* left() { return inputs_[0]; }
1290
+ LOperand* right() { return inputs_[1]; }
1291
+
1079
1292
  DECLARE_CONCRETE_INSTRUCTION(Power, "power")
1080
1293
  DECLARE_HYDROGEN_ACCESSOR(Power)
1081
1294
  };
@@ -1087,6 +1300,8 @@ class LRandom: public LTemplateInstruction<1, 1, 0> {
1087
1300
  inputs_[0] = global_object;
1088
1301
  }
1089
1302
 
1303
+ LOperand* global_object() { return inputs_[0]; }
1304
+
1090
1305
  DECLARE_CONCRETE_INSTRUCTION(Random, "random")
1091
1306
  DECLARE_HYDROGEN_ACCESSOR(Random)
1092
1307
  };
@@ -1100,6 +1315,9 @@ class LArithmeticD: public LTemplateInstruction<1, 2, 0> {
1100
1315
  inputs_[1] = right;
1101
1316
  }
1102
1317
 
1318
+ LOperand* left() { return inputs_[0]; }
1319
+ LOperand* right() { return inputs_[1]; }
1320
+
1103
1321
  Token::Value op() const { return op_; }
1104
1322
 
1105
1323
  virtual Opcode opcode() const { return LInstruction::kArithmeticD; }
@@ -1123,24 +1341,26 @@ class LArithmeticT: public LTemplateInstruction<1, 3, 0> {
1123
1341
  inputs_[2] = right;
1124
1342
  }
1125
1343
 
1344
+ LOperand* context() { return inputs_[0]; }
1345
+ LOperand* left() { return inputs_[1]; }
1346
+ LOperand* right() { return inputs_[2]; }
1347
+
1126
1348
  virtual Opcode opcode() const { return LInstruction::kArithmeticT; }
1127
1349
  virtual void CompileToNative(LCodeGen* generator);
1128
1350
  virtual const char* Mnemonic() const;
1129
1351
 
1130
1352
  Token::Value op() const { return op_; }
1131
- LOperand* context() { return inputs_[0]; }
1132
- LOperand* left() { return inputs_[1]; }
1133
- LOperand* right() { return inputs_[2]; }
1134
1353
 
1135
1354
  private:
1136
1355
  Token::Value op_;
1137
1356
  };
1138
1357
 
1139
1358
 
1140
- class LReturn: public LTemplateInstruction<0, 1, 0> {
1359
+ class LReturn: public LTemplateInstruction<0, 2, 0> {
1141
1360
  public:
1142
- explicit LReturn(LOperand* value) {
1361
+ explicit LReturn(LOperand* value, LOperand* context) {
1143
1362
  inputs_[0] = value;
1363
+ inputs_[1] = context;
1144
1364
  }
1145
1365
 
1146
1366
  DECLARE_CONCRETE_INSTRUCTION(Return, "return")
@@ -1153,10 +1373,10 @@ class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
1153
1373
  inputs_[0] = object;
1154
1374
  }
1155
1375
 
1376
+ LOperand* object() { return inputs_[0]; }
1377
+
1156
1378
  DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field")
1157
1379
  DECLARE_HYDROGEN_ACCESSOR(LoadNamedField)
1158
-
1159
- LOperand* object() { return inputs_[0]; }
1160
1380
  };
1161
1381
 
1162
1382
 
@@ -1167,11 +1387,11 @@ class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 2, 0> {
1167
1387
  inputs_[1] = object;
1168
1388
  }
1169
1389
 
1170
- DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic")
1171
- DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic)
1172
-
1173
1390
  LOperand* context() { return inputs_[0]; }
1174
1391
  LOperand* object() { return inputs_[1]; }
1392
+
1393
+ DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic")
1394
+ DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic)
1175
1395
  };
1176
1396
 
1177
1397
 
@@ -1182,11 +1402,12 @@ class LLoadNamedGeneric: public LTemplateInstruction<1, 2, 0> {
1182
1402
  inputs_[1] = object;
1183
1403
  }
1184
1404
 
1405
+ LOperand* context() { return inputs_[0]; }
1406
+ LOperand* object() { return inputs_[1]; }
1407
+
1185
1408
  DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic")
1186
1409
  DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric)
1187
1410
 
1188
- LOperand* context() { return inputs_[0]; }
1189
- LOperand* object() { return inputs_[1]; }
1190
1411
  Handle<Object> name() const { return hydrogen()->name(); }
1191
1412
  };
1192
1413
 
@@ -1198,10 +1419,11 @@ class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> {
1198
1419
  temps_[0] = temp;
1199
1420
  }
1200
1421
 
1422
+ LOperand* function() { return inputs_[0]; }
1423
+ LOperand* temp() { return temps_[0]; }
1424
+
1201
1425
  DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype")
1202
1426
  DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype)
1203
-
1204
- LOperand* function() { return inputs_[0]; }
1205
1427
  };
1206
1428
 
1207
1429
 
@@ -1211,6 +1433,8 @@ class LLoadElements: public LTemplateInstruction<1, 1, 0> {
1211
1433
  inputs_[0] = object;
1212
1434
  }
1213
1435
 
1436
+ LOperand* object() { return inputs_[0]; }
1437
+
1214
1438
  DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements")
1215
1439
  };
1216
1440
 
@@ -1221,62 +1445,55 @@ class LLoadExternalArrayPointer: public LTemplateInstruction<1, 1, 0> {
1221
1445
  inputs_[0] = object;
1222
1446
  }
1223
1447
 
1448
+ LOperand* object() { return inputs_[0]; }
1449
+
1224
1450
  DECLARE_CONCRETE_INSTRUCTION(LoadExternalArrayPointer,
1225
1451
  "load-external-array-pointer")
1226
1452
  };
1227
1453
 
1228
1454
 
1229
- class LLoadKeyedFastElement: public LTemplateInstruction<1, 2, 0> {
1455
+ class LLoadKeyed: public LTemplateInstruction<1, 2, 0> {
1230
1456
  public:
1231
- LLoadKeyedFastElement(LOperand* elements, LOperand* key) {
1457
+ LLoadKeyed(LOperand* elements, LOperand* key) {
1232
1458
  inputs_[0] = elements;
1233
1459
  inputs_[1] = key;
1234
1460
  }
1235
-
1236
- DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element")
1237
- DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement)
1238
-
1239
1461
  LOperand* elements() { return inputs_[0]; }
1240
1462
  LOperand* key() { return inputs_[1]; }
1241
- uint32_t additional_index() const { return hydrogen()->index_offset(); }
1242
- };
1243
-
1463
+ ElementsKind elements_kind() const {
1464
+ return hydrogen()->elements_kind();
1465
+ }
1466
+ bool is_external() const {
1467
+ return hydrogen()->is_external();
1468
+ }
1244
1469
 
1245
- class LLoadKeyedFastDoubleElement: public LTemplateInstruction<1, 2, 0> {
1246
- public:
1247
- LLoadKeyedFastDoubleElement(LOperand* elements, LOperand* key) {
1248
- inputs_[0] = elements;
1249
- inputs_[1] = key;
1470
+ virtual bool ClobbersDoubleRegisters() const {
1471
+ return !CpuFeatures::IsSupported(SSE2) &&
1472
+ !IsDoubleOrFloatElementsKind(hydrogen()->elements_kind());
1250
1473
  }
1251
1474
 
1252
- DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastDoubleElement,
1253
- "load-keyed-fast-double-element")
1254
- DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastDoubleElement)
1475
+ DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
1476
+ DECLARE_HYDROGEN_ACCESSOR(LoadKeyed)
1255
1477
 
1256
- LOperand* elements() { return inputs_[0]; }
1257
- LOperand* key() { return inputs_[1]; }
1478
+ virtual void PrintDataTo(StringStream* stream);
1258
1479
  uint32_t additional_index() const { return hydrogen()->index_offset(); }
1259
- };
1260
-
1261
-
1262
- class LLoadKeyedSpecializedArrayElement: public LTemplateInstruction<1, 2, 0> {
1263
- public:
1264
- LLoadKeyedSpecializedArrayElement(LOperand* external_pointer, LOperand* key) {
1265
- inputs_[0] = external_pointer;
1266
- inputs_[1] = key;
1480
+ bool key_is_smi() {
1481
+ return hydrogen()->key()->representation().IsTagged();
1267
1482
  }
1483
+ };
1268
1484
 
1269
- DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement,
1270
- "load-keyed-specialized-array-element")
1271
- DECLARE_HYDROGEN_ACCESSOR(LoadKeyedSpecializedArrayElement)
1272
1485
 
1273
- LOperand* external_pointer() { return inputs_[0]; }
1274
- LOperand* key() { return inputs_[1]; }
1275
- ElementsKind elements_kind() const {
1276
- return hydrogen()->elements_kind();
1277
- }
1278
- uint32_t additional_index() const { return hydrogen()->index_offset(); }
1279
- };
1486
+ inline static bool ExternalArrayOpRequiresTemp(
1487
+ Representation key_representation,
1488
+ ElementsKind elements_kind) {
1489
+ // Operations that require the key to be divided by two to be converted into
1490
+ // an index cannot fold the scale operation into a load and need an extra
1491
+ // temp register to do the work.
1492
+ return key_representation.IsTagged() &&
1493
+ (elements_kind == EXTERNAL_BYTE_ELEMENTS ||
1494
+ elements_kind == EXTERNAL_UNSIGNED_BYTE_ELEMENTS ||
1495
+ elements_kind == EXTERNAL_PIXEL_ELEMENTS);
1496
+ }
1280
1497
 
1281
1498
 
1282
1499
  class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> {
@@ -1287,11 +1504,11 @@ class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> {
1287
1504
  inputs_[2] = key;
1288
1505
  }
1289
1506
 
1290
- DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
1291
-
1292
1507
  LOperand* context() { return inputs_[0]; }
1293
1508
  LOperand* object() { return inputs_[1]; }
1294
1509
  LOperand* key() { return inputs_[2]; }
1510
+
1511
+ DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
1295
1512
  };
1296
1513
 
1297
1514
 
@@ -1309,11 +1526,12 @@ class LLoadGlobalGeneric: public LTemplateInstruction<1, 2, 0> {
1309
1526
  inputs_[1] = global_object;
1310
1527
  }
1311
1528
 
1529
+ LOperand* context() { return inputs_[0]; }
1530
+ LOperand* global_object() { return inputs_[1]; }
1531
+
1312
1532
  DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic")
1313
1533
  DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric)
1314
1534
 
1315
- LOperand* context() { return inputs_[0]; }
1316
- LOperand* global_object() { return inputs_[1]; }
1317
1535
  Handle<Object> name() const { return hydrogen()->name(); }
1318
1536
  bool for_typeof() const { return hydrogen()->for_typeof(); }
1319
1537
  };
@@ -1325,10 +1543,10 @@ class LStoreGlobalCell: public LTemplateInstruction<0, 1, 0> {
1325
1543
  inputs_[0] = value;
1326
1544
  }
1327
1545
 
1546
+ LOperand* value() { return inputs_[0]; }
1547
+
1328
1548
  DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell")
1329
1549
  DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell)
1330
-
1331
- LOperand* value() { return inputs_[0]; }
1332
1550
  };
1333
1551
 
1334
1552
 
@@ -1342,13 +1560,14 @@ class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> {
1342
1560
  inputs_[2] = value;
1343
1561
  }
1344
1562
 
1563
+ LOperand* context() { return inputs_[0]; }
1564
+ LOperand* global_object() { return inputs_[1]; }
1565
+ LOperand* value() { return inputs_[2]; }
1566
+
1345
1567
  DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic")
1346
1568
  DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric)
1347
1569
 
1348
- LOperand* context() { return InputAt(0); }
1349
- LOperand* global_object() { return InputAt(1); }
1350
1570
  Handle<Object> name() const { return hydrogen()->name(); }
1351
- LOperand* value() { return InputAt(2); }
1352
1571
  StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
1353
1572
  };
1354
1573
 
@@ -1359,10 +1578,11 @@ class LLoadContextSlot: public LTemplateInstruction<1, 1, 0> {
1359
1578
  inputs_[0] = context;
1360
1579
  }
1361
1580
 
1581
+ LOperand* context() { return inputs_[0]; }
1582
+
1362
1583
  DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot")
1363
1584
  DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot)
1364
1585
 
1365
- LOperand* context() { return InputAt(0); }
1366
1586
  int slot_index() { return hydrogen()->slot_index(); }
1367
1587
 
1368
1588
  virtual void PrintDataTo(StringStream* stream);
@@ -1377,11 +1597,13 @@ class LStoreContextSlot: public LTemplateInstruction<0, 2, 1> {
1377
1597
  temps_[0] = temp;
1378
1598
  }
1379
1599
 
1600
+ LOperand* context() { return inputs_[0]; }
1601
+ LOperand* value() { return inputs_[1]; }
1602
+ LOperand* temp() { return temps_[0]; }
1603
+
1380
1604
  DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot")
1381
1605
  DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot)
1382
1606
 
1383
- LOperand* context() { return InputAt(0); }
1384
- LOperand* value() { return InputAt(1); }
1385
1607
  int slot_index() { return hydrogen()->slot_index(); }
1386
1608
 
1387
1609
  virtual void PrintDataTo(StringStream* stream);
@@ -1394,6 +1616,8 @@ class LPushArgument: public LTemplateInstruction<0, 1, 0> {
1394
1616
  inputs_[0] = value;
1395
1617
  }
1396
1618
 
1619
+ LOperand* value() { return inputs_[0]; }
1620
+
1397
1621
  DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument")
1398
1622
  };
1399
1623
 
@@ -1421,6 +1645,7 @@ class LThisFunction: public LTemplateInstruction<1, 0, 0> {
1421
1645
  class LContext: public LTemplateInstruction<1, 0, 0> {
1422
1646
  public:
1423
1647
  DECLARE_CONCRETE_INSTRUCTION(Context, "context")
1648
+ DECLARE_HYDROGEN_ACCESSOR(Context)
1424
1649
  };
1425
1650
 
1426
1651
 
@@ -1430,9 +1655,9 @@ class LOuterContext: public LTemplateInstruction<1, 1, 0> {
1430
1655
  inputs_[0] = context;
1431
1656
  }
1432
1657
 
1433
- DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context")
1658
+ LOperand* context() { return inputs_[0]; }
1434
1659
 
1435
- LOperand* context() { return InputAt(0); }
1660
+ DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context")
1436
1661
  };
1437
1662
 
1438
1663
 
@@ -1442,6 +1667,8 @@ class LDeclareGlobals: public LTemplateInstruction<0, 1, 0> {
1442
1667
  inputs_[0] = context;
1443
1668
  }
1444
1669
 
1670
+ LOperand* context() { return inputs_[0]; }
1671
+
1445
1672
  DECLARE_CONCRETE_INSTRUCTION(DeclareGlobals, "declare-globals")
1446
1673
  DECLARE_HYDROGEN_ACCESSOR(DeclareGlobals)
1447
1674
  };
@@ -1453,9 +1680,9 @@ class LGlobalObject: public LTemplateInstruction<1, 1, 0> {
1453
1680
  inputs_[0] = context;
1454
1681
  }
1455
1682
 
1456
- DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object")
1683
+ LOperand* context() { return inputs_[0]; }
1457
1684
 
1458
- LOperand* context() { return InputAt(0); }
1685
+ DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object")
1459
1686
  };
1460
1687
 
1461
1688
 
@@ -1465,9 +1692,9 @@ class LGlobalReceiver: public LTemplateInstruction<1, 1, 0> {
1465
1692
  inputs_[0] = global_object;
1466
1693
  }
1467
1694
 
1468
- DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver")
1695
+ LOperand* global() { return inputs_[0]; }
1469
1696
 
1470
- LOperand* global() { return InputAt(0); }
1697
+ DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver")
1471
1698
  };
1472
1699
 
1473
1700
 
@@ -1490,12 +1717,12 @@ class LInvokeFunction: public LTemplateInstruction<1, 2, 0> {
1490
1717
  inputs_[1] = function;
1491
1718
  }
1492
1719
 
1493
- DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
1494
- DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
1495
-
1496
1720
  LOperand* context() { return inputs_[0]; }
1497
1721
  LOperand* function() { return inputs_[1]; }
1498
1722
 
1723
+ DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
1724
+ DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
1725
+
1499
1726
  virtual void PrintDataTo(StringStream* stream);
1500
1727
 
1501
1728
  int arity() const { return hydrogen()->argument_count() - 1; }
@@ -1510,12 +1737,12 @@ class LCallKeyed: public LTemplateInstruction<1, 2, 0> {
1510
1737
  inputs_[1] = key;
1511
1738
  }
1512
1739
 
1513
- DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed")
1514
- DECLARE_HYDROGEN_ACCESSOR(CallKeyed)
1515
-
1516
1740
  LOperand* context() { return inputs_[0]; }
1517
1741
  LOperand* key() { return inputs_[1]; }
1518
1742
 
1743
+ DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed")
1744
+ DECLARE_HYDROGEN_ACCESSOR(CallKeyed)
1745
+
1519
1746
  virtual void PrintDataTo(StringStream* stream);
1520
1747
 
1521
1748
  int arity() const { return hydrogen()->argument_count() - 1; }
@@ -1528,12 +1755,13 @@ class LCallNamed: public LTemplateInstruction<1, 1, 0> {
1528
1755
  inputs_[0] = context;
1529
1756
  }
1530
1757
 
1758
+ LOperand* context() { return inputs_[0]; }
1759
+
1531
1760
  DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named")
1532
1761
  DECLARE_HYDROGEN_ACCESSOR(CallNamed)
1533
1762
 
1534
1763
  virtual void PrintDataTo(StringStream* stream);
1535
1764
 
1536
- LOperand* context() { return inputs_[0]; }
1537
1765
  Handle<String> name() const { return hydrogen()->name(); }
1538
1766
  int arity() const { return hydrogen()->argument_count() - 1; }
1539
1767
  };
@@ -1546,11 +1774,12 @@ class LCallFunction: public LTemplateInstruction<1, 2, 0> {
1546
1774
  inputs_[1] = function;
1547
1775
  }
1548
1776
 
1777
+ LOperand* context() { return inputs_[0]; }
1778
+ LOperand* function() { return inputs_[1]; }
1779
+
1549
1780
  DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function")
1550
1781
  DECLARE_HYDROGEN_ACCESSOR(CallFunction)
1551
1782
 
1552
- LOperand* context() { return inputs_[0]; }
1553
- LOperand* function() { return inputs_[1]; }
1554
1783
  int arity() const { return hydrogen()->argument_count() - 1; }
1555
1784
  };
1556
1785
 
@@ -1561,12 +1790,13 @@ class LCallGlobal: public LTemplateInstruction<1, 1, 0> {
1561
1790
  inputs_[0] = context;
1562
1791
  }
1563
1792
 
1793
+ LOperand* context() { return inputs_[0]; }
1794
+
1564
1795
  DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global")
1565
1796
  DECLARE_HYDROGEN_ACCESSOR(CallGlobal)
1566
1797
 
1567
1798
  virtual void PrintDataTo(StringStream* stream);
1568
1799
 
1569
- LOperand* context() { return inputs_[0]; }
1570
1800
  Handle<String> name() const {return hydrogen()->name(); }
1571
1801
  int arity() const { return hydrogen()->argument_count() - 1; }
1572
1802
  };
@@ -1591,13 +1821,14 @@ class LCallNew: public LTemplateInstruction<1, 2, 0> {
1591
1821
  inputs_[1] = constructor;
1592
1822
  }
1593
1823
 
1824
+ LOperand* context() { return inputs_[0]; }
1825
+ LOperand* constructor() { return inputs_[1]; }
1826
+
1594
1827
  DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
1595
1828
  DECLARE_HYDROGEN_ACCESSOR(CallNew)
1596
1829
 
1597
1830
  virtual void PrintDataTo(StringStream* stream);
1598
1831
 
1599
- LOperand* context() { return inputs_[0]; }
1600
- LOperand* constructor() { return inputs_[1]; }
1601
1832
  int arity() const { return hydrogen()->argument_count() - 1; }
1602
1833
  };
1603
1834
 
@@ -1607,10 +1838,12 @@ class LCallRuntime: public LTemplateInstruction<1, 1, 0> {
1607
1838
  explicit LCallRuntime(LOperand* context) {
1608
1839
  inputs_[0] = context;
1609
1840
  }
1841
+
1842
+ LOperand* context() { return inputs_[0]; }
1843
+
1610
1844
  DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
1611
1845
  DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
1612
1846
 
1613
- LOperand* context() { return inputs_[0]; }
1614
1847
  const Runtime::Function* function() const { return hydrogen()->function(); }
1615
1848
  int arity() const { return hydrogen()->argument_count(); }
1616
1849
  };
@@ -1622,20 +1855,50 @@ class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> {
1622
1855
  inputs_[0] = value;
1623
1856
  }
1624
1857
 
1858
+ LOperand* value() { return inputs_[0]; }
1859
+
1625
1860
  DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double")
1626
1861
  };
1627
1862
 
1628
1863
 
1864
+ class LUint32ToDouble: public LTemplateInstruction<1, 1, 1> {
1865
+ public:
1866
+ explicit LUint32ToDouble(LOperand* value, LOperand* temp) {
1867
+ inputs_[0] = value;
1868
+ temps_[0] = temp;
1869
+ }
1870
+
1871
+ LOperand* value() { return inputs_[0]; }
1872
+ LOperand* temp() { return temps_[0]; }
1873
+
1874
+ DECLARE_CONCRETE_INSTRUCTION(Uint32ToDouble, "uint32-to-double")
1875
+ };
1876
+
1877
+
1629
1878
  class LNumberTagI: public LTemplateInstruction<1, 1, 0> {
1630
1879
  public:
1631
1880
  explicit LNumberTagI(LOperand* value) {
1632
1881
  inputs_[0] = value;
1633
1882
  }
1634
1883
 
1884
+ LOperand* value() { return inputs_[0]; }
1885
+
1635
1886
  DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i")
1636
1887
  };
1637
1888
 
1638
1889
 
1890
+ class LNumberTagU: public LTemplateInstruction<1, 1, 0> {
1891
+ public:
1892
+ explicit LNumberTagU(LOperand* value) {
1893
+ inputs_[0] = value;
1894
+ }
1895
+
1896
+ LOperand* value() { return inputs_[0]; }
1897
+
1898
+ DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u")
1899
+ };
1900
+
1901
+
1639
1902
  class LNumberTagD: public LTemplateInstruction<1, 1, 1> {
1640
1903
  public:
1641
1904
  LNumberTagD(LOperand* value, LOperand* temp) {
@@ -1643,7 +1906,11 @@ class LNumberTagD: public LTemplateInstruction<1, 1, 1> {
1643
1906
  temps_[0] = temp;
1644
1907
  }
1645
1908
 
1909
+ LOperand* value() { return inputs_[0]; }
1910
+ LOperand* temp() { return temps_[0]; }
1911
+
1646
1912
  DECLARE_CONCRETE_INSTRUCTION(NumberTagD, "number-tag-d")
1913
+ DECLARE_HYDROGEN_ACCESSOR(Change)
1647
1914
  };
1648
1915
 
1649
1916
 
@@ -1655,6 +1922,9 @@ class LDoubleToI: public LTemplateInstruction<1, 1, 1> {
1655
1922
  temps_[0] = temp;
1656
1923
  }
1657
1924
 
1925
+ LOperand* value() { return inputs_[0]; }
1926
+ LOperand* temp() { return temps_[0]; }
1927
+
1658
1928
  DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i")
1659
1929
  DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
1660
1930
 
@@ -1670,6 +1940,9 @@ class LTaggedToI: public LTemplateInstruction<1, 1, 1> {
1670
1940
  temps_[0] = temp;
1671
1941
  }
1672
1942
 
1943
+ LOperand* value() { return inputs_[0]; }
1944
+ LOperand* temp() { return temps_[0]; }
1945
+
1673
1946
  DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i")
1674
1947
  DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
1675
1948
 
@@ -1683,6 +1956,8 @@ class LSmiTag: public LTemplateInstruction<1, 1, 0> {
1683
1956
  inputs_[0] = value;
1684
1957
  }
1685
1958
 
1959
+ LOperand* value() { return inputs_[0]; }
1960
+
1686
1961
  DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag")
1687
1962
  };
1688
1963
 
@@ -1694,6 +1969,9 @@ class LNumberUntagD: public LTemplateInstruction<1, 1, 1> {
1694
1969
  temps_[0] = temp;
1695
1970
  }
1696
1971
 
1972
+ LOperand* value() { return inputs_[0]; }
1973
+ LOperand* temp() { return temps_[0]; }
1974
+
1697
1975
  DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag")
1698
1976
  DECLARE_HYDROGEN_ACCESSOR(Change);
1699
1977
  };
@@ -1706,6 +1984,8 @@ class LSmiUntag: public LTemplateInstruction<1, 1, 0> {
1706
1984
  inputs_[0] = value;
1707
1985
  }
1708
1986
 
1987
+ LOperand* value() { return inputs_[0]; }
1988
+
1709
1989
  DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag")
1710
1990
 
1711
1991
  bool needs_check() const { return needs_check_; }
@@ -1727,14 +2007,16 @@ class LStoreNamedField: public LTemplateInstruction<0, 2, 2> {
1727
2007
  temps_[1] = temp_map;
1728
2008
  }
1729
2009
 
2010
+ LOperand* object() { return inputs_[0]; }
2011
+ LOperand* value() { return inputs_[1]; }
2012
+ LOperand* temp() { return temps_[0]; }
2013
+ LOperand* temp_map() { return temps_[1]; }
2014
+
1730
2015
  DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field")
1731
2016
  DECLARE_HYDROGEN_ACCESSOR(StoreNamedField)
1732
2017
 
1733
2018
  virtual void PrintDataTo(StringStream* stream);
1734
2019
 
1735
- LOperand* object() { return inputs_[0]; }
1736
- LOperand* value() { return inputs_[1]; }
1737
-
1738
2020
  Handle<Object> name() const { return hydrogen()->name(); }
1739
2021
  bool is_in_object() { return hydrogen()->is_in_object(); }
1740
2022
  int offset() { return hydrogen()->offset(); }
@@ -1750,89 +2032,44 @@ class LStoreNamedGeneric: public LTemplateInstruction<0, 3, 0> {
1750
2032
  inputs_[2] = value;
1751
2033
  }
1752
2034
 
2035
+ LOperand* context() { return inputs_[0]; }
2036
+ LOperand* object() { return inputs_[1]; }
2037
+ LOperand* value() { return inputs_[2]; }
2038
+
1753
2039
  DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic")
1754
2040
  DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric)
1755
2041
 
1756
2042
  virtual void PrintDataTo(StringStream* stream);
1757
-
1758
- LOperand* context() { return inputs_[0]; }
1759
- LOperand* object() { return inputs_[1]; }
1760
- LOperand* value() { return inputs_[2]; }
1761
2043
  Handle<Object> name() const { return hydrogen()->name(); }
1762
2044
  StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
1763
2045
  };
1764
2046
 
1765
2047
 
1766
- class LStoreKeyedFastElement: public LTemplateInstruction<0, 3, 0> {
2048
+ class LStoreKeyed: public LTemplateInstruction<0, 3, 0> {
1767
2049
  public:
1768
- LStoreKeyedFastElement(LOperand* obj, LOperand* key, LOperand* val) {
2050
+ LStoreKeyed(LOperand* obj, LOperand* key, LOperand* val) {
1769
2051
  inputs_[0] = obj;
1770
2052
  inputs_[1] = key;
1771
2053
  inputs_[2] = val;
1772
2054
  }
1773
2055
 
1774
- DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastElement,
1775
- "store-keyed-fast-element")
1776
- DECLARE_HYDROGEN_ACCESSOR(StoreKeyedFastElement)
1777
-
1778
- virtual void PrintDataTo(StringStream* stream);
1779
-
1780
- LOperand* object() { return inputs_[0]; }
2056
+ bool is_external() const { return hydrogen()->is_external(); }
2057
+ LOperand* elements() { return inputs_[0]; }
1781
2058
  LOperand* key() { return inputs_[1]; }
1782
2059
  LOperand* value() { return inputs_[2]; }
1783
- uint32_t additional_index() const { return hydrogen()->index_offset(); }
1784
- };
1785
-
1786
-
1787
- class LStoreKeyedFastDoubleElement: public LTemplateInstruction<0, 3, 0> {
1788
- public:
1789
- LStoreKeyedFastDoubleElement(LOperand* elements,
1790
- LOperand* key,
1791
- LOperand* val) {
1792
- inputs_[0] = elements;
1793
- inputs_[1] = key;
1794
- inputs_[2] = val;
2060
+ ElementsKind elements_kind() const {
2061
+ return hydrogen()->elements_kind();
1795
2062
  }
1796
2063
 
1797
- DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastDoubleElement,
1798
- "store-keyed-fast-double-element")
1799
- DECLARE_HYDROGEN_ACCESSOR(StoreKeyedFastDoubleElement)
2064
+ DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed")
2065
+ DECLARE_HYDROGEN_ACCESSOR(StoreKeyed)
1800
2066
 
1801
2067
  virtual void PrintDataTo(StringStream* stream);
1802
-
1803
- LOperand* elements() { return inputs_[0]; }
1804
- LOperand* key() { return inputs_[1]; }
1805
- LOperand* value() { return inputs_[2]; }
1806
2068
  uint32_t additional_index() const { return hydrogen()->index_offset(); }
1807
-
1808
2069
  bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); }
1809
2070
  };
1810
2071
 
1811
2072
 
1812
- class LStoreKeyedSpecializedArrayElement: public LTemplateInstruction<0, 3, 0> {
1813
- public:
1814
- LStoreKeyedSpecializedArrayElement(LOperand* external_pointer,
1815
- LOperand* key,
1816
- LOperand* val) {
1817
- inputs_[0] = external_pointer;
1818
- inputs_[1] = key;
1819
- inputs_[2] = val;
1820
- }
1821
-
1822
- DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement,
1823
- "store-keyed-specialized-array-element")
1824
- DECLARE_HYDROGEN_ACCESSOR(StoreKeyedSpecializedArrayElement)
1825
-
1826
- LOperand* external_pointer() { return inputs_[0]; }
1827
- LOperand* key() { return inputs_[1]; }
1828
- LOperand* value() { return inputs_[2]; }
1829
- ElementsKind elements_kind() const {
1830
- return hydrogen()->elements_kind();
1831
- }
1832
- uint32_t additional_index() const { return hydrogen()->index_offset(); }
1833
- };
1834
-
1835
-
1836
2073
  class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
1837
2074
  public:
1838
2075
  LStoreKeyedGeneric(LOperand* context,
@@ -1845,40 +2082,63 @@ class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
1845
2082
  inputs_[3] = value;
1846
2083
  }
1847
2084
 
2085
+ LOperand* context() { return inputs_[0]; }
2086
+ LOperand* object() { return inputs_[1]; }
2087
+ LOperand* key() { return inputs_[2]; }
2088
+ LOperand* value() { return inputs_[3]; }
2089
+
1848
2090
  DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
1849
2091
  DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric)
1850
2092
 
1851
2093
  virtual void PrintDataTo(StringStream* stream);
1852
2094
 
1853
- LOperand* context() { return inputs_[0]; }
1854
- LOperand* object() { return inputs_[1]; }
1855
- LOperand* key() { return inputs_[2]; }
1856
- LOperand* value() { return inputs_[3]; }
1857
2095
  StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
1858
2096
  };
1859
2097
 
1860
2098
 
1861
- class LTransitionElementsKind: public LTemplateInstruction<1, 1, 2> {
2099
+ class LTransitionElementsKind: public LTemplateInstruction<0, 2, 2> {
1862
2100
  public:
1863
2101
  LTransitionElementsKind(LOperand* object,
2102
+ LOperand* context,
1864
2103
  LOperand* new_map_temp,
1865
- LOperand* temp_reg) {
2104
+ LOperand* temp) {
1866
2105
  inputs_[0] = object;
2106
+ inputs_[1] = context;
1867
2107
  temps_[0] = new_map_temp;
1868
- temps_[1] = temp_reg;
2108
+ temps_[1] = temp;
1869
2109
  }
1870
2110
 
2111
+ LOperand* context() { return inputs_[1]; }
2112
+ LOperand* object() { return inputs_[0]; }
2113
+ LOperand* new_map_temp() { return temps_[0]; }
2114
+ LOperand* temp() { return temps_[1]; }
2115
+
1871
2116
  DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind,
1872
2117
  "transition-elements-kind")
1873
2118
  DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind)
1874
2119
 
1875
2120
  virtual void PrintDataTo(StringStream* stream);
1876
2121
 
1877
- LOperand* object() { return inputs_[0]; }
1878
- LOperand* new_map_reg() { return temps_[0]; }
1879
- LOperand* temp_reg() { return temps_[1]; }
1880
2122
  Handle<Map> original_map() { return hydrogen()->original_map(); }
1881
2123
  Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
2124
+ ElementsKind from_kind() { return hydrogen()->from_kind(); }
2125
+ ElementsKind to_kind() { return hydrogen()->to_kind(); }
2126
+ };
2127
+
2128
+
2129
+ class LTrapAllocationMemento : public LTemplateInstruction<0, 1, 1> {
2130
+ public:
2131
+ LTrapAllocationMemento(LOperand* object,
2132
+ LOperand* temp) {
2133
+ inputs_[0] = object;
2134
+ temps_[0] = temp;
2135
+ }
2136
+
2137
+ LOperand* object() { return inputs_[0]; }
2138
+ LOperand* temp() { return temps_[0]; }
2139
+
2140
+ DECLARE_CONCRETE_INSTRUCTION(TrapAllocationMemento,
2141
+ "trap-allocation-memento")
1882
2142
  };
1883
2143
 
1884
2144
 
@@ -1890,12 +2150,12 @@ class LStringAdd: public LTemplateInstruction<1, 3, 0> {
1890
2150
  inputs_[2] = right;
1891
2151
  }
1892
2152
 
1893
- DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
1894
- DECLARE_HYDROGEN_ACCESSOR(StringAdd)
1895
-
1896
2153
  LOperand* context() { return inputs_[0]; }
1897
2154
  LOperand* left() { return inputs_[1]; }
1898
2155
  LOperand* right() { return inputs_[2]; }
2156
+
2157
+ DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
2158
+ DECLARE_HYDROGEN_ACCESSOR(StringAdd)
1899
2159
  };
1900
2160
 
1901
2161
 
@@ -1907,12 +2167,12 @@ class LStringCharCodeAt: public LTemplateInstruction<1, 3, 0> {
1907
2167
  inputs_[2] = index;
1908
2168
  }
1909
2169
 
1910
- DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
1911
- DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
1912
-
1913
2170
  LOperand* context() { return inputs_[0]; }
1914
2171
  LOperand* string() { return inputs_[1]; }
1915
2172
  LOperand* index() { return inputs_[2]; }
2173
+
2174
+ DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
2175
+ DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
1916
2176
  };
1917
2177
 
1918
2178
 
@@ -1923,11 +2183,11 @@ class LStringCharFromCode: public LTemplateInstruction<1, 2, 0> {
1923
2183
  inputs_[1] = char_code;
1924
2184
  }
1925
2185
 
1926
- DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
1927
- DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
1928
-
1929
2186
  LOperand* context() { return inputs_[0]; }
1930
2187
  LOperand* char_code() { return inputs_[1]; }
2188
+
2189
+ DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
2190
+ DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
1931
2191
  };
1932
2192
 
1933
2193
 
@@ -1937,10 +2197,10 @@ class LStringLength: public LTemplateInstruction<1, 1, 0> {
1937
2197
  inputs_[0] = string;
1938
2198
  }
1939
2199
 
2200
+ LOperand* string() { return inputs_[0]; }
2201
+
1940
2202
  DECLARE_CONCRETE_INSTRUCTION(StringLength, "string-length")
1941
2203
  DECLARE_HYDROGEN_ACCESSOR(StringLength)
1942
-
1943
- LOperand* string() { return inputs_[0]; }
1944
2204
  };
1945
2205
 
1946
2206
 
@@ -1964,6 +2224,9 @@ class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> {
1964
2224
  temps_[0] = temp;
1965
2225
  }
1966
2226
 
2227
+ LOperand* value() { return inputs_[0]; }
2228
+ LOperand* temp() { return temps_[0]; }
2229
+
1967
2230
  DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type")
1968
2231
  DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType)
1969
2232
  };
@@ -1975,22 +2238,28 @@ class LCheckMaps: public LTemplateInstruction<0, 1, 0> {
1975
2238
  inputs_[0] = value;
1976
2239
  }
1977
2240
 
2241
+ LOperand* value() { return inputs_[0]; }
2242
+
1978
2243
  DECLARE_CONCRETE_INSTRUCTION(CheckMaps, "check-maps")
1979
2244
  DECLARE_HYDROGEN_ACCESSOR(CheckMaps)
1980
2245
  };
1981
2246
 
1982
2247
 
1983
- class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> {
2248
+ class LCheckPrototypeMaps: public LTemplateInstruction<1, 0, 1> {
1984
2249
  public:
1985
2250
  explicit LCheckPrototypeMaps(LOperand* temp) {
1986
2251
  temps_[0] = temp;
1987
2252
  }
1988
2253
 
2254
+ LOperand* temp() { return temps_[0]; }
2255
+
1989
2256
  DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps")
1990
2257
  DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps)
1991
2258
 
1992
- Handle<JSObject> prototype() const { return hydrogen()->prototype(); }
1993
- Handle<JSObject> holder() const { return hydrogen()->holder(); }
2259
+ ZoneList<Handle<JSObject> >* prototypes() const {
2260
+ return hydrogen()->prototypes();
2261
+ }
2262
+ ZoneList<Handle<Map> >* maps() const { return hydrogen()->maps(); }
1994
2263
  };
1995
2264
 
1996
2265
 
@@ -2000,6 +2269,8 @@ class LCheckSmi: public LTemplateInstruction<0, 1, 0> {
2000
2269
  inputs_[0] = value;
2001
2270
  }
2002
2271
 
2272
+ LOperand* value() { return inputs_[0]; }
2273
+
2003
2274
  DECLARE_CONCRETE_INSTRUCTION(CheckSmi, "check-smi")
2004
2275
  };
2005
2276
 
@@ -2047,6 +2318,8 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
2047
2318
  inputs_[0] = value;
2048
2319
  }
2049
2320
 
2321
+ LOperand* value() { return inputs_[0]; }
2322
+
2050
2323
  DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
2051
2324
  };
2052
2325
 
@@ -2058,10 +2331,28 @@ class LAllocateObject: public LTemplateInstruction<1, 1, 1> {
2058
2331
  temps_[0] = temp;
2059
2332
  }
2060
2333
 
2334
+ LOperand* context() { return inputs_[0]; }
2335
+ LOperand* temp() { return temps_[0]; }
2336
+
2061
2337
  DECLARE_CONCRETE_INSTRUCTION(AllocateObject, "allocate-object")
2062
2338
  DECLARE_HYDROGEN_ACCESSOR(AllocateObject)
2339
+ };
2340
+
2341
+
2342
+ class LAllocate: public LTemplateInstruction<1, 2, 1> {
2343
+ public:
2344
+ LAllocate(LOperand* context, LOperand* size, LOperand* temp) {
2345
+ inputs_[0] = context;
2346
+ inputs_[1] = size;
2347
+ temps_[0] = temp;
2348
+ }
2063
2349
 
2064
2350
  LOperand* context() { return inputs_[0]; }
2351
+ LOperand* size() { return inputs_[1]; }
2352
+ LOperand* temp() { return temps_[0]; }
2353
+
2354
+ DECLARE_CONCRETE_INSTRUCTION(Allocate, "allocate")
2355
+ DECLARE_HYDROGEN_ACCESSOR(Allocate)
2065
2356
  };
2066
2357
 
2067
2358
 
@@ -2138,6 +2429,8 @@ class LToFastProperties: public LTemplateInstruction<1, 1, 0> {
2138
2429
  inputs_[0] = value;
2139
2430
  }
2140
2431
 
2432
+ LOperand* value() { return inputs_[0]; }
2433
+
2141
2434
  DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties")
2142
2435
  DECLARE_HYDROGEN_ACCESSOR(ToFastProperties)
2143
2436
  };
@@ -2150,6 +2443,9 @@ class LTypeof: public LTemplateInstruction<1, 2, 0> {
2150
2443
  inputs_[1] = value;
2151
2444
  }
2152
2445
 
2446
+ LOperand* context() { return inputs_[0]; }
2447
+ LOperand* value() { return inputs_[1]; }
2448
+
2153
2449
  DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
2154
2450
  };
2155
2451
 
@@ -2160,6 +2456,8 @@ class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
2160
2456
  inputs_[0] = value;
2161
2457
  }
2162
2458
 
2459
+ LOperand* value() { return inputs_[0]; }
2460
+
2163
2461
  DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch")
2164
2462
  DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch)
2165
2463
 
@@ -2177,11 +2475,11 @@ class LDeleteProperty: public LTemplateInstruction<1, 3, 0> {
2177
2475
  inputs_[2] = key;
2178
2476
  }
2179
2477
 
2180
- DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property")
2181
-
2182
2478
  LOperand* context() { return inputs_[0]; }
2183
2479
  LOperand* object() { return inputs_[1]; }
2184
2480
  LOperand* key() { return inputs_[2]; }
2481
+
2482
+ DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property")
2185
2483
  };
2186
2484
 
2187
2485
 
@@ -2203,8 +2501,9 @@ class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
2203
2501
  // slot, i.e., that must also be restored to the spill slot on OSR entry.
2204
2502
  // NULL if the register has no assigned spill slot. Indexed by allocation
2205
2503
  // index.
2206
- LOperand* register_spills_[Register::kNumAllocatableRegisters];
2207
- LOperand* double_register_spills_[DoubleRegister::kNumAllocatableRegisters];
2504
+ LOperand* register_spills_[Register::kMaxNumAllocatableRegisters];
2505
+ LOperand* double_register_spills_[
2506
+ DoubleRegister::kMaxNumAllocatableRegisters];
2208
2507
  };
2209
2508
 
2210
2509
 
@@ -2301,69 +2600,19 @@ class LLoadFieldByIndex: public LTemplateInstruction<1, 2, 0> {
2301
2600
 
2302
2601
 
2303
2602
  class LChunkBuilder;
2304
- class LChunk: public ZoneObject {
2603
+ class LPlatformChunk: public LChunk {
2305
2604
  public:
2306
- LChunk(CompilationInfo* info, HGraph* graph)
2307
- : spill_slot_count_(0),
2308
- info_(info),
2309
- graph_(graph),
2310
- instructions_(32),
2311
- pointer_maps_(8),
2312
- inlined_closures_(1) { }
2313
-
2314
- void AddInstruction(LInstruction* instruction, HBasicBlock* block);
2315
- LConstantOperand* DefineConstantOperand(HConstant* constant);
2316
- Handle<Object> LookupLiteral(LConstantOperand* operand) const;
2317
- Representation LookupLiteralRepresentation(LConstantOperand* operand) const;
2605
+ LPlatformChunk(CompilationInfo* info, HGraph* graph)
2606
+ : LChunk(info, graph),
2607
+ num_double_slots_(0) { }
2318
2608
 
2319
2609
  int GetNextSpillIndex(bool is_double);
2320
2610
  LOperand* GetNextSpillSlot(bool is_double);
2321
2611
 
2322
- int ParameterAt(int index);
2323
- int GetParameterStackSlot(int index) const;
2324
- int spill_slot_count() const { return spill_slot_count_; }
2325
- CompilationInfo* info() const { return info_; }
2326
- HGraph* graph() const { return graph_; }
2327
- const ZoneList<LInstruction*>* instructions() const { return &instructions_; }
2328
- void AddGapMove(int index, LOperand* from, LOperand* to);
2329
- LGap* GetGapAt(int index) const;
2330
- bool IsGapAt(int index) const;
2331
- int NearestGapPos(int index) const;
2332
- void MarkEmptyBlocks();
2333
- const ZoneList<LPointerMap*>* pointer_maps() const { return &pointer_maps_; }
2334
- LLabel* GetLabel(int block_id) const {
2335
- HBasicBlock* block = graph_->blocks()->at(block_id);
2336
- int first_instruction = block->first_instruction_index();
2337
- return LLabel::cast(instructions_[first_instruction]);
2338
- }
2339
- int LookupDestination(int block_id) const {
2340
- LLabel* cur = GetLabel(block_id);
2341
- while (cur->replacement() != NULL) {
2342
- cur = cur->replacement();
2343
- }
2344
- return cur->block_id();
2345
- }
2346
- Label* GetAssemblyLabel(int block_id) const {
2347
- LLabel* label = GetLabel(block_id);
2348
- ASSERT(!label->HasReplacement());
2349
- return label->label();
2350
- }
2351
-
2352
- const ZoneList<Handle<JSFunction> >* inlined_closures() const {
2353
- return &inlined_closures_;
2354
- }
2355
-
2356
- void AddInlinedClosure(Handle<JSFunction> closure) {
2357
- inlined_closures_.Add(closure);
2358
- }
2612
+ int num_double_slots() const { return num_double_slots_; }
2359
2613
 
2360
2614
  private:
2361
- int spill_slot_count_;
2362
- CompilationInfo* info_;
2363
- HGraph* const graph_;
2364
- ZoneList<LInstruction*> instructions_;
2365
- ZoneList<LPointerMap*> pointer_maps_;
2366
- ZoneList<Handle<JSFunction> > inlined_closures_;
2615
+ int num_double_slots_;
2367
2616
  };
2368
2617
 
2369
2618
 
@@ -2373,7 +2622,7 @@ class LChunkBuilder BASE_EMBEDDED {
2373
2622
  : chunk_(NULL),
2374
2623
  info_(info),
2375
2624
  graph_(graph),
2376
- zone_(graph->isolate()->zone()),
2625
+ zone_(graph->zone()),
2377
2626
  status_(UNUSED),
2378
2627
  current_instruction_(NULL),
2379
2628
  current_block_(NULL),
@@ -2382,16 +2631,19 @@ class LChunkBuilder BASE_EMBEDDED {
2382
2631
  allocator_(allocator),
2383
2632
  position_(RelocInfo::kNoPosition),
2384
2633
  instruction_pending_deoptimization_environment_(NULL),
2385
- pending_deoptimization_ast_id_(AstNode::kNoNumber) { }
2634
+ pending_deoptimization_ast_id_(BailoutId::None()) { }
2386
2635
 
2387
2636
  // Build the sequence for the graph.
2388
- LChunk* Build();
2637
+ LPlatformChunk* Build();
2389
2638
 
2390
2639
  // Declare methods that deal with the individual node types.
2391
2640
  #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
2392
2641
  HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO)
2393
2642
  #undef DECLARE_DO
2394
2643
 
2644
+ static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* val);
2645
+ static HValue* SimplifiedDivisorForMathFloorOfDiv(HValue* val);
2646
+
2395
2647
  private:
2396
2648
  enum Status {
2397
2649
  UNUSED,
@@ -2400,21 +2652,22 @@ class LChunkBuilder BASE_EMBEDDED {
2400
2652
  ABORTED
2401
2653
  };
2402
2654
 
2403
- LChunk* chunk() const { return chunk_; }
2655
+ LPlatformChunk* chunk() const { return chunk_; }
2404
2656
  CompilationInfo* info() const { return info_; }
2405
2657
  HGraph* graph() const { return graph_; }
2406
- Zone* zone() { return zone_; }
2658
+ Zone* zone() const { return zone_; }
2407
2659
 
2408
2660
  bool is_unused() const { return status_ == UNUSED; }
2409
2661
  bool is_building() const { return status_ == BUILDING; }
2410
2662
  bool is_done() const { return status_ == DONE; }
2411
2663
  bool is_aborted() const { return status_ == ABORTED; }
2412
2664
 
2413
- void Abort(const char* format, ...);
2665
+ void Abort(const char* reason);
2414
2666
 
2415
2667
  // Methods for getting operands for Use / Define / Temp.
2416
2668
  LUnallocated* ToUnallocated(Register reg);
2417
2669
  LUnallocated* ToUnallocated(XMMRegister reg);
2670
+ LUnallocated* ToUnallocated(X87TopOfStackRegister reg);
2418
2671
 
2419
2672
  // Methods for setting up define-use relationships.
2420
2673
  MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand);
@@ -2475,6 +2728,8 @@ class LChunkBuilder BASE_EMBEDDED {
2475
2728
  template<int I, int T>
2476
2729
  LInstruction* DefineFixedDouble(LTemplateInstruction<1, I, T>* instr,
2477
2730
  XMMRegister reg);
2731
+ template<int I, int T>
2732
+ LInstruction* DefineX87TOS(LTemplateInstruction<1, I, T>* instr);
2478
2733
  // Assigns an environment to an instruction. An instruction which can
2479
2734
  // deoptimize must have an environment.
2480
2735
  LInstruction* AssignEnvironment(LInstruction* instr);
@@ -2504,7 +2759,7 @@ class LChunkBuilder BASE_EMBEDDED {
2504
2759
  LInstruction* DoArithmeticT(Token::Value op,
2505
2760
  HArithmeticBinaryOperation* instr);
2506
2761
 
2507
- LChunk* chunk_;
2762
+ LPlatformChunk* chunk_;
2508
2763
  CompilationInfo* info_;
2509
2764
  HGraph* const graph_;
2510
2765
  Zone* zone_;
@@ -2516,7 +2771,7 @@ class LChunkBuilder BASE_EMBEDDED {
2516
2771
  LAllocator* allocator_;
2517
2772
  int position_;
2518
2773
  LInstruction* instruction_pending_deoptimization_environment_;
2519
- int pending_deoptimization_ast_id_;
2774
+ BailoutId pending_deoptimization_ast_id_;
2520
2775
 
2521
2776
  DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
2522
2777
  };