therubyracer 0.7.4 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (482) hide show
  1. data/History.txt +11 -0
  2. data/Rakefile +1 -1
  3. data/ext/v8/extconf.rb +0 -18
  4. data/ext/v8/rr.cpp +2 -2
  5. data/ext/v8/upstream/{2.1.10 → 2.3.3}/AUTHORS +1 -0
  6. data/ext/v8/upstream/{2.1.10 → 2.3.3}/ChangeLog +239 -0
  7. data/ext/v8/upstream/{2.1.10 → 2.3.3}/LICENSE +0 -0
  8. data/ext/v8/upstream/{2.1.10 → 2.3.3}/SConstruct +29 -17
  9. data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-debug.h +61 -3
  10. data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8-profiler.h +182 -5
  11. data/ext/v8/upstream/{2.1.10 → 2.3.3}/include/v8.h +458 -257
  12. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/SConscript +2 -5
  13. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.cc +2 -2
  14. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/accessors.h +0 -0
  15. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.cc +0 -0
  16. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/allocation.h +0 -0
  17. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.cc +574 -30
  18. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/api.h +12 -10
  19. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apinatives.js +0 -0
  20. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/apiutils.h +0 -0
  21. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arguments.h +0 -0
  22. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm-inl.h +38 -15
  23. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.cc +646 -101
  24. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/assembler-arm.h +174 -15
  25. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/builtins-arm.cc +56 -47
  26. data/ext/v8/upstream/2.3.3/src/arm/codegen-arm-inl.h +48 -0
  27. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.cc +2957 -1448
  28. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/codegen-arm.h +230 -74
  29. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.cc +25 -1
  30. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/constants-arm.h +16 -1
  31. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/cpu-arm.cc +4 -0
  32. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/debug-arm.cc +76 -6
  33. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/disasm-arm.cc +168 -20
  34. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/fast-codegen-arm.cc +5 -2
  35. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.cc +4 -4
  36. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/frames-arm.h +0 -0
  37. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/full-codegen-arm.cc +1558 -248
  38. data/ext/v8/upstream/2.3.3/src/arm/ic-arm.cc +2258 -0
  39. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/jump-target-arm.cc +55 -103
  40. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.cc +358 -185
  41. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/macro-assembler-arm.h +136 -41
  42. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.cc +26 -5
  43. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/regexp-macro-assembler-arm.h +0 -0
  44. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm-inl.h +0 -0
  45. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.cc +4 -0
  46. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/register-allocator-arm.h +0 -0
  47. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.cc +203 -22
  48. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/simulator-arm.h +7 -0
  49. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/stub-cache-arm.cc +531 -324
  50. data/ext/v8/upstream/2.3.3/src/arm/virtual-frame-arm-inl.h +59 -0
  51. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.cc +247 -81
  52. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/arm/virtual-frame-arm.h +99 -83
  53. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/array.js +2 -2
  54. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.cc +6 -13
  55. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/assembler.h +36 -10
  56. data/ext/v8/upstream/2.3.3/src/ast-inl.h +81 -0
  57. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.cc +14 -0
  58. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ast.h +20 -35
  59. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.cc +32 -1
  60. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bootstrapper.h +0 -4
  61. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.cc +50 -33
  62. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/builtins.h +2 -0
  63. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/bytecodes-irregexp.h +0 -0
  64. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cached-powers.h +0 -0
  65. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates-inl.h +0 -0
  66. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/char-predicates.h +0 -0
  67. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.cc +0 -0
  68. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/checks.h +8 -6
  69. data/ext/v8/upstream/2.3.3/src/circular-queue-inl.h +53 -0
  70. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.cc +0 -0
  71. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/circular-queue.h +0 -26
  72. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.cc +2 -4
  73. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code-stubs.h +1 -0
  74. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/code.h +0 -0
  75. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen-inl.h +0 -0
  76. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.cc +44 -13
  77. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/codegen.h +310 -31
  78. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.cc +28 -0
  79. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compilation-cache.h +3 -0
  80. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.cc +45 -14
  81. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/compiler.h +0 -0
  82. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.cc +11 -11
  83. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/contexts.h +0 -0
  84. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions-inl.h +0 -0
  85. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.cc +25 -11
  86. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/conversions.h +0 -0
  87. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.cc +0 -0
  88. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/counters.h +0 -0
  89. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler-inl.h +2 -1
  90. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.cc +68 -24
  91. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu-profiler.h +19 -11
  92. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/cpu.h +0 -0
  93. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.cc +0 -0
  94. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-debug.h +0 -0
  95. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-posix.cc +0 -0
  96. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-readline.cc +0 -0
  97. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8-windows.cc +0 -0
  98. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.cc +3 -0
  99. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.h +0 -0
  100. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/d8.js +55 -2
  101. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.cc +3 -0
  102. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/data-flow.h +0 -0
  103. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/date.js +68 -137
  104. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser-inl.h +0 -0
  105. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.cc +2 -8
  106. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dateparser.h +0 -0
  107. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.cc +3 -3
  108. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-agent.h +0 -0
  109. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug-debugger.js +81 -23
  110. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.cc +275 -81
  111. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/debug.h +85 -6
  112. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disasm.h +0 -0
  113. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.cc +1 -1
  114. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/disassembler.h +0 -0
  115. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.cc +0 -0
  116. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/diy-fp.h +0 -0
  117. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/double.h +0 -0
  118. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/dtoa-config.c +0 -0
  119. data/ext/v8/upstream/2.3.3/src/dtoa.cc +77 -0
  120. data/ext/v8/upstream/2.3.3/src/dtoa.h +81 -0
  121. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.cc +111 -3
  122. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/execution.h +12 -1
  123. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.cc +25 -3
  124. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/factory.h +16 -9
  125. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.cc +0 -0
  126. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-codegen.h +0 -0
  127. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.cc +2 -9
  128. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/fast-dtoa.h +1 -2
  129. data/ext/v8/upstream/2.3.3/src/fixed-dtoa.cc +405 -0
  130. data/ext/v8/upstream/{2.1.10/src/jump-target-light.cc → 2.3.3/src/fixed-dtoa.h} +22 -53
  131. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flag-definitions.h +14 -6
  132. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.cc +5 -9
  133. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flags.h +0 -0
  134. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.cc +0 -0
  135. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/flow-graph.h +0 -0
  136. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.cc +0 -0
  137. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frame-element.h +0 -0
  138. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames-inl.h +0 -0
  139. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.cc +5 -2
  140. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/frames.h +1 -0
  141. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.cc +387 -20
  142. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/full-codegen.h +102 -5
  143. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.cc +0 -0
  144. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/func-name-inferrer.h +0 -0
  145. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.cc +8 -4
  146. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/global-handles.h +0 -0
  147. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/globals.h +44 -7
  148. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles-inl.h +0 -0
  149. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.cc +19 -0
  150. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/handles.h +8 -0
  151. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.cc +0 -0
  152. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/hashmap.h +0 -0
  153. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-inl.h +56 -14
  154. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.cc +85 -1
  155. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap-profiler.h +45 -1
  156. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.cc +994 -396
  157. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/heap.h +220 -65
  158. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32-inl.h +41 -12
  159. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.cc +94 -24
  160. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/assembler-ia32.h +32 -4
  161. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/builtins-ia32.cc +42 -30
  162. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32-inl.h +0 -0
  163. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.cc +1758 -916
  164. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/codegen-ia32.h +67 -74
  165. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/cpu-ia32.cc +4 -0
  166. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/debug-ia32.cc +46 -0
  167. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/disasm-ia32.cc +37 -6
  168. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.cc +4 -0
  169. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/fast-codegen-ia32.h +0 -0
  170. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.cc +4 -0
  171. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/frames-ia32.h +0 -0
  172. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/full-codegen-ia32.cc +1465 -198
  173. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/ic-ia32.cc +688 -367
  174. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/jump-target-ia32.cc +4 -0
  175. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.cc +82 -180
  176. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/macro-assembler-ia32.h +41 -25
  177. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.cc +68 -24
  178. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/regexp-macro-assembler-ia32.h +1 -2
  179. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32-inl.h +0 -0
  180. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.cc +4 -0
  181. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/register-allocator-ia32.h +0 -0
  182. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.cc +0 -0
  183. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/simulator-ia32.h +0 -0
  184. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/stub-cache-ia32.cc +649 -302
  185. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.cc +23 -1
  186. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ia32/virtual-frame-ia32.h +18 -27
  187. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic-inl.h +30 -3
  188. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.cc +384 -66
  189. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/ic.h +65 -24
  190. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.cc +0 -0
  191. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/interpreter-irregexp.h +0 -0
  192. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/json.js +3 -3
  193. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.cc +20 -4
  194. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jsregexp.h +0 -0
  195. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy-inl.h +0 -0
  196. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-heavy.cc +79 -13
  197. data/ext/v8/upstream/{2.1.10/src/jump-target.h → 2.3.3/src/jump-target-heavy.h} +5 -47
  198. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-inl.h +0 -0
  199. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target-light-inl.h +16 -2
  200. data/ext/v8/upstream/2.3.3/src/jump-target-light.cc +110 -0
  201. data/ext/v8/upstream/2.3.3/src/jump-target-light.h +192 -0
  202. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/jump-target.cc +0 -64
  203. data/ext/v8/upstream/2.3.3/src/jump-target.h +90 -0
  204. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list-inl.h +0 -0
  205. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/list.h +0 -0
  206. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit-debugger.js +141 -28
  207. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.cc +19 -7
  208. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/liveedit.h +0 -0
  209. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-inl.h +0 -0
  210. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.cc +0 -0
  211. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log-utils.h +0 -0
  212. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.cc +12 -11
  213. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/log.h +12 -0
  214. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macro-assembler.h +0 -16
  215. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/macros.py +21 -0
  216. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.cc +120 -109
  217. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mark-compact.h +25 -37
  218. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/math.js +0 -0
  219. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/memory.h +0 -0
  220. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.cc +8 -3
  221. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.h +2 -1
  222. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/messages.js +15 -7
  223. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips-inl.h +0 -0
  224. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.cc +12 -1
  225. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/assembler-mips.h +4 -1
  226. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/builtins-mips.cc +3 -0
  227. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips-inl.h +0 -0
  228. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.cc +9 -0
  229. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/codegen-mips.h +1 -0
  230. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.cc +5 -0
  231. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/constants-mips.h +0 -0
  232. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/cpu-mips.cc +4 -0
  233. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/debug-mips.cc +3 -0
  234. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/disasm-mips.cc +3 -0
  235. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/fast-codegen-mips.cc +3 -0
  236. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.cc +3 -0
  237. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/frames-mips.h +0 -0
  238. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/full-codegen-mips.cc +5 -1
  239. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/ic-mips.cc +3 -0
  240. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/jump-target-mips.cc +3 -0
  241. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.cc +3 -0
  242. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/macro-assembler-mips.h +0 -0
  243. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips-inl.h +0 -0
  244. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.cc +3 -0
  245. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/register-allocator-mips.h +0 -0
  246. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.cc +3 -0
  247. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/simulator-mips.h +0 -0
  248. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/stub-cache-mips.cc +3 -0
  249. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.cc +3 -0
  250. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mips/virtual-frame-mips.h +0 -0
  251. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mirror-debugger.js +46 -4
  252. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/mksnapshot.cc +0 -0
  253. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/natives.h +0 -0
  254. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-debug.cc +8 -1
  255. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects-inl.h +235 -62
  256. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.cc +497 -231
  257. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/objects.h +355 -149
  258. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.cc +0 -0
  259. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/oprofile-agent.h +0 -0
  260. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.cc +31 -6
  261. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/parser.h +1 -1
  262. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-freebsd.cc +9 -6
  263. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-linux.cc +26 -6
  264. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-macos.cc +11 -6
  265. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-nullos.cc +0 -0
  266. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-openbsd.cc +6 -0
  267. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-posix.cc +0 -0
  268. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-solaris.cc +69 -23
  269. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform-win32.cc +15 -11
  270. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/platform.h +10 -6
  271. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/powers-ten.h +0 -0
  272. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.cc +0 -0
  273. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/prettyprinter.h +0 -0
  274. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/profile-generator-inl.h +26 -2
  275. data/ext/v8/upstream/2.3.3/src/profile-generator.cc +1830 -0
  276. data/ext/v8/upstream/2.3.3/src/profile-generator.h +853 -0
  277. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.cc +0 -0
  278. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/property.h +0 -0
  279. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
  280. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.cc +0 -0
  281. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-irregexp.h +0 -0
  282. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.cc +0 -0
  283. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler-tracer.h +0 -0
  284. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.cc +1 -3
  285. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-macro-assembler.h +0 -0
  286. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.cc +0 -0
  287. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp-stack.h +0 -0
  288. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/regexp.js +25 -4
  289. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator-inl.h +0 -0
  290. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.cc +4 -3
  291. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/register-allocator.h +0 -0
  292. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.cc +85 -8
  293. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/rewriter.h +0 -0
  294. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.cc +547 -221
  295. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.h +5 -1
  296. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/runtime.js +23 -31
  297. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.cc +12 -6
  298. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scanner.h +60 -53
  299. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.cc +156 -168
  300. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopeinfo.h +58 -62
  301. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.cc +0 -0
  302. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/scopes.h +0 -0
  303. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.cc +320 -242
  304. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/serialize.h +81 -48
  305. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/shell.h +0 -0
  306. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/simulator.h +0 -0
  307. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/smart-pointer.h +0 -0
  308. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-common.cc +0 -0
  309. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot-empty.cc +0 -0
  310. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/snapshot.h +0 -0
  311. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces-inl.h +177 -74
  312. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.cc +138 -315
  313. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/spaces.h +155 -124
  314. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree-inl.h +0 -0
  315. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/splay-tree.h +0 -0
  316. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.cc +0 -0
  317. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string-stream.h +0 -0
  318. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/string.js +113 -119
  319. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.cc +242 -97
  320. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/stub-cache.h +118 -55
  321. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/COPYING +0 -0
  322. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/dtoa/dtoa.c +4 -0
  323. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/third_party/valgrind/valgrind.h +0 -0
  324. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.cc +0 -0
  325. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/token.h +0 -0
  326. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.cc +107 -26
  327. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/top.h +9 -4
  328. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.cc +0 -0
  329. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/type-info.h +2 -2
  330. data/ext/v8/upstream/2.3.3/src/unbound-queue-inl.h +95 -0
  331. data/ext/v8/upstream/2.3.3/src/unbound-queue.h +67 -0
  332. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode-inl.h +0 -0
  333. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.cc +0 -0
  334. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/unicode.h +0 -0
  335. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/uri.js +0 -0
  336. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.cc +0 -0
  337. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/utils.h +83 -1
  338. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.cc +0 -0
  339. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8-counters.h +20 -0
  340. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.cc +5 -1
  341. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8.h +0 -0
  342. data/ext/v8/upstream/2.3.3/src/v8dll-main.cc +39 -0
  343. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8natives.js +210 -33
  344. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.cc +1 -1
  345. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/v8threads.h +1 -1
  346. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.cc +0 -0
  347. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/variables.h +0 -0
  348. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.cc +3 -3
  349. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/version.h +0 -0
  350. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy-inl.h +40 -0
  351. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-heavy.cc +0 -0
  352. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-inl.h +0 -0
  353. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light-inl.h +106 -5
  354. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame-light.cc +4 -1
  355. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.cc +0 -0
  356. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/virtual-frame.h +0 -0
  357. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state-inl.h +6 -3
  358. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.cc +1 -1
  359. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/vm-state.h +6 -4
  360. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64-inl.h +42 -5
  361. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.cc +285 -53
  362. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/assembler-x64.h +54 -18
  363. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/builtins-x64.cc +31 -33
  364. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64-inl.h +0 -0
  365. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.cc +9787 -8722
  366. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/codegen-x64.h +82 -47
  367. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/cpu-x64.cc +4 -0
  368. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/debug-x64.cc +55 -6
  369. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/disasm-x64.cc +42 -19
  370. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/fast-codegen-x64.cc +4 -0
  371. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.cc +4 -0
  372. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/frames-x64.h +4 -0
  373. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/full-codegen-x64.cc +1487 -210
  374. data/ext/v8/upstream/2.3.3/src/x64/ic-x64.cc +1907 -0
  375. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/jump-target-x64.cc +4 -0
  376. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.cc +366 -338
  377. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/macro-assembler-x64.h +83 -38
  378. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.cc +82 -23
  379. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/regexp-macro-assembler-x64.h +1 -2
  380. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64-inl.h +6 -5
  381. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.cc +4 -0
  382. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/register-allocator-x64.h +1 -1
  383. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.cc +0 -0
  384. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/simulator-x64.h +0 -0
  385. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/stub-cache-x64.cc +556 -377
  386. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.cc +197 -98
  387. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/x64/virtual-frame-x64.h +37 -28
  388. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone-inl.h +0 -0
  389. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.cc +0 -0
  390. data/ext/v8/upstream/{2.1.10 → 2.3.3}/src/zone.h +0 -0
  391. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/codemap.js +0 -0
  392. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/consarray.js +0 -0
  393. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/csvparser.js +0 -0
  394. data/ext/v8/upstream/2.3.3/tools/gc-nvp-trace-processor.py +317 -0
  395. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/generate-ten-powers.scm +0 -0
  396. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/gyp/v8.gyp +87 -20
  397. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/js2c.py +19 -15
  398. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/jsmin.py +0 -0
  399. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor +0 -0
  400. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/linux-tick-processor.py +0 -0
  401. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/logreader.js +0 -0
  402. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-nm +0 -0
  403. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/mac-tick-processor +0 -0
  404. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/annotate +0 -0
  405. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/common +0 -0
  406. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/dump +0 -0
  407. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/report +0 -0
  408. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/reset +0 -0
  409. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/run +0 -0
  410. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/shutdown +0 -0
  411. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/oprofile/start +0 -0
  412. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/presubmit.py +0 -0
  413. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/process-heap-prof.py +0 -0
  414. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile.js +0 -0
  415. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/profile_view.js +0 -0
  416. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/run-valgrind.py +0 -0
  417. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.js +0 -0
  418. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/splaytree.py +0 -0
  419. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/stats-viewer.py +25 -13
  420. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/test.py +0 -0
  421. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor-driver.js +0 -0
  422. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.js +0 -0
  423. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/tickprocessor.py +0 -0
  424. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/utils.py +0 -0
  425. data/ext/v8/upstream/2.3.3/tools/v8.xcodeproj/project.pbxproj +1855 -0
  426. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/README.txt +0 -0
  427. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/arm.vsprops +0 -0
  428. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/common.vsprops +0 -0
  429. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8.vcproj +0 -0
  430. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_arm.vcproj +0 -0
  431. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8_x64.vcproj +0 -0
  432. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/d8js2c.cmd +0 -0
  433. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/debug.vsprops +0 -0
  434. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/ia32.vsprops +0 -0
  435. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/js2c.cmd +0 -0
  436. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/release.vsprops +0 -0
  437. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.sln +0 -0
  438. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8.vcproj +0 -0
  439. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.sln +0 -0
  440. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_arm.vcproj +0 -0
  441. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base.vcproj +40 -0
  442. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_arm.vcproj +20 -0
  443. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_base_x64.vcproj +16 -0
  444. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest.vcproj +4 -0
  445. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
  446. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
  447. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
  448. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
  449. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample.vcproj +0 -0
  450. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
  451. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
  452. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
  453. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
  454. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
  455. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  456. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  457. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  458. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  459. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.sln +0 -0
  460. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/v8_x64.vcproj +0 -0
  461. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/visual_studio/x64.vsprops +0 -0
  462. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.bat +0 -0
  463. data/ext/v8/upstream/{2.1.10 → 2.3.3}/tools/windows-tick-processor.py +0 -0
  464. data/ext/v8/upstream/Makefile +1 -1
  465. data/ext/v8/v8_template.cpp +94 -2
  466. data/ext/v8/v8_try_catch.cpp +2 -2
  467. data/lib/v8.rb +1 -1
  468. data/lib/v8/access.rb +93 -40
  469. data/lib/v8/cli.rb +1 -1
  470. data/lib/v8/function.rb +14 -2
  471. data/spec/redjs/jsapi_spec.rb +231 -42
  472. data/therubyracer.gemspec +3 -3
  473. metadata +463 -453
  474. data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2-inl.h +0 -263
  475. data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.cc +0 -1878
  476. data/ext/v8/upstream/2.1.10/src/arm/assembler-thumb2.h +0 -1036
  477. data/ext/v8/upstream/2.1.10/src/arm/codegen-arm-inl.h +0 -72
  478. data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +0 -1833
  479. data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +0 -101
  480. data/ext/v8/upstream/2.1.10/src/profile-generator.cc +0 -583
  481. data/ext/v8/upstream/2.1.10/src/profile-generator.h +0 -364
  482. data/ext/v8/upstream/2.1.10/src/x64/ic-x64.cc +0 -1621
@@ -27,6 +27,8 @@
27
27
 
28
28
  #include "v8.h"
29
29
 
30
+ #if defined(V8_TARGET_ARCH_ARM)
31
+
30
32
  #include "codegen-inl.h"
31
33
  #include "jump-target-inl.h"
32
34
  #include "register-allocator-inl.h"
@@ -47,28 +49,28 @@ void JumpTarget::DoJump() {
47
49
  // which are still live in the C++ code.
48
50
  ASSERT(cgen()->HasValidEntryRegisters());
49
51
 
50
- if (is_bound()) {
51
- // Backward jump. There already a frame expectation at the target.
52
- ASSERT(direction_ == BIDIRECTIONAL);
53
- cgen()->frame()->MergeTo(entry_frame_);
52
+ if (entry_frame_set_) {
53
+ if (entry_label_.is_bound()) {
54
+ // If we already bound and generated code at the destination then it
55
+ // is too late to ask for less optimistic type assumptions.
56
+ ASSERT(entry_frame_.IsCompatibleWith(cgen()->frame()));
57
+ }
58
+ // There already a frame expectation at the target.
59
+ cgen()->frame()->MergeTo(&entry_frame_);
54
60
  cgen()->DeleteFrame();
55
61
  } else {
56
- // Use the current frame as the expected one at the target if necessary.
57
- if (entry_frame_ == NULL) {
58
- entry_frame_ = cgen()->frame();
59
- RegisterFile empty;
60
- cgen()->SetFrame(NULL, &empty);
61
- } else {
62
- cgen()->frame()->MergeTo(entry_frame_);
63
- cgen()->DeleteFrame();
64
- }
65
-
66
- // The predicate is_linked() should be made true. Its implementation
67
- // detects the presence of a frame pointer in the reaching_frames_ list.
68
- if (!is_linked()) {
69
- reaching_frames_.Add(NULL);
70
- ASSERT(is_linked());
71
- }
62
+ // Clone the current frame to use as the expected one at the target.
63
+ set_entry_frame(cgen()->frame());
64
+ // Zap the fall-through frame since the jump was unconditional.
65
+ RegisterFile empty;
66
+ cgen()->SetFrame(NULL, &empty);
67
+ }
68
+ if (entry_label_.is_bound()) {
69
+ // You can't jump backwards to an already bound label unless you admitted
70
+ // up front that this was a bidirectional jump target. Bidirectional jump
71
+ // targets will zap their type info when bound in case some later virtual
72
+ // frame with less precise type info branches to them.
73
+ ASSERT(direction_ != FORWARD_ONLY);
72
74
  }
73
75
  __ jmp(&entry_label_);
74
76
  }
@@ -77,25 +79,29 @@ void JumpTarget::DoJump() {
77
79
  void JumpTarget::DoBranch(Condition cc, Hint ignored) {
78
80
  ASSERT(cgen()->has_valid_frame());
79
81
 
80
- if (is_bound()) {
81
- ASSERT(direction_ == BIDIRECTIONAL);
82
- // Backward branch. We have an expected frame to merge to on the
83
- // backward edge.
84
- cgen()->frame()->MergeTo(entry_frame_);
85
- } else {
86
- // Clone the current frame to use as the expected one at the target if
87
- // necessary.
88
- if (entry_frame_ == NULL) {
89
- entry_frame_ = new VirtualFrame(cgen()->frame());
90
- }
91
- // The predicate is_linked() should be made true. Its implementation
92
- // detects the presence of a frame pointer in the reaching_frames_ list.
93
- if (!is_linked()) {
94
- reaching_frames_.Add(NULL);
95
- ASSERT(is_linked());
82
+ if (entry_frame_set_) {
83
+ if (entry_label_.is_bound()) {
84
+ // If we already bound and generated code at the destination then it
85
+ // is too late to ask for less optimistic type assumptions.
86
+ ASSERT(entry_frame_.IsCompatibleWith(cgen()->frame()));
96
87
  }
88
+ // We have an expected frame to merge to on the backward edge.
89
+ cgen()->frame()->MergeTo(&entry_frame_, cc);
90
+ } else {
91
+ // Clone the current frame to use as the expected one at the target.
92
+ set_entry_frame(cgen()->frame());
93
+ }
94
+ if (entry_label_.is_bound()) {
95
+ // You can't branch backwards to an already bound label unless you admitted
96
+ // up front that this was a bidirectional jump target. Bidirectional jump
97
+ // targets will zap their type info when bound in case some later virtual
98
+ // frame with less precise type info branches to them.
99
+ ASSERT(direction_ != FORWARD_ONLY);
97
100
  }
98
101
  __ b(cc, &entry_label_);
102
+ if (cc == al) {
103
+ cgen()->DeleteFrame();
104
+ }
99
105
  }
100
106
 
101
107
 
@@ -113,15 +119,10 @@ void JumpTarget::Call() {
113
119
 
114
120
  // Calls are always 'forward' so we use a copy of the current frame (plus
115
121
  // one for a return address) as the expected frame.
116
- ASSERT(entry_frame_ == NULL);
117
- VirtualFrame* target_frame = new VirtualFrame(cgen()->frame());
118
- target_frame->Adjust(1);
119
- entry_frame_ = target_frame;
120
-
121
- // The predicate is_linked() should now be made true. Its implementation
122
- // detects the presence of a frame pointer in the reaching_frames_ list.
123
- reaching_frames_.Add(NULL);
124
- ASSERT(is_linked());
122
+ ASSERT(!entry_frame_set_);
123
+ VirtualFrame target_frame = *cgen()->frame();
124
+ target_frame.Adjust(1);
125
+ set_entry_frame(&target_frame);
125
126
 
126
127
  __ bl(&entry_label_);
127
128
  }
@@ -135,78 +136,29 @@ void JumpTarget::DoBind() {
135
136
  ASSERT(!cgen()->has_valid_frame() || cgen()->HasValidEntryRegisters());
136
137
 
137
138
  if (cgen()->has_valid_frame()) {
139
+ if (direction_ != FORWARD_ONLY) cgen()->frame()->ForgetTypeInfo();
138
140
  // If there is a current frame we can use it on the fall through.
139
- if (entry_frame_ == NULL) {
140
- entry_frame_ = new VirtualFrame(cgen()->frame());
141
+ if (!entry_frame_set_) {
142
+ entry_frame_ = *cgen()->frame();
143
+ entry_frame_set_ = true;
141
144
  } else {
142
- ASSERT(cgen()->frame()->Equals(entry_frame_));
145
+ cgen()->frame()->MergeTo(&entry_frame_);
143
146
  }
144
147
  } else {
145
148
  // If there is no current frame we must have an entry frame which we can
146
149
  // copy.
147
- ASSERT(entry_frame_ != NULL);
150
+ ASSERT(entry_frame_set_);
148
151
  RegisterFile empty;
149
- cgen()->SetFrame(new VirtualFrame(entry_frame_), &empty);
150
- }
151
-
152
- // The predicate is_linked() should be made false. Its implementation
153
- // detects the presence (or absence) of frame pointers in the
154
- // reaching_frames_ list. If we inserted a bogus frame to make
155
- // is_linked() true, remove it now.
156
- if (is_linked()) {
157
- reaching_frames_.Clear();
152
+ cgen()->SetFrame(new VirtualFrame(&entry_frame_), &empty);
158
153
  }
159
154
 
160
155
  __ bind(&entry_label_);
161
156
  }
162
157
 
163
158
 
164
- void BreakTarget::Jump() {
165
- // On ARM we do not currently emit merge code for jumps, so we need to do
166
- // it explicitly here. The only merging necessary is to drop extra
167
- // statement state from the stack.
168
- ASSERT(cgen()->has_valid_frame());
169
- int count = cgen()->frame()->height() - expected_height_;
170
- cgen()->frame()->Drop(count);
171
- DoJump();
172
- }
173
-
174
-
175
- void BreakTarget::Jump(Result* arg) {
176
- UNIMPLEMENTED();
177
- }
178
-
179
-
180
- void BreakTarget::Bind() {
181
- #ifdef DEBUG
182
- // All the forward-reaching frames should have been adjusted at the
183
- // jumps to this target.
184
- for (int i = 0; i < reaching_frames_.length(); i++) {
185
- ASSERT(reaching_frames_[i] == NULL ||
186
- reaching_frames_[i]->height() == expected_height_);
187
- }
188
- #endif
189
- // Drop leftover statement state from the frame before merging, even
190
- // on the fall through. This is so we can bind the return target
191
- // with state on the frame.
192
- if (cgen()->has_valid_frame()) {
193
- int count = cgen()->frame()->height() - expected_height_;
194
- // On ARM we do not currently emit merge code at binding sites, so we need
195
- // to do it explicitly here. The only merging necessary is to drop extra
196
- // statement state from the stack.
197
- cgen()->frame()->Drop(count);
198
- }
199
-
200
- DoBind();
201
- }
202
-
203
-
204
- void BreakTarget::Bind(Result* arg) {
205
- UNIMPLEMENTED();
206
- }
207
-
208
-
209
159
  #undef __
210
160
 
211
161
 
212
162
  } } // namespace v8::internal
163
+
164
+ #endif // V8_TARGET_ARCH_ARM
@@ -27,6 +27,8 @@
27
27
 
28
28
  #include "v8.h"
29
29
 
30
+ #if defined(V8_TARGET_ARCH_ARM)
31
+
30
32
  #include "bootstrapper.h"
31
33
  #include "codegen-inl.h"
32
34
  #include "debug.h"
@@ -181,15 +183,18 @@ void MacroAssembler::Drop(int count, Condition cond) {
181
183
  }
182
184
 
183
185
 
184
- void MacroAssembler::Swap(Register reg1, Register reg2, Register scratch) {
186
+ void MacroAssembler::Swap(Register reg1,
187
+ Register reg2,
188
+ Register scratch,
189
+ Condition cond) {
185
190
  if (scratch.is(no_reg)) {
186
- eor(reg1, reg1, Operand(reg2));
187
- eor(reg2, reg2, Operand(reg1));
188
- eor(reg1, reg1, Operand(reg2));
191
+ eor(reg1, reg1, Operand(reg2), LeaveCC, cond);
192
+ eor(reg2, reg2, Operand(reg1), LeaveCC, cond);
193
+ eor(reg1, reg1, Operand(reg2), LeaveCC, cond);
189
194
  } else {
190
- mov(scratch, reg1);
191
- mov(reg1, reg2);
192
- mov(reg2, scratch);
195
+ mov(scratch, reg1, LeaveCC, cond);
196
+ mov(reg1, reg2, LeaveCC, cond);
197
+ mov(reg2, scratch, LeaveCC, cond);
193
198
  }
194
199
  }
195
200
 
@@ -211,6 +216,102 @@ void MacroAssembler::Move(Register dst, Register src) {
211
216
  }
212
217
 
213
218
 
219
+ void MacroAssembler::And(Register dst, Register src1, const Operand& src2,
220
+ Condition cond) {
221
+ if (!CpuFeatures::IsSupported(ARMv7) || src2.is_single_instruction()) {
222
+ and_(dst, src1, src2, LeaveCC, cond);
223
+ return;
224
+ }
225
+ int32_t immediate = src2.immediate();
226
+ if (immediate == 0) {
227
+ mov(dst, Operand(0), LeaveCC, cond);
228
+ return;
229
+ }
230
+ if (IsPowerOf2(immediate + 1) && ((immediate & 1) != 0)) {
231
+ ubfx(dst, src1, 0, WhichPowerOf2(immediate + 1), cond);
232
+ return;
233
+ }
234
+ and_(dst, src1, src2, LeaveCC, cond);
235
+ }
236
+
237
+
238
+ void MacroAssembler::Ubfx(Register dst, Register src1, int lsb, int width,
239
+ Condition cond) {
240
+ ASSERT(lsb < 32);
241
+ if (!CpuFeatures::IsSupported(ARMv7)) {
242
+ int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1);
243
+ and_(dst, src1, Operand(mask), LeaveCC, cond);
244
+ if (lsb != 0) {
245
+ mov(dst, Operand(dst, LSR, lsb), LeaveCC, cond);
246
+ }
247
+ } else {
248
+ ubfx(dst, src1, lsb, width, cond);
249
+ }
250
+ }
251
+
252
+
253
+ void MacroAssembler::Sbfx(Register dst, Register src1, int lsb, int width,
254
+ Condition cond) {
255
+ ASSERT(lsb < 32);
256
+ if (!CpuFeatures::IsSupported(ARMv7)) {
257
+ int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1);
258
+ and_(dst, src1, Operand(mask), LeaveCC, cond);
259
+ int shift_up = 32 - lsb - width;
260
+ int shift_down = lsb + shift_up;
261
+ if (shift_up != 0) {
262
+ mov(dst, Operand(dst, LSL, shift_up), LeaveCC, cond);
263
+ }
264
+ if (shift_down != 0) {
265
+ mov(dst, Operand(dst, ASR, shift_down), LeaveCC, cond);
266
+ }
267
+ } else {
268
+ sbfx(dst, src1, lsb, width, cond);
269
+ }
270
+ }
271
+
272
+
273
+ void MacroAssembler::Bfc(Register dst, int lsb, int width, Condition cond) {
274
+ ASSERT(lsb < 32);
275
+ if (!CpuFeatures::IsSupported(ARMv7)) {
276
+ int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1);
277
+ bic(dst, dst, Operand(mask));
278
+ } else {
279
+ bfc(dst, lsb, width, cond);
280
+ }
281
+ }
282
+
283
+
284
+ void MacroAssembler::Usat(Register dst, int satpos, const Operand& src,
285
+ Condition cond) {
286
+ if (!CpuFeatures::IsSupported(ARMv7)) {
287
+ ASSERT(!dst.is(pc) && !src.rm().is(pc));
288
+ ASSERT((satpos >= 0) && (satpos <= 31));
289
+
290
+ // These asserts are required to ensure compatibility with the ARMv7
291
+ // implementation.
292
+ ASSERT((src.shift_op() == ASR) || (src.shift_op() == LSL));
293
+ ASSERT(src.rs().is(no_reg));
294
+
295
+ Label done;
296
+ int satval = (1 << satpos) - 1;
297
+
298
+ if (cond != al) {
299
+ b(NegateCondition(cond), &done); // Skip saturate if !condition.
300
+ }
301
+ if (!(src.is_reg() && dst.is(src.rm()))) {
302
+ mov(dst, src);
303
+ }
304
+ tst(dst, Operand(~satval));
305
+ b(eq, &done);
306
+ mov(dst, Operand(0), LeaveCC, mi); // 0 if negative.
307
+ mov(dst, Operand(satval), LeaveCC, pl); // satval if positive.
308
+ bind(&done);
309
+ } else {
310
+ usat(dst, satpos, src, cond);
311
+ }
312
+ }
313
+
314
+
214
315
  void MacroAssembler::SmiJumpTable(Register index, Vector<Label*> targets) {
215
316
  // Empty the const pool.
216
317
  CheckConstPool(true, true);
@@ -232,8 +333,15 @@ void MacroAssembler::LoadRoot(Register destination,
232
333
  }
233
334
 
234
335
 
336
+ void MacroAssembler::StoreRoot(Register source,
337
+ Heap::RootListIndex index,
338
+ Condition cond) {
339
+ str(source, MemOperand(roots, index << kPointerSizeLog2), cond);
340
+ }
341
+
342
+
235
343
  void MacroAssembler::RecordWriteHelper(Register object,
236
- Register offset,
344
+ Register address,
237
345
  Register scratch) {
238
346
  if (FLAG_debug_code) {
239
347
  // Check that the object is not in new space.
@@ -243,63 +351,18 @@ void MacroAssembler::RecordWriteHelper(Register object,
243
351
  bind(&not_in_new_space);
244
352
  }
245
353
 
246
- // This is how much we shift the remembered set bit offset to get the
247
- // offset of the word in the remembered set. We divide by kBitsPerInt (32,
248
- // shift right 5) and then multiply by kIntSize (4, shift left 2).
249
- const int kRSetWordShift = 3;
250
-
251
- Label fast;
252
-
253
- // Compute the bit offset in the remembered set.
254
- // object: heap object pointer (with tag)
255
- // offset: offset to store location from the object
256
- mov(ip, Operand(Page::kPageAlignmentMask)); // load mask only once
257
- and_(scratch, object, Operand(ip)); // offset into page of the object
258
- add(offset, scratch, Operand(offset)); // add offset into the object
259
- mov(offset, Operand(offset, LSR, kObjectAlignmentBits));
260
-
261
- // Compute the page address from the heap object pointer.
262
- // object: heap object pointer (with tag)
263
- // offset: bit offset of store position in the remembered set
264
- bic(object, object, Operand(ip));
265
-
266
- // If the bit offset lies beyond the normal remembered set range, it is in
267
- // the extra remembered set area of a large object.
268
- // object: page start
269
- // offset: bit offset of store position in the remembered set
270
- cmp(offset, Operand(Page::kPageSize / kPointerSize));
271
- b(lt, &fast);
272
-
273
- // Adjust the bit offset to be relative to the start of the extra
274
- // remembered set and the start address to be the address of the extra
275
- // remembered set.
276
- sub(offset, offset, Operand(Page::kPageSize / kPointerSize));
277
- // Load the array length into 'scratch' and multiply by four to get the
278
- // size in bytes of the elements.
279
- ldr(scratch, MemOperand(object, Page::kObjectStartOffset
280
- + FixedArray::kLengthOffset));
281
- mov(scratch, Operand(scratch, LSL, kObjectAlignmentBits));
282
- // Add the page header (including remembered set), array header, and array
283
- // body size to the page address.
284
- add(object, object, Operand(Page::kObjectStartOffset
285
- + FixedArray::kHeaderSize));
286
- add(object, object, Operand(scratch));
287
-
288
- bind(&fast);
289
- // Get address of the rset word.
290
- // object: start of the remembered set (page start for the fast case)
291
- // offset: bit offset of store position in the remembered set
292
- bic(scratch, offset, Operand(kBitsPerInt - 1)); // clear the bit offset
293
- add(object, object, Operand(scratch, LSR, kRSetWordShift));
294
- // Get bit offset in the rset word.
295
- // object: address of remembered set word
296
- // offset: bit offset of store position
297
- and_(offset, offset, Operand(kBitsPerInt - 1));
298
-
299
- ldr(scratch, MemOperand(object));
354
+ // Calculate page address.
355
+ Bfc(object, 0, kPageSizeBits);
356
+
357
+ // Calculate region number.
358
+ Ubfx(address, address, Page::kRegionSizeLog2,
359
+ kPageSizeBits - Page::kRegionSizeLog2);
360
+
361
+ // Mark region dirty.
362
+ ldr(scratch, MemOperand(object, Page::kDirtyFlagOffset));
300
363
  mov(ip, Operand(1));
301
- orr(scratch, scratch, Operand(ip, LSL, offset));
302
- str(scratch, MemOperand(object));
364
+ orr(scratch, scratch, Operand(ip, LSL, address));
365
+ str(scratch, MemOperand(object, Page::kDirtyFlagOffset));
303
366
  }
304
367
 
305
368
 
@@ -317,21 +380,58 @@ void MacroAssembler::InNewSpace(Register object,
317
380
  // Will clobber 4 registers: object, offset, scratch, ip. The
318
381
  // register 'object' contains a heap object pointer. The heap object
319
382
  // tag is shifted away.
320
- void MacroAssembler::RecordWrite(Register object, Register offset,
383
+ void MacroAssembler::RecordWrite(Register object,
384
+ Operand offset,
385
+ Register scratch0,
386
+ Register scratch1) {
387
+ // The compiled code assumes that record write doesn't change the
388
+ // context register, so we check that none of the clobbered
389
+ // registers are cp.
390
+ ASSERT(!object.is(cp) && !scratch0.is(cp) && !scratch1.is(cp));
391
+
392
+ Label done;
393
+
394
+ // First, test that the object is not in the new space. We cannot set
395
+ // region marks for new space pages.
396
+ InNewSpace(object, scratch0, eq, &done);
397
+
398
+ // Add offset into the object.
399
+ add(scratch0, object, offset);
400
+
401
+ // Record the actual write.
402
+ RecordWriteHelper(object, scratch0, scratch1);
403
+
404
+ bind(&done);
405
+
406
+ // Clobber all input registers when running with the debug-code flag
407
+ // turned on to provoke errors.
408
+ if (FLAG_debug_code) {
409
+ mov(object, Operand(BitCast<int32_t>(kZapValue)));
410
+ mov(scratch0, Operand(BitCast<int32_t>(kZapValue)));
411
+ mov(scratch1, Operand(BitCast<int32_t>(kZapValue)));
412
+ }
413
+ }
414
+
415
+
416
+ // Will clobber 4 registers: object, address, scratch, ip. The
417
+ // register 'object' contains a heap object pointer. The heap object
418
+ // tag is shifted away.
419
+ void MacroAssembler::RecordWrite(Register object,
420
+ Register address,
321
421
  Register scratch) {
322
422
  // The compiled code assumes that record write doesn't change the
323
423
  // context register, so we check that none of the clobbered
324
424
  // registers are cp.
325
- ASSERT(!object.is(cp) && !offset.is(cp) && !scratch.is(cp));
425
+ ASSERT(!object.is(cp) && !address.is(cp) && !scratch.is(cp));
326
426
 
327
427
  Label done;
328
428
 
329
429
  // First, test that the object is not in the new space. We cannot set
330
- // remembered set bits in the new space.
430
+ // region marks for new space pages.
331
431
  InNewSpace(object, scratch, eq, &done);
332
432
 
333
433
  // Record the actual write.
334
- RecordWriteHelper(object, offset, scratch);
434
+ RecordWriteHelper(object, address, scratch);
335
435
 
336
436
  bind(&done);
337
437
 
@@ -339,12 +439,57 @@ void MacroAssembler::RecordWrite(Register object, Register offset,
339
439
  // turned on to provoke errors.
340
440
  if (FLAG_debug_code) {
341
441
  mov(object, Operand(BitCast<int32_t>(kZapValue)));
342
- mov(offset, Operand(BitCast<int32_t>(kZapValue)));
442
+ mov(address, Operand(BitCast<int32_t>(kZapValue)));
343
443
  mov(scratch, Operand(BitCast<int32_t>(kZapValue)));
344
444
  }
345
445
  }
346
446
 
347
447
 
448
+ void MacroAssembler::Ldrd(Register dst1, Register dst2,
449
+ const MemOperand& src, Condition cond) {
450
+ ASSERT(src.rm().is(no_reg));
451
+ ASSERT(!dst1.is(lr)); // r14.
452
+ ASSERT_EQ(0, dst1.code() % 2);
453
+ ASSERT_EQ(dst1.code() + 1, dst2.code());
454
+
455
+ // Generate two ldr instructions if ldrd is not available.
456
+ if (CpuFeatures::IsSupported(ARMv7)) {
457
+ CpuFeatures::Scope scope(ARMv7);
458
+ ldrd(dst1, dst2, src, cond);
459
+ } else {
460
+ MemOperand src2(src);
461
+ src2.set_offset(src2.offset() + 4);
462
+ if (dst1.is(src.rn())) {
463
+ ldr(dst2, src2, cond);
464
+ ldr(dst1, src, cond);
465
+ } else {
466
+ ldr(dst1, src, cond);
467
+ ldr(dst2, src2, cond);
468
+ }
469
+ }
470
+ }
471
+
472
+
473
+ void MacroAssembler::Strd(Register src1, Register src2,
474
+ const MemOperand& dst, Condition cond) {
475
+ ASSERT(dst.rm().is(no_reg));
476
+ ASSERT(!src1.is(lr)); // r14.
477
+ ASSERT_EQ(0, src1.code() % 2);
478
+ ASSERT_EQ(src1.code() + 1, src2.code());
479
+
480
+ // Generate two str instructions if strd is not available.
481
+ if (CpuFeatures::IsSupported(ARMv7)) {
482
+ CpuFeatures::Scope scope(ARMv7);
483
+ strd(src1, src2, dst, cond);
484
+ } else {
485
+ MemOperand dst2(dst);
486
+ dst2.set_offset(dst2.offset() + 4);
487
+ str(src1, dst, cond);
488
+ str(src2, dst2, cond);
489
+ }
490
+ }
491
+
492
+
348
493
  void MacroAssembler::EnterFrame(StackFrame::Type type) {
349
494
  // r0-r3: preserved
350
495
  stm(db_w, sp, cp.bit() | fp.bit() | lr.bit());
@@ -610,6 +755,7 @@ void MacroAssembler::InvokeFunction(Register fun,
610
755
  ldr(expected_reg,
611
756
  FieldMemOperand(code_reg,
612
757
  SharedFunctionInfo::kFormalParameterCountOffset));
758
+ mov(expected_reg, Operand(expected_reg, ASR, kSmiTagSize));
613
759
  ldr(code_reg,
614
760
  MemOperand(code_reg, SharedFunctionInfo::kCodeOffset - kHeapObjectTag));
615
761
  add(code_reg, code_reg, Operand(Code::kHeaderSize - kHeapObjectTag));
@@ -758,88 +904,6 @@ void MacroAssembler::PopTryHandler() {
758
904
  }
759
905
 
760
906
 
761
- Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
762
- JSObject* holder, Register holder_reg,
763
- Register scratch,
764
- int save_at_depth,
765
- Label* miss) {
766
- // Make sure there's no overlap between scratch and the other
767
- // registers.
768
- ASSERT(!scratch.is(object_reg) && !scratch.is(holder_reg));
769
-
770
- // Keep track of the current object in register reg.
771
- Register reg = object_reg;
772
- int depth = 0;
773
-
774
- if (save_at_depth == depth) {
775
- str(reg, MemOperand(sp));
776
- }
777
-
778
- // Check the maps in the prototype chain.
779
- // Traverse the prototype chain from the object and do map checks.
780
- while (object != holder) {
781
- depth++;
782
-
783
- // Only global objects and objects that do not require access
784
- // checks are allowed in stubs.
785
- ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
786
-
787
- // Get the map of the current object.
788
- ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
789
- cmp(scratch, Operand(Handle<Map>(object->map())));
790
-
791
- // Branch on the result of the map check.
792
- b(ne, miss);
793
-
794
- // Check access rights to the global object. This has to happen
795
- // after the map check so that we know that the object is
796
- // actually a global object.
797
- if (object->IsJSGlobalProxy()) {
798
- CheckAccessGlobalProxy(reg, scratch, miss);
799
- // Restore scratch register to be the map of the object. In the
800
- // new space case below, we load the prototype from the map in
801
- // the scratch register.
802
- ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
803
- }
804
-
805
- reg = holder_reg; // from now the object is in holder_reg
806
- JSObject* prototype = JSObject::cast(object->GetPrototype());
807
- if (Heap::InNewSpace(prototype)) {
808
- // The prototype is in new space; we cannot store a reference
809
- // to it in the code. Load it from the map.
810
- ldr(reg, FieldMemOperand(scratch, Map::kPrototypeOffset));
811
- } else {
812
- // The prototype is in old space; load it directly.
813
- mov(reg, Operand(Handle<JSObject>(prototype)));
814
- }
815
-
816
- if (save_at_depth == depth) {
817
- str(reg, MemOperand(sp));
818
- }
819
-
820
- // Go to the next object in the prototype chain.
821
- object = prototype;
822
- }
823
-
824
- // Check the holder map.
825
- ldr(scratch, FieldMemOperand(reg, HeapObject::kMapOffset));
826
- cmp(scratch, Operand(Handle<Map>(object->map())));
827
- b(ne, miss);
828
-
829
- // Log the check depth.
830
- LOG(IntEvent("check-maps-depth", depth + 1));
831
-
832
- // Perform security check for access to the global object and return
833
- // the holder register.
834
- ASSERT(object == holder);
835
- ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
836
- if (object->IsJSGlobalProxy()) {
837
- CheckAccessGlobalProxy(reg, scratch, miss);
838
- }
839
- return reg;
840
- }
841
-
842
-
843
907
  void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
844
908
  Register scratch,
845
909
  Label* miss) {
@@ -926,6 +990,12 @@ void MacroAssembler::AllocateInNewSpace(int object_size,
926
990
  ASSERT(!result.is(scratch1));
927
991
  ASSERT(!scratch1.is(scratch2));
928
992
 
993
+ // Make object size into bytes.
994
+ if ((flags & SIZE_IN_WORDS) != 0) {
995
+ object_size *= kPointerSize;
996
+ }
997
+ ASSERT_EQ(0, object_size & kObjectAlignmentMask);
998
+
929
999
  // Load address of new object into result and allocation top address into
930
1000
  // scratch1.
931
1001
  ExternalReference new_space_allocation_top =
@@ -948,23 +1018,16 @@ void MacroAssembler::AllocateInNewSpace(int object_size,
948
1018
  ExternalReference::new_space_allocation_limit_address();
949
1019
  mov(scratch2, Operand(new_space_allocation_limit));
950
1020
  ldr(scratch2, MemOperand(scratch2));
951
- add(result, result, Operand(object_size * kPointerSize));
1021
+ add(result, result, Operand(object_size));
952
1022
  cmp(result, Operand(scratch2));
953
1023
  b(hi, gc_required);
954
-
955
- // Update allocation top. result temporarily holds the new top.
956
- if (FLAG_debug_code) {
957
- tst(result, Operand(kObjectAlignmentMask));
958
- Check(eq, "Unaligned allocation in new space");
959
- }
960
1024
  str(result, MemOperand(scratch1));
961
1025
 
962
1026
  // Tag and adjust back to start of new object.
963
1027
  if ((flags & TAG_OBJECT) != 0) {
964
- sub(result, result, Operand((object_size * kPointerSize) -
965
- kHeapObjectTag));
1028
+ sub(result, result, Operand(object_size - kHeapObjectTag));
966
1029
  } else {
967
- sub(result, result, Operand(object_size * kPointerSize));
1030
+ sub(result, result, Operand(object_size));
968
1031
  }
969
1032
  }
970
1033
 
@@ -1001,7 +1064,11 @@ void MacroAssembler::AllocateInNewSpace(Register object_size,
1001
1064
  ExternalReference::new_space_allocation_limit_address();
1002
1065
  mov(scratch2, Operand(new_space_allocation_limit));
1003
1066
  ldr(scratch2, MemOperand(scratch2));
1004
- add(result, result, Operand(object_size, LSL, kPointerSizeLog2));
1067
+ if ((flags & SIZE_IN_WORDS) != 0) {
1068
+ add(result, result, Operand(object_size, LSL, kPointerSizeLog2));
1069
+ } else {
1070
+ add(result, result, Operand(object_size));
1071
+ }
1005
1072
  cmp(result, Operand(scratch2));
1006
1073
  b(hi, gc_required);
1007
1074
 
@@ -1013,7 +1080,11 @@ void MacroAssembler::AllocateInNewSpace(Register object_size,
1013
1080
  str(result, MemOperand(scratch1));
1014
1081
 
1015
1082
  // Adjust back to start of new object.
1016
- sub(result, result, Operand(object_size, LSL, kPointerSizeLog2));
1083
+ if ((flags & SIZE_IN_WORDS) != 0) {
1084
+ sub(result, result, Operand(object_size, LSL, kPointerSizeLog2));
1085
+ } else {
1086
+ sub(result, result, Operand(object_size));
1087
+ }
1017
1088
 
1018
1089
  // Tag object if requested.
1019
1090
  if ((flags & TAG_OBJECT) != 0) {
@@ -1054,10 +1125,7 @@ void MacroAssembler::AllocateTwoByteString(Register result,
1054
1125
  mov(scratch1, Operand(length, LSL, 1)); // Length in bytes, not chars.
1055
1126
  add(scratch1, scratch1,
1056
1127
  Operand(kObjectAlignmentMask + SeqTwoByteString::kHeaderSize));
1057
- // AllocateInNewSpace expects the size in words, so we can round down
1058
- // to kObjectAlignment and divide by kPointerSize in the same shift.
1059
- ASSERT_EQ(kPointerSize, kObjectAlignmentMask + 1);
1060
- mov(scratch1, Operand(scratch1, ASR, kPointerSizeLog2));
1128
+ and_(scratch1, scratch1, Operand(~kObjectAlignmentMask));
1061
1129
 
1062
1130
  // Allocate two-byte string in new space.
1063
1131
  AllocateInNewSpace(scratch1,
@@ -1088,10 +1156,7 @@ void MacroAssembler::AllocateAsciiString(Register result,
1088
1156
  ASSERT(kCharSize == 1);
1089
1157
  add(scratch1, length,
1090
1158
  Operand(kObjectAlignmentMask + SeqAsciiString::kHeaderSize));
1091
- // AllocateInNewSpace expects the size in words, so we can round down
1092
- // to kObjectAlignment and divide by kPointerSize in the same shift.
1093
- ASSERT_EQ(kPointerSize, kObjectAlignmentMask + 1);
1094
- mov(scratch1, Operand(scratch1, ASR, kPointerSizeLog2));
1159
+ and_(scratch1, scratch1, Operand(~kObjectAlignmentMask));
1095
1160
 
1096
1161
  // Allocate ASCII string in new space.
1097
1162
  AllocateInNewSpace(scratch1,
@@ -1115,7 +1180,7 @@ void MacroAssembler::AllocateTwoByteConsString(Register result,
1115
1180
  Register scratch1,
1116
1181
  Register scratch2,
1117
1182
  Label* gc_required) {
1118
- AllocateInNewSpace(ConsString::kSize / kPointerSize,
1183
+ AllocateInNewSpace(ConsString::kSize,
1119
1184
  result,
1120
1185
  scratch1,
1121
1186
  scratch2,
@@ -1135,7 +1200,7 @@ void MacroAssembler::AllocateAsciiConsString(Register result,
1135
1200
  Register scratch1,
1136
1201
  Register scratch2,
1137
1202
  Label* gc_required) {
1138
- AllocateInNewSpace(ConsString::kSize / kPointerSize,
1203
+ AllocateInNewSpace(ConsString::kSize,
1139
1204
  result,
1140
1205
  scratch1,
1141
1206
  scratch2,
@@ -1182,6 +1247,21 @@ void MacroAssembler::CheckMap(Register obj,
1182
1247
  }
1183
1248
 
1184
1249
 
1250
+ void MacroAssembler::CheckMap(Register obj,
1251
+ Register scratch,
1252
+ Heap::RootListIndex index,
1253
+ Label* fail,
1254
+ bool is_heap_object) {
1255
+ if (!is_heap_object) {
1256
+ BranchOnSmi(obj, fail);
1257
+ }
1258
+ ldr(scratch, FieldMemOperand(obj, HeapObject::kMapOffset));
1259
+ LoadRoot(ip, index);
1260
+ cmp(scratch, ip);
1261
+ b(ne, fail);
1262
+ }
1263
+
1264
+
1185
1265
  void MacroAssembler::TryGetFunctionPrototype(Register function,
1186
1266
  Register result,
1187
1267
  Register scratch,
@@ -1241,12 +1321,12 @@ void MacroAssembler::TailCallStub(CodeStub* stub, Condition cond) {
1241
1321
  }
1242
1322
 
1243
1323
 
1244
- void MacroAssembler::StubReturn(int argc) {
1324
+ void MacroAssembler::StubReturn(int argc, Condition cond) {
1245
1325
  ASSERT(argc >= 1 && generating_stub());
1246
1326
  if (argc > 1) {
1247
- add(sp, sp, Operand((argc - 1) * kPointerSize));
1327
+ add(sp, sp, Operand((argc - 1) * kPointerSize), LeaveCC, cond);
1248
1328
  }
1249
- Ret();
1329
+ Ret(cond);
1250
1330
  }
1251
1331
 
1252
1332
 
@@ -1269,11 +1349,61 @@ void MacroAssembler::IntegerToDoubleConversionWithVFP3(Register inReg,
1269
1349
  }
1270
1350
 
1271
1351
 
1352
+ void MacroAssembler::ObjectToDoubleVFPRegister(Register object,
1353
+ DwVfpRegister result,
1354
+ Register scratch1,
1355
+ Register scratch2,
1356
+ Register heap_number_map,
1357
+ SwVfpRegister scratch3,
1358
+ Label* not_number,
1359
+ ObjectToDoubleFlags flags) {
1360
+ Label done;
1361
+ if ((flags & OBJECT_NOT_SMI) == 0) {
1362
+ Label not_smi;
1363
+ BranchOnNotSmi(object, &not_smi);
1364
+ // Remove smi tag and convert to double.
1365
+ mov(scratch1, Operand(object, ASR, kSmiTagSize));
1366
+ vmov(scratch3, scratch1);
1367
+ vcvt_f64_s32(result, scratch3);
1368
+ b(&done);
1369
+ bind(&not_smi);
1370
+ }
1371
+ // Check for heap number and load double value from it.
1372
+ ldr(scratch1, FieldMemOperand(object, HeapObject::kMapOffset));
1373
+ sub(scratch2, object, Operand(kHeapObjectTag));
1374
+ cmp(scratch1, heap_number_map);
1375
+ b(ne, not_number);
1376
+ if ((flags & AVOID_NANS_AND_INFINITIES) != 0) {
1377
+ // If exponent is all ones the number is either a NaN or +/-Infinity.
1378
+ ldr(scratch1, FieldMemOperand(object, HeapNumber::kExponentOffset));
1379
+ Sbfx(scratch1,
1380
+ scratch1,
1381
+ HeapNumber::kExponentShift,
1382
+ HeapNumber::kExponentBits);
1383
+ // All-one value sign extend to -1.
1384
+ cmp(scratch1, Operand(-1));
1385
+ b(eq, not_number);
1386
+ }
1387
+ vldr(result, scratch2, HeapNumber::kValueOffset);
1388
+ bind(&done);
1389
+ }
1390
+
1391
+
1392
+ void MacroAssembler::SmiToDoubleVFPRegister(Register smi,
1393
+ DwVfpRegister value,
1394
+ Register scratch1,
1395
+ SwVfpRegister scratch2) {
1396
+ mov(scratch1, Operand(smi, ASR, kSmiTagSize));
1397
+ vmov(scratch2, scratch1);
1398
+ vcvt_f64_s32(value, scratch2);
1399
+ }
1400
+
1401
+
1272
1402
  void MacroAssembler::GetLeastBitsFromSmi(Register dst,
1273
1403
  Register src,
1274
1404
  int num_least_bits) {
1275
1405
  if (CpuFeatures::IsSupported(ARMv7)) {
1276
- ubfx(dst, src, Operand(kSmiTagSize), Operand(num_least_bits - 1));
1406
+ ubfx(dst, src, kSmiTagSize, num_least_bits);
1277
1407
  } else {
1278
1408
  mov(dst, Operand(src, ASR, kSmiTagSize));
1279
1409
  and_(dst, dst, Operand((1 << num_least_bits) - 1));
@@ -1428,6 +1558,16 @@ void MacroAssembler::Assert(Condition cc, const char* msg) {
1428
1558
  }
1429
1559
 
1430
1560
 
1561
+ void MacroAssembler::AssertRegisterIsRoot(Register reg,
1562
+ Heap::RootListIndex index) {
1563
+ if (FLAG_debug_code) {
1564
+ LoadRoot(ip, index);
1565
+ cmp(reg, ip);
1566
+ Check(eq, "Register did not match expected root");
1567
+ }
1568
+ }
1569
+
1570
+
1431
1571
  void MacroAssembler::Check(Condition cc, const char* msg) {
1432
1572
  Label L;
1433
1573
  b(cc, &L);
@@ -1438,6 +1578,8 @@ void MacroAssembler::Check(Condition cc, const char* msg) {
1438
1578
 
1439
1579
 
1440
1580
  void MacroAssembler::Abort(const char* msg) {
1581
+ Label abort_start;
1582
+ bind(&abort_start);
1441
1583
  // We want to pass the msg string like a smi to avoid GC
1442
1584
  // problems, however msg is not guaranteed to be aligned
1443
1585
  // properly. Instead, we pass an aligned pointer that is
@@ -1461,6 +1603,17 @@ void MacroAssembler::Abort(const char* msg) {
1461
1603
  push(r0);
1462
1604
  CallRuntime(Runtime::kAbort, 2);
1463
1605
  // will not return here
1606
+ if (is_const_pool_blocked()) {
1607
+ // If the calling code cares about the exact number of
1608
+ // instructions generated, we insert padding here to keep the size
1609
+ // of the Abort macro constant.
1610
+ static const int kExpectedAbortInstructions = 10;
1611
+ int abort_instructions = InstructionsGeneratedSince(&abort_start);
1612
+ ASSERT(abort_instructions <= kExpectedAbortInstructions);
1613
+ while (abort_instructions++ < kExpectedAbortInstructions) {
1614
+ nop();
1615
+ }
1616
+ }
1464
1617
  }
1465
1618
 
1466
1619
 
@@ -1546,30 +1699,48 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first,
1546
1699
  void MacroAssembler::AllocateHeapNumber(Register result,
1547
1700
  Register scratch1,
1548
1701
  Register scratch2,
1702
+ Register heap_number_map,
1549
1703
  Label* gc_required) {
1550
1704
  // Allocate an object in the heap for the heap number and tag it as a heap
1551
1705
  // object.
1552
- AllocateInNewSpace(HeapNumber::kSize / kPointerSize,
1706
+ AllocateInNewSpace(HeapNumber::kSize,
1553
1707
  result,
1554
1708
  scratch1,
1555
1709
  scratch2,
1556
1710
  gc_required,
1557
1711
  TAG_OBJECT);
1558
1712
 
1559
- // Get heap number map and store it in the allocated object.
1560
- LoadRoot(scratch1, Heap::kHeapNumberMapRootIndex);
1561
- str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset));
1713
+ // Store heap number map in the allocated object.
1714
+ AssertRegisterIsRoot(heap_number_map, Heap::kHeapNumberMapRootIndex);
1715
+ str(heap_number_map, FieldMemOperand(result, HeapObject::kMapOffset));
1562
1716
  }
1563
1717
 
1564
1718
 
1565
- void MacroAssembler::CountLeadingZeros(Register source,
1566
- Register scratch,
1567
- Register zeros) {
1719
+ void MacroAssembler::AllocateHeapNumberWithValue(Register result,
1720
+ DwVfpRegister value,
1721
+ Register scratch1,
1722
+ Register scratch2,
1723
+ Register heap_number_map,
1724
+ Label* gc_required) {
1725
+ AllocateHeapNumber(result, scratch1, scratch2, heap_number_map, gc_required);
1726
+ sub(scratch1, result, Operand(kHeapObjectTag));
1727
+ vstr(value, scratch1, HeapNumber::kValueOffset);
1728
+ }
1729
+
1730
+
1731
+ void MacroAssembler::CountLeadingZeros(Register zeros, // Answer.
1732
+ Register source, // Input.
1733
+ Register scratch) {
1734
+ ASSERT(!zeros.is(source) || !source.is(zeros));
1735
+ ASSERT(!zeros.is(scratch));
1736
+ ASSERT(!scratch.is(ip));
1737
+ ASSERT(!source.is(ip));
1738
+ ASSERT(!zeros.is(ip));
1568
1739
  #ifdef CAN_USE_ARMV5_INSTRUCTIONS
1569
1740
  clz(zeros, source); // This instruction is only supported after ARM5.
1570
1741
  #else
1571
1742
  mov(zeros, Operand(0));
1572
- mov(scratch, source);
1743
+ Move(scratch, source);
1573
1744
  // Top 16.
1574
1745
  tst(scratch, Operand(0xffff0000));
1575
1746
  add(zeros, zeros, Operand(16), LeaveCC, eq);
@@ -1717,3 +1888,5 @@ void CodePatcher::Emit(Address addr) {
1717
1888
 
1718
1889
 
1719
1890
  } } // namespace v8::internal
1891
+
1892
+ #endif // V8_TARGET_ARCH_ARM