mustang 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (560) hide show
  1. data/.rspec +1 -0
  2. data/Isolate +9 -0
  3. data/README.md +6 -12
  4. data/Rakefile +30 -4
  5. data/TODO.md +9 -0
  6. data/ext/v8/extconf.rb +56 -0
  7. data/ext/v8/v8.cpp +37 -0
  8. data/ext/v8/v8_array.cpp +161 -0
  9. data/ext/v8/v8_array.h +17 -0
  10. data/ext/v8/v8_base.cpp +147 -0
  11. data/ext/v8/v8_base.h +23 -0
  12. data/ext/v8/v8_cast.cpp +151 -0
  13. data/ext/v8/v8_cast.h +64 -0
  14. data/ext/v8/v8_context.cpp +174 -0
  15. data/ext/v8/v8_context.h +12 -0
  16. data/ext/v8/v8_date.cpp +61 -0
  17. data/ext/v8/v8_date.h +16 -0
  18. data/ext/v8/v8_errors.cpp +147 -0
  19. data/ext/v8/v8_errors.h +19 -0
  20. data/ext/v8/v8_external.cpp +66 -0
  21. data/ext/v8/v8_external.h +16 -0
  22. data/ext/v8/v8_function.cpp +182 -0
  23. data/ext/v8/v8_function.h +14 -0
  24. data/ext/v8/v8_integer.cpp +70 -0
  25. data/ext/v8/v8_integer.h +16 -0
  26. data/ext/v8/v8_macros.h +30 -0
  27. data/ext/v8/v8_main.cpp +53 -0
  28. data/ext/v8/v8_main.h +13 -0
  29. data/ext/v8/v8_number.cpp +62 -0
  30. data/ext/v8/v8_number.h +16 -0
  31. data/ext/v8/v8_object.cpp +172 -0
  32. data/ext/v8/v8_object.h +17 -0
  33. data/ext/v8/v8_ref.cpp +72 -0
  34. data/ext/v8/v8_ref.h +43 -0
  35. data/ext/v8/v8_regexp.cpp +148 -0
  36. data/ext/v8/v8_regexp.h +16 -0
  37. data/ext/v8/v8_string.cpp +78 -0
  38. data/ext/v8/v8_string.h +16 -0
  39. data/ext/v8/v8_value.cpp +370 -0
  40. data/ext/v8/v8_value.h +19 -0
  41. data/gemspec.yml +2 -1
  42. data/lib/core_ext/class.rb +14 -0
  43. data/lib/core_ext/object.rb +12 -0
  44. data/lib/core_ext/symbol.rb +23 -0
  45. data/lib/mustang.rb +44 -0
  46. data/lib/mustang/context.rb +69 -0
  47. data/lib/mustang/errors.rb +36 -0
  48. data/lib/support/delegated.rb +25 -0
  49. data/lib/v8/array.rb +21 -0
  50. data/lib/v8/context.rb +13 -0
  51. data/lib/v8/date.rb +20 -0
  52. data/lib/v8/error.rb +15 -0
  53. data/lib/v8/external.rb +16 -0
  54. data/lib/v8/function.rb +11 -0
  55. data/lib/v8/integer.rb +16 -0
  56. data/lib/v8/number.rb +16 -0
  57. data/lib/v8/object.rb +66 -0
  58. data/lib/v8/regexp.rb +23 -0
  59. data/lib/v8/string.rb +27 -0
  60. data/mustang.gemspec +3 -0
  61. data/spec/core_ext/class_spec.rb +19 -0
  62. data/spec/core_ext/object_spec.rb +19 -0
  63. data/spec/core_ext/symbol_spec.rb +27 -0
  64. data/spec/fixtures/test1.js +2 -0
  65. data/spec/fixtures/test2.js +2 -0
  66. data/spec/spec_helper.rb +20 -0
  67. data/spec/v8/array_spec.rb +88 -0
  68. data/spec/v8/cast_spec.rb +151 -0
  69. data/spec/v8/context_spec.rb +78 -0
  70. data/spec/v8/data_spec.rb +39 -0
  71. data/spec/v8/date_spec.rb +45 -0
  72. data/spec/v8/empty_spec.rb +27 -0
  73. data/spec/v8/errors_spec.rb +142 -0
  74. data/spec/v8/external_spec.rb +44 -0
  75. data/spec/v8/function_spec.rb +170 -0
  76. data/spec/v8/integer_spec.rb +41 -0
  77. data/spec/v8/main_spec.rb +18 -0
  78. data/spec/v8/null_spec.rb +27 -0
  79. data/spec/v8/number_spec.rb +40 -0
  80. data/spec/v8/object_spec.rb +79 -0
  81. data/spec/v8/primitive_spec.rb +9 -0
  82. data/spec/v8/regexp_spec.rb +65 -0
  83. data/spec/v8/string_spec.rb +48 -0
  84. data/spec/v8/undefined_spec.rb +27 -0
  85. data/spec/v8/value_spec.rb +215 -0
  86. data/vendor/v8/.gitignore +2 -0
  87. data/vendor/v8/AUTHORS +3 -1
  88. data/vendor/v8/ChangeLog +117 -0
  89. data/vendor/v8/SConstruct +334 -53
  90. data/vendor/v8/include/v8-debug.h +21 -11
  91. data/vendor/v8/include/v8-preparser.h +1 -1
  92. data/vendor/v8/include/v8-profiler.h +122 -43
  93. data/vendor/v8/include/v8-testing.h +5 -0
  94. data/vendor/v8/include/v8.h +171 -17
  95. data/vendor/v8/preparser/SConscript +38 -0
  96. data/vendor/v8/preparser/preparser-process.cc +77 -114
  97. data/vendor/v8/samples/shell.cc +232 -46
  98. data/vendor/v8/src/SConscript +29 -5
  99. data/vendor/v8/src/accessors.cc +70 -211
  100. data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
  101. data/vendor/v8/src/allocation.cc +0 -82
  102. data/vendor/v8/src/allocation.h +9 -42
  103. data/vendor/v8/src/api.cc +1645 -1156
  104. data/vendor/v8/src/api.h +76 -12
  105. data/vendor/v8/src/apiutils.h +0 -7
  106. data/vendor/v8/src/arguments.h +15 -4
  107. data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
  108. data/vendor/v8/src/arm/assembler-arm.cc +62 -23
  109. data/vendor/v8/src/arm/assembler-arm.h +76 -11
  110. data/vendor/v8/src/arm/builtins-arm.cc +39 -33
  111. data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
  112. data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
  113. data/vendor/v8/src/arm/codegen-arm.cc +159 -106
  114. data/vendor/v8/src/arm/codegen-arm.h +6 -6
  115. data/vendor/v8/src/arm/constants-arm.h +16 -1
  116. data/vendor/v8/src/arm/cpu-arm.cc +7 -5
  117. data/vendor/v8/src/arm/debug-arm.cc +6 -4
  118. data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
  119. data/vendor/v8/src/arm/disasm-arm.cc +47 -15
  120. data/vendor/v8/src/arm/frames-arm.h +1 -1
  121. data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
  122. data/vendor/v8/src/arm/ic-arm.cc +90 -85
  123. data/vendor/v8/src/arm/lithium-arm.cc +140 -69
  124. data/vendor/v8/src/arm/lithium-arm.h +161 -46
  125. data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
  126. data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
  127. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
  128. data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
  129. data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
  130. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
  131. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
  132. data/vendor/v8/src/arm/simulator-arm.cc +184 -101
  133. data/vendor/v8/src/arm/simulator-arm.h +26 -21
  134. data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
  135. data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
  136. data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
  137. data/vendor/v8/src/array.js +35 -18
  138. data/vendor/v8/src/assembler.cc +186 -92
  139. data/vendor/v8/src/assembler.h +106 -69
  140. data/vendor/v8/src/ast-inl.h +5 -0
  141. data/vendor/v8/src/ast.cc +46 -35
  142. data/vendor/v8/src/ast.h +107 -50
  143. data/vendor/v8/src/atomicops.h +2 -0
  144. data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
  145. data/vendor/v8/src/bootstrapper.cc +649 -399
  146. data/vendor/v8/src/bootstrapper.h +94 -27
  147. data/vendor/v8/src/builtins.cc +359 -227
  148. data/vendor/v8/src/builtins.h +157 -123
  149. data/vendor/v8/src/checks.cc +2 -2
  150. data/vendor/v8/src/checks.h +4 -0
  151. data/vendor/v8/src/code-stubs.cc +27 -17
  152. data/vendor/v8/src/code-stubs.h +38 -17
  153. data/vendor/v8/src/codegen-inl.h +5 -1
  154. data/vendor/v8/src/codegen.cc +27 -17
  155. data/vendor/v8/src/codegen.h +9 -9
  156. data/vendor/v8/src/compilation-cache.cc +92 -206
  157. data/vendor/v8/src/compilation-cache.h +205 -30
  158. data/vendor/v8/src/compiler.cc +107 -120
  159. data/vendor/v8/src/compiler.h +17 -2
  160. data/vendor/v8/src/contexts.cc +22 -15
  161. data/vendor/v8/src/contexts.h +14 -8
  162. data/vendor/v8/src/conversions.cc +86 -30
  163. data/vendor/v8/src/counters.cc +19 -4
  164. data/vendor/v8/src/counters.h +28 -16
  165. data/vendor/v8/src/cpu-profiler-inl.h +4 -3
  166. data/vendor/v8/src/cpu-profiler.cc +123 -72
  167. data/vendor/v8/src/cpu-profiler.h +33 -19
  168. data/vendor/v8/src/cpu.h +2 -0
  169. data/vendor/v8/src/d8-debug.cc +3 -3
  170. data/vendor/v8/src/d8-debug.h +7 -6
  171. data/vendor/v8/src/d8-posix.cc +2 -0
  172. data/vendor/v8/src/d8.cc +22 -12
  173. data/vendor/v8/src/d8.gyp +3 -0
  174. data/vendor/v8/src/d8.js +618 -0
  175. data/vendor/v8/src/data-flow.h +3 -3
  176. data/vendor/v8/src/dateparser.h +4 -2
  177. data/vendor/v8/src/debug-agent.cc +10 -9
  178. data/vendor/v8/src/debug-agent.h +9 -11
  179. data/vendor/v8/src/debug-debugger.js +121 -0
  180. data/vendor/v8/src/debug.cc +331 -227
  181. data/vendor/v8/src/debug.h +248 -219
  182. data/vendor/v8/src/deoptimizer.cc +173 -62
  183. data/vendor/v8/src/deoptimizer.h +119 -19
  184. data/vendor/v8/src/disasm.h +3 -0
  185. data/vendor/v8/src/disassembler.cc +10 -9
  186. data/vendor/v8/src/execution.cc +185 -129
  187. data/vendor/v8/src/execution.h +47 -78
  188. data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
  189. data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
  190. data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
  191. data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
  192. data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
  193. data/vendor/v8/src/extensions/gc-extension.cc +1 -1
  194. data/vendor/v8/src/factory.cc +261 -154
  195. data/vendor/v8/src/factory.h +162 -158
  196. data/vendor/v8/src/flag-definitions.h +17 -11
  197. data/vendor/v8/src/frame-element.cc +0 -5
  198. data/vendor/v8/src/frame-element.h +9 -13
  199. data/vendor/v8/src/frames-inl.h +7 -0
  200. data/vendor/v8/src/frames.cc +56 -46
  201. data/vendor/v8/src/frames.h +36 -25
  202. data/vendor/v8/src/full-codegen.cc +15 -24
  203. data/vendor/v8/src/full-codegen.h +13 -41
  204. data/vendor/v8/src/func-name-inferrer.cc +7 -6
  205. data/vendor/v8/src/func-name-inferrer.h +1 -1
  206. data/vendor/v8/src/gdb-jit.cc +1 -0
  207. data/vendor/v8/src/global-handles.cc +118 -56
  208. data/vendor/v8/src/global-handles.h +98 -40
  209. data/vendor/v8/src/globals.h +2 -2
  210. data/vendor/v8/src/handles-inl.h +106 -9
  211. data/vendor/v8/src/handles.cc +220 -157
  212. data/vendor/v8/src/handles.h +38 -59
  213. data/vendor/v8/src/hashmap.h +3 -3
  214. data/vendor/v8/src/heap-inl.h +141 -25
  215. data/vendor/v8/src/heap-profiler.cc +117 -63
  216. data/vendor/v8/src/heap-profiler.h +38 -21
  217. data/vendor/v8/src/heap.cc +805 -564
  218. data/vendor/v8/src/heap.h +640 -594
  219. data/vendor/v8/src/hydrogen-instructions.cc +216 -73
  220. data/vendor/v8/src/hydrogen-instructions.h +259 -124
  221. data/vendor/v8/src/hydrogen.cc +996 -1171
  222. data/vendor/v8/src/hydrogen.h +163 -144
  223. data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
  224. data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
  225. data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
  226. data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
  227. data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
  228. data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
  229. data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
  230. data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
  231. data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
  232. data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
  233. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
  234. data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
  235. data/vendor/v8/src/ia32/frames-ia32.h +1 -1
  236. data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
  237. data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
  238. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
  239. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
  240. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
  241. data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
  242. data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
  243. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
  244. data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
  245. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
  246. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
  247. data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
  248. data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
  249. data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
  250. data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
  251. data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
  252. data/vendor/v8/src/ic-inl.h +12 -2
  253. data/vendor/v8/src/ic.cc +304 -221
  254. data/vendor/v8/src/ic.h +115 -58
  255. data/vendor/v8/src/interpreter-irregexp.cc +25 -21
  256. data/vendor/v8/src/interpreter-irregexp.h +2 -1
  257. data/vendor/v8/src/isolate.cc +883 -0
  258. data/vendor/v8/src/isolate.h +1304 -0
  259. data/vendor/v8/src/json.js +10 -10
  260. data/vendor/v8/src/jsregexp.cc +111 -80
  261. data/vendor/v8/src/jsregexp.h +6 -7
  262. data/vendor/v8/src/jump-target-heavy.cc +5 -8
  263. data/vendor/v8/src/jump-target-heavy.h +0 -6
  264. data/vendor/v8/src/jump-target-inl.h +1 -1
  265. data/vendor/v8/src/jump-target-light.cc +3 -3
  266. data/vendor/v8/src/lithium-allocator-inl.h +2 -0
  267. data/vendor/v8/src/lithium-allocator.cc +42 -30
  268. data/vendor/v8/src/lithium-allocator.h +8 -22
  269. data/vendor/v8/src/lithium.cc +1 -0
  270. data/vendor/v8/src/liveedit.cc +141 -99
  271. data/vendor/v8/src/liveedit.h +7 -2
  272. data/vendor/v8/src/liveobjectlist-inl.h +90 -0
  273. data/vendor/v8/src/liveobjectlist.cc +2537 -1
  274. data/vendor/v8/src/liveobjectlist.h +245 -35
  275. data/vendor/v8/src/log-utils.cc +122 -35
  276. data/vendor/v8/src/log-utils.h +33 -36
  277. data/vendor/v8/src/log.cc +299 -241
  278. data/vendor/v8/src/log.h +177 -110
  279. data/vendor/v8/src/mark-compact.cc +612 -470
  280. data/vendor/v8/src/mark-compact.h +153 -80
  281. data/vendor/v8/src/messages.cc +16 -14
  282. data/vendor/v8/src/messages.js +30 -7
  283. data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
  284. data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
  285. data/vendor/v8/src/mips/assembler-mips.h +552 -153
  286. data/vendor/v8/src/mips/builtins-mips.cc +43 -100
  287. data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
  288. data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
  289. data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
  290. data/vendor/v8/src/mips/codegen-mips.cc +672 -896
  291. data/vendor/v8/src/mips/codegen-mips.h +271 -69
  292. data/vendor/v8/src/mips/constants-mips.cc +44 -20
  293. data/vendor/v8/src/mips/constants-mips.h +238 -40
  294. data/vendor/v8/src/mips/cpu-mips.cc +20 -3
  295. data/vendor/v8/src/mips/debug-mips.cc +35 -7
  296. data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
  297. data/vendor/v8/src/mips/disasm-mips.cc +329 -93
  298. data/vendor/v8/src/mips/frames-mips.cc +2 -50
  299. data/vendor/v8/src/mips/frames-mips.h +24 -9
  300. data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
  301. data/vendor/v8/src/mips/ic-mips.cc +81 -45
  302. data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
  303. data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
  304. data/vendor/v8/src/mips/lithium-mips.h +304 -0
  305. data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
  306. data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
  307. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  308. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  309. data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
  310. data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
  311. data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
  312. data/vendor/v8/src/mips/simulator-mips.h +119 -36
  313. data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
  314. data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
  315. data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
  316. data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
  317. data/vendor/v8/src/mirror-debugger.js +9 -8
  318. data/vendor/v8/src/mksnapshot.cc +2 -2
  319. data/vendor/v8/src/objects-debug.cc +16 -16
  320. data/vendor/v8/src/objects-inl.h +421 -195
  321. data/vendor/v8/src/objects-printer.cc +7 -7
  322. data/vendor/v8/src/objects-visiting.cc +1 -1
  323. data/vendor/v8/src/objects-visiting.h +33 -12
  324. data/vendor/v8/src/objects.cc +935 -658
  325. data/vendor/v8/src/objects.h +234 -139
  326. data/vendor/v8/src/parser.cc +484 -439
  327. data/vendor/v8/src/parser.h +35 -14
  328. data/vendor/v8/src/platform-cygwin.cc +173 -107
  329. data/vendor/v8/src/platform-freebsd.cc +224 -72
  330. data/vendor/v8/src/platform-linux.cc +234 -95
  331. data/vendor/v8/src/platform-macos.cc +215 -82
  332. data/vendor/v8/src/platform-nullos.cc +9 -3
  333. data/vendor/v8/src/platform-openbsd.cc +22 -7
  334. data/vendor/v8/src/platform-posix.cc +30 -5
  335. data/vendor/v8/src/platform-solaris.cc +120 -38
  336. data/vendor/v8/src/platform-tls-mac.h +62 -0
  337. data/vendor/v8/src/platform-tls-win32.h +62 -0
  338. data/vendor/v8/src/platform-tls.h +50 -0
  339. data/vendor/v8/src/platform-win32.cc +195 -97
  340. data/vendor/v8/src/platform.h +72 -15
  341. data/vendor/v8/src/preparse-data.cc +2 -0
  342. data/vendor/v8/src/preparser-api.cc +8 -2
  343. data/vendor/v8/src/preparser.cc +1 -1
  344. data/vendor/v8/src/prettyprinter.cc +43 -52
  345. data/vendor/v8/src/prettyprinter.h +1 -1
  346. data/vendor/v8/src/profile-generator-inl.h +0 -28
  347. data/vendor/v8/src/profile-generator.cc +942 -685
  348. data/vendor/v8/src/profile-generator.h +210 -176
  349. data/vendor/v8/src/property.cc +6 -0
  350. data/vendor/v8/src/property.h +14 -3
  351. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
  352. data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
  353. data/vendor/v8/src/regexp-macro-assembler.h +11 -6
  354. data/vendor/v8/src/regexp-stack.cc +18 -10
  355. data/vendor/v8/src/regexp-stack.h +45 -21
  356. data/vendor/v8/src/regexp.js +3 -3
  357. data/vendor/v8/src/register-allocator-inl.h +3 -3
  358. data/vendor/v8/src/register-allocator.cc +1 -7
  359. data/vendor/v8/src/register-allocator.h +5 -15
  360. data/vendor/v8/src/rewriter.cc +2 -1
  361. data/vendor/v8/src/runtime-profiler.cc +158 -128
  362. data/vendor/v8/src/runtime-profiler.h +131 -15
  363. data/vendor/v8/src/runtime.cc +2409 -1692
  364. data/vendor/v8/src/runtime.h +93 -17
  365. data/vendor/v8/src/safepoint-table.cc +3 -0
  366. data/vendor/v8/src/safepoint-table.h +9 -3
  367. data/vendor/v8/src/scanner-base.cc +21 -28
  368. data/vendor/v8/src/scanner-base.h +22 -11
  369. data/vendor/v8/src/scanner.cc +3 -5
  370. data/vendor/v8/src/scanner.h +4 -2
  371. data/vendor/v8/src/scopeinfo.cc +11 -16
  372. data/vendor/v8/src/scopeinfo.h +26 -15
  373. data/vendor/v8/src/scopes.cc +67 -37
  374. data/vendor/v8/src/scopes.h +26 -12
  375. data/vendor/v8/src/serialize.cc +193 -154
  376. data/vendor/v8/src/serialize.h +41 -36
  377. data/vendor/v8/src/small-pointer-list.h +163 -0
  378. data/vendor/v8/src/snapshot-common.cc +1 -1
  379. data/vendor/v8/src/snapshot.h +3 -1
  380. data/vendor/v8/src/spaces-inl.h +30 -25
  381. data/vendor/v8/src/spaces.cc +263 -370
  382. data/vendor/v8/src/spaces.h +178 -166
  383. data/vendor/v8/src/string-search.cc +4 -3
  384. data/vendor/v8/src/string-search.h +21 -20
  385. data/vendor/v8/src/string-stream.cc +32 -24
  386. data/vendor/v8/src/string.js +7 -7
  387. data/vendor/v8/src/stub-cache.cc +324 -248
  388. data/vendor/v8/src/stub-cache.h +181 -155
  389. data/vendor/v8/src/token.cc +3 -3
  390. data/vendor/v8/src/token.h +3 -3
  391. data/vendor/v8/src/top.cc +218 -390
  392. data/vendor/v8/src/type-info.cc +98 -32
  393. data/vendor/v8/src/type-info.h +10 -3
  394. data/vendor/v8/src/unicode.cc +1 -1
  395. data/vendor/v8/src/unicode.h +1 -1
  396. data/vendor/v8/src/utils.h +3 -0
  397. data/vendor/v8/src/v8-counters.cc +18 -11
  398. data/vendor/v8/src/v8-counters.h +34 -13
  399. data/vendor/v8/src/v8.cc +66 -121
  400. data/vendor/v8/src/v8.h +7 -4
  401. data/vendor/v8/src/v8globals.h +18 -12
  402. data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
  403. data/vendor/v8/src/v8natives.js +59 -18
  404. data/vendor/v8/src/v8threads.cc +127 -114
  405. data/vendor/v8/src/v8threads.h +42 -35
  406. data/vendor/v8/src/v8utils.h +2 -39
  407. data/vendor/v8/src/variables.h +1 -1
  408. data/vendor/v8/src/version.cc +26 -5
  409. data/vendor/v8/src/version.h +4 -0
  410. data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
  411. data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
  412. data/vendor/v8/src/vm-state-inl.h +21 -17
  413. data/vendor/v8/src/vm-state.h +7 -5
  414. data/vendor/v8/src/win32-headers.h +1 -0
  415. data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
  416. data/vendor/v8/src/x64/assembler-x64.cc +80 -40
  417. data/vendor/v8/src/x64/assembler-x64.h +67 -17
  418. data/vendor/v8/src/x64/builtins-x64.cc +34 -33
  419. data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
  420. data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
  421. data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
  422. data/vendor/v8/src/x64/codegen-x64.cc +158 -136
  423. data/vendor/v8/src/x64/codegen-x64.h +4 -1
  424. data/vendor/v8/src/x64/cpu-x64.cc +7 -5
  425. data/vendor/v8/src/x64/debug-x64.cc +8 -6
  426. data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
  427. data/vendor/v8/src/x64/disasm-x64.cc +42 -23
  428. data/vendor/v8/src/x64/frames-x64.cc +1 -1
  429. data/vendor/v8/src/x64/frames-x64.h +2 -2
  430. data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
  431. data/vendor/v8/src/x64/ic-x64.cc +77 -79
  432. data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
  433. data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
  434. data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
  435. data/vendor/v8/src/x64/lithium-x64.cc +136 -54
  436. data/vendor/v8/src/x64/lithium-x64.h +142 -51
  437. data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
  438. data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
  439. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
  440. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
  441. data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
  442. data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
  443. data/vendor/v8/src/x64/simulator-x64.h +5 -5
  444. data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
  445. data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
  446. data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
  447. data/vendor/v8/src/zone-inl.h +49 -3
  448. data/vendor/v8/src/zone.cc +42 -41
  449. data/vendor/v8/src/zone.h +37 -34
  450. data/vendor/v8/test/benchmarks/testcfg.py +100 -0
  451. data/vendor/v8/test/cctest/SConscript +5 -4
  452. data/vendor/v8/test/cctest/cctest.h +3 -2
  453. data/vendor/v8/test/cctest/cctest.status +6 -11
  454. data/vendor/v8/test/cctest/test-accessors.cc +3 -3
  455. data/vendor/v8/test/cctest/test-alloc.cc +39 -33
  456. data/vendor/v8/test/cctest/test-api.cc +1092 -205
  457. data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
  458. data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
  459. data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
  460. data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
  461. data/vendor/v8/test/cctest/test-ast.cc +1 -0
  462. data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
  463. data/vendor/v8/test/cctest/test-compiler.cc +24 -24
  464. data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
  465. data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
  466. data/vendor/v8/test/cctest/test-debug.cc +136 -77
  467. data/vendor/v8/test/cctest/test-decls.cc +1 -1
  468. data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
  469. data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
  470. data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
  471. data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
  472. data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
  473. data/vendor/v8/test/cctest/test-heap.cc +240 -217
  474. data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
  475. data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
  476. data/vendor/v8/test/cctest/test-log.cc +114 -108
  477. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
  478. data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
  479. data/vendor/v8/test/cctest/test-parsing.cc +15 -14
  480. data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
  481. data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
  482. data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
  483. data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
  484. data/vendor/v8/test/cctest/test-regexp.cc +53 -41
  485. data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
  486. data/vendor/v8/test/cctest/test-serialize.cc +44 -43
  487. data/vendor/v8/test/cctest/test-sockets.cc +8 -3
  488. data/vendor/v8/test/cctest/test-spaces.cc +47 -29
  489. data/vendor/v8/test/cctest/test-strings.cc +20 -20
  490. data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
  491. data/vendor/v8/test/cctest/test-threads.cc +5 -3
  492. data/vendor/v8/test/cctest/test-utils.cc +5 -4
  493. data/vendor/v8/test/cctest/testcfg.py +7 -3
  494. data/vendor/v8/test/es5conform/es5conform.status +2 -77
  495. data/vendor/v8/test/es5conform/testcfg.py +1 -1
  496. data/vendor/v8/test/message/testcfg.py +1 -1
  497. data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
  498. data/vendor/v8/test/mjsunit/array-concat.js +43 -1
  499. data/vendor/v8/test/mjsunit/array-join.js +25 -0
  500. data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
  501. data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
  502. data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
  503. data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
  504. data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
  505. data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
  506. data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
  507. data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
  508. data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
  509. data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
  510. data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
  511. data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
  512. data/vendor/v8/test/mjsunit/object-seal.js +4 -13
  513. data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
  514. data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
  515. data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
  516. data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
  517. data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
  518. data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
  519. data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
  520. data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
  521. data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
  522. data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
  523. data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
  524. data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
  525. data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
  526. data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
  527. data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
  528. data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
  529. data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
  530. data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
  531. data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
  532. data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
  533. data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
  534. data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
  535. data/vendor/v8/test/mjsunit/testcfg.py +23 -6
  536. data/vendor/v8/test/mozilla/mozilla.status +0 -2
  537. data/vendor/v8/test/mozilla/testcfg.py +1 -1
  538. data/vendor/v8/test/preparser/empty.js +28 -0
  539. data/vendor/v8/test/preparser/functions-only.js +38 -0
  540. data/vendor/v8/test/preparser/non-alphanum.js +34 -0
  541. data/vendor/v8/test/preparser/symbols-only.js +49 -0
  542. data/vendor/v8/test/preparser/testcfg.py +90 -0
  543. data/vendor/v8/test/sputnik/testcfg.py +1 -1
  544. data/vendor/v8/test/test262/README +16 -0
  545. data/vendor/v8/test/test262/harness-adapt.js +80 -0
  546. data/vendor/v8/test/test262/test262.status +1506 -0
  547. data/vendor/v8/test/test262/testcfg.py +123 -0
  548. data/vendor/v8/tools/freebsd-tick-processor +10 -0
  549. data/vendor/v8/tools/gyp/v8.gyp +8 -33
  550. data/vendor/v8/tools/linux-tick-processor +5 -3
  551. data/vendor/v8/tools/test.py +37 -14
  552. data/vendor/v8/tools/tickprocessor.js +22 -8
  553. data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
  554. data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
  555. data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
  556. data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
  557. metadata +1495 -1341
  558. data/ext/extconf.rb +0 -22
  559. data/ext/mustang.cpp +0 -58
  560. data/vendor/v8/src/top.h +0 -608
@@ -31,10 +31,8 @@
31
31
 
32
32
  #include "constants-mips.h"
33
33
 
34
- namespace assembler {
35
- namespace mips {
36
-
37
- namespace v8i = v8::internal;
34
+ namespace v8 {
35
+ namespace internal {
38
36
 
39
37
 
40
38
  // -----------------------------------------------------------------------------
@@ -102,20 +100,20 @@ int Registers::Number(const char* name) {
102
100
  }
103
101
 
104
102
 
105
- const char* FPURegister::names_[kNumFPURegister] = {
103
+ const char* FPURegisters::names_[kNumFPURegisters] = {
106
104
  "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11",
107
105
  "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21",
108
106
  "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
109
107
  };
110
108
 
111
109
  // List of alias names which can be used when referring to MIPS registers.
112
- const FPURegister::RegisterAlias FPURegister::aliases_[] = {
110
+ const FPURegisters::RegisterAlias FPURegisters::aliases_[] = {
113
111
  {kInvalidRegister, NULL}
114
112
  };
115
113
 
116
- const char* FPURegister::Name(int creg) {
114
+ const char* FPURegisters::Name(int creg) {
117
115
  const char* result;
118
- if ((0 <= creg) && (creg < kNumFPURegister)) {
116
+ if ((0 <= creg) && (creg < kNumFPURegisters)) {
119
117
  result = names_[creg];
120
118
  } else {
121
119
  result = "nocreg";
@@ -124,9 +122,9 @@ const char* FPURegister::Name(int creg) {
124
122
  }
125
123
 
126
124
 
127
- int FPURegister::Number(const char* name) {
125
+ int FPURegisters::Number(const char* name) {
128
126
  // Look through the canonical names.
129
- for (int i = 0; i < kNumSimuRegisters; i++) {
127
+ for (int i = 0; i < kNumFPURegisters; i++) {
130
128
  if (strcmp(names_[i], name) == 0) {
131
129
  return i;
132
130
  }
@@ -149,8 +147,8 @@ int FPURegister::Number(const char* name) {
149
147
  // -----------------------------------------------------------------------------
150
148
  // Instruction
151
149
 
152
- bool Instruction::IsForbiddenInBranchDelay() {
153
- int op = OpcodeFieldRaw();
150
+ bool Instruction::IsForbiddenInBranchDelay() const {
151
+ const int op = OpcodeFieldRaw();
154
152
  switch (op) {
155
153
  case J:
156
154
  case JAL:
@@ -189,13 +187,18 @@ bool Instruction::IsForbiddenInBranchDelay() {
189
187
  }
190
188
 
191
189
 
192
- bool Instruction::IsLinkingInstruction() {
193
- int op = OpcodeFieldRaw();
190
+ bool Instruction::IsLinkingInstruction() const {
191
+ const int op = OpcodeFieldRaw();
194
192
  switch (op) {
195
193
  case JAL:
196
- case BGEZAL:
197
- case BLTZAL:
198
- return true;
194
+ case REGIMM:
195
+ switch (RtFieldRaw()) {
196
+ case BGEZAL:
197
+ case BLTZAL:
198
+ return true;
199
+ default:
200
+ return false;
201
+ };
199
202
  case SPECIAL:
200
203
  switch (FunctionFieldRaw()) {
201
204
  case JALR:
@@ -209,7 +212,7 @@ bool Instruction::IsLinkingInstruction() {
209
212
  }
210
213
 
211
214
 
212
- bool Instruction::IsTrap() {
215
+ bool Instruction::IsTrap() const {
213
216
  if (OpcodeFieldRaw() != SPECIAL) {
214
217
  return false;
215
218
  } else {
@@ -264,6 +267,9 @@ Instruction::Type Instruction::InstructionType() const {
264
267
  case TLTU:
265
268
  case TEQ:
266
269
  case TNE:
270
+ case MOVZ:
271
+ case MOVN:
272
+ case MOVCI:
267
273
  return kRegisterType;
268
274
  default:
269
275
  UNREACHABLE();
@@ -272,13 +278,23 @@ Instruction::Type Instruction::InstructionType() const {
272
278
  case SPECIAL2:
273
279
  switch (FunctionFieldRaw()) {
274
280
  case MUL:
281
+ case CLZ:
275
282
  return kRegisterType;
276
283
  default:
277
284
  UNREACHABLE();
278
285
  };
279
286
  break;
280
- case COP1: // Coprocessor instructions
287
+ case SPECIAL3:
281
288
  switch (FunctionFieldRaw()) {
289
+ case INS:
290
+ case EXT:
291
+ return kRegisterType;
292
+ default:
293
+ UNREACHABLE();
294
+ };
295
+ break;
296
+ case COP1: // Coprocessor instructions
297
+ switch (RsFieldRawNoAssert()) {
282
298
  case BC1: // branch on coprocessor condition
283
299
  return kImmediateType;
284
300
  default:
@@ -304,10 +320,17 @@ Instruction::Type Instruction::InstructionType() const {
304
320
  case BLEZL:
305
321
  case BGTZL:
306
322
  case LB:
323
+ case LH:
324
+ case LWL:
307
325
  case LW:
308
326
  case LBU:
327
+ case LHU:
328
+ case LWR:
309
329
  case SB:
330
+ case SH:
331
+ case SWL:
310
332
  case SW:
333
+ case SWR:
311
334
  case LWC1:
312
335
  case LDC1:
313
336
  case SWC1:
@@ -323,6 +346,7 @@ Instruction::Type Instruction::InstructionType() const {
323
346
  return kUnsupported;
324
347
  }
325
348
 
326
- } } // namespace assembler::mips
349
+
350
+ } } // namespace v8::internal
327
351
 
328
352
  #endif // V8_TARGET_ARCH_MIPS
@@ -28,15 +28,25 @@
28
28
  #ifndef V8_MIPS_CONSTANTS_H_
29
29
  #define V8_MIPS_CONSTANTS_H_
30
30
 
31
- #include "checks.h"
32
-
33
31
  // UNIMPLEMENTED_ macro for MIPS.
32
+ #ifdef DEBUG
34
33
  #define UNIMPLEMENTED_MIPS() \
35
34
  v8::internal::PrintF("%s, \tline %d: \tfunction %s not implemented. \n", \
36
35
  __FILE__, __LINE__, __func__)
36
+ #else
37
+ #define UNIMPLEMENTED_MIPS()
38
+ #endif
39
+
37
40
  #define UNSUPPORTED_MIPS() v8::internal::PrintF("Unsupported instruction.\n")
38
41
 
39
42
 
43
+ #ifdef _MIPS_ARCH_MIPS32R2
44
+ #define mips32r2 1
45
+ #else
46
+ #define mips32r2 0
47
+ #endif
48
+
49
+
40
50
  // Defines constants and accessor classes to assemble, disassemble and
41
51
  // simulate MIPS32 instructions.
42
52
  //
@@ -44,8 +54,8 @@
44
54
  // Volume II: The MIPS32 Instruction Set
45
55
  // Try www.cs.cornell.edu/courses/cs3410/2008fa/MIPS_Vol2.pdf.
46
56
 
47
- namespace assembler {
48
- namespace mips {
57
+ namespace v8 {
58
+ namespace internal {
49
59
 
50
60
  // -----------------------------------------------------------------------------
51
61
  // Registers and FPURegister.
@@ -61,9 +71,18 @@ static const int kNumSimuRegisters = 35;
61
71
  static const int kPCRegister = 34;
62
72
 
63
73
  // Number coprocessor registers.
64
- static const int kNumFPURegister = 32;
74
+ static const int kNumFPURegisters = 32;
65
75
  static const int kInvalidFPURegister = -1;
66
76
 
77
+ // FPU (coprocessor 1) control registers. Currently only FCSR is implemented.
78
+ static const int kFCSRRegister = 31;
79
+ static const int kInvalidFPUControlRegister = -1;
80
+ static const uint32_t kFPUInvalidResult = (uint32_t) (1 << 31) - 1;
81
+
82
+ // FCSR constants.
83
+ static const uint32_t kFCSRFlagMask = (1 << 6) - 1;
84
+ static const uint32_t kFCSRFlagShift = 2;
85
+
67
86
  // Helper functions for converting between register numbers and names.
68
87
  class Registers {
69
88
  public:
@@ -88,7 +107,7 @@ class Registers {
88
107
  };
89
108
 
90
109
  // Helper functions for converting between register numbers and names.
91
- class FPURegister {
110
+ class FPURegisters {
92
111
  public:
93
112
  // Return the name of the register.
94
113
  static const char* Name(int reg);
@@ -103,7 +122,7 @@ class FPURegister {
103
122
 
104
123
  private:
105
124
 
106
- static const char* names_[kNumFPURegister];
125
+ static const char* names_[kNumFPURegisters];
107
126
  static const RegisterAlias aliases_[];
108
127
  };
109
128
 
@@ -136,6 +155,7 @@ static const int kSaShift = 6;
136
155
  static const int kSaBits = 5;
137
156
  static const int kFunctionShift = 0;
138
157
  static const int kFunctionBits = 6;
158
+ static const int kLuiShift = 16;
139
159
 
140
160
  static const int kImm16Shift = 0;
141
161
  static const int kImm16Bits = 16;
@@ -146,6 +166,14 @@ static const int kFsShift = 11;
146
166
  static const int kFsBits = 5;
147
167
  static const int kFtShift = 16;
148
168
  static const int kFtBits = 5;
169
+ static const int kFdShift = 6;
170
+ static const int kFdBits = 5;
171
+ static const int kFCccShift = 8;
172
+ static const int kFCccBits = 3;
173
+ static const int kFBccShift = 18;
174
+ static const int kFBccBits = 3;
175
+ static const int kFBtrueShift = 16;
176
+ static const int kFBtrueBits = 1;
149
177
 
150
178
  // ----- Miscellianous useful masks.
151
179
  // Instruction bit masks.
@@ -159,9 +187,9 @@ static const int kSaFieldMask = ((1 << kSaBits) - 1) << kSaShift;
159
187
  static const int kFunctionFieldMask =
160
188
  ((1 << kFunctionBits) - 1) << kFunctionShift;
161
189
  // Misc masks.
162
- static const int HIMask = 0xffff << 16;
163
- static const int LOMask = 0xffff;
164
- static const int signMask = 0x80000000;
190
+ static const int kHiMask = 0xffff << 16;
191
+ static const int kLoMask = 0xffff;
192
+ static const int kSignMask = 0x80000000;
165
193
 
166
194
 
167
195
  // ----- MIPS Opcodes and Function Fields.
@@ -194,12 +222,20 @@ enum Opcode {
194
222
  BGTZL = ((2 << 3) + 7) << kOpcodeShift,
195
223
 
196
224
  SPECIAL2 = ((3 << 3) + 4) << kOpcodeShift,
225
+ SPECIAL3 = ((3 << 3) + 7) << kOpcodeShift,
197
226
 
198
227
  LB = ((4 << 3) + 0) << kOpcodeShift,
228
+ LH = ((4 << 3) + 1) << kOpcodeShift,
229
+ LWL = ((4 << 3) + 2) << kOpcodeShift,
199
230
  LW = ((4 << 3) + 3) << kOpcodeShift,
200
231
  LBU = ((4 << 3) + 4) << kOpcodeShift,
232
+ LHU = ((4 << 3) + 5) << kOpcodeShift,
233
+ LWR = ((4 << 3) + 6) << kOpcodeShift,
201
234
  SB = ((5 << 3) + 0) << kOpcodeShift,
235
+ SH = ((5 << 3) + 1) << kOpcodeShift,
236
+ SWL = ((5 << 3) + 2) << kOpcodeShift,
202
237
  SW = ((5 << 3) + 3) << kOpcodeShift,
238
+ SWR = ((5 << 3) + 6) << kOpcodeShift,
203
239
 
204
240
  LWC1 = ((6 << 3) + 1) << kOpcodeShift,
205
241
  LDC1 = ((6 << 3) + 5) << kOpcodeShift,
@@ -216,9 +252,12 @@ enum SecondaryField {
216
252
  SLLV = ((0 << 3) + 4),
217
253
  SRLV = ((0 << 3) + 6),
218
254
  SRAV = ((0 << 3) + 7),
255
+ MOVCI = ((0 << 3) + 1),
219
256
 
220
257
  JR = ((1 << 3) + 0),
221
258
  JALR = ((1 << 3) + 1),
259
+ MOVZ = ((1 << 3) + 2),
260
+ MOVN = ((1 << 3) + 3),
222
261
  BREAK = ((1 << 3) + 5),
223
262
 
224
263
  MFHI = ((2 << 3) + 0),
@@ -250,6 +289,12 @@ enum SecondaryField {
250
289
 
251
290
  // SPECIAL2 Encoding of Function Field.
252
291
  MUL = ((0 << 3) + 2),
292
+ CLZ = ((4 << 3) + 0),
293
+ CLO = ((4 << 3) + 1),
294
+
295
+ // SPECIAL3 Encoding of Function Field.
296
+ EXT = ((0 << 3) + 0),
297
+ INS = ((0 << 3) + 4),
253
298
 
254
299
  // REGIMM encoding of rt Field.
255
300
  BLTZ = ((0 << 3) + 0) << 16,
@@ -259,8 +304,10 @@ enum SecondaryField {
259
304
 
260
305
  // COP1 Encoding of rs Field.
261
306
  MFC1 = ((0 << 3) + 0) << 21,
307
+ CFC1 = ((0 << 3) + 2) << 21,
262
308
  MFHC1 = ((0 << 3) + 3) << 21,
263
309
  MTC1 = ((0 << 3) + 4) << 21,
310
+ CTC1 = ((0 << 3) + 6) << 21,
264
311
  MTHC1 = ((0 << 3) + 7) << 21,
265
312
  BC1 = ((1 << 3) + 0) << 21,
266
313
  S = ((2 << 3) + 0) << 21,
@@ -269,14 +316,46 @@ enum SecondaryField {
269
316
  L = ((2 << 3) + 5) << 21,
270
317
  PS = ((2 << 3) + 6) << 21,
271
318
  // COP1 Encoding of Function Field When rs=S.
319
+ ROUND_L_S = ((1 << 3) + 0),
320
+ TRUNC_L_S = ((1 << 3) + 1),
321
+ CEIL_L_S = ((1 << 3) + 2),
322
+ FLOOR_L_S = ((1 << 3) + 3),
323
+ ROUND_W_S = ((1 << 3) + 4),
324
+ TRUNC_W_S = ((1 << 3) + 5),
325
+ CEIL_W_S = ((1 << 3) + 6),
326
+ FLOOR_W_S = ((1 << 3) + 7),
272
327
  CVT_D_S = ((4 << 3) + 1),
273
328
  CVT_W_S = ((4 << 3) + 4),
274
329
  CVT_L_S = ((4 << 3) + 5),
275
330
  CVT_PS_S = ((4 << 3) + 6),
276
331
  // COP1 Encoding of Function Field When rs=D.
332
+ ADD_D = ((0 << 3) + 0),
333
+ SUB_D = ((0 << 3) + 1),
334
+ MUL_D = ((0 << 3) + 2),
335
+ DIV_D = ((0 << 3) + 3),
336
+ SQRT_D = ((0 << 3) + 4),
337
+ ABS_D = ((0 << 3) + 5),
338
+ MOV_D = ((0 << 3) + 6),
339
+ NEG_D = ((0 << 3) + 7),
340
+ ROUND_L_D = ((1 << 3) + 0),
341
+ TRUNC_L_D = ((1 << 3) + 1),
342
+ CEIL_L_D = ((1 << 3) + 2),
343
+ FLOOR_L_D = ((1 << 3) + 3),
344
+ ROUND_W_D = ((1 << 3) + 4),
345
+ TRUNC_W_D = ((1 << 3) + 5),
346
+ CEIL_W_D = ((1 << 3) + 6),
347
+ FLOOR_W_D = ((1 << 3) + 7),
277
348
  CVT_S_D = ((4 << 3) + 0),
278
349
  CVT_W_D = ((4 << 3) + 4),
279
350
  CVT_L_D = ((4 << 3) + 5),
351
+ C_F_D = ((6 << 3) + 0),
352
+ C_UN_D = ((6 << 3) + 1),
353
+ C_EQ_D = ((6 << 3) + 2),
354
+ C_UEQ_D = ((6 << 3) + 3),
355
+ C_OLT_D = ((6 << 3) + 4),
356
+ C_ULT_D = ((6 << 3) + 5),
357
+ C_OLE_D = ((6 << 3) + 6),
358
+ C_ULE_D = ((6 << 3) + 7),
280
359
  // COP1 Encoding of Function Field When rs=W or L.
281
360
  CVT_S_W = ((4 << 3) + 0),
282
361
  CVT_D_W = ((4 << 3) + 1),
@@ -293,7 +372,7 @@ enum SecondaryField {
293
372
  // the 'U' prefix is used to specify unsigned comparisons.
294
373
  enum Condition {
295
374
  // Any value < 0 is considered no_condition.
296
- no_condition = -1,
375
+ kNoCondition = -1,
297
376
 
298
377
  overflow = 0,
299
378
  no_overflow = 1,
@@ -321,12 +400,59 @@ enum Condition {
321
400
  eq = equal,
322
401
  not_zero = not_equal,
323
402
  ne = not_equal,
403
+ nz = not_equal,
324
404
  sign = negative,
325
405
  not_sign = positive,
326
-
327
- cc_default = no_condition
406
+ mi = negative,
407
+ pl = positive,
408
+ hi = Ugreater,
409
+ ls = Uless_equal,
410
+ ge = greater_equal,
411
+ lt = less,
412
+ gt = greater,
413
+ le = less_equal,
414
+ hs = Ugreater_equal,
415
+ lo = Uless,
416
+ al = cc_always,
417
+
418
+ cc_default = kNoCondition
328
419
  };
329
420
 
421
+
422
+ // Returns the equivalent of !cc.
423
+ // Negation of the default kNoCondition (-1) results in a non-default
424
+ // no_condition value (-2). As long as tests for no_condition check
425
+ // for condition < 0, this will work as expected.
426
+ inline Condition NegateCondition(Condition cc) {
427
+ ASSERT(cc != cc_always);
428
+ return static_cast<Condition>(cc ^ 1);
429
+ }
430
+
431
+
432
+ inline Condition ReverseCondition(Condition cc) {
433
+ switch (cc) {
434
+ case Uless:
435
+ return Ugreater;
436
+ case Ugreater:
437
+ return Uless;
438
+ case Ugreater_equal:
439
+ return Uless_equal;
440
+ case Uless_equal:
441
+ return Ugreater_equal;
442
+ case less:
443
+ return greater;
444
+ case greater:
445
+ return less;
446
+ case greater_equal:
447
+ return less_equal;
448
+ case less_equal:
449
+ return greater_equal;
450
+ default:
451
+ return cc;
452
+ };
453
+ }
454
+
455
+
330
456
  // ----- Coprocessor conditions.
331
457
  enum FPUCondition {
332
458
  F, // False
@@ -340,6 +466,46 @@ enum FPUCondition {
340
466
  };
341
467
 
342
468
 
469
+ // -----------------------------------------------------------------------------
470
+ // Hints.
471
+
472
+ // Branch hints are not used on the MIPS. They are defined so that they can
473
+ // appear in shared function signatures, but will be ignored in MIPS
474
+ // implementations.
475
+ enum Hint {
476
+ no_hint = 0
477
+ };
478
+
479
+
480
+ inline Hint NegateHint(Hint hint) {
481
+ return no_hint;
482
+ }
483
+
484
+
485
+ // -----------------------------------------------------------------------------
486
+ // Specific instructions, constants, and masks.
487
+ // These constants are declared in assembler-mips.cc, as they use named
488
+ // registers and other constants.
489
+
490
+ // addiu(sp, sp, 4) aka Pop() operation or part of Pop(r)
491
+ // operations as post-increment of sp.
492
+ extern const Instr kPopInstruction;
493
+ // addiu(sp, sp, -4) part of Push(r) operation as pre-decrement of sp.
494
+ extern const Instr kPushInstruction;
495
+ // sw(r, MemOperand(sp, 0))
496
+ extern const Instr kPushRegPattern;
497
+ // lw(r, MemOperand(sp, 0))
498
+ extern const Instr kPopRegPattern;
499
+ extern const Instr kLwRegFpOffsetPattern;
500
+ extern const Instr kSwRegFpOffsetPattern;
501
+ extern const Instr kLwRegFpNegOffsetPattern;
502
+ extern const Instr kSwRegFpNegOffsetPattern;
503
+ // A mask for the Rt register for push, pop, lw, sw instructions.
504
+ extern const Instr kRtMask;
505
+ extern const Instr kLwSwInstrTypeMask;
506
+ extern const Instr kLwSwInstrArgumentMask;
507
+ extern const Instr kLwSwOffsetMask;
508
+
343
509
  // Break 0xfffff, reserved for redirected real time call.
344
510
  const Instr rtCallRedirInstr = SPECIAL | BREAK | call_rt_redirected << 6;
345
511
  // A nop instruction. (Encoding of sll 0 0 0).
@@ -348,10 +514,10 @@ const Instr nopInstr = 0;
348
514
  class Instruction {
349
515
  public:
350
516
  enum {
351
- kInstructionSize = 4,
352
- kInstructionSizeLog2 = 2,
517
+ kInstrSize = 4,
518
+ kInstrSizeLog2 = 2,
353
519
  // On MIPS PC cannot actually be directly accessed. We behave as if PC was
354
- // always the value of the current instruction being exectued.
520
+ // always the value of the current instruction being executed.
355
521
  kPCReadOffset = 0
356
522
  };
357
523
 
@@ -388,45 +554,64 @@ class Instruction {
388
554
 
389
555
 
390
556
  // Accessors for the different named fields used in the MIPS encoding.
391
- inline Opcode OpcodeField() const {
557
+ inline Opcode OpcodeValue() const {
392
558
  return static_cast<Opcode>(
393
559
  Bits(kOpcodeShift + kOpcodeBits - 1, kOpcodeShift));
394
560
  }
395
561
 
396
- inline int RsField() const {
562
+ inline int RsValue() const {
397
563
  ASSERT(InstructionType() == kRegisterType ||
398
564
  InstructionType() == kImmediateType);
399
565
  return Bits(kRsShift + kRsBits - 1, kRsShift);
400
566
  }
401
567
 
402
- inline int RtField() const {
568
+ inline int RtValue() const {
403
569
  ASSERT(InstructionType() == kRegisterType ||
404
570
  InstructionType() == kImmediateType);
405
571
  return Bits(kRtShift + kRtBits - 1, kRtShift);
406
572
  }
407
573
 
408
- inline int RdField() const {
574
+ inline int RdValue() const {
409
575
  ASSERT(InstructionType() == kRegisterType);
410
576
  return Bits(kRdShift + kRdBits - 1, kRdShift);
411
577
  }
412
578
 
413
- inline int SaField() const {
579
+ inline int SaValue() const {
414
580
  ASSERT(InstructionType() == kRegisterType);
415
581
  return Bits(kSaShift + kSaBits - 1, kSaShift);
416
582
  }
417
583
 
418
- inline int FunctionField() const {
584
+ inline int FunctionValue() const {
419
585
  ASSERT(InstructionType() == kRegisterType ||
420
586
  InstructionType() == kImmediateType);
421
587
  return Bits(kFunctionShift + kFunctionBits - 1, kFunctionShift);
422
588
  }
423
589
 
424
- inline int FsField() const {
425
- return Bits(kFsShift + kRsBits - 1, kFsShift);
590
+ inline int FdValue() const {
591
+ return Bits(kFdShift + kFdBits - 1, kFdShift);
592
+ }
593
+
594
+ inline int FsValue() const {
595
+ return Bits(kFsShift + kFsBits - 1, kFsShift);
596
+ }
597
+
598
+ inline int FtValue() const {
599
+ return Bits(kFtShift + kFtBits - 1, kFtShift);
426
600
  }
427
601
 
428
- inline int FtField() const {
429
- return Bits(kFtShift + kRsBits - 1, kFtShift);
602
+ // Float Compare condition code instruction bits.
603
+ inline int FCccValue() const {
604
+ return Bits(kFCccShift + kFCccBits - 1, kFCccShift);
605
+ }
606
+
607
+ // Float Branch condition code instruction bits.
608
+ inline int FBccValue() const {
609
+ return Bits(kFBccShift + kFBccBits - 1, kFBccShift);
610
+ }
611
+
612
+ // Float Branch true/false instruction bit.
613
+ inline int FBtrueValue() const {
614
+ return Bits(kFBtrueShift + kFBtrueBits - 1, kFBtrueShift);
430
615
  }
431
616
 
432
617
  // Return the fields at their original place in the instruction encoding.
@@ -440,6 +625,11 @@ class Instruction {
440
625
  return InstructionBits() & kRsFieldMask;
441
626
  }
442
627
 
628
+ // Same as above function, but safe to call within InstructionType().
629
+ inline int RsFieldRawNoAssert() const {
630
+ return InstructionBits() & kRsFieldMask;
631
+ }
632
+
443
633
  inline int RtFieldRaw() const {
444
634
  ASSERT(InstructionType() == kRegisterType ||
445
635
  InstructionType() == kImmediateType);
@@ -461,37 +651,37 @@ class Instruction {
461
651
  }
462
652
 
463
653
  // Get the secondary field according to the opcode.
464
- inline int SecondaryField() const {
654
+ inline int SecondaryValue() const {
465
655
  Opcode op = OpcodeFieldRaw();
466
656
  switch (op) {
467
657
  case SPECIAL:
468
658
  case SPECIAL2:
469
- return FunctionField();
659
+ return FunctionValue();
470
660
  case COP1:
471
- return RsField();
661
+ return RsValue();
472
662
  case REGIMM:
473
- return RtField();
663
+ return RtValue();
474
664
  default:
475
665
  return NULLSF;
476
666
  }
477
667
  }
478
668
 
479
- inline int32_t Imm16Field() const {
669
+ inline int32_t Imm16Value() const {
480
670
  ASSERT(InstructionType() == kImmediateType);
481
671
  return Bits(kImm16Shift + kImm16Bits - 1, kImm16Shift);
482
672
  }
483
673
 
484
- inline int32_t Imm26Field() const {
674
+ inline int32_t Imm26Value() const {
485
675
  ASSERT(InstructionType() == kJumpType);
486
676
  return Bits(kImm16Shift + kImm26Bits - 1, kImm26Shift);
487
677
  }
488
678
 
489
679
  // Say if the instruction should not be used in a branch delay slot.
490
- bool IsForbiddenInBranchDelay();
680
+ bool IsForbiddenInBranchDelay() const;
491
681
  // Say if the instruction 'links'. eg: jal, bal.
492
- bool IsLinkingInstruction();
682
+ bool IsLinkingInstruction() const;
493
683
  // Say if the instruction is a break or a trap.
494
- bool IsTrap();
684
+ bool IsTrap() const;
495
685
 
496
686
  // Instructions are read of out a code stream. The only way to get a
497
687
  // reference to an instruction is to convert a pointer. There is no way
@@ -510,16 +700,24 @@ class Instruction {
510
700
  // -----------------------------------------------------------------------------
511
701
  // MIPS assembly various constants.
512
702
 
513
- static const int kArgsSlotsSize = 4 * Instruction::kInstructionSize;
703
+
704
+ static const int kArgsSlotsSize = 4 * Instruction::kInstrSize;
514
705
  static const int kArgsSlotsNum = 4;
706
+ // C/C++ argument slots size.
707
+ static const int kCArgsSlotsSize = 4 * Instruction::kInstrSize;
708
+ // JS argument slots size.
709
+ static const int kJSArgsSlotsSize = 0 * Instruction::kInstrSize;
710
+ // Assembly builtins argument slots size.
711
+ static const int kBArgsSlotsSize = 0 * Instruction::kInstrSize;
515
712
 
516
- static const int kBranchReturnOffset = 2 * Instruction::kInstructionSize;
713
+ static const int kBranchReturnOffset = 2 * Instruction::kInstrSize;
517
714
 
518
- static const int kDoubleAlignment = 2 * 8;
519
- static const int kDoubleAlignmentMask = kDoubleAlignmentMask - 1;
715
+ static const int kDoubleAlignmentBits = 3;
716
+ static const int kDoubleAlignment = (1 << kDoubleAlignmentBits);
717
+ static const int kDoubleAlignmentMask = kDoubleAlignment - 1;
520
718
 
521
719
 
522
- } } // namespace assembler::mips
720
+ } } // namespace v8::internal
523
721
 
524
722
  #endif // #ifndef V8_MIPS_CONSTANTS_H_
525
723