esruby 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +22 -0
  4. data/bin/esruby +34 -0
  5. data/lib/esruby.rb +26 -0
  6. data/lib/esruby/build.rb +140 -0
  7. data/lib/esruby/build/configuration.rb +77 -0
  8. data/lib/esruby/gem.rb +5 -0
  9. data/lib/esruby/gem/specification.rb +35 -0
  10. data/resources/build_config.eruby +53 -0
  11. data/resources/cpp/esruby.cpp +64 -0
  12. data/resources/cpp/esruby.hpp +42 -0
  13. data/resources/cpp/main.cpp +9 -0
  14. data/resources/js/esruby.js +45 -0
  15. data/resources/mruby/AUTHORS +40 -0
  16. data/resources/mruby/CONTRIBUTING.md +68 -0
  17. data/resources/mruby/LEGAL +6 -0
  18. data/resources/mruby/MITL +20 -0
  19. data/resources/mruby/Makefile +17 -0
  20. data/resources/mruby/NEWS +13 -0
  21. data/resources/mruby/README.md +92 -0
  22. data/resources/mruby/Rakefile +152 -0
  23. data/resources/mruby/TODO +10 -0
  24. data/resources/mruby/appveyor.yml +38 -0
  25. data/resources/mruby/appveyor_config.rb +50 -0
  26. data/resources/mruby/benchmark/bm_ao_render.rb +314 -0
  27. data/resources/mruby/benchmark/bm_app_lc_fizzbuzz.rb +52 -0
  28. data/resources/mruby/benchmark/bm_fib.rb +7 -0
  29. data/resources/mruby/benchmark/bm_so_lists.rb +47 -0
  30. data/resources/mruby/benchmark/build_config_boxing.rb +28 -0
  31. data/resources/mruby/benchmark/build_config_cc.rb +13 -0
  32. data/resources/mruby/benchmark/plot.gpl +5 -0
  33. data/resources/mruby/bin/mirb +0 -0
  34. data/resources/mruby/bin/mrbc +0 -0
  35. data/resources/mruby/bin/mruby +0 -0
  36. data/resources/mruby/bin/mruby-strip +0 -0
  37. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/README.md +82 -0
  38. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/mrbgem.rake +63 -0
  39. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/mrblib/regexp_pcre.rb +232 -0
  40. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/mrblib/string_pcre.rb +333 -0
  41. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/132html +313 -0
  42. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/AUTHORS +45 -0
  43. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/CMakeLists.txt +959 -0
  44. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/COPYING +5 -0
  45. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/ChangeLog +4981 -0
  46. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/CheckMan +67 -0
  47. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/CleanTxt +113 -0
  48. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/Detrail +35 -0
  49. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/HACKING +473 -0
  50. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/INSTALL +370 -0
  51. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/LICENCE +92 -0
  52. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/Makefile.am +877 -0
  53. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/Makefile.in +2917 -0
  54. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/NEWS +611 -0
  55. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/NON-AUTOTOOLS-BUILD +639 -0
  56. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/NON-UNIX-USE +7 -0
  57. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/PrepareRelease +253 -0
  58. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/README +935 -0
  59. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/RunGrepTest +551 -0
  60. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/RunTest +1015 -0
  61. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/RunTest.bat +616 -0
  62. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/aclocal.m4 +1230 -0
  63. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/output.0 +21280 -0
  64. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/output.1 +21280 -0
  65. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/requests +273 -0
  66. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/traces.0 +2421 -0
  67. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/traces.1 +1144 -0
  68. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  69. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/FindEditline.cmake +17 -0
  70. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  71. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/FindReadline.cmake +29 -0
  72. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/compile +343 -0
  73. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config-cmake.h.in +54 -0
  74. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.guess +1552 -0
  75. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.h +392 -0
  76. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.h.generic +392 -0
  77. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.h.in +343 -0
  78. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.sub +1804 -0
  79. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/configure +21280 -0
  80. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/configure.ac +1082 -0
  81. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/depcomp +708 -0
  82. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/dftables.c +212 -0
  83. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/index.html +180 -0
  84. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre-config.html +109 -0
  85. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre.html +204 -0
  86. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre16.html +383 -0
  87. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_assign_jit_stack.html +76 -0
  88. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_compile.html +108 -0
  89. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_compile2.html +112 -0
  90. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_config.html +91 -0
  91. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_copy_named_substring.html +65 -0
  92. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_copy_substring.html +61 -0
  93. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_dfa_exec.html +128 -0
  94. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_exec.html +110 -0
  95. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_free_study.html +46 -0
  96. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_free_substring.html +46 -0
  97. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_free_substring_list.html +46 -0
  98. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_fullinfo.html +108 -0
  99. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_named_substring.html +68 -0
  100. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_stringnumber.html +57 -0
  101. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_stringtable_entries.html +60 -0
  102. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_substring.html +64 -0
  103. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_substring_list.html +61 -0
  104. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_jit_exec.html +108 -0
  105. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_jit_stack_alloc.html +55 -0
  106. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_jit_stack_free.html +48 -0
  107. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_maketables.html +48 -0
  108. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_pattern_to_host_byte_order.html +58 -0
  109. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_refcount.html +51 -0
  110. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_study.html +68 -0
  111. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_utf16_to_host_byte_order.html +57 -0
  112. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_version.html +46 -0
  113. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreapi.html +2786 -0
  114. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrebuild.html +517 -0
  115. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrecallout.html +243 -0
  116. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrecompat.html +216 -0
  117. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrecpp.html +368 -0
  118. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcredemo.html +426 -0
  119. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcregrep.html +757 -0
  120. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrejit.html +458 -0
  121. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrelimits.html +86 -0
  122. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrematching.html +233 -0
  123. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrepartial.html +474 -0
  124. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrepattern.html +2953 -0
  125. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreperform.html +195 -0
  126. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreposix.html +292 -0
  127. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreprecompile.html +158 -0
  128. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcresample.html +110 -0
  129. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrestack.html +225 -0
  130. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcresyntax.html +521 -0
  131. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcretest.html +1082 -0
  132. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreunicode.html +270 -0
  133. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/index.html.src +180 -0
  134. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre-config.1 +92 -0
  135. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre-config.txt +86 -0
  136. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre.3 +202 -0
  137. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre.txt +9909 -0
  138. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre16.3 +390 -0
  139. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre32.3 +389 -0
  140. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_assign_jit_stack.3 +61 -0
  141. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_compile.3 +98 -0
  142. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_compile2.3 +106 -0
  143. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_config.3 +76 -0
  144. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_copy_named_substring.3 +59 -0
  145. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_copy_substring.3 +52 -0
  146. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_dfa_exec.3 +125 -0
  147. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_exec.3 +103 -0
  148. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_free_study.3 +31 -0
  149. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_free_substring.3 +31 -0
  150. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_free_substring_list.3 +31 -0
  151. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_fullinfo.3 +95 -0
  152. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_named_substring.3 +62 -0
  153. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_stringnumber.3 +45 -0
  154. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_stringtable_entries.3 +48 -0
  155. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_substring.3 +55 -0
  156. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_substring_list.3 +49 -0
  157. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_jit_exec.3 +104 -0
  158. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_jit_stack_alloc.3 +45 -0
  159. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_jit_stack_free.3 +35 -0
  160. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_maketables.3 +33 -0
  161. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_pattern_to_host_byte_order.3 +46 -0
  162. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_refcount.3 +36 -0
  163. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_study.3 +56 -0
  164. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_utf16_to_host_byte_order.3 +46 -0
  165. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_utf32_to_host_byte_order.3 +46 -0
  166. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_version.3 +31 -0
  167. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreapi.3 +2823 -0
  168. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrebuild.3 +520 -0
  169. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrecallout.3 +214 -0
  170. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrecompat.3 +185 -0
  171. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrecpp.3 +348 -0
  172. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcregrep.1 +679 -0
  173. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcregrep.txt +740 -0
  174. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrejit.3 +437 -0
  175. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrelimits.3 +67 -0
  176. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrematching.3 +206 -0
  177. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrepartial.3 +445 -0
  178. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrepattern.3 +2983 -0
  179. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreperform.3 +177 -0
  180. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreposix.3 +270 -0
  181. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreprecompile.3 +151 -0
  182. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcresample.3 +99 -0
  183. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrestack.3 +215 -0
  184. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcresyntax.3 +496 -0
  185. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcretest.1 +1079 -0
  186. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcretest.txt +1012 -0
  187. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreunicode.3 +255 -0
  188. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/perltest.txt +42 -0
  189. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/install-sh +527 -0
  190. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcre.pc.in +12 -0
  191. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcre16.pc.in +12 -0
  192. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcre32.pc.in +12 -0
  193. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcrecpp.pc.in +12 -0
  194. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcreposix.pc.in +13 -0
  195. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/ltmain.sh +9636 -0
  196. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ax_pthread.m4 +309 -0
  197. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/libtool.m4 +7844 -0
  198. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ltoptions.m4 +369 -0
  199. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ltsugar.m4 +123 -0
  200. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ltversion.m4 +23 -0
  201. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/lt~obsolete.m4 +98 -0
  202. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/pcre_visibility.m4 +89 -0
  203. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/makevp.bat +66 -0
  204. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/makevp_c.txt +20 -0
  205. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/makevp_l.txt +20 -0
  206. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/missing +331 -0
  207. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre-config.in +133 -0
  208. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre.h +653 -0
  209. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre.h.generic +653 -0
  210. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre.h.in +653 -0
  211. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_byte_order.c +45 -0
  212. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_chartables.c +45 -0
  213. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_compile.c +45 -0
  214. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_config.c +45 -0
  215. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_dfa_exec.c +45 -0
  216. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_exec.c +45 -0
  217. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_fullinfo.c +45 -0
  218. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_get.c +45 -0
  219. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_globals.c +45 -0
  220. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_jit_compile.c +45 -0
  221. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_maketables.c +45 -0
  222. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_newline.c +45 -0
  223. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_ord2utf16.c +90 -0
  224. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_printint.c +45 -0
  225. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_refcount.c +45 -0
  226. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_string_utils.c +45 -0
  227. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_study.c +45 -0
  228. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_tables.c +45 -0
  229. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_ucd.c +45 -0
  230. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_utf16_utils.c +130 -0
  231. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_valid_utf16.c +156 -0
  232. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_version.c +45 -0
  233. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_xclass.c +45 -0
  234. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_byte_order.c +45 -0
  235. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_chartables.c +45 -0
  236. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_compile.c +45 -0
  237. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_config.c +45 -0
  238. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_dfa_exec.c +45 -0
  239. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_exec.c +45 -0
  240. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_fullinfo.c +45 -0
  241. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_get.c +45 -0
  242. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_globals.c +45 -0
  243. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_jit_compile.c +45 -0
  244. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_maketables.c +45 -0
  245. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_newline.c +45 -0
  246. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_ord2utf32.c +82 -0
  247. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_printint.c +45 -0
  248. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_refcount.c +45 -0
  249. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_string_utils.c +45 -0
  250. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_study.c +45 -0
  251. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_tables.c +45 -0
  252. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_ucd.c +45 -0
  253. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_utf32_utils.c +141 -0
  254. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_valid_utf32.c +131 -0
  255. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_version.c +45 -0
  256. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_xclass.c +45 -0
  257. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_byte_order.c +318 -0
  258. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_chartables.c +198 -0
  259. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_chartables.c.dist +198 -0
  260. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_compile.c +8386 -0
  261. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_config.c +186 -0
  262. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_dfa_exec.c +3582 -0
  263. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_exec.c +7049 -0
  264. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_fullinfo.c +231 -0
  265. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_get.c +662 -0
  266. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_globals.c +84 -0
  267. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_internal.h +2744 -0
  268. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_jit_compile.c +8560 -0
  269. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_jit_test.c +1614 -0
  270. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_maketables.c +151 -0
  271. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_newline.c +210 -0
  272. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_ord2utf8.c +94 -0
  273. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_printint.c +766 -0
  274. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_refcount.c +92 -0
  275. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_scanner.cc +199 -0
  276. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_scanner.h +172 -0
  277. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_scanner_unittest.cc +159 -0
  278. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_string_utils.c +211 -0
  279. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_stringpiece.cc +43 -0
  280. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_stringpiece.h.in +179 -0
  281. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_stringpiece_unittest.cc +150 -0
  282. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_study.c +1562 -0
  283. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_tables.c +655 -0
  284. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_ucd.c +3298 -0
  285. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_valid_utf8.c +312 -0
  286. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_version.c +98 -0
  287. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_xclass.c +198 -0
  288. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp.cc +922 -0
  289. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp.h +710 -0
  290. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp_internal.h +71 -0
  291. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp_unittest.cc +1291 -0
  292. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpparg.h.in +174 -0
  293. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcredemo.c +406 -0
  294. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcregexp.pas +845 -0
  295. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcregrep.c +3180 -0
  296. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcreposix.c +419 -0
  297. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcreposix.h +146 -0
  298. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcretest.c +5488 -0
  299. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/perltest.pl +237 -0
  300. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitConfig.h +110 -0
  301. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitConfigInternal.h +484 -0
  302. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitExecAllocator.c +289 -0
  303. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitLir.c +1766 -0
  304. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitLir.h +985 -0
  305. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeARM_Thumb2.c +2008 -0
  306. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeARM_v5.c +2515 -0
  307. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeMIPS_32.c +404 -0
  308. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeMIPS_common.c +1881 -0
  309. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativePPC_32.c +269 -0
  310. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativePPC_64.c +421 -0
  311. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativePPC_common.c +2014 -0
  312. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeSPARC_32.c +164 -0
  313. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeSPARC_common.c +1348 -0
  314. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeX86_32.c +547 -0
  315. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeX86_64.c +810 -0
  316. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeX86_common.c +2836 -0
  317. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitUtils.c +332 -0
  318. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepbinary +0 -0
  319. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepfilelist +3 -0
  320. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinput +611 -0
  321. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinput3 +15 -0
  322. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinput8 +11 -0
  323. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinputv +4 -0
  324. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinputx +43 -0
  325. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/greplist +7 -0
  326. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepoutput +707 -0
  327. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepoutput8 +12 -0
  328. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepoutputN +16 -1
  329. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/greppatN4 +2 -0
  330. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16 +0 -0
  331. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16BE-1 +0 -0
  332. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16BE-2 +0 -0
  333. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16LE-1 +0 -0
  334. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16LE-2 +0 -0
  335. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32 +0 -0
  336. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32BE-1 +0 -0
  337. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32BE-2 +0 -0
  338. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32LE-1 +0 -0
  339. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32LE-2 +0 -0
  340. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved8 +0 -0
  341. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput1 +5306 -0
  342. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput10 +1337 -0
  343. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput11 +135 -0
  344. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput12 +89 -0
  345. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput13 +9 -0
  346. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput14 +329 -0
  347. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput15 +430 -0
  348. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput16 +35 -0
  349. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput17 +296 -0
  350. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput18 +296 -0
  351. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput19 +22 -0
  352. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput2 +3813 -0
  353. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput20 +19 -0
  354. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput21 +16 -0
  355. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput22 +13 -0
  356. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput23 +16 -0
  357. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput24 +77 -0
  358. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput25 +32 -0
  359. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput26 +80 -0
  360. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput3 +95 -0
  361. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput4 +624 -0
  362. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput5 +772 -0
  363. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput6 +1319 -0
  364. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput7 +672 -0
  365. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput8 +4801 -0
  366. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput9 +717 -0
  367. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinputEBC +121 -0
  368. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput1 +8798 -0
  369. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput10 +2726 -0
  370. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput11-16 +713 -0
  371. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput11-32 +713 -0
  372. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput11-8 +713 -0
  373. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput12 +181 -0
  374. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput13 +21 -0
  375. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput14 +476 -0
  376. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput15 +1269 -0
  377. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput16 +121 -0
  378. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput17 +505 -0
  379. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput18-16 +1022 -0
  380. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput18-32 +1019 -0
  381. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput19 +88 -0
  382. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput2 +12484 -0
  383. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput20 +27 -0
  384. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput21-16 +90 -0
  385. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput21-32 +90 -0
  386. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput22-16 +71 -0
  387. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput22-32 +71 -0
  388. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput23 +42 -0
  389. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput24 +145 -0
  390. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput25 +79 -0
  391. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput26 +148 -0
  392. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput3 +169 -0
  393. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput4 +1094 -0
  394. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput5 +1849 -0
  395. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput6 +2137 -0
  396. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput7 +1473 -0
  397. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput8 +8019 -0
  398. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput9 +1371 -0
  399. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutputEBC +182 -0
  400. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/wintestinput3 +91 -0
  401. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/wintestoutput3 +166 -0
  402. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/ucp.h +197 -0
  403. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/run_test.rb +23 -0
  404. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/src/mruby_regexp_pcre.c +364 -0
  405. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/test/matchdata.rb +94 -0
  406. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/test/regexp.rb +264 -0
  407. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/test/string.rb +201 -0
  408. data/resources/mruby/build_config.rb +152 -0
  409. data/resources/mruby/doc/guides/compile.md +488 -0
  410. data/resources/mruby/doc/guides/debugger.md +370 -0
  411. data/resources/mruby/doc/guides/gc-arena-howto.md +177 -0
  412. data/resources/mruby/doc/guides/mrbconf.md +146 -0
  413. data/resources/mruby/doc/guides/mrbgems.md +340 -0
  414. data/resources/mruby/doc/limitations.md +187 -0
  415. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/README.md +4 -0
  416. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +23 -0
  417. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
  418. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +20 -0
  419. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
  420. data/resources/mruby/examples/mrbgems/c_extension_example/README.md +4 -0
  421. data/resources/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +23 -0
  422. data/resources/mruby/examples/mrbgems/c_extension_example/src/example.c +20 -0
  423. data/resources/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
  424. data/resources/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
  425. data/resources/mruby/examples/mrbgems/ruby_extension_example/README.md +4 -0
  426. data/resources/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +25 -0
  427. data/resources/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
  428. data/resources/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
  429. data/resources/mruby/examples/targets/build_config_ArduinoDue.rb +90 -0
  430. data/resources/mruby/examples/targets/build_config_IntelEdison.rb +69 -0
  431. data/resources/mruby/examples/targets/build_config_IntelGalileo.rb +106 -0
  432. data/resources/mruby/examples/targets/build_config_RX630.rb +81 -0
  433. data/resources/mruby/examples/targets/build_config_android_arm64-v8a.rb +26 -0
  434. data/resources/mruby/examples/targets/build_config_android_armeabi.rb +26 -0
  435. data/resources/mruby/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb +28 -0
  436. data/resources/mruby/examples/targets/build_config_chipKITMax32.rb +86 -0
  437. data/resources/mruby/include/mrbconf.h +145 -0
  438. data/resources/mruby/include/mruby.h +1280 -0
  439. data/resources/mruby/include/mruby/array.h +279 -0
  440. data/resources/mruby/include/mruby/boxing_nan.h +102 -0
  441. data/resources/mruby/include/mruby/boxing_no.h +56 -0
  442. data/resources/mruby/include/mruby/boxing_word.h +136 -0
  443. data/resources/mruby/include/mruby/class.h +94 -0
  444. data/resources/mruby/include/mruby/common.h +72 -0
  445. data/resources/mruby/include/mruby/compile.h +194 -0
  446. data/resources/mruby/include/mruby/data.h +75 -0
  447. data/resources/mruby/include/mruby/debug.h +66 -0
  448. data/resources/mruby/include/mruby/dump.h +196 -0
  449. data/resources/mruby/include/mruby/error.h +75 -0
  450. data/resources/mruby/include/mruby/gc.h +91 -0
  451. data/resources/mruby/include/mruby/hash.h +182 -0
  452. data/resources/mruby/include/mruby/irep.h +62 -0
  453. data/resources/mruby/include/mruby/istruct.h +47 -0
  454. data/resources/mruby/include/mruby/khash.h +274 -0
  455. data/resources/mruby/include/mruby/numeric.h +161 -0
  456. data/resources/mruby/include/mruby/object.h +45 -0
  457. data/resources/mruby/include/mruby/opcode.h +161 -0
  458. data/resources/mruby/include/mruby/proc.h +131 -0
  459. data/resources/mruby/include/mruby/range.h +49 -0
  460. data/resources/mruby/include/mruby/re.h +16 -0
  461. data/resources/mruby/include/mruby/string.h +440 -0
  462. data/resources/mruby/include/mruby/throw.h +55 -0
  463. data/resources/mruby/include/mruby/value.h +309 -0
  464. data/resources/mruby/include/mruby/variable.h +138 -0
  465. data/resources/mruby/include/mruby/version.h +110 -0
  466. data/resources/mruby/lib/mruby-core-ext.rb +79 -0
  467. data/resources/mruby/lib/mruby/build.rb +355 -0
  468. data/resources/mruby/lib/mruby/build/command.rb +324 -0
  469. data/resources/mruby/lib/mruby/build/load_gems.rb +122 -0
  470. data/resources/mruby/lib/mruby/gem.rb +459 -0
  471. data/resources/mruby/lib/mruby/source.rb +30 -0
  472. data/resources/mruby/minirake +484 -0
  473. data/resources/mruby/mrbgems/default.gembox +82 -0
  474. data/resources/mruby/mrbgems/full-core.gembox +9 -0
  475. data/resources/mruby/mrbgems/mruby-array-ext/mrbgem.rake +6 -0
  476. data/resources/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +935 -0
  477. data/resources/mruby/mrbgems/mruby-array-ext/src/array.c +246 -0
  478. data/resources/mruby/mrbgems/mruby-array-ext/test/array.rb +422 -0
  479. data/resources/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +286 -0
  480. data/resources/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +701 -0
  481. data/resources/mruby/mrbgems/mruby-bin-debugger/mrbgem.rake +9 -0
  482. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +505 -0
  483. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h +26 -0
  484. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c +240 -0
  485. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h +14 -0
  486. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +78 -0
  487. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h +13 -0
  488. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c +436 -0
  489. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c +502 -0
  490. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +58 -0
  491. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +64 -0
  492. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +759 -0
  493. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +165 -0
  494. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +16 -0
  495. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h +20 -0
  496. data/resources/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +12 -0
  497. data/resources/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +33 -0
  498. data/resources/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +611 -0
  499. data/resources/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +16 -0
  500. data/resources/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +336 -0
  501. data/resources/mruby/mrbgems/mruby-bin-mruby-config/mrbgem.rake +30 -0
  502. data/resources/mruby/mrbgems/mruby-bin-mruby-config/mruby-config +20 -0
  503. data/resources/mruby/mrbgems/mruby-bin-mruby-config/mruby-config.bat +42 -0
  504. data/resources/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +60 -0
  505. data/resources/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +12 -0
  506. data/resources/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +254 -0
  507. data/resources/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +73 -0
  508. data/resources/mruby/mrbgems/mruby-bin-strip/mrbgem.rake +6 -0
  509. data/resources/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +155 -0
  510. data/resources/mruby/mrbgems/mruby-class-ext/mrbgem.rake +5 -0
  511. data/resources/mruby/mrbgems/mruby-class-ext/src/class.c +68 -0
  512. data/resources/mruby/mrbgems/mruby-class-ext/test/module.rb +55 -0
  513. data/resources/mruby/mrbgems/mruby-compar-ext/mrbgem.rake +5 -0
  514. data/resources/mruby/mrbgems/mruby-compar-ext/mrblib/compar.rb +31 -0
  515. data/resources/mruby/mrbgems/mruby-compiler/bintest/mrbc.rb +30 -0
  516. data/resources/mruby/mrbgems/mruby-compiler/core/codegen.c +3083 -0
  517. data/resources/mruby/mrbgems/mruby-compiler/core/keywords +50 -0
  518. data/resources/mruby/mrbgems/mruby-compiler/core/lex.def +211 -0
  519. data/resources/mruby/mrbgems/mruby-compiler/core/node.h +118 -0
  520. data/resources/mruby/mrbgems/mruby-compiler/core/parse.y +6661 -0
  521. data/resources/mruby/mrbgems/mruby-compiler/mrbgem.rake +40 -0
  522. data/resources/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +5 -0
  523. data/resources/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +813 -0
  524. data/resources/mruby/mrbgems/mruby-enum-ext/test/enum.rb +185 -0
  525. data/resources/mruby/mrbgems/mruby-enum-lazy/mrbgem.rake +7 -0
  526. data/resources/mruby/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +178 -0
  527. data/resources/mruby/mrbgems/mruby-enum-lazy/test/lazy.rb +53 -0
  528. data/resources/mruby/mrbgems/mruby-enumerator/mrbgem.rake +7 -0
  529. data/resources/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +645 -0
  530. data/resources/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +546 -0
  531. data/resources/mruby/mrbgems/mruby-error/mrbgem.rake +10 -0
  532. data/resources/mruby/mrbgems/mruby-error/src/exception.c +100 -0
  533. data/resources/mruby/mrbgems/mruby-error/test/exception.c +59 -0
  534. data/resources/mruby/mrbgems/mruby-error/test/exception.rb +55 -0
  535. data/resources/mruby/mrbgems/mruby-eval/mrbgem.rake +7 -0
  536. data/resources/mruby/mrbgems/mruby-eval/src/eval.c +346 -0
  537. data/resources/mruby/mrbgems/mruby-eval/test/eval.rb +101 -0
  538. data/resources/mruby/mrbgems/mruby-exit/mrbgem.rake +5 -0
  539. data/resources/mruby/mrbgems/mruby-exit/src/mruby-exit.c +24 -0
  540. data/resources/mruby/mrbgems/mruby-fiber/mrbgem.rake +5 -0
  541. data/resources/mruby/mrbgems/mruby-fiber/src/fiber.c +420 -0
  542. data/resources/mruby/mrbgems/mruby-fiber/test/fiber.rb +208 -0
  543. data/resources/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +8 -0
  544. data/resources/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +502 -0
  545. data/resources/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +128 -0
  546. data/resources/mruby/mrbgems/mruby-hash-ext/test/hash.rb +300 -0
  547. data/resources/mruby/mrbgems/mruby-inline-struct/mrbgem.rake +5 -0
  548. data/resources/mruby/mrbgems/mruby-inline-struct/test/inline.c +83 -0
  549. data/resources/mruby/mrbgems/mruby-inline-struct/test/inline.rb +151 -0
  550. data/resources/mruby/mrbgems/mruby-io/README.md +193 -0
  551. data/resources/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +38 -0
  552. data/resources/mruby/mrbgems/mruby-io/mrbgem.rake +17 -0
  553. data/resources/mruby/mrbgems/mruby-io/mrblib/file.rb +208 -0
  554. data/resources/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +29 -0
  555. data/resources/mruby/mrbgems/mruby-io/mrblib/io.rb +387 -0
  556. data/resources/mruby/mrbgems/mruby-io/mrblib/kernel.rb +15 -0
  557. data/resources/mruby/mrbgems/mruby-io/run_test.rb +26 -0
  558. data/resources/mruby/mrbgems/mruby-io/src/file.c +489 -0
  559. data/resources/mruby/mrbgems/mruby-io/src/file_test.c +381 -0
  560. data/resources/mruby/mrbgems/mruby-io/src/io.c +1320 -0
  561. data/resources/mruby/mrbgems/mruby-io/src/mruby_io_gem.c +20 -0
  562. data/resources/mruby/mrbgems/mruby-io/test/file.rb +197 -0
  563. data/resources/mruby/mrbgems/mruby-io/test/file_test.rb +117 -0
  564. data/resources/mruby/mrbgems/mruby-io/test/gc_filedes.sh +4 -0
  565. data/resources/mruby/mrbgems/mruby-io/test/io.rb +642 -0
  566. data/resources/mruby/mrbgems/mruby-io/test/mruby_io_test.c +256 -0
  567. data/resources/mruby/mrbgems/mruby-kernel-ext/mrbgem.rake +5 -0
  568. data/resources/mruby/mrbgems/mruby-kernel-ext/mrblib/kernel.rb +13 -0
  569. data/resources/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +264 -0
  570. data/resources/mruby/mrbgems/mruby-kernel-ext/test/kernel.rb +86 -0
  571. data/resources/mruby/mrbgems/mruby-math/mrbgem.rake +5 -0
  572. data/resources/mruby/mrbgems/mruby-math/src/math.c +783 -0
  573. data/resources/mruby/mrbgems/mruby-math/test/math.rb +152 -0
  574. data/resources/mruby/mrbgems/mruby-method/README.md +59 -0
  575. data/resources/mruby/mrbgems/mruby-method/mrbgem.rake +7 -0
  576. data/resources/mruby/mrbgems/mruby-method/mrblib/kernel.rb +9 -0
  577. data/resources/mruby/mrbgems/mruby-method/mrblib/method.rb +20 -0
  578. data/resources/mruby/mrbgems/mruby-method/mrblib/unbound_method.rb +9 -0
  579. data/resources/mruby/mrbgems/mruby-method/src/method.c +418 -0
  580. data/resources/mruby/mrbgems/mruby-method/test/method.rb +425 -0
  581. data/resources/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +5 -0
  582. data/resources/mruby/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +25 -0
  583. data/resources/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +102 -0
  584. data/resources/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +28 -0
  585. data/resources/mruby/mrbgems/mruby-object-ext/mrbgem.rake +5 -0
  586. data/resources/mruby/mrbgems/mruby-object-ext/mrblib/object.rb +19 -0
  587. data/resources/mruby/mrbgems/mruby-object-ext/src/object.c +112 -0
  588. data/resources/mruby/mrbgems/mruby-object-ext/test/nil.rb +11 -0
  589. data/resources/mruby/mrbgems/mruby-object-ext/test/object.rb +53 -0
  590. data/resources/mruby/mrbgems/mruby-objectspace/mrbgem.rake +5 -0
  591. data/resources/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +187 -0
  592. data/resources/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +60 -0
  593. data/resources/mruby/mrbgems/mruby-pack/README.md +70 -0
  594. data/resources/mruby/mrbgems/mruby-pack/mrbgem.rake +7 -0
  595. data/resources/mruby/mrbgems/mruby-pack/packtest.rb +157 -0
  596. data/resources/mruby/mrbgems/mruby-pack/run_test.rb +26 -0
  597. data/resources/mruby/mrbgems/mruby-pack/src/pack.c +1281 -0
  598. data/resources/mruby/mrbgems/mruby-pack/test/pack.rb +165 -0
  599. data/resources/mruby/mrbgems/mruby-print/mrbgem.rake +5 -0
  600. data/resources/mruby/mrbgems/mruby-print/mrblib/print.rb +64 -0
  601. data/resources/mruby/mrbgems/mruby-print/src/print.c +64 -0
  602. data/resources/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +5 -0
  603. data/resources/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +42 -0
  604. data/resources/mruby/mrbgems/mruby-proc-ext/src/proc.c +173 -0
  605. data/resources/mruby/mrbgems/mruby-proc-ext/test/proc.c +62 -0
  606. data/resources/mruby/mrbgems/mruby-proc-ext/test/proc.rb +96 -0
  607. data/resources/mruby/mrbgems/mruby-random/mrbgem.rake +5 -0
  608. data/resources/mruby/mrbgems/mruby-random/src/mt19937ar.c +224 -0
  609. data/resources/mruby/mrbgems/mruby-random/src/mt19937ar.h +80 -0
  610. data/resources/mruby/mrbgems/mruby-random/src/random.c +349 -0
  611. data/resources/mruby/mrbgems/mruby-random/src/random.h +12 -0
  612. data/resources/mruby/mrbgems/mruby-random/test/random.rb +88 -0
  613. data/resources/mruby/mrbgems/mruby-range-ext/mrbgem.rake +5 -0
  614. data/resources/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +31 -0
  615. data/resources/mruby/mrbgems/mruby-range-ext/src/range.c +176 -0
  616. data/resources/mruby/mrbgems/mruby-range-ext/test/range.rb +32 -0
  617. data/resources/mruby/mrbgems/mruby-socket/README.md +55 -0
  618. data/resources/mruby/mrbgems/mruby-socket/mrbgem.rake +17 -0
  619. data/resources/mruby/mrbgems/mruby-socket/mrblib/socket.rb +621 -0
  620. data/resources/mruby/mrbgems/mruby-socket/run_test.rb +28 -0
  621. data/resources/mruby/mrbgems/mruby-socket/src/const.cstub +453 -0
  622. data/resources/mruby/mrbgems/mruby-socket/src/const.def +163 -0
  623. data/resources/mruby/mrbgems/mruby-socket/src/gen.rb +17 -0
  624. data/resources/mruby/mrbgems/mruby-socket/src/socket.c +928 -0
  625. data/resources/mruby/mrbgems/mruby-socket/test/addrinfo.rb +91 -0
  626. data/resources/mruby/mrbgems/mruby-socket/test/basicsocket.rb +17 -0
  627. data/resources/mruby/mrbgems/mruby-socket/test/ipsocket.rb +44 -0
  628. data/resources/mruby/mrbgems/mruby-socket/test/socket.rb +38 -0
  629. data/resources/mruby/mrbgems/mruby-socket/test/sockettest.c +46 -0
  630. data/resources/mruby/mrbgems/mruby-socket/test/tcpsocket.rb +4 -0
  631. data/resources/mruby/mrbgems/mruby-socket/test/udpsocket.rb +16 -0
  632. data/resources/mruby/mrbgems/mruby-socket/test/unix.rb +130 -0
  633. data/resources/mruby/mrbgems/mruby-sprintf/mrbgem.rake +5 -0
  634. data/resources/mruby/mrbgems/mruby-sprintf/mrblib/string.rb +9 -0
  635. data/resources/mruby/mrbgems/mruby-sprintf/src/kernel.c +30 -0
  636. data/resources/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1126 -0
  637. data/resources/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +110 -0
  638. data/resources/mruby/mrbgems/mruby-string-ext/mrbgem.rake +6 -0
  639. data/resources/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +368 -0
  640. data/resources/mruby/mrbgems/mruby-string-ext/src/string.c +804 -0
  641. data/resources/mruby/mrbgems/mruby-string-ext/test/string.rb +682 -0
  642. data/resources/mruby/mrbgems/mruby-struct/mrbgem.rake +5 -0
  643. data/resources/mruby/mrbgems/mruby-struct/mrblib/struct.rb +103 -0
  644. data/resources/mruby/mrbgems/mruby-struct/src/struct.c +726 -0
  645. data/resources/mruby/mrbgems/mruby-struct/test/struct.rb +205 -0
  646. data/resources/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +5 -0
  647. data/resources/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +78 -0
  648. data/resources/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +64 -0
  649. data/resources/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +48 -0
  650. data/resources/mruby/mrbgems/mruby-test/README.md +7 -0
  651. data/resources/mruby/mrbgems/mruby-test/driver.c +175 -0
  652. data/resources/mruby/mrbgems/mruby-test/init_mrbtest.c +38 -0
  653. data/resources/mruby/mrbgems/mruby-test/mrbgem.rake +191 -0
  654. data/resources/mruby/mrbgems/mruby-time/mrbgem.rake +5 -0
  655. data/resources/mruby/mrbgems/mruby-time/mrblib/time.rb +9 -0
  656. data/resources/mruby/mrbgems/mruby-time/src/time.c +869 -0
  657. data/resources/mruby/mrbgems/mruby-time/test/time.rb +228 -0
  658. data/resources/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +5 -0
  659. data/resources/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +11 -0
  660. data/resources/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +24 -0
  661. data/resources/mruby/mrblib/00class.rb +29 -0
  662. data/resources/mruby/mrblib/10error.rb +59 -0
  663. data/resources/mruby/mrblib/array.rb +243 -0
  664. data/resources/mruby/mrblib/compar.rb +84 -0
  665. data/resources/mruby/mrblib/enum.rb +348 -0
  666. data/resources/mruby/mrblib/float.rb +9 -0
  667. data/resources/mruby/mrblib/hash.rb +358 -0
  668. data/resources/mruby/mrblib/init_mrblib.c +11 -0
  669. data/resources/mruby/mrblib/kernel.rb +50 -0
  670. data/resources/mruby/mrblib/mrblib.rake +21 -0
  671. data/resources/mruby/mrblib/numeric.rb +163 -0
  672. data/resources/mruby/mrblib/range.rb +67 -0
  673. data/resources/mruby/mrblib/string.rb +275 -0
  674. data/resources/mruby/mruby-source.gemspec +18 -0
  675. data/resources/mruby/src/array.c +1251 -0
  676. data/resources/mruby/src/backtrace.c +285 -0
  677. data/resources/mruby/src/class.c +2546 -0
  678. data/resources/mruby/src/codedump.c +477 -0
  679. data/resources/mruby/src/compar.c +13 -0
  680. data/resources/mruby/src/crc.c +39 -0
  681. data/resources/mruby/src/debug.c +217 -0
  682. data/resources/mruby/src/dump.c +1106 -0
  683. data/resources/mruby/src/enum.c +14 -0
  684. data/resources/mruby/src/error.c +513 -0
  685. data/resources/mruby/src/error.h +3 -0
  686. data/resources/mruby/src/etc.c +246 -0
  687. data/resources/mruby/src/fmt_fp.c +374 -0
  688. data/resources/mruby/src/gc.c +1835 -0
  689. data/resources/mruby/src/hash.c +916 -0
  690. data/resources/mruby/src/init.c +51 -0
  691. data/resources/mruby/src/kernel.c +1264 -0
  692. data/resources/mruby/src/load.c +706 -0
  693. data/resources/mruby/src/mruby_core.rake +20 -0
  694. data/resources/mruby/src/numeric.c +1574 -0
  695. data/resources/mruby/src/object.c +618 -0
  696. data/resources/mruby/src/opcode.h +2 -0
  697. data/resources/mruby/src/pool.c +209 -0
  698. data/resources/mruby/src/print.c +47 -0
  699. data/resources/mruby/src/proc.c +313 -0
  700. data/resources/mruby/src/range.c +446 -0
  701. data/resources/mruby/src/state.c +307 -0
  702. data/resources/mruby/src/string.c +3025 -0
  703. data/resources/mruby/src/symbol.c +494 -0
  704. data/resources/mruby/src/value_array.h +27 -0
  705. data/resources/mruby/src/variable.c +982 -0
  706. data/resources/mruby/src/version.c +17 -0
  707. data/resources/mruby/src/vm.c +3020 -0
  708. data/resources/mruby/tasks/benchmark.rake +91 -0
  709. data/resources/mruby/tasks/gitlab.rake +118 -0
  710. data/resources/mruby/tasks/libmruby.rake +24 -0
  711. data/resources/mruby/tasks/mrbgems.rake +98 -0
  712. data/resources/mruby/tasks/toolchains/android.rake +321 -0
  713. data/resources/mruby/tasks/toolchains/clang.rake +9 -0
  714. data/resources/mruby/tasks/toolchains/gcc.rake +66 -0
  715. data/resources/mruby/tasks/toolchains/openwrt.rake +38 -0
  716. data/resources/mruby/tasks/toolchains/visualcpp.rake +68 -0
  717. data/resources/mruby/test/assert.rb +249 -0
  718. data/resources/mruby/test/bintest.rb +33 -0
  719. data/resources/mruby/test/report.rb +4 -0
  720. data/resources/mruby/test/t/argumenterror.rb +16 -0
  721. data/resources/mruby/test/t/array.rb +394 -0
  722. data/resources/mruby/test/t/basicobject.rb +11 -0
  723. data/resources/mruby/test/t/bs_block.rb +521 -0
  724. data/resources/mruby/test/t/bs_literal.rb +38 -0
  725. data/resources/mruby/test/t/class.rb +451 -0
  726. data/resources/mruby/test/t/codegen.rb +197 -0
  727. data/resources/mruby/test/t/comparable.rb +80 -0
  728. data/resources/mruby/test/t/ensure.rb +54 -0
  729. data/resources/mruby/test/t/enumerable.rb +134 -0
  730. data/resources/mruby/test/t/exception.rb +422 -0
  731. data/resources/mruby/test/t/false.rb +31 -0
  732. data/resources/mruby/test/t/float.rb +209 -0
  733. data/resources/mruby/test/t/gc.rb +45 -0
  734. data/resources/mruby/test/t/hash.rb +375 -0
  735. data/resources/mruby/test/t/indexerror.rb +6 -0
  736. data/resources/mruby/test/t/integer.rb +277 -0
  737. data/resources/mruby/test/t/iterations.rb +61 -0
  738. data/resources/mruby/test/t/kernel.rb +600 -0
  739. data/resources/mruby/test/t/lang.rb +74 -0
  740. data/resources/mruby/test/t/literals.rb +337 -0
  741. data/resources/mruby/test/t/localjumperror.rb +13 -0
  742. data/resources/mruby/test/t/methods.rb +109 -0
  743. data/resources/mruby/test/t/module.rb +914 -0
  744. data/resources/mruby/test/t/nameerror.rb +28 -0
  745. data/resources/mruby/test/t/nil.rb +39 -0
  746. data/resources/mruby/test/t/nomethoderror.rb +22 -0
  747. data/resources/mruby/test/t/numeric.rb +43 -0
  748. data/resources/mruby/test/t/object.rb +11 -0
  749. data/resources/mruby/test/t/proc.rb +180 -0
  750. data/resources/mruby/test/t/range.rb +95 -0
  751. data/resources/mruby/test/t/rangeerror.rb +6 -0
  752. data/resources/mruby/test/t/regexperror.rb +4 -0
  753. data/resources/mruby/test/t/runtimeerror.rb +6 -0
  754. data/resources/mruby/test/t/standarderror.rb +6 -0
  755. data/resources/mruby/test/t/string.rb +728 -0
  756. data/resources/mruby/test/t/superclass.rb +47 -0
  757. data/resources/mruby/test/t/symbol.rb +30 -0
  758. data/resources/mruby/test/t/syntax.rb +468 -0
  759. data/resources/mruby/test/t/true.rb +31 -0
  760. data/resources/mruby/test/t/typeerror.rb +6 -0
  761. data/resources/mruby/test/t/unicode.rb +39 -0
  762. data/resources/mruby/travis_config.rb +53 -0
  763. metadata +806 -0
@@ -0,0 +1,2014 @@
1
+ /*
2
+ * Stack-less Just-In-Time compiler
3
+ *
4
+ * Copyright 2009-2012 Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without modification, are
7
+ * permitted provided that the following conditions are met:
8
+ *
9
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
10
+ * conditions and the following disclaimer.
11
+ *
12
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
13
+ * of conditions and the following disclaimer in the documentation and/or other materials
14
+ * provided with the distribution.
15
+ *
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
17
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19
+ * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
22
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ */
26
+
27
+ SLJIT_API_FUNC_ATTRIBUTE SLJIT_CONST char* sljit_get_platform_name(void)
28
+ {
29
+ return "PowerPC" SLJIT_CPUINFO;
30
+ }
31
+
32
+ /* Length of an instruction word.
33
+ Both for ppc-32 and ppc-64. */
34
+ typedef sljit_ui sljit_ins;
35
+
36
+ #ifdef _AIX
37
+ #include <sys/cache.h>
38
+ #endif
39
+
40
+ static void ppc_cache_flush(sljit_ins *from, sljit_ins *to)
41
+ {
42
+ #ifdef _AIX
43
+ _sync_cache_range((caddr_t)from, (int)((size_t)to - (size_t)from));
44
+ #elif defined(__GNUC__) || (defined(__IBM_GCC_ASM) && __IBM_GCC_ASM)
45
+ # if defined(_ARCH_PWR) || defined(_ARCH_PWR2)
46
+ /* Cache flush for POWER architecture. */
47
+ while (from < to) {
48
+ __asm__ volatile (
49
+ "clf 0, %0\n"
50
+ "dcs\n"
51
+ : : "r"(from)
52
+ );
53
+ from++;
54
+ }
55
+ __asm__ volatile ( "ics" );
56
+ # elif defined(_ARCH_COM) && !defined(_ARCH_PPC)
57
+ # error "Cache flush is not implemented for PowerPC/POWER common mode."
58
+ # else
59
+ /* Cache flush for PowerPC architecture. */
60
+ while (from < to) {
61
+ __asm__ volatile (
62
+ "dcbf 0, %0\n"
63
+ "sync\n"
64
+ "icbi 0, %0\n"
65
+ : : "r"(from)
66
+ );
67
+ from++;
68
+ }
69
+ __asm__ volatile ( "isync" );
70
+ # endif
71
+ # ifdef __xlc__
72
+ # warning "This file may fail to compile if -qfuncsect is used"
73
+ # endif
74
+ #elif defined(__xlc__)
75
+ #error "Please enable GCC syntax for inline assembly statements with -qasm=gcc"
76
+ #else
77
+ #error "This platform requires a cache flush implementation."
78
+ #endif /* _AIX */
79
+ }
80
+
81
+ #define TMP_REG1 (SLJIT_NO_REGISTERS + 1)
82
+ #define TMP_REG2 (SLJIT_NO_REGISTERS + 2)
83
+ #define TMP_REG3 (SLJIT_NO_REGISTERS + 3)
84
+ #define ZERO_REG (SLJIT_NO_REGISTERS + 4)
85
+
86
+ #define TMP_FREG1 (0)
87
+ #define TMP_FREG2 (SLJIT_FLOAT_REG6 + 1)
88
+
89
+ static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 5] = {
90
+ 0, 3, 4, 5, 6, 7, 30, 29, 28, 27, 26, 1, 8, 9, 10, 31
91
+ };
92
+
93
+ /* --------------------------------------------------------------------- */
94
+ /* Instrucion forms */
95
+ /* --------------------------------------------------------------------- */
96
+ #define D(d) (reg_map[d] << 21)
97
+ #define S(s) (reg_map[s] << 21)
98
+ #define A(a) (reg_map[a] << 16)
99
+ #define B(b) (reg_map[b] << 11)
100
+ #define C(c) (reg_map[c] << 6)
101
+ #define FD(fd) ((fd) << 21)
102
+ #define FA(fa) ((fa) << 16)
103
+ #define FB(fb) ((fb) << 11)
104
+ #define FC(fc) ((fc) << 6)
105
+ #define IMM(imm) ((imm) & 0xffff)
106
+ #define CRD(d) ((d) << 21)
107
+
108
+ /* Instruction bit sections.
109
+ OE and Rc flag (see ALT_SET_FLAGS). */
110
+ #define OERC(flags) (((flags & ALT_SET_FLAGS) >> 10) | (flags & ALT_SET_FLAGS))
111
+ /* Rc flag (see ALT_SET_FLAGS). */
112
+ #define RC(flags) ((flags & ALT_SET_FLAGS) >> 10)
113
+ #define HI(opcode) ((opcode) << 26)
114
+ #define LO(opcode) ((opcode) << 1)
115
+
116
+ #define ADD (HI(31) | LO(266))
117
+ #define ADDC (HI(31) | LO(10))
118
+ #define ADDE (HI(31) | LO(138))
119
+ #define ADDI (HI(14))
120
+ #define ADDIC (HI(13))
121
+ #define ADDIS (HI(15))
122
+ #define ADDME (HI(31) | LO(234))
123
+ #define AND (HI(31) | LO(28))
124
+ #define ANDI (HI(28))
125
+ #define ANDIS (HI(29))
126
+ #define Bx (HI(18))
127
+ #define BCx (HI(16))
128
+ #define BCCTR (HI(19) | LO(528) | (3 << 11))
129
+ #define BLR (HI(19) | LO(16) | (0x14 << 21))
130
+ #define CNTLZD (HI(31) | LO(58))
131
+ #define CNTLZW (HI(31) | LO(26))
132
+ #define CMP (HI(31) | LO(0))
133
+ #define CMPI (HI(11))
134
+ #define CMPL (HI(31) | LO(32))
135
+ #define CMPLI (HI(10))
136
+ #define CROR (HI(19) | LO(449))
137
+ #define DIVD (HI(31) | LO(489))
138
+ #define DIVDU (HI(31) | LO(457))
139
+ #define DIVW (HI(31) | LO(491))
140
+ #define DIVWU (HI(31) | LO(459))
141
+ #define EXTSB (HI(31) | LO(954))
142
+ #define EXTSH (HI(31) | LO(922))
143
+ #define EXTSW (HI(31) | LO(986))
144
+ #define FABS (HI(63) | LO(264))
145
+ #define FADD (HI(63) | LO(21))
146
+ #define FADDS (HI(59) | LO(21))
147
+ #define FCMPU (HI(63) | LO(0))
148
+ #define FDIV (HI(63) | LO(18))
149
+ #define FDIVS (HI(59) | LO(18))
150
+ #define FMR (HI(63) | LO(72))
151
+ #define FMUL (HI(63) | LO(25))
152
+ #define FMULS (HI(59) | LO(25))
153
+ #define FNEG (HI(63) | LO(40))
154
+ #define FSUB (HI(63) | LO(20))
155
+ #define FSUBS (HI(59) | LO(20))
156
+ #define LD (HI(58) | 0)
157
+ #define LWZ (HI(32))
158
+ #define MFCR (HI(31) | LO(19))
159
+ #define MFLR (HI(31) | LO(339) | 0x80000)
160
+ #define MFXER (HI(31) | LO(339) | 0x10000)
161
+ #define MTCTR (HI(31) | LO(467) | 0x90000)
162
+ #define MTLR (HI(31) | LO(467) | 0x80000)
163
+ #define MTXER (HI(31) | LO(467) | 0x10000)
164
+ #define MULHD (HI(31) | LO(73))
165
+ #define MULHDU (HI(31) | LO(9))
166
+ #define MULHW (HI(31) | LO(75))
167
+ #define MULHWU (HI(31) | LO(11))
168
+ #define MULLD (HI(31) | LO(233))
169
+ #define MULLI (HI(7))
170
+ #define MULLW (HI(31) | LO(235))
171
+ #define NEG (HI(31) | LO(104))
172
+ #define NOP (HI(24))
173
+ #define NOR (HI(31) | LO(124))
174
+ #define OR (HI(31) | LO(444))
175
+ #define ORI (HI(24))
176
+ #define ORIS (HI(25))
177
+ #define RLDICL (HI(30))
178
+ #define RLWINM (HI(21))
179
+ #define SLD (HI(31) | LO(27))
180
+ #define SLW (HI(31) | LO(24))
181
+ #define SRAD (HI(31) | LO(794))
182
+ #define SRADI (HI(31) | LO(413 << 1))
183
+ #define SRAW (HI(31) | LO(792))
184
+ #define SRAWI (HI(31) | LO(824))
185
+ #define SRD (HI(31) | LO(539))
186
+ #define SRW (HI(31) | LO(536))
187
+ #define STD (HI(62) | 0)
188
+ #define STDU (HI(62) | 1)
189
+ #define STDUX (HI(31) | LO(181))
190
+ #define STW (HI(36))
191
+ #define STWU (HI(37))
192
+ #define STWUX (HI(31) | LO(183))
193
+ #define SUBF (HI(31) | LO(40))
194
+ #define SUBFC (HI(31) | LO(8))
195
+ #define SUBFE (HI(31) | LO(136))
196
+ #define SUBFIC (HI(8))
197
+ #define XOR (HI(31) | LO(316))
198
+ #define XORI (HI(26))
199
+ #define XORIS (HI(27))
200
+
201
+ #define SIMM_MAX (0x7fff)
202
+ #define SIMM_MIN (-0x8000)
203
+ #define UIMM_MAX (0xffff)
204
+
205
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
206
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func)
207
+ {
208
+ sljit_sw* ptrs;
209
+ if (func_ptr)
210
+ *func_ptr = (void*)context;
211
+ ptrs = (sljit_sw*)func;
212
+ context->addr = addr ? addr : ptrs[0];
213
+ context->r2 = ptrs[1];
214
+ context->r11 = ptrs[2];
215
+ }
216
+ #endif
217
+
218
+ static sljit_si push_inst(struct sljit_compiler *compiler, sljit_ins ins)
219
+ {
220
+ sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));
221
+ FAIL_IF(!ptr);
222
+ *ptr = ins;
223
+ compiler->size++;
224
+ return SLJIT_SUCCESS;
225
+ }
226
+
227
+ static SLJIT_INLINE sljit_si optimize_jump(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
228
+ {
229
+ sljit_sw diff;
230
+ sljit_uw target_addr;
231
+
232
+ if (jump->flags & SLJIT_REWRITABLE_JUMP)
233
+ return 0;
234
+
235
+ if (jump->flags & JUMP_ADDR)
236
+ target_addr = jump->u.target;
237
+ else {
238
+ SLJIT_ASSERT(jump->flags & JUMP_LABEL);
239
+ target_addr = (sljit_uw)(code + jump->u.label->size);
240
+ }
241
+ diff = ((sljit_sw)target_addr - (sljit_sw)(code_ptr)) & ~0x3l;
242
+
243
+ if (jump->flags & UNCOND_B) {
244
+ if (diff <= 0x01ffffff && diff >= -0x02000000) {
245
+ jump->flags |= PATCH_B;
246
+ return 1;
247
+ }
248
+ if (target_addr <= 0x03ffffff) {
249
+ jump->flags |= PATCH_B | ABSOLUTE_B;
250
+ return 1;
251
+ }
252
+ }
253
+ else {
254
+ if (diff <= 0x7fff && diff >= -0x8000) {
255
+ jump->flags |= PATCH_B;
256
+ return 1;
257
+ }
258
+ if (target_addr <= 0xffff) {
259
+ jump->flags |= PATCH_B | ABSOLUTE_B;
260
+ return 1;
261
+ }
262
+ }
263
+ return 0;
264
+ }
265
+
266
+ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
267
+ {
268
+ struct sljit_memory_fragment *buf;
269
+ sljit_ins *code;
270
+ sljit_ins *code_ptr;
271
+ sljit_ins *buf_ptr;
272
+ sljit_ins *buf_end;
273
+ sljit_uw word_count;
274
+ sljit_uw addr;
275
+
276
+ struct sljit_label *label;
277
+ struct sljit_jump *jump;
278
+ struct sljit_const *const_;
279
+
280
+ CHECK_ERROR_PTR();
281
+ check_sljit_generate_code(compiler);
282
+ reverse_buf(compiler);
283
+
284
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
285
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
286
+ compiler->size += (compiler->size & 0x1) + (sizeof(struct sljit_function_context) / sizeof(sljit_ins));
287
+ #else
288
+ compiler->size += (sizeof(struct sljit_function_context) / sizeof(sljit_ins));
289
+ #endif
290
+ #endif
291
+ code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins));
292
+ PTR_FAIL_WITH_EXEC_IF(code);
293
+ buf = compiler->buf;
294
+
295
+ code_ptr = code;
296
+ word_count = 0;
297
+ label = compiler->labels;
298
+ jump = compiler->jumps;
299
+ const_ = compiler->consts;
300
+ do {
301
+ buf_ptr = (sljit_ins*)buf->memory;
302
+ buf_end = buf_ptr + (buf->used_size >> 2);
303
+ do {
304
+ *code_ptr = *buf_ptr++;
305
+ SLJIT_ASSERT(!label || label->size >= word_count);
306
+ SLJIT_ASSERT(!jump || jump->addr >= word_count);
307
+ SLJIT_ASSERT(!const_ || const_->addr >= word_count);
308
+ /* These structures are ordered by their address. */
309
+ if (label && label->size == word_count) {
310
+ /* Just recording the address. */
311
+ label->addr = (sljit_uw)code_ptr;
312
+ label->size = code_ptr - code;
313
+ label = label->next;
314
+ }
315
+ if (jump && jump->addr == word_count) {
316
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
317
+ jump->addr = (sljit_uw)(code_ptr - 3);
318
+ #else
319
+ jump->addr = (sljit_uw)(code_ptr - 6);
320
+ #endif
321
+ if (optimize_jump(jump, code_ptr, code)) {
322
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
323
+ code_ptr[-3] = code_ptr[0];
324
+ code_ptr -= 3;
325
+ #else
326
+ code_ptr[-6] = code_ptr[0];
327
+ code_ptr -= 6;
328
+ #endif
329
+ }
330
+ jump = jump->next;
331
+ }
332
+ if (const_ && const_->addr == word_count) {
333
+ /* Just recording the address. */
334
+ const_->addr = (sljit_uw)code_ptr;
335
+ const_ = const_->next;
336
+ }
337
+ code_ptr ++;
338
+ word_count ++;
339
+ } while (buf_ptr < buf_end);
340
+
341
+ buf = buf->next;
342
+ } while (buf);
343
+
344
+ if (label && label->size == word_count) {
345
+ label->addr = (sljit_uw)code_ptr;
346
+ label->size = code_ptr - code;
347
+ label = label->next;
348
+ }
349
+
350
+ SLJIT_ASSERT(!label);
351
+ SLJIT_ASSERT(!jump);
352
+ SLJIT_ASSERT(!const_);
353
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
354
+ SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins)));
355
+ #else
356
+ SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
357
+ #endif
358
+
359
+ jump = compiler->jumps;
360
+ while (jump) {
361
+ do {
362
+ addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
363
+ buf_ptr = (sljit_ins*)jump->addr;
364
+ if (jump->flags & PATCH_B) {
365
+ if (jump->flags & UNCOND_B) {
366
+ if (!(jump->flags & ABSOLUTE_B)) {
367
+ addr = addr - jump->addr;
368
+ SLJIT_ASSERT((sljit_sw)addr <= 0x01ffffff && (sljit_sw)addr >= -0x02000000);
369
+ *buf_ptr = Bx | (addr & 0x03fffffc) | ((*buf_ptr) & 0x1);
370
+ }
371
+ else {
372
+ SLJIT_ASSERT(addr <= 0x03ffffff);
373
+ *buf_ptr = Bx | (addr & 0x03fffffc) | 0x2 | ((*buf_ptr) & 0x1);
374
+ }
375
+ }
376
+ else {
377
+ if (!(jump->flags & ABSOLUTE_B)) {
378
+ addr = addr - jump->addr;
379
+ SLJIT_ASSERT((sljit_sw)addr <= 0x7fff && (sljit_sw)addr >= -0x8000);
380
+ *buf_ptr = BCx | (addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001);
381
+ }
382
+ else {
383
+ addr = addr & ~0x3l;
384
+ SLJIT_ASSERT(addr <= 0xffff);
385
+ *buf_ptr = BCx | (addr & 0xfffc) | 0x2 | ((*buf_ptr) & 0x03ff0001);
386
+ }
387
+
388
+ }
389
+ break;
390
+ }
391
+ /* Set the fields of immediate loads. */
392
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
393
+ buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff);
394
+ buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff);
395
+ #else
396
+ buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 48) & 0xffff);
397
+ buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 32) & 0xffff);
398
+ buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | ((addr >> 16) & 0xffff);
399
+ buf_ptr[4] = (buf_ptr[4] & 0xffff0000) | (addr & 0xffff);
400
+ #endif
401
+ } while (0);
402
+ jump = jump->next;
403
+ }
404
+
405
+ SLJIT_CACHE_FLUSH(code, code_ptr);
406
+ compiler->error = SLJIT_ERR_COMPILED;
407
+ compiler->executable_size = compiler->size * sizeof(sljit_ins);
408
+
409
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
410
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
411
+ if (((sljit_sw)code_ptr) & 0x4)
412
+ code_ptr++;
413
+ sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_sw)code, (void*)sljit_generate_code);
414
+ return code_ptr;
415
+ #else
416
+ sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_sw)code, (void*)sljit_generate_code);
417
+ return code_ptr;
418
+ #endif
419
+ #else
420
+ return code;
421
+ #endif
422
+ }
423
+
424
+ /* --------------------------------------------------------------------- */
425
+ /* Entry, exit */
426
+ /* --------------------------------------------------------------------- */
427
+
428
+ /* inp_flags: */
429
+
430
+ /* Creates an index in data_transfer_insts array. */
431
+ #define LOAD_DATA 0x01
432
+ #define INDEXED 0x02
433
+ #define WRITE_BACK 0x04
434
+ #define WORD_DATA 0x00
435
+ #define BYTE_DATA 0x08
436
+ #define HALF_DATA 0x10
437
+ #define INT_DATA 0x18
438
+ #define SIGNED_DATA 0x20
439
+ /* Separates integer and floating point registers */
440
+ #define GPR_REG 0x3f
441
+ #define DOUBLE_DATA 0x40
442
+
443
+ #define MEM_MASK 0x7f
444
+
445
+ /* Other inp_flags. */
446
+
447
+ #define ARG_TEST 0x000100
448
+ /* Integer opertion and set flags -> requires exts on 64 bit systems. */
449
+ #define ALT_SIGN_EXT 0x000200
450
+ /* This flag affects the RC() and OERC() macros. */
451
+ #define ALT_SET_FLAGS 0x000400
452
+ #define ALT_KEEP_CACHE 0x000800
453
+ #define ALT_FORM1 0x010000
454
+ #define ALT_FORM2 0x020000
455
+ #define ALT_FORM3 0x040000
456
+ #define ALT_FORM4 0x080000
457
+ #define ALT_FORM5 0x100000
458
+ #define ALT_FORM6 0x200000
459
+
460
+ /* Source and destination is register. */
461
+ #define REG_DEST 0x000001
462
+ #define REG1_SOURCE 0x000002
463
+ #define REG2_SOURCE 0x000004
464
+ /* getput_arg_fast returned true. */
465
+ #define FAST_DEST 0x000008
466
+ /* Multiple instructions are required. */
467
+ #define SLOW_DEST 0x000010
468
+ /*
469
+ ALT_SIGN_EXT 0x000200
470
+ ALT_SET_FLAGS 0x000400
471
+ ALT_FORM1 0x010000
472
+ ...
473
+ ALT_FORM6 0x200000 */
474
+
475
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
476
+ #include "sljitNativePPC_32.c"
477
+ #else
478
+ #include "sljitNativePPC_64.c"
479
+ #endif
480
+
481
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
482
+ #define STACK_STORE STW
483
+ #define STACK_LOAD LWZ
484
+ #else
485
+ #define STACK_STORE STD
486
+ #define STACK_LOAD LD
487
+ #endif
488
+
489
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si scratches, sljit_si saveds, sljit_si local_size)
490
+ {
491
+ CHECK_ERROR();
492
+ check_sljit_emit_enter(compiler, args, scratches, saveds, local_size);
493
+
494
+ compiler->scratches = scratches;
495
+ compiler->saveds = saveds;
496
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
497
+ compiler->logical_local_size = local_size;
498
+ #endif
499
+
500
+ FAIL_IF(push_inst(compiler, MFLR | D(0)));
501
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(ZERO_REG) | A(SLJIT_LOCALS_REG) | IMM(-(sljit_si)(sizeof(sljit_sw))) ));
502
+ if (saveds >= 1)
503
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG1) | A(SLJIT_LOCALS_REG) | IMM(-2 * (sljit_si)(sizeof(sljit_sw))) ));
504
+ if (saveds >= 2)
505
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG2) | A(SLJIT_LOCALS_REG) | IMM(-3 * (sljit_si)(sizeof(sljit_sw))) ));
506
+ if (saveds >= 3)
507
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG3) | A(SLJIT_LOCALS_REG) | IMM(-4 * (sljit_si)(sizeof(sljit_sw))) ));
508
+ if (saveds >= 4)
509
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG1) | A(SLJIT_LOCALS_REG) | IMM(-5 * (sljit_si)(sizeof(sljit_sw))) ));
510
+ if (saveds >= 5)
511
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG2) | A(SLJIT_LOCALS_REG) | IMM(-6 * (sljit_si)(sizeof(sljit_sw))) ));
512
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_sw)) ));
513
+
514
+ FAIL_IF(push_inst(compiler, ADDI | D(ZERO_REG) | A(0) | 0));
515
+ if (args >= 1)
516
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_SCRATCH_REG1) | A(SLJIT_SAVED_REG1) | B(SLJIT_SCRATCH_REG1)));
517
+ if (args >= 2)
518
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_SCRATCH_REG2) | A(SLJIT_SAVED_REG2) | B(SLJIT_SCRATCH_REG2)));
519
+ if (args >= 3)
520
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_SCRATCH_REG3) | A(SLJIT_SAVED_REG3) | B(SLJIT_SCRATCH_REG3)));
521
+
522
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
523
+ compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_sw) + local_size;
524
+ #else
525
+ compiler->local_size = (1 + saveds + 2) * sizeof(sljit_sw) + local_size;
526
+ #endif
527
+ compiler->local_size = (compiler->local_size + 15) & ~0xf;
528
+
529
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
530
+ if (compiler->local_size <= SIMM_MAX)
531
+ FAIL_IF(push_inst(compiler, STWU | S(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | IMM(-compiler->local_size)));
532
+ else {
533
+ FAIL_IF(load_immediate(compiler, 0, -compiler->local_size));
534
+ FAIL_IF(push_inst(compiler, STWUX | S(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | B(0)));
535
+ }
536
+ #else
537
+ if (compiler->local_size <= SIMM_MAX)
538
+ FAIL_IF(push_inst(compiler, STDU | S(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | IMM(-compiler->local_size)));
539
+ else {
540
+ FAIL_IF(load_immediate(compiler, 0, -compiler->local_size));
541
+ FAIL_IF(push_inst(compiler, STDUX | S(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | B(0)));
542
+ }
543
+ #endif
544
+
545
+ return SLJIT_SUCCESS;
546
+ }
547
+
548
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si scratches, sljit_si saveds, sljit_si local_size)
549
+ {
550
+ CHECK_ERROR_VOID();
551
+ check_sljit_set_context(compiler, args, scratches, saveds, local_size);
552
+
553
+ compiler->scratches = scratches;
554
+ compiler->saveds = saveds;
555
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
556
+ compiler->logical_local_size = local_size;
557
+ #endif
558
+
559
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
560
+ compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_sw) + local_size;
561
+ #else
562
+ compiler->local_size = (1 + saveds + 2) * sizeof(sljit_sw) + local_size;
563
+ #endif
564
+ compiler->local_size = (compiler->local_size + 15) & ~0xf;
565
+ }
566
+
567
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
568
+ {
569
+ CHECK_ERROR();
570
+ check_sljit_emit_return(compiler, op, src, srcw);
571
+
572
+ FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
573
+
574
+ if (compiler->local_size <= SIMM_MAX)
575
+ FAIL_IF(push_inst(compiler, ADDI | D(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | IMM(compiler->local_size)));
576
+ else {
577
+ FAIL_IF(load_immediate(compiler, 0, compiler->local_size));
578
+ FAIL_IF(push_inst(compiler, ADD | D(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | B(0)));
579
+ }
580
+
581
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_sw))));
582
+ if (compiler->saveds >= 5)
583
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG2) | A(SLJIT_LOCALS_REG) | IMM(-6 * (sljit_si)(sizeof(sljit_sw))) ));
584
+ if (compiler->saveds >= 4)
585
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG1) | A(SLJIT_LOCALS_REG) | IMM(-5 * (sljit_si)(sizeof(sljit_sw))) ));
586
+ if (compiler->saveds >= 3)
587
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG3) | A(SLJIT_LOCALS_REG) | IMM(-4 * (sljit_si)(sizeof(sljit_sw))) ));
588
+ if (compiler->saveds >= 2)
589
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG2) | A(SLJIT_LOCALS_REG) | IMM(-3 * (sljit_si)(sizeof(sljit_sw))) ));
590
+ if (compiler->saveds >= 1)
591
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG1) | A(SLJIT_LOCALS_REG) | IMM(-2 * (sljit_si)(sizeof(sljit_sw))) ));
592
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(ZERO_REG) | A(SLJIT_LOCALS_REG) | IMM(-(sljit_si)(sizeof(sljit_sw))) ));
593
+
594
+ FAIL_IF(push_inst(compiler, MTLR | S(0)));
595
+ FAIL_IF(push_inst(compiler, BLR));
596
+
597
+ return SLJIT_SUCCESS;
598
+ }
599
+
600
+ #undef STACK_STORE
601
+ #undef STACK_LOAD
602
+
603
+ /* --------------------------------------------------------------------- */
604
+ /* Operators */
605
+ /* --------------------------------------------------------------------- */
606
+
607
+ /* i/x - immediate/indexed form
608
+ n/w - no write-back / write-back (1 bit)
609
+ s/l - store/load (1 bit)
610
+ u/s - signed/unsigned (1 bit)
611
+ w/b/h/i - word/byte/half/int allowed (2 bit)
612
+ It contans 32 items, but not all are different. */
613
+
614
+ /* 64 bit only: [reg+imm] must be aligned to 4 bytes. */
615
+ #define ADDR_MODE2 0x10000
616
+ /* 64-bit only: there is no lwau instruction. */
617
+ #define UPDATE_REQ 0x20000
618
+
619
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
620
+ #define ARCH_32_64(a, b) a
621
+ #define INST_CODE_AND_DST(inst, flags, reg) \
622
+ ((inst) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg)))
623
+ #else
624
+ #define ARCH_32_64(a, b) b
625
+ #define INST_CODE_AND_DST(inst, flags, reg) \
626
+ (((inst) & ~(ADDR_MODE2 | UPDATE_REQ)) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg)))
627
+ #endif
628
+
629
+ static SLJIT_CONST sljit_ins data_transfer_insts[64 + 8] = {
630
+
631
+ /* -------- Unsigned -------- */
632
+
633
+ /* Word. */
634
+
635
+ /* u w n i s */ ARCH_32_64(HI(36) /* stw */, HI(62) | ADDR_MODE2 | 0x0 /* std */),
636
+ /* u w n i l */ ARCH_32_64(HI(32) /* lwz */, HI(58) | ADDR_MODE2 | 0x0 /* ld */),
637
+ /* u w n x s */ ARCH_32_64(HI(31) | LO(151) /* stwx */, HI(31) | LO(149) /* stdx */),
638
+ /* u w n x l */ ARCH_32_64(HI(31) | LO(23) /* lwzx */, HI(31) | LO(21) /* ldx */),
639
+
640
+ /* u w w i s */ ARCH_32_64(HI(37) /* stwu */, HI(62) | ADDR_MODE2 | 0x1 /* stdu */),
641
+ /* u w w i l */ ARCH_32_64(HI(33) /* lwzu */, HI(58) | ADDR_MODE2 | 0x1 /* ldu */),
642
+ /* u w w x s */ ARCH_32_64(HI(31) | LO(183) /* stwux */, HI(31) | LO(181) /* stdux */),
643
+ /* u w w x l */ ARCH_32_64(HI(31) | LO(55) /* lwzux */, HI(31) | LO(53) /* ldux */),
644
+
645
+ /* Byte. */
646
+
647
+ /* u b n i s */ HI(38) /* stb */,
648
+ /* u b n i l */ HI(34) /* lbz */,
649
+ /* u b n x s */ HI(31) | LO(215) /* stbx */,
650
+ /* u b n x l */ HI(31) | LO(87) /* lbzx */,
651
+
652
+ /* u b w i s */ HI(39) /* stbu */,
653
+ /* u b w i l */ HI(35) /* lbzu */,
654
+ /* u b w x s */ HI(31) | LO(247) /* stbux */,
655
+ /* u b w x l */ HI(31) | LO(119) /* lbzux */,
656
+
657
+ /* Half. */
658
+
659
+ /* u h n i s */ HI(44) /* sth */,
660
+ /* u h n i l */ HI(40) /* lhz */,
661
+ /* u h n x s */ HI(31) | LO(407) /* sthx */,
662
+ /* u h n x l */ HI(31) | LO(279) /* lhzx */,
663
+
664
+ /* u h w i s */ HI(45) /* sthu */,
665
+ /* u h w i l */ HI(41) /* lhzu */,
666
+ /* u h w x s */ HI(31) | LO(439) /* sthux */,
667
+ /* u h w x l */ HI(31) | LO(311) /* lhzux */,
668
+
669
+ /* Int. */
670
+
671
+ /* u i n i s */ HI(36) /* stw */,
672
+ /* u i n i l */ HI(32) /* lwz */,
673
+ /* u i n x s */ HI(31) | LO(151) /* stwx */,
674
+ /* u i n x l */ HI(31) | LO(23) /* lwzx */,
675
+
676
+ /* u i w i s */ HI(37) /* stwu */,
677
+ /* u i w i l */ HI(33) /* lwzu */,
678
+ /* u i w x s */ HI(31) | LO(183) /* stwux */,
679
+ /* u i w x l */ HI(31) | LO(55) /* lwzux */,
680
+
681
+ /* -------- Signed -------- */
682
+
683
+ /* Word. */
684
+
685
+ /* s w n i s */ ARCH_32_64(HI(36) /* stw */, HI(62) | ADDR_MODE2 | 0x0 /* std */),
686
+ /* s w n i l */ ARCH_32_64(HI(32) /* lwz */, HI(58) | ADDR_MODE2 | 0x0 /* ld */),
687
+ /* s w n x s */ ARCH_32_64(HI(31) | LO(151) /* stwx */, HI(31) | LO(149) /* stdx */),
688
+ /* s w n x l */ ARCH_32_64(HI(31) | LO(23) /* lwzx */, HI(31) | LO(21) /* ldx */),
689
+
690
+ /* s w w i s */ ARCH_32_64(HI(37) /* stwu */, HI(62) | ADDR_MODE2 | 0x1 /* stdu */),
691
+ /* s w w i l */ ARCH_32_64(HI(33) /* lwzu */, HI(58) | ADDR_MODE2 | 0x1 /* ldu */),
692
+ /* s w w x s */ ARCH_32_64(HI(31) | LO(183) /* stwux */, HI(31) | LO(181) /* stdux */),
693
+ /* s w w x l */ ARCH_32_64(HI(31) | LO(55) /* lwzux */, HI(31) | LO(53) /* ldux */),
694
+
695
+ /* Byte. */
696
+
697
+ /* s b n i s */ HI(38) /* stb */,
698
+ /* s b n i l */ HI(34) /* lbz */ /* EXTS_REQ */,
699
+ /* s b n x s */ HI(31) | LO(215) /* stbx */,
700
+ /* s b n x l */ HI(31) | LO(87) /* lbzx */ /* EXTS_REQ */,
701
+
702
+ /* s b w i s */ HI(39) /* stbu */,
703
+ /* s b w i l */ HI(35) /* lbzu */ /* EXTS_REQ */,
704
+ /* s b w x s */ HI(31) | LO(247) /* stbux */,
705
+ /* s b w x l */ HI(31) | LO(119) /* lbzux */ /* EXTS_REQ */,
706
+
707
+ /* Half. */
708
+
709
+ /* s h n i s */ HI(44) /* sth */,
710
+ /* s h n i l */ HI(42) /* lha */,
711
+ /* s h n x s */ HI(31) | LO(407) /* sthx */,
712
+ /* s h n x l */ HI(31) | LO(343) /* lhax */,
713
+
714
+ /* s h w i s */ HI(45) /* sthu */,
715
+ /* s h w i l */ HI(43) /* lhau */,
716
+ /* s h w x s */ HI(31) | LO(439) /* sthux */,
717
+ /* s h w x l */ HI(31) | LO(375) /* lhaux */,
718
+
719
+ /* Int. */
720
+
721
+ /* s i n i s */ HI(36) /* stw */,
722
+ /* s i n i l */ ARCH_32_64(HI(32) /* lwz */, HI(58) | ADDR_MODE2 | 0x2 /* lwa */),
723
+ /* s i n x s */ HI(31) | LO(151) /* stwx */,
724
+ /* s i n x l */ ARCH_32_64(HI(31) | LO(23) /* lwzx */, HI(31) | LO(341) /* lwax */),
725
+
726
+ /* s i w i s */ HI(37) /* stwu */,
727
+ /* s i w i l */ ARCH_32_64(HI(33) /* lwzu */, HI(58) | ADDR_MODE2 | UPDATE_REQ | 0x2 /* lwa */),
728
+ /* s i w x s */ HI(31) | LO(183) /* stwux */,
729
+ /* s i w x l */ ARCH_32_64(HI(31) | LO(55) /* lwzux */, HI(31) | LO(373) /* lwaux */),
730
+
731
+ /* -------- Double -------- */
732
+
733
+ /* d n i s */ HI(54) /* stfd */,
734
+ /* d n i l */ HI(50) /* lfd */,
735
+ /* d n x s */ HI(31) | LO(727) /* stfdx */,
736
+ /* d n x l */ HI(31) | LO(599) /* lfdx */,
737
+
738
+ /* s n i s */ HI(52) /* stfs */,
739
+ /* s n i l */ HI(48) /* lfs */,
740
+ /* s n x s */ HI(31) | LO(663) /* stfsx */,
741
+ /* s n x l */ HI(31) | LO(535) /* lfsx */,
742
+
743
+ };
744
+
745
+ #undef ARCH_32_64
746
+
747
+ /* Simple cases, (no caching is required). */
748
+ static sljit_si getput_arg_fast(struct sljit_compiler *compiler, sljit_si inp_flags, sljit_si reg, sljit_si arg, sljit_sw argw)
749
+ {
750
+ sljit_ins inst;
751
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
752
+ sljit_si tmp_reg;
753
+ #endif
754
+
755
+ SLJIT_ASSERT(arg & SLJIT_MEM);
756
+ if (!(arg & 0xf)) {
757
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
758
+ if (argw <= SIMM_MAX && argw >= SIMM_MIN) {
759
+ if (inp_flags & ARG_TEST)
760
+ return 1;
761
+
762
+ inst = data_transfer_insts[(inp_flags & ~WRITE_BACK) & MEM_MASK];
763
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
764
+ push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | IMM(argw));
765
+ return -1;
766
+ }
767
+ #else
768
+ inst = data_transfer_insts[(inp_flags & ~WRITE_BACK) & MEM_MASK];
769
+ if (argw <= SIMM_MAX && argw >= SIMM_MIN &&
770
+ (!(inst & ADDR_MODE2) || (argw & 0x3) == 0)) {
771
+ if (inp_flags & ARG_TEST)
772
+ return 1;
773
+
774
+ push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | IMM(argw));
775
+ return -1;
776
+ }
777
+ #endif
778
+ return 0;
779
+ }
780
+
781
+ if (!(arg & 0xf0)) {
782
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
783
+ if (argw <= SIMM_MAX && argw >= SIMM_MIN) {
784
+ if (inp_flags & ARG_TEST)
785
+ return 1;
786
+
787
+ inst = data_transfer_insts[inp_flags & MEM_MASK];
788
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
789
+ push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | IMM(argw));
790
+ return -1;
791
+ }
792
+ #else
793
+ inst = data_transfer_insts[inp_flags & MEM_MASK];
794
+ if (argw <= SIMM_MAX && argw >= SIMM_MIN && (!(inst & ADDR_MODE2) || (argw & 0x3) == 0)) {
795
+ if (inp_flags & ARG_TEST)
796
+ return 1;
797
+
798
+ if ((inp_flags & WRITE_BACK) && (inst & UPDATE_REQ)) {
799
+ tmp_reg = (inp_flags & LOAD_DATA) ? (arg & 0xf) : TMP_REG3;
800
+ if (push_inst(compiler, ADDI | D(tmp_reg) | A(arg & 0xf) | IMM(argw)))
801
+ return -1;
802
+ arg = tmp_reg | SLJIT_MEM;
803
+ argw = 0;
804
+ }
805
+ push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | IMM(argw));
806
+ return -1;
807
+ }
808
+ #endif
809
+ }
810
+ else if (!(argw & 0x3)) {
811
+ if (inp_flags & ARG_TEST)
812
+ return 1;
813
+ inst = data_transfer_insts[(inp_flags | INDEXED) & MEM_MASK];
814
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
815
+ push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | B((arg >> 4) & 0xf));
816
+ return -1;
817
+ }
818
+ return 0;
819
+ }
820
+
821
+ /* See getput_arg below.
822
+ Note: can_cache is called only for binary operators. Those operator always
823
+ uses word arguments without write back. */
824
+ static sljit_si can_cache(sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
825
+ {
826
+ SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));
827
+
828
+ if (!(arg & 0xf))
829
+ return (next_arg & SLJIT_MEM) && ((sljit_uw)argw - (sljit_uw)next_argw <= SIMM_MAX || (sljit_uw)next_argw - (sljit_uw)argw <= SIMM_MAX);
830
+
831
+ if (arg & 0xf0)
832
+ return ((arg & 0xf0) == (next_arg & 0xf0) && (argw & 0x3) == (next_argw & 0x3));
833
+
834
+ if (argw <= SIMM_MAX && argw >= SIMM_MIN) {
835
+ if (arg == next_arg && (next_argw >= SIMM_MAX && next_argw <= SIMM_MIN))
836
+ return 1;
837
+ }
838
+
839
+ if (arg == next_arg && ((sljit_uw)argw - (sljit_uw)next_argw <= SIMM_MAX || (sljit_uw)next_argw - (sljit_uw)argw <= SIMM_MAX))
840
+ return 1;
841
+
842
+ return 0;
843
+ }
844
+
845
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
846
+ #define ADJUST_CACHED_IMM(imm) \
847
+ if ((inst & ADDR_MODE2) && (imm & 0x3)) { \
848
+ /* Adjust cached value. Fortunately this is really a rare case */ \
849
+ compiler->cache_argw += imm & 0x3; \
850
+ FAIL_IF(push_inst(compiler, ADDI | D(TMP_REG3) | A(TMP_REG3) | (imm & 0x3))); \
851
+ imm &= ~0x3; \
852
+ }
853
+ #else
854
+ #define ADJUST_CACHED_IMM(imm)
855
+ #endif
856
+
857
+ /* Emit the necessary instructions. See can_cache above. */
858
+ static sljit_si getput_arg(struct sljit_compiler *compiler, sljit_si inp_flags, sljit_si reg, sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
859
+ {
860
+ sljit_si tmp_r;
861
+ sljit_ins inst;
862
+
863
+ SLJIT_ASSERT(arg & SLJIT_MEM);
864
+
865
+ tmp_r = ((inp_flags & LOAD_DATA) && ((inp_flags) & MEM_MASK) <= GPR_REG) ? reg : TMP_REG1;
866
+ /* Special case for "mov reg, [reg, ... ]". */
867
+ if ((arg & 0xf) == tmp_r)
868
+ tmp_r = TMP_REG1;
869
+
870
+ if (!(arg & 0xf)) {
871
+ inst = data_transfer_insts[(inp_flags & ~WRITE_BACK) & MEM_MASK];
872
+ if ((compiler->cache_arg & SLJIT_IMM) && (((sljit_uw)argw - (sljit_uw)compiler->cache_argw) <= SIMM_MAX || ((sljit_uw)compiler->cache_argw - (sljit_uw)argw) <= SIMM_MAX)) {
873
+ argw = argw - compiler->cache_argw;
874
+ ADJUST_CACHED_IMM(argw);
875
+ SLJIT_ASSERT(!(inst & UPDATE_REQ));
876
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(TMP_REG3) | IMM(argw));
877
+ }
878
+
879
+ if ((next_arg & SLJIT_MEM) && (argw - next_argw <= SIMM_MAX || next_argw - argw <= SIMM_MAX)) {
880
+ SLJIT_ASSERT(inp_flags & LOAD_DATA);
881
+
882
+ compiler->cache_arg = SLJIT_IMM;
883
+ compiler->cache_argw = argw;
884
+ tmp_r = TMP_REG3;
885
+ }
886
+
887
+ FAIL_IF(load_immediate(compiler, tmp_r, argw));
888
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(tmp_r));
889
+ }
890
+
891
+ if (SLJIT_UNLIKELY(arg & 0xf0)) {
892
+ argw &= 0x3;
893
+ /* Otherwise getput_arg_fast would capture it. */
894
+ SLJIT_ASSERT(argw);
895
+
896
+ if ((SLJIT_MEM | (arg & 0xf0)) == compiler->cache_arg && argw == compiler->cache_argw)
897
+ tmp_r = TMP_REG3;
898
+ else {
899
+ if ((arg & 0xf0) == (next_arg & 0xf0) && argw == (next_argw & 0x3)) {
900
+ compiler->cache_arg = SLJIT_MEM | (arg & 0xf0);
901
+ compiler->cache_argw = argw;
902
+ tmp_r = TMP_REG3;
903
+ }
904
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
905
+ FAIL_IF(push_inst(compiler, RLWINM | S((arg >> 4) & 0xf) | A(tmp_r) | (argw << 11) | ((31 - argw) << 1)));
906
+ #else
907
+ FAIL_IF(push_inst(compiler, RLDI(tmp_r, (arg >> 4) & 0xf, argw, 63 - argw, 1)));
908
+ #endif
909
+ }
910
+ inst = data_transfer_insts[(inp_flags | INDEXED) & MEM_MASK];
911
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
912
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | B(tmp_r));
913
+ }
914
+
915
+ inst = data_transfer_insts[inp_flags & MEM_MASK];
916
+
917
+ if (compiler->cache_arg == arg && ((sljit_uw)argw - (sljit_uw)compiler->cache_argw <= SIMM_MAX || (sljit_uw)compiler->cache_argw - (sljit_uw)argw <= SIMM_MAX)) {
918
+ SLJIT_ASSERT(!(inp_flags & WRITE_BACK));
919
+ argw = argw - compiler->cache_argw;
920
+ ADJUST_CACHED_IMM(argw);
921
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(TMP_REG3) | IMM(argw));
922
+ }
923
+
924
+ if ((compiler->cache_arg & SLJIT_IMM) && compiler->cache_argw == argw) {
925
+ inst = data_transfer_insts[(inp_flags | INDEXED) & MEM_MASK];
926
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
927
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | B(TMP_REG3));
928
+ }
929
+
930
+ if (argw == next_argw && (next_arg & SLJIT_MEM)) {
931
+ SLJIT_ASSERT(inp_flags & LOAD_DATA);
932
+ FAIL_IF(load_immediate(compiler, TMP_REG3, argw));
933
+
934
+ compiler->cache_arg = SLJIT_IMM;
935
+ compiler->cache_argw = argw;
936
+
937
+ inst = data_transfer_insts[(inp_flags | INDEXED) & MEM_MASK];
938
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
939
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | B(TMP_REG3));
940
+ }
941
+
942
+ if (arg == next_arg && !(inp_flags & WRITE_BACK) && ((sljit_uw)argw - (sljit_uw)next_argw <= SIMM_MAX || (sljit_uw)next_argw - (sljit_uw)argw <= SIMM_MAX)) {
943
+ SLJIT_ASSERT(inp_flags & LOAD_DATA);
944
+ FAIL_IF(load_immediate(compiler, TMP_REG3, argw));
945
+ FAIL_IF(push_inst(compiler, ADD | D(TMP_REG3) | A(TMP_REG3) | B(arg & 0xf)));
946
+
947
+ compiler->cache_arg = arg;
948
+ compiler->cache_argw = argw;
949
+
950
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(TMP_REG3));
951
+ }
952
+
953
+ /* Get the indexed version instead of the normal one. */
954
+ inst = data_transfer_insts[(inp_flags | INDEXED) & MEM_MASK];
955
+ SLJIT_ASSERT(!(inst & (ADDR_MODE2 | UPDATE_REQ)));
956
+ FAIL_IF(load_immediate(compiler, tmp_r, argw));
957
+ return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | B(tmp_r));
958
+ }
959
+
960
+ static SLJIT_INLINE sljit_si emit_op_mem2(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg1, sljit_sw arg1w, sljit_si arg2, sljit_sw arg2w)
961
+ {
962
+ if (getput_arg_fast(compiler, flags, reg, arg1, arg1w))
963
+ return compiler->error;
964
+ return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w);
965
+ }
966
+
967
+ static sljit_si emit_op(struct sljit_compiler *compiler, sljit_si op, sljit_si input_flags,
968
+ sljit_si dst, sljit_sw dstw,
969
+ sljit_si src1, sljit_sw src1w,
970
+ sljit_si src2, sljit_sw src2w)
971
+ {
972
+ /* arg1 goes to TMP_REG1 or src reg
973
+ arg2 goes to TMP_REG2, imm or src reg
974
+ TMP_REG3 can be used for caching
975
+ result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */
976
+ sljit_si dst_r;
977
+ sljit_si src1_r;
978
+ sljit_si src2_r;
979
+ sljit_si sugg_src2_r = TMP_REG2;
980
+ sljit_si flags = input_flags & (ALT_FORM1 | ALT_FORM2 | ALT_FORM3 | ALT_FORM4 | ALT_FORM5 | ALT_FORM6 | ALT_SIGN_EXT | ALT_SET_FLAGS);
981
+
982
+ if (!(input_flags & ALT_KEEP_CACHE)) {
983
+ compiler->cache_arg = 0;
984
+ compiler->cache_argw = 0;
985
+ }
986
+
987
+ /* Destination check. */
988
+ if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) {
989
+ if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI && !(src2 & SLJIT_MEM))
990
+ return SLJIT_SUCCESS;
991
+ dst_r = TMP_REG2;
992
+ }
993
+ else if (dst <= ZERO_REG) {
994
+ dst_r = dst;
995
+ flags |= REG_DEST;
996
+ if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)
997
+ sugg_src2_r = dst_r;
998
+ }
999
+ else {
1000
+ SLJIT_ASSERT(dst & SLJIT_MEM);
1001
+ if (getput_arg_fast(compiler, input_flags | ARG_TEST, TMP_REG2, dst, dstw)) {
1002
+ flags |= FAST_DEST;
1003
+ dst_r = TMP_REG2;
1004
+ }
1005
+ else {
1006
+ flags |= SLOW_DEST;
1007
+ dst_r = 0;
1008
+ }
1009
+ }
1010
+
1011
+ /* Source 1. */
1012
+ if (src1 <= ZERO_REG) {
1013
+ src1_r = src1;
1014
+ flags |= REG1_SOURCE;
1015
+ }
1016
+ else if (src1 & SLJIT_IMM) {
1017
+ FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
1018
+ src1_r = TMP_REG1;
1019
+ }
1020
+ else if (getput_arg_fast(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w)) {
1021
+ FAIL_IF(compiler->error);
1022
+ src1_r = TMP_REG1;
1023
+ }
1024
+ else
1025
+ src1_r = 0;
1026
+
1027
+ /* Source 2. */
1028
+ if (src2 <= ZERO_REG) {
1029
+ src2_r = src2;
1030
+ flags |= REG2_SOURCE;
1031
+ if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)
1032
+ dst_r = src2_r;
1033
+ }
1034
+ else if (src2 & SLJIT_IMM) {
1035
+ FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w));
1036
+ src2_r = sugg_src2_r;
1037
+ }
1038
+ else if (getput_arg_fast(compiler, input_flags | LOAD_DATA, sugg_src2_r, src2, src2w)) {
1039
+ FAIL_IF(compiler->error);
1040
+ src2_r = sugg_src2_r;
1041
+ }
1042
+ else
1043
+ src2_r = 0;
1044
+
1045
+ /* src1_r, src2_r and dst_r can be zero (=unprocessed).
1046
+ All arguments are complex addressing modes, and it is a binary operator. */
1047
+ if (src1_r == 0 && src2_r == 0 && dst_r == 0) {
1048
+ if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
1049
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG2, src2, src2w, src1, src1w));
1050
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
1051
+ }
1052
+ else {
1053
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, src2, src2w));
1054
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG2, src2, src2w, dst, dstw));
1055
+ }
1056
+ src1_r = TMP_REG1;
1057
+ src2_r = TMP_REG2;
1058
+ }
1059
+ else if (src1_r == 0 && src2_r == 0) {
1060
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, src2, src2w));
1061
+ src1_r = TMP_REG1;
1062
+ }
1063
+ else if (src1_r == 0 && dst_r == 0) {
1064
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, dst, dstw));
1065
+ src1_r = TMP_REG1;
1066
+ }
1067
+ else if (src2_r == 0 && dst_r == 0) {
1068
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, sugg_src2_r, src2, src2w, dst, dstw));
1069
+ src2_r = sugg_src2_r;
1070
+ }
1071
+
1072
+ if (dst_r == 0)
1073
+ dst_r = TMP_REG2;
1074
+
1075
+ if (src1_r == 0) {
1076
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, 0, 0));
1077
+ src1_r = TMP_REG1;
1078
+ }
1079
+
1080
+ if (src2_r == 0) {
1081
+ FAIL_IF(getput_arg(compiler, input_flags | LOAD_DATA, sugg_src2_r, src2, src2w, 0, 0));
1082
+ src2_r = sugg_src2_r;
1083
+ }
1084
+
1085
+ FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r));
1086
+
1087
+ if (flags & (FAST_DEST | SLOW_DEST)) {
1088
+ if (flags & FAST_DEST)
1089
+ FAIL_IF(getput_arg_fast(compiler, input_flags, dst_r, dst, dstw));
1090
+ else
1091
+ FAIL_IF(getput_arg(compiler, input_flags, dst_r, dst, dstw, 0, 0));
1092
+ }
1093
+ return SLJIT_SUCCESS;
1094
+ }
1095
+
1096
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
1097
+ {
1098
+ CHECK_ERROR();
1099
+ check_sljit_emit_op0(compiler, op);
1100
+
1101
+ switch (GET_OPCODE(op)) {
1102
+ case SLJIT_BREAKPOINT:
1103
+ case SLJIT_NOP:
1104
+ return push_inst(compiler, NOP);
1105
+ break;
1106
+ case SLJIT_UMUL:
1107
+ case SLJIT_SMUL:
1108
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG1)));
1109
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1110
+ FAIL_IF(push_inst(compiler, MULLD | D(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2)));
1111
+ return push_inst(compiler, (GET_OPCODE(op) == SLJIT_UMUL ? MULHDU : MULHD) | D(SLJIT_SCRATCH_REG2) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2));
1112
+ #else
1113
+ FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2)));
1114
+ return push_inst(compiler, (GET_OPCODE(op) == SLJIT_UMUL ? MULHWU : MULHW) | D(SLJIT_SCRATCH_REG2) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2));
1115
+ #endif
1116
+ case SLJIT_UDIV:
1117
+ case SLJIT_SDIV:
1118
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG1)));
1119
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1120
+ if (op & SLJIT_INT_OP) {
1121
+ FAIL_IF(push_inst(compiler, (GET_OPCODE(op) == SLJIT_UDIV ? DIVWU : DIVW) | D(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2)));
1122
+ FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_SCRATCH_REG2) | A(SLJIT_SCRATCH_REG1) | B(SLJIT_SCRATCH_REG2)));
1123
+ return push_inst(compiler, SUBF | D(SLJIT_SCRATCH_REG2) | A(SLJIT_SCRATCH_REG2) | B(TMP_REG1));
1124
+ }
1125
+ FAIL_IF(push_inst(compiler, (GET_OPCODE(op) == SLJIT_UDIV ? DIVDU : DIVD) | D(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2)));
1126
+ FAIL_IF(push_inst(compiler, MULLD | D(SLJIT_SCRATCH_REG2) | A(SLJIT_SCRATCH_REG1) | B(SLJIT_SCRATCH_REG2)));
1127
+ return push_inst(compiler, SUBF | D(SLJIT_SCRATCH_REG2) | A(SLJIT_SCRATCH_REG2) | B(TMP_REG1));
1128
+ #else
1129
+ FAIL_IF(push_inst(compiler, (GET_OPCODE(op) == SLJIT_UDIV ? DIVWU : DIVW) | D(SLJIT_SCRATCH_REG1) | A(TMP_REG1) | B(SLJIT_SCRATCH_REG2)));
1130
+ FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_SCRATCH_REG2) | A(SLJIT_SCRATCH_REG1) | B(SLJIT_SCRATCH_REG2)));
1131
+ return push_inst(compiler, SUBF | D(SLJIT_SCRATCH_REG2) | A(SLJIT_SCRATCH_REG2) | B(TMP_REG1));
1132
+ #endif
1133
+ }
1134
+
1135
+ return SLJIT_SUCCESS;
1136
+ }
1137
+
1138
+ #define EMIT_MOV(type, type_flags, type_cast) \
1139
+ emit_op(compiler, (src & SLJIT_IMM) ? SLJIT_MOV : type, flags | (type_flags), dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? type_cast srcw : srcw)
1140
+
1141
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
1142
+ sljit_si dst, sljit_sw dstw,
1143
+ sljit_si src, sljit_sw srcw)
1144
+ {
1145
+ sljit_si flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;
1146
+ sljit_si op_flags = GET_ALL_FLAGS(op);
1147
+
1148
+ CHECK_ERROR();
1149
+ check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);
1150
+ ADJUST_LOCAL_OFFSET(dst, dstw);
1151
+ ADJUST_LOCAL_OFFSET(src, srcw);
1152
+
1153
+ op = GET_OPCODE(op);
1154
+ if ((src & SLJIT_IMM) && srcw == 0)
1155
+ src = ZERO_REG;
1156
+
1157
+ if (op_flags & SLJIT_SET_O)
1158
+ FAIL_IF(push_inst(compiler, MTXER | S(ZERO_REG)));
1159
+
1160
+ if (op_flags & SLJIT_INT_OP) {
1161
+ if (op >= SLJIT_MOV && op <= SLJIT_MOVU_P) {
1162
+ if (src <= ZERO_REG && src == dst) {
1163
+ if (!TYPE_CAST_NEEDED(op))
1164
+ return SLJIT_SUCCESS;
1165
+ }
1166
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1167
+ if (op == SLJIT_MOV_SI && (src & SLJIT_MEM))
1168
+ op = SLJIT_MOV_UI;
1169
+ if (op == SLJIT_MOVU_SI && (src & SLJIT_MEM))
1170
+ op = SLJIT_MOVU_UI;
1171
+ if (op == SLJIT_MOV_UI && (src & SLJIT_IMM))
1172
+ op = SLJIT_MOV_SI;
1173
+ if (op == SLJIT_MOVU_UI && (src & SLJIT_IMM))
1174
+ op = SLJIT_MOVU_SI;
1175
+ #endif
1176
+ }
1177
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1178
+ else {
1179
+ /* Most operations expect sign extended arguments. */
1180
+ flags |= INT_DATA | SIGNED_DATA;
1181
+ if (src & SLJIT_IMM)
1182
+ srcw = (sljit_si)srcw;
1183
+ }
1184
+ #endif
1185
+ }
1186
+
1187
+ switch (op) {
1188
+ case SLJIT_MOV:
1189
+ case SLJIT_MOV_P:
1190
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
1191
+ case SLJIT_MOV_UI:
1192
+ case SLJIT_MOV_SI:
1193
+ #endif
1194
+ return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw);
1195
+
1196
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1197
+ case SLJIT_MOV_UI:
1198
+ return EMIT_MOV(SLJIT_MOV_UI, INT_DATA, (sljit_ui));
1199
+
1200
+ case SLJIT_MOV_SI:
1201
+ return EMIT_MOV(SLJIT_MOV_SI, INT_DATA | SIGNED_DATA, (sljit_si));
1202
+ #endif
1203
+
1204
+ case SLJIT_MOV_UB:
1205
+ return EMIT_MOV(SLJIT_MOV_UB, BYTE_DATA, (sljit_ub));
1206
+
1207
+ case SLJIT_MOV_SB:
1208
+ return EMIT_MOV(SLJIT_MOV_SB, BYTE_DATA | SIGNED_DATA, (sljit_sb));
1209
+
1210
+ case SLJIT_MOV_UH:
1211
+ return EMIT_MOV(SLJIT_MOV_UH, HALF_DATA, (sljit_uh));
1212
+
1213
+ case SLJIT_MOV_SH:
1214
+ return EMIT_MOV(SLJIT_MOV_SH, HALF_DATA | SIGNED_DATA, (sljit_sh));
1215
+
1216
+ case SLJIT_MOVU:
1217
+ case SLJIT_MOVU_P:
1218
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
1219
+ case SLJIT_MOVU_UI:
1220
+ case SLJIT_MOVU_SI:
1221
+ #endif
1222
+ return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, srcw);
1223
+
1224
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1225
+ case SLJIT_MOVU_UI:
1226
+ return EMIT_MOV(SLJIT_MOV_UI, INT_DATA | WRITE_BACK, (sljit_ui));
1227
+
1228
+ case SLJIT_MOVU_SI:
1229
+ return EMIT_MOV(SLJIT_MOV_SI, INT_DATA | SIGNED_DATA | WRITE_BACK, (sljit_si));
1230
+ #endif
1231
+
1232
+ case SLJIT_MOVU_UB:
1233
+ return EMIT_MOV(SLJIT_MOV_UB, BYTE_DATA | WRITE_BACK, (sljit_ub));
1234
+
1235
+ case SLJIT_MOVU_SB:
1236
+ return EMIT_MOV(SLJIT_MOV_SB, BYTE_DATA | SIGNED_DATA | WRITE_BACK, (sljit_sb));
1237
+
1238
+ case SLJIT_MOVU_UH:
1239
+ return EMIT_MOV(SLJIT_MOV_UH, HALF_DATA | WRITE_BACK, (sljit_uh));
1240
+
1241
+ case SLJIT_MOVU_SH:
1242
+ return EMIT_MOV(SLJIT_MOV_SH, HALF_DATA | SIGNED_DATA | WRITE_BACK, (sljit_sh));
1243
+
1244
+ case SLJIT_NOT:
1245
+ return emit_op(compiler, SLJIT_NOT, flags, dst, dstw, TMP_REG1, 0, src, srcw);
1246
+
1247
+ case SLJIT_NEG:
1248
+ return emit_op(compiler, SLJIT_NEG, flags, dst, dstw, TMP_REG1, 0, src, srcw);
1249
+
1250
+ case SLJIT_CLZ:
1251
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1252
+ return emit_op(compiler, SLJIT_CLZ, flags | (!(op_flags & SLJIT_INT_OP) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw);
1253
+ #else
1254
+ return emit_op(compiler, SLJIT_CLZ, flags, dst, dstw, TMP_REG1, 0, src, srcw);
1255
+ #endif
1256
+ }
1257
+
1258
+ return SLJIT_SUCCESS;
1259
+ }
1260
+
1261
+ #undef EMIT_MOV
1262
+
1263
+ #define TEST_SL_IMM(src, srcw) \
1264
+ (((src) & SLJIT_IMM) && (srcw) <= SIMM_MAX && (srcw) >= SIMM_MIN)
1265
+
1266
+ #define TEST_UL_IMM(src, srcw) \
1267
+ (((src) & SLJIT_IMM) && !((srcw) & ~0xffff))
1268
+
1269
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1270
+ #define TEST_SH_IMM(src, srcw) \
1271
+ (((src) & SLJIT_IMM) && !((srcw) & 0xffff) && (srcw) <= SLJIT_W(0x7fffffff) && (srcw) >= SLJIT_W(-0x80000000))
1272
+ #else
1273
+ #define TEST_SH_IMM(src, srcw) \
1274
+ (((src) & SLJIT_IMM) && !((srcw) & 0xffff))
1275
+ #endif
1276
+
1277
+ #define TEST_UH_IMM(src, srcw) \
1278
+ (((src) & SLJIT_IMM) && !((srcw) & ~0xffff0000))
1279
+
1280
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1281
+ #define TEST_ADD_IMM(src, srcw) \
1282
+ (((src) & SLJIT_IMM) && (srcw) <= SLJIT_W(0x7fff7fff) && (srcw) >= SLJIT_W(-0x80000000))
1283
+ #else
1284
+ #define TEST_ADD_IMM(src, srcw) \
1285
+ ((src) & SLJIT_IMM)
1286
+ #endif
1287
+
1288
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1289
+ #define TEST_UI_IMM(src, srcw) \
1290
+ (((src) & SLJIT_IMM) && !((srcw) & ~0xffffffff))
1291
+ #else
1292
+ #define TEST_UI_IMM(src, srcw) \
1293
+ ((src) & SLJIT_IMM)
1294
+ #endif
1295
+
1296
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
1297
+ sljit_si dst, sljit_sw dstw,
1298
+ sljit_si src1, sljit_sw src1w,
1299
+ sljit_si src2, sljit_sw src2w)
1300
+ {
1301
+ sljit_si flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;
1302
+
1303
+ CHECK_ERROR();
1304
+ check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
1305
+ ADJUST_LOCAL_OFFSET(dst, dstw);
1306
+ ADJUST_LOCAL_OFFSET(src1, src1w);
1307
+ ADJUST_LOCAL_OFFSET(src2, src2w);
1308
+
1309
+ if ((src1 & SLJIT_IMM) && src1w == 0)
1310
+ src1 = ZERO_REG;
1311
+ if ((src2 & SLJIT_IMM) && src2w == 0)
1312
+ src2 = ZERO_REG;
1313
+
1314
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1315
+ if (op & SLJIT_INT_OP) {
1316
+ /* Most operations expect sign extended arguments. */
1317
+ flags |= INT_DATA | SIGNED_DATA;
1318
+ if (src1 & SLJIT_IMM)
1319
+ src1w = (sljit_si)(src1w);
1320
+ if (src2 & SLJIT_IMM)
1321
+ src2w = (sljit_si)(src2w);
1322
+ if (GET_FLAGS(op))
1323
+ flags |= ALT_SIGN_EXT;
1324
+ }
1325
+ #endif
1326
+ if (op & SLJIT_SET_O)
1327
+ FAIL_IF(push_inst(compiler, MTXER | S(ZERO_REG)));
1328
+ if (src2 == TMP_REG2)
1329
+ flags |= ALT_KEEP_CACHE;
1330
+
1331
+ switch (GET_OPCODE(op)) {
1332
+ case SLJIT_ADD:
1333
+ if (!GET_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {
1334
+ if (TEST_SL_IMM(src2, src2w)) {
1335
+ compiler->imm = src2w & 0xffff;
1336
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0);
1337
+ }
1338
+ if (TEST_SL_IMM(src1, src1w)) {
1339
+ compiler->imm = src1w & 0xffff;
1340
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0);
1341
+ }
1342
+ if (TEST_SH_IMM(src2, src2w)) {
1343
+ compiler->imm = (src2w >> 16) & 0xffff;
1344
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
1345
+ }
1346
+ if (TEST_SH_IMM(src1, src1w)) {
1347
+ compiler->imm = (src1w >> 16) & 0xffff;
1348
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0);
1349
+ }
1350
+ /* Range between -1 and -32768 is covered above. */
1351
+ if (TEST_ADD_IMM(src2, src2w)) {
1352
+ compiler->imm = src2w & 0xffffffff;
1353
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0);
1354
+ }
1355
+ if (TEST_ADD_IMM(src1, src1w)) {
1356
+ compiler->imm = src1w & 0xffffffff;
1357
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0);
1358
+ }
1359
+ }
1360
+ if (!(GET_FLAGS(op) & (SLJIT_SET_E | SLJIT_SET_O))) {
1361
+ if (TEST_SL_IMM(src2, src2w)) {
1362
+ compiler->imm = src2w & 0xffff;
1363
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
1364
+ }
1365
+ if (TEST_SL_IMM(src1, src1w)) {
1366
+ compiler->imm = src1w & 0xffff;
1367
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);
1368
+ }
1369
+ }
1370
+ return emit_op(compiler, SLJIT_ADD, flags, dst, dstw, src1, src1w, src2, src2w);
1371
+
1372
+ case SLJIT_ADDC:
1373
+ return emit_op(compiler, SLJIT_ADDC, flags | (!(op & SLJIT_KEEP_FLAGS) ? 0 : ALT_FORM1), dst, dstw, src1, src1w, src2, src2w);
1374
+
1375
+ case SLJIT_SUB:
1376
+ if (!GET_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {
1377
+ if (TEST_SL_IMM(src2, -src2w)) {
1378
+ compiler->imm = (-src2w) & 0xffff;
1379
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0);
1380
+ }
1381
+ if (TEST_SL_IMM(src1, src1w)) {
1382
+ compiler->imm = src1w & 0xffff;
1383
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0);
1384
+ }
1385
+ if (TEST_SH_IMM(src2, -src2w)) {
1386
+ compiler->imm = ((-src2w) >> 16) & 0xffff;
1387
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
1388
+ }
1389
+ /* Range between -1 and -32768 is covered above. */
1390
+ if (TEST_ADD_IMM(src2, -src2w)) {
1391
+ compiler->imm = -src2w & 0xffffffff;
1392
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0);
1393
+ }
1394
+ }
1395
+ if (dst == SLJIT_UNUSED && (op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U)) && !(op & (SLJIT_SET_O | SLJIT_SET_C))) {
1396
+ if (!(op & SLJIT_SET_U)) {
1397
+ /* We know ALT_SIGN_EXT is set if it is an SLJIT_INT_OP on 64 bit systems. */
1398
+ if (TEST_SL_IMM(src2, src2w)) {
1399
+ compiler->imm = src2w & 0xffff;
1400
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
1401
+ }
1402
+ if (GET_FLAGS(op) == SLJIT_SET_E && TEST_SL_IMM(src1, src1w)) {
1403
+ compiler->imm = src1w & 0xffff;
1404
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0);
1405
+ }
1406
+ }
1407
+ if (!(op & (SLJIT_SET_E | SLJIT_SET_S))) {
1408
+ /* We know ALT_SIGN_EXT is set if it is an SLJIT_INT_OP on 64 bit systems. */
1409
+ if (TEST_UL_IMM(src2, src2w)) {
1410
+ compiler->imm = src2w & 0xffff;
1411
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
1412
+ }
1413
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
1414
+ }
1415
+ if ((src2 & SLJIT_IMM) && src2w >= 0 && src2w <= 0x7fff) {
1416
+ compiler->imm = src2w;
1417
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
1418
+ }
1419
+ return emit_op(compiler, SLJIT_SUB, flags | ((op & SLJIT_SET_U) ? ALT_FORM4 : 0) | ((op & (SLJIT_SET_E | SLJIT_SET_S)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w);
1420
+ }
1421
+ if (!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O))) {
1422
+ if (TEST_SL_IMM(src2, -src2w)) {
1423
+ compiler->imm = (-src2w) & 0xffff;
1424
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
1425
+ }
1426
+ }
1427
+ /* We know ALT_SIGN_EXT is set if it is an SLJIT_INT_OP on 64 bit systems. */
1428
+ return emit_op(compiler, SLJIT_SUB, flags | (!(op & SLJIT_SET_U) ? 0 : ALT_FORM6), dst, dstw, src1, src1w, src2, src2w);
1429
+
1430
+ case SLJIT_SUBC:
1431
+ return emit_op(compiler, SLJIT_SUBC, flags | (!(op & SLJIT_KEEP_FLAGS) ? 0 : ALT_FORM1), dst, dstw, src1, src1w, src2, src2w);
1432
+
1433
+ case SLJIT_MUL:
1434
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1435
+ if (op & SLJIT_INT_OP)
1436
+ flags |= ALT_FORM2;
1437
+ #endif
1438
+ if (!GET_FLAGS(op)) {
1439
+ if (TEST_SL_IMM(src2, src2w)) {
1440
+ compiler->imm = src2w & 0xffff;
1441
+ return emit_op(compiler, SLJIT_MUL, flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0);
1442
+ }
1443
+ if (TEST_SL_IMM(src1, src1w)) {
1444
+ compiler->imm = src1w & 0xffff;
1445
+ return emit_op(compiler, SLJIT_MUL, flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0);
1446
+ }
1447
+ }
1448
+ return emit_op(compiler, SLJIT_MUL, flags, dst, dstw, src1, src1w, src2, src2w);
1449
+
1450
+ case SLJIT_AND:
1451
+ case SLJIT_OR:
1452
+ case SLJIT_XOR:
1453
+ /* Commutative unsigned operations. */
1454
+ if (!GET_FLAGS(op) || GET_OPCODE(op) == SLJIT_AND) {
1455
+ if (TEST_UL_IMM(src2, src2w)) {
1456
+ compiler->imm = src2w;
1457
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0);
1458
+ }
1459
+ if (TEST_UL_IMM(src1, src1w)) {
1460
+ compiler->imm = src1w;
1461
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0);
1462
+ }
1463
+ if (TEST_UH_IMM(src2, src2w)) {
1464
+ compiler->imm = (src2w >> 16) & 0xffff;
1465
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
1466
+ }
1467
+ if (TEST_UH_IMM(src1, src1w)) {
1468
+ compiler->imm = (src1w >> 16) & 0xffff;
1469
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0);
1470
+ }
1471
+ }
1472
+ if (!GET_FLAGS(op) && GET_OPCODE(op) != SLJIT_AND) {
1473
+ if (TEST_UI_IMM(src2, src2w)) {
1474
+ compiler->imm = src2w;
1475
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
1476
+ }
1477
+ if (TEST_UI_IMM(src1, src1w)) {
1478
+ compiler->imm = src1w;
1479
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);
1480
+ }
1481
+ }
1482
+ return emit_op(compiler, GET_OPCODE(op), flags, dst, dstw, src1, src1w, src2, src2w);
1483
+
1484
+ case SLJIT_ASHR:
1485
+ if (op & SLJIT_KEEP_FLAGS)
1486
+ flags |= ALT_FORM3;
1487
+ /* Fall through. */
1488
+ case SLJIT_SHL:
1489
+ case SLJIT_LSHR:
1490
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1491
+ if (op & SLJIT_INT_OP)
1492
+ flags |= ALT_FORM2;
1493
+ #endif
1494
+ if (src2 & SLJIT_IMM) {
1495
+ compiler->imm = src2w;
1496
+ return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0);
1497
+ }
1498
+ return emit_op(compiler, GET_OPCODE(op), flags, dst, dstw, src1, src1w, src2, src2w);
1499
+ }
1500
+
1501
+ return SLJIT_SUCCESS;
1502
+ }
1503
+
1504
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
1505
+ {
1506
+ check_sljit_get_register_index(reg);
1507
+ return reg_map[reg];
1508
+ }
1509
+
1510
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
1511
+ void *instruction, sljit_si size)
1512
+ {
1513
+ CHECK_ERROR();
1514
+ check_sljit_emit_op_custom(compiler, instruction, size);
1515
+ SLJIT_ASSERT(size == 4);
1516
+
1517
+ return push_inst(compiler, *(sljit_ins*)instruction);
1518
+ }
1519
+
1520
+ /* --------------------------------------------------------------------- */
1521
+ /* Floating point operators */
1522
+ /* --------------------------------------------------------------------- */
1523
+
1524
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
1525
+ {
1526
+ /* Always available. */
1527
+ return 1;
1528
+ }
1529
+
1530
+ #define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_SINGLE_OP) >> 6))
1531
+ #define SELECT_FOP(op, single, double) ((op & SLJIT_SINGLE_OP) ? single : double)
1532
+
1533
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
1534
+ sljit_si dst, sljit_sw dstw,
1535
+ sljit_si src, sljit_sw srcw)
1536
+ {
1537
+ sljit_si dst_fr;
1538
+
1539
+ CHECK_ERROR();
1540
+ check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
1541
+ SLJIT_COMPILE_ASSERT((SLJIT_SINGLE_OP == 0x100) && !(DOUBLE_DATA & 0x4), float_transfer_bit_error);
1542
+
1543
+ compiler->cache_arg = 0;
1544
+ compiler->cache_argw = 0;
1545
+
1546
+ if (GET_OPCODE(op) == SLJIT_CMPD) {
1547
+ if (dst > SLJIT_FLOAT_REG6) {
1548
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
1549
+ dst = TMP_FREG1;
1550
+ }
1551
+
1552
+ if (src > SLJIT_FLOAT_REG6) {
1553
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
1554
+ src = TMP_FREG2;
1555
+ }
1556
+
1557
+ return push_inst(compiler, FCMPU | CRD(4) | FA(dst) | FB(src));
1558
+ }
1559
+
1560
+ dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : dst;
1561
+
1562
+ if (src > SLJIT_FLOAT_REG6) {
1563
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
1564
+ src = dst_fr;
1565
+ }
1566
+
1567
+ switch (GET_OPCODE(op)) {
1568
+ case SLJIT_MOVD:
1569
+ if (src != dst_fr && dst_fr != TMP_FREG1)
1570
+ FAIL_IF(push_inst(compiler, FMR | FD(dst_fr) | FB(src)));
1571
+ break;
1572
+ case SLJIT_NEGD:
1573
+ FAIL_IF(push_inst(compiler, FNEG | FD(dst_fr) | FB(src)));
1574
+ break;
1575
+ case SLJIT_ABSD:
1576
+ FAIL_IF(push_inst(compiler, FABS | FD(dst_fr) | FB(src)));
1577
+ break;
1578
+ }
1579
+
1580
+ if (dst_fr == TMP_FREG1) {
1581
+ if (GET_OPCODE(op) == SLJIT_MOVD)
1582
+ dst_fr = src;
1583
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), dst_fr, dst, dstw, 0, 0));
1584
+ }
1585
+
1586
+ return SLJIT_SUCCESS;
1587
+ }
1588
+
1589
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
1590
+ sljit_si dst, sljit_sw dstw,
1591
+ sljit_si src1, sljit_sw src1w,
1592
+ sljit_si src2, sljit_sw src2w)
1593
+ {
1594
+ sljit_si dst_fr, flags = 0;
1595
+
1596
+ CHECK_ERROR();
1597
+ check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
1598
+
1599
+ compiler->cache_arg = 0;
1600
+ compiler->cache_argw = 0;
1601
+
1602
+ dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG2 : dst;
1603
+
1604
+ if (src1 > SLJIT_FLOAT_REG6) {
1605
+ if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
1606
+ FAIL_IF(compiler->error);
1607
+ src1 = TMP_FREG1;
1608
+ } else
1609
+ flags |= ALT_FORM1;
1610
+ }
1611
+
1612
+ if (src2 > SLJIT_FLOAT_REG6) {
1613
+ if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
1614
+ FAIL_IF(compiler->error);
1615
+ src2 = TMP_FREG2;
1616
+ } else
1617
+ flags |= ALT_FORM2;
1618
+ }
1619
+
1620
+ if ((flags & (ALT_FORM1 | ALT_FORM2)) == (ALT_FORM1 | ALT_FORM2)) {
1621
+ if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
1622
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
1623
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
1624
+ }
1625
+ else {
1626
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
1627
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
1628
+ }
1629
+ }
1630
+ else if (flags & ALT_FORM1)
1631
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
1632
+ else if (flags & ALT_FORM2)
1633
+ FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
1634
+
1635
+ if (flags & ALT_FORM1)
1636
+ src1 = TMP_FREG1;
1637
+ if (flags & ALT_FORM2)
1638
+ src2 = TMP_FREG2;
1639
+
1640
+ switch (GET_OPCODE(op)) {
1641
+ case SLJIT_ADDD:
1642
+ FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADD) | FD(dst_fr) | FA(src1) | FB(src2)));
1643
+ break;
1644
+
1645
+ case SLJIT_SUBD:
1646
+ FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUB) | FD(dst_fr) | FA(src1) | FB(src2)));
1647
+ break;
1648
+
1649
+ case SLJIT_MULD:
1650
+ FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMUL) | FD(dst_fr) | FA(src1) | FC(src2) /* FMUL use FC as src2 */));
1651
+ break;
1652
+
1653
+ case SLJIT_DIVD:
1654
+ FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIV) | FD(dst_fr) | FA(src1) | FB(src2)));
1655
+ break;
1656
+ }
1657
+
1658
+ if (dst_fr == TMP_FREG2)
1659
+ FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));
1660
+
1661
+ return SLJIT_SUCCESS;
1662
+ }
1663
+
1664
+ #undef FLOAT_DATA
1665
+ #undef SELECT_FOP
1666
+
1667
+ /* --------------------------------------------------------------------- */
1668
+ /* Other instructions */
1669
+ /* --------------------------------------------------------------------- */
1670
+
1671
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
1672
+ {
1673
+ CHECK_ERROR();
1674
+ check_sljit_emit_fast_enter(compiler, dst, dstw);
1675
+ ADJUST_LOCAL_OFFSET(dst, dstw);
1676
+
1677
+ /* For UNUSED dst. Uncommon, but possible. */
1678
+ if (dst == SLJIT_UNUSED)
1679
+ return SLJIT_SUCCESS;
1680
+
1681
+ if (dst <= ZERO_REG)
1682
+ return push_inst(compiler, MFLR | D(dst));
1683
+
1684
+ /* Memory. */
1685
+ FAIL_IF(push_inst(compiler, MFLR | D(TMP_REG2)));
1686
+ return emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, TMP_REG2, 0);
1687
+ }
1688
+
1689
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
1690
+ {
1691
+ CHECK_ERROR();
1692
+ check_sljit_emit_fast_return(compiler, src, srcw);
1693
+ ADJUST_LOCAL_OFFSET(src, srcw);
1694
+
1695
+ if (src <= ZERO_REG)
1696
+ FAIL_IF(push_inst(compiler, MTLR | S(src)));
1697
+ else {
1698
+ if (src & SLJIT_MEM)
1699
+ FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, TMP_REG2, 0, TMP_REG1, 0, src, srcw));
1700
+ else if (src & SLJIT_IMM)
1701
+ FAIL_IF(load_immediate(compiler, TMP_REG2, srcw));
1702
+ FAIL_IF(push_inst(compiler, MTLR | S(TMP_REG2)));
1703
+ }
1704
+ return push_inst(compiler, BLR);
1705
+ }
1706
+
1707
+ /* --------------------------------------------------------------------- */
1708
+ /* Conditional instructions */
1709
+ /* --------------------------------------------------------------------- */
1710
+
1711
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler)
1712
+ {
1713
+ struct sljit_label *label;
1714
+
1715
+ CHECK_ERROR_PTR();
1716
+ check_sljit_emit_label(compiler);
1717
+
1718
+ if (compiler->last_label && compiler->last_label->size == compiler->size)
1719
+ return compiler->last_label;
1720
+
1721
+ label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label));
1722
+ PTR_FAIL_IF(!label);
1723
+ set_label(label, compiler);
1724
+ return label;
1725
+ }
1726
+
1727
+ static sljit_ins get_bo_bi_flags(sljit_si type)
1728
+ {
1729
+ switch (type) {
1730
+ case SLJIT_C_EQUAL:
1731
+ return (12 << 21) | (2 << 16);
1732
+
1733
+ case SLJIT_C_NOT_EQUAL:
1734
+ return (4 << 21) | (2 << 16);
1735
+
1736
+ case SLJIT_C_LESS:
1737
+ case SLJIT_C_FLOAT_LESS:
1738
+ return (12 << 21) | ((4 + 0) << 16);
1739
+
1740
+ case SLJIT_C_GREATER_EQUAL:
1741
+ case SLJIT_C_FLOAT_GREATER_EQUAL:
1742
+ return (4 << 21) | ((4 + 0) << 16);
1743
+
1744
+ case SLJIT_C_GREATER:
1745
+ case SLJIT_C_FLOAT_GREATER:
1746
+ return (12 << 21) | ((4 + 1) << 16);
1747
+
1748
+ case SLJIT_C_LESS_EQUAL:
1749
+ case SLJIT_C_FLOAT_LESS_EQUAL:
1750
+ return (4 << 21) | ((4 + 1) << 16);
1751
+
1752
+ case SLJIT_C_SIG_LESS:
1753
+ return (12 << 21) | (0 << 16);
1754
+
1755
+ case SLJIT_C_SIG_GREATER_EQUAL:
1756
+ return (4 << 21) | (0 << 16);
1757
+
1758
+ case SLJIT_C_SIG_GREATER:
1759
+ return (12 << 21) | (1 << 16);
1760
+
1761
+ case SLJIT_C_SIG_LESS_EQUAL:
1762
+ return (4 << 21) | (1 << 16);
1763
+
1764
+ case SLJIT_C_OVERFLOW:
1765
+ case SLJIT_C_MUL_OVERFLOW:
1766
+ return (12 << 21) | (3 << 16);
1767
+
1768
+ case SLJIT_C_NOT_OVERFLOW:
1769
+ case SLJIT_C_MUL_NOT_OVERFLOW:
1770
+ return (4 << 21) | (3 << 16);
1771
+
1772
+ case SLJIT_C_FLOAT_EQUAL:
1773
+ return (12 << 21) | ((4 + 2) << 16);
1774
+
1775
+ case SLJIT_C_FLOAT_NOT_EQUAL:
1776
+ return (4 << 21) | ((4 + 2) << 16);
1777
+
1778
+ case SLJIT_C_FLOAT_UNORDERED:
1779
+ return (12 << 21) | ((4 + 3) << 16);
1780
+
1781
+ case SLJIT_C_FLOAT_ORDERED:
1782
+ return (4 << 21) | ((4 + 3) << 16);
1783
+
1784
+ default:
1785
+ SLJIT_ASSERT(type >= SLJIT_JUMP && type <= SLJIT_CALL3);
1786
+ return (20 << 21);
1787
+ }
1788
+ }
1789
+
1790
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
1791
+ {
1792
+ struct sljit_jump *jump;
1793
+ sljit_ins bo_bi_flags;
1794
+
1795
+ CHECK_ERROR_PTR();
1796
+ check_sljit_emit_jump(compiler, type);
1797
+
1798
+ bo_bi_flags = get_bo_bi_flags(type & 0xff);
1799
+ if (!bo_bi_flags)
1800
+ return NULL;
1801
+
1802
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1803
+ PTR_FAIL_IF(!jump);
1804
+ set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
1805
+ type &= 0xff;
1806
+
1807
+ /* In PPC, we don't need to touch the arguments. */
1808
+ if (type >= SLJIT_JUMP)
1809
+ jump->flags |= UNCOND_B;
1810
+
1811
+ PTR_FAIL_IF(emit_const(compiler, TMP_REG1, 0));
1812
+ PTR_FAIL_IF(push_inst(compiler, MTCTR | S(TMP_REG1)));
1813
+ jump->addr = compiler->size;
1814
+ PTR_FAIL_IF(push_inst(compiler, BCCTR | bo_bi_flags | (type >= SLJIT_FAST_CALL ? 1 : 0)));
1815
+ return jump;
1816
+ }
1817
+
1818
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
1819
+ {
1820
+ struct sljit_jump *jump = NULL;
1821
+ sljit_si src_r;
1822
+
1823
+ CHECK_ERROR();
1824
+ check_sljit_emit_ijump(compiler, type, src, srcw);
1825
+ ADJUST_LOCAL_OFFSET(src, srcw);
1826
+
1827
+ if (src <= ZERO_REG)
1828
+ src_r = src;
1829
+ else if (src & SLJIT_IMM) {
1830
+ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1831
+ FAIL_IF(!jump);
1832
+ set_jump(jump, compiler, JUMP_ADDR | UNCOND_B);
1833
+ jump->u.target = srcw;
1834
+
1835
+ FAIL_IF(emit_const(compiler, TMP_REG2, 0));
1836
+ src_r = TMP_REG2;
1837
+ }
1838
+ else {
1839
+ FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, TMP_REG2, 0, TMP_REG1, 0, src, srcw));
1840
+ src_r = TMP_REG2;
1841
+ }
1842
+
1843
+ FAIL_IF(push_inst(compiler, MTCTR | S(src_r)));
1844
+ if (jump)
1845
+ jump->addr = compiler->size;
1846
+ return push_inst(compiler, BCCTR | (20 << 21) | (type >= SLJIT_FAST_CALL ? 1 : 0));
1847
+ }
1848
+
1849
+ /* Get a bit from CR, all other bits are zeroed. */
1850
+ #define GET_CR_BIT(bit, dst) \
1851
+ FAIL_IF(push_inst(compiler, MFCR | D(dst))); \
1852
+ FAIL_IF(push_inst(compiler, RLWINM | S(dst) | A(dst) | ((1 + (bit)) << 11) | (31 << 6) | (31 << 1)));
1853
+
1854
+ #define INVERT_BIT(dst) \
1855
+ FAIL_IF(push_inst(compiler, XORI | S(dst) | A(dst) | 0x1));
1856
+
1857
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_si op,
1858
+ sljit_si dst, sljit_sw dstw,
1859
+ sljit_si src, sljit_sw srcw,
1860
+ sljit_si type)
1861
+ {
1862
+ sljit_si reg, input_flags;
1863
+ sljit_si flags = GET_ALL_FLAGS(op);
1864
+
1865
+ CHECK_ERROR();
1866
+ check_sljit_emit_op_flags(compiler, op, dst, dstw, src, srcw, type);
1867
+ ADJUST_LOCAL_OFFSET(dst, dstw);
1868
+
1869
+ if (dst == SLJIT_UNUSED)
1870
+ return SLJIT_SUCCESS;
1871
+
1872
+ op = GET_OPCODE(op);
1873
+ reg = (op < SLJIT_ADD && dst <= ZERO_REG) ? dst : TMP_REG2;
1874
+
1875
+ compiler->cache_arg = 0;
1876
+ compiler->cache_argw = 0;
1877
+ if (op >= SLJIT_ADD && (src & SLJIT_MEM)) {
1878
+ ADJUST_LOCAL_OFFSET(src, srcw);
1879
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1880
+ input_flags = (flags & SLJIT_INT_OP) ? INT_DATA : WORD_DATA;
1881
+ #else
1882
+ input_flags = WORD_DATA;
1883
+ #endif
1884
+ FAIL_IF(emit_op_mem2(compiler, input_flags | LOAD_DATA, TMP_REG1, src, srcw, dst, dstw));
1885
+ src = TMP_REG1;
1886
+ srcw = 0;
1887
+ }
1888
+
1889
+ switch (type) {
1890
+ case SLJIT_C_EQUAL:
1891
+ GET_CR_BIT(2, reg);
1892
+ break;
1893
+
1894
+ case SLJIT_C_NOT_EQUAL:
1895
+ GET_CR_BIT(2, reg);
1896
+ INVERT_BIT(reg);
1897
+ break;
1898
+
1899
+ case SLJIT_C_LESS:
1900
+ case SLJIT_C_FLOAT_LESS:
1901
+ GET_CR_BIT(4 + 0, reg);
1902
+ break;
1903
+
1904
+ case SLJIT_C_GREATER_EQUAL:
1905
+ case SLJIT_C_FLOAT_GREATER_EQUAL:
1906
+ GET_CR_BIT(4 + 0, reg);
1907
+ INVERT_BIT(reg);
1908
+ break;
1909
+
1910
+ case SLJIT_C_GREATER:
1911
+ case SLJIT_C_FLOAT_GREATER:
1912
+ GET_CR_BIT(4 + 1, reg);
1913
+ break;
1914
+
1915
+ case SLJIT_C_LESS_EQUAL:
1916
+ case SLJIT_C_FLOAT_LESS_EQUAL:
1917
+ GET_CR_BIT(4 + 1, reg);
1918
+ INVERT_BIT(reg);
1919
+ break;
1920
+
1921
+ case SLJIT_C_SIG_LESS:
1922
+ GET_CR_BIT(0, reg);
1923
+ break;
1924
+
1925
+ case SLJIT_C_SIG_GREATER_EQUAL:
1926
+ GET_CR_BIT(0, reg);
1927
+ INVERT_BIT(reg);
1928
+ break;
1929
+
1930
+ case SLJIT_C_SIG_GREATER:
1931
+ GET_CR_BIT(1, reg);
1932
+ break;
1933
+
1934
+ case SLJIT_C_SIG_LESS_EQUAL:
1935
+ GET_CR_BIT(1, reg);
1936
+ INVERT_BIT(reg);
1937
+ break;
1938
+
1939
+ case SLJIT_C_OVERFLOW:
1940
+ case SLJIT_C_MUL_OVERFLOW:
1941
+ GET_CR_BIT(3, reg);
1942
+ break;
1943
+
1944
+ case SLJIT_C_NOT_OVERFLOW:
1945
+ case SLJIT_C_MUL_NOT_OVERFLOW:
1946
+ GET_CR_BIT(3, reg);
1947
+ INVERT_BIT(reg);
1948
+ break;
1949
+
1950
+ case SLJIT_C_FLOAT_EQUAL:
1951
+ GET_CR_BIT(4 + 2, reg);
1952
+ break;
1953
+
1954
+ case SLJIT_C_FLOAT_NOT_EQUAL:
1955
+ GET_CR_BIT(4 + 2, reg);
1956
+ INVERT_BIT(reg);
1957
+ break;
1958
+
1959
+ case SLJIT_C_FLOAT_UNORDERED:
1960
+ GET_CR_BIT(4 + 3, reg);
1961
+ break;
1962
+
1963
+ case SLJIT_C_FLOAT_ORDERED:
1964
+ GET_CR_BIT(4 + 3, reg);
1965
+ INVERT_BIT(reg);
1966
+ break;
1967
+
1968
+ default:
1969
+ SLJIT_ASSERT_STOP();
1970
+ break;
1971
+ }
1972
+
1973
+ if (op < SLJIT_ADD) {
1974
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1975
+ if (op == SLJIT_MOV)
1976
+ input_flags = WORD_DATA;
1977
+ else {
1978
+ op = SLJIT_MOV_UI;
1979
+ input_flags = INT_DATA;
1980
+ }
1981
+ #else
1982
+ op = SLJIT_MOV;
1983
+ input_flags = WORD_DATA;
1984
+ #endif
1985
+ return (reg == TMP_REG2) ? emit_op(compiler, op, input_flags, dst, dstw, TMP_REG1, 0, TMP_REG2, 0) : SLJIT_SUCCESS;
1986
+ }
1987
+
1988
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1989
+ compiler->skip_checks = 1;
1990
+ #endif
1991
+ return sljit_emit_op2(compiler, op | flags, dst, dstw, src, srcw, TMP_REG2, 0);
1992
+ }
1993
+
1994
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
1995
+ {
1996
+ struct sljit_const *const_;
1997
+ sljit_si reg;
1998
+
1999
+ CHECK_ERROR_PTR();
2000
+ check_sljit_emit_const(compiler, dst, dstw, init_value);
2001
+ ADJUST_LOCAL_OFFSET(dst, dstw);
2002
+
2003
+ const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));
2004
+ PTR_FAIL_IF(!const_);
2005
+ set_const(const_, compiler);
2006
+
2007
+ reg = (dst <= ZERO_REG) ? dst : TMP_REG2;
2008
+
2009
+ PTR_FAIL_IF(emit_const(compiler, reg, init_value));
2010
+
2011
+ if (dst & SLJIT_MEM)
2012
+ PTR_FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, TMP_REG2, 0));
2013
+ return const_;
2014
+ }