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,289 @@
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
+ /*
28
+ This file contains a simple executable memory allocator
29
+
30
+ It is assumed, that executable code blocks are usually medium (or sometimes
31
+ large) memory blocks, and the allocator is not too frequently called (less
32
+ optimized than other allocators). Thus, using it as a generic allocator is
33
+ not suggested.
34
+
35
+ How does it work:
36
+ Memory is allocated in continuous memory areas called chunks by alloc_chunk()
37
+ Chunk format:
38
+ [ block ][ block ] ... [ block ][ block terminator ]
39
+
40
+ All blocks and the block terminator is started with block_header. The block
41
+ header contains the size of the previous and the next block. These sizes
42
+ can also contain special values.
43
+ Block size:
44
+ 0 - The block is a free_block, with a different size member.
45
+ 1 - The block is a block terminator.
46
+ n - The block is used at the moment, and the value contains its size.
47
+ Previous block size:
48
+ 0 - This is the first block of the memory chunk.
49
+ n - The size of the previous block.
50
+
51
+ Using these size values we can go forward or backward on the block chain.
52
+ The unused blocks are stored in a chain list pointed by free_blocks. This
53
+ list is useful if we need to find a suitable memory area when the allocator
54
+ is called.
55
+
56
+ When a block is freed, the new free block is connected to its adjacent free
57
+ blocks if possible.
58
+
59
+ [ free block ][ used block ][ free block ]
60
+ and "used block" is freed, the three blocks are connected together:
61
+ [ one big free block ]
62
+ */
63
+
64
+ /* --------------------------------------------------------------------- */
65
+ /* System (OS) functions */
66
+ /* --------------------------------------------------------------------- */
67
+
68
+ /* 64 KByte. */
69
+ #define CHUNK_SIZE 0x10000
70
+
71
+ /*
72
+ alloc_chunk / free_chunk :
73
+ * allocate executable system memory chunks
74
+ * the size is always divisible by CHUNK_SIZE
75
+ allocator_grab_lock / allocator_release_lock :
76
+ * make the allocator thread safe
77
+ * can be empty if the OS (or the application) does not support threading
78
+ * only the allocator requires this lock, sljit is fully thread safe
79
+ as it only uses local variables
80
+ */
81
+
82
+ #ifdef _WIN32
83
+
84
+ static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
85
+ {
86
+ return VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
87
+ }
88
+
89
+ static SLJIT_INLINE void free_chunk(void* chunk, sljit_uw size)
90
+ {
91
+ SLJIT_UNUSED_ARG(size);
92
+ VirtualFree(chunk, 0, MEM_RELEASE);
93
+ }
94
+
95
+ #else
96
+
97
+ static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
98
+ {
99
+ void* retval;
100
+
101
+ #ifdef MAP_ANON
102
+ retval = mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0);
103
+ #else
104
+ if (dev_zero < 0) {
105
+ if (open_dev_zero())
106
+ return NULL;
107
+ }
108
+ retval = mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, dev_zero, 0);
109
+ #endif
110
+
111
+ return (retval != MAP_FAILED) ? retval : NULL;
112
+ }
113
+
114
+ static SLJIT_INLINE void free_chunk(void* chunk, sljit_uw size)
115
+ {
116
+ munmap(chunk, size);
117
+ }
118
+
119
+ #endif
120
+
121
+ /* --------------------------------------------------------------------- */
122
+ /* Common functions */
123
+ /* --------------------------------------------------------------------- */
124
+
125
+ #define CHUNK_MASK (~(CHUNK_SIZE - 1))
126
+
127
+ struct block_header {
128
+ sljit_uw size;
129
+ sljit_uw prev_size;
130
+ };
131
+
132
+ struct free_block {
133
+ struct block_header header;
134
+ struct free_block *next;
135
+ struct free_block *prev;
136
+ sljit_uw size;
137
+ };
138
+
139
+ #define AS_BLOCK_HEADER(base, offset) \
140
+ ((struct block_header*)(((sljit_ub*)base) + offset))
141
+ #define AS_FREE_BLOCK(base, offset) \
142
+ ((struct free_block*)(((sljit_ub*)base) + offset))
143
+ #define MEM_START(base) ((void*)(((sljit_ub*)base) + sizeof(struct block_header)))
144
+ #define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7) & ~7)
145
+
146
+ static struct free_block* free_blocks;
147
+ static sljit_uw allocated_size;
148
+ static sljit_uw total_size;
149
+
150
+ static SLJIT_INLINE void sljit_insert_free_block(struct free_block *free_block, sljit_uw size)
151
+ {
152
+ free_block->header.size = 0;
153
+ free_block->size = size;
154
+
155
+ free_block->next = free_blocks;
156
+ free_block->prev = 0;
157
+ if (free_blocks)
158
+ free_blocks->prev = free_block;
159
+ free_blocks = free_block;
160
+ }
161
+
162
+ static SLJIT_INLINE void sljit_remove_free_block(struct free_block *free_block)
163
+ {
164
+ if (free_block->next)
165
+ free_block->next->prev = free_block->prev;
166
+
167
+ if (free_block->prev)
168
+ free_block->prev->next = free_block->next;
169
+ else {
170
+ SLJIT_ASSERT(free_blocks == free_block);
171
+ free_blocks = free_block->next;
172
+ }
173
+ }
174
+
175
+ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
176
+ {
177
+ struct block_header *header;
178
+ struct block_header *next_header;
179
+ struct free_block *free_block;
180
+ sljit_uw chunk_size;
181
+
182
+ allocator_grab_lock();
183
+ if (size < sizeof(struct free_block))
184
+ size = sizeof(struct free_block);
185
+ size = ALIGN_SIZE(size);
186
+
187
+ free_block = free_blocks;
188
+ while (free_block) {
189
+ if (free_block->size >= size) {
190
+ chunk_size = free_block->size;
191
+ if (chunk_size > size + 64) {
192
+ /* We just cut a block from the end of the free block. */
193
+ chunk_size -= size;
194
+ free_block->size = chunk_size;
195
+ header = AS_BLOCK_HEADER(free_block, chunk_size);
196
+ header->prev_size = chunk_size;
197
+ AS_BLOCK_HEADER(header, size)->prev_size = size;
198
+ }
199
+ else {
200
+ sljit_remove_free_block(free_block);
201
+ header = (struct block_header*)free_block;
202
+ size = chunk_size;
203
+ }
204
+ allocated_size += size;
205
+ header->size = size;
206
+ allocator_release_lock();
207
+ return MEM_START(header);
208
+ }
209
+ free_block = free_block->next;
210
+ }
211
+
212
+ chunk_size = (size + sizeof(struct block_header) + CHUNK_SIZE - 1) & CHUNK_MASK;
213
+ header = (struct block_header*)alloc_chunk(chunk_size);
214
+ if (!header) {
215
+ allocator_release_lock();
216
+ return NULL;
217
+ }
218
+
219
+ chunk_size -= sizeof(struct block_header);
220
+ total_size += chunk_size;
221
+
222
+ header->prev_size = 0;
223
+ if (chunk_size > size + 64) {
224
+ /* Cut the allocated space into a free and a used block. */
225
+ allocated_size += size;
226
+ header->size = size;
227
+ chunk_size -= size;
228
+
229
+ free_block = AS_FREE_BLOCK(header, size);
230
+ free_block->header.prev_size = size;
231
+ sljit_insert_free_block(free_block, chunk_size);
232
+ next_header = AS_BLOCK_HEADER(free_block, chunk_size);
233
+ }
234
+ else {
235
+ /* All space belongs to this allocation. */
236
+ allocated_size += chunk_size;
237
+ header->size = chunk_size;
238
+ next_header = AS_BLOCK_HEADER(header, chunk_size);
239
+ }
240
+ next_header->size = 1;
241
+ next_header->prev_size = chunk_size;
242
+ allocator_release_lock();
243
+ return MEM_START(header);
244
+ }
245
+
246
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
247
+ {
248
+ struct block_header *header;
249
+ struct free_block* free_block;
250
+
251
+ allocator_grab_lock();
252
+ header = AS_BLOCK_HEADER(ptr, -(sljit_sw)sizeof(struct block_header));
253
+ allocated_size -= header->size;
254
+
255
+ /* Connecting free blocks together if possible. */
256
+
257
+ /* If header->prev_size == 0, free_block will equal to header.
258
+ In this case, free_block->header.size will be > 0. */
259
+ free_block = AS_FREE_BLOCK(header, -(sljit_sw)header->prev_size);
260
+ if (SLJIT_UNLIKELY(!free_block->header.size)) {
261
+ free_block->size += header->size;
262
+ header = AS_BLOCK_HEADER(free_block, free_block->size);
263
+ header->prev_size = free_block->size;
264
+ }
265
+ else {
266
+ free_block = (struct free_block*)header;
267
+ sljit_insert_free_block(free_block, header->size);
268
+ }
269
+
270
+ header = AS_BLOCK_HEADER(free_block, free_block->size);
271
+ if (SLJIT_UNLIKELY(!header->size)) {
272
+ free_block->size += ((struct free_block*)header)->size;
273
+ sljit_remove_free_block((struct free_block*)header);
274
+ header = AS_BLOCK_HEADER(free_block, free_block->size);
275
+ header->prev_size = free_block->size;
276
+ }
277
+
278
+ /* The whole chunk is free. */
279
+ if (SLJIT_UNLIKELY(!free_block->header.prev_size && header->size == 1)) {
280
+ /* If this block is freed, we still have (allocated_size / 2) free space. */
281
+ if (total_size - free_block->size > (allocated_size * 3 / 2)) {
282
+ total_size -= free_block->size;
283
+ sljit_remove_free_block(free_block);
284
+ free_chunk(free_block, free_block->size + sizeof(struct block_header));
285
+ }
286
+ }
287
+
288
+ allocator_release_lock();
289
+ }
@@ -0,0 +1,1766 @@
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
+ #include "sljitLir.h"
28
+
29
+ #define CHECK_ERROR() \
30
+ do { \
31
+ if (SLJIT_UNLIKELY(compiler->error)) \
32
+ return compiler->error; \
33
+ } while (0)
34
+
35
+ #define CHECK_ERROR_PTR() \
36
+ do { \
37
+ if (SLJIT_UNLIKELY(compiler->error)) \
38
+ return NULL; \
39
+ } while (0)
40
+
41
+ #define CHECK_ERROR_VOID() \
42
+ do { \
43
+ if (SLJIT_UNLIKELY(compiler->error)) \
44
+ return; \
45
+ } while (0)
46
+
47
+ #define FAIL_IF(expr) \
48
+ do { \
49
+ if (SLJIT_UNLIKELY(expr)) \
50
+ return compiler->error; \
51
+ } while (0)
52
+
53
+ #define PTR_FAIL_IF(expr) \
54
+ do { \
55
+ if (SLJIT_UNLIKELY(expr)) \
56
+ return NULL; \
57
+ } while (0)
58
+
59
+ #define FAIL_IF_NULL(ptr) \
60
+ do { \
61
+ if (SLJIT_UNLIKELY(!(ptr))) { \
62
+ compiler->error = SLJIT_ERR_ALLOC_FAILED; \
63
+ return SLJIT_ERR_ALLOC_FAILED; \
64
+ } \
65
+ } while (0)
66
+
67
+ #define PTR_FAIL_IF_NULL(ptr) \
68
+ do { \
69
+ if (SLJIT_UNLIKELY(!(ptr))) { \
70
+ compiler->error = SLJIT_ERR_ALLOC_FAILED; \
71
+ return NULL; \
72
+ } \
73
+ } while (0)
74
+
75
+ #define PTR_FAIL_WITH_EXEC_IF(ptr) \
76
+ do { \
77
+ if (SLJIT_UNLIKELY(!(ptr))) { \
78
+ compiler->error = SLJIT_ERR_EX_ALLOC_FAILED; \
79
+ return NULL; \
80
+ } \
81
+ } while (0)
82
+
83
+ #if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
84
+
85
+ #define GET_OPCODE(op) \
86
+ ((op) & ~(SLJIT_INT_OP | SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))
87
+
88
+ #define GET_FLAGS(op) \
89
+ ((op) & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C))
90
+
91
+ #define GET_ALL_FLAGS(op) \
92
+ ((op) & (SLJIT_INT_OP | SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))
93
+
94
+ #define TYPE_CAST_NEEDED(op) \
95
+ (((op) >= SLJIT_MOV_UB && (op) <= SLJIT_MOV_SH) || ((op) >= SLJIT_MOVU_UB && (op) <= SLJIT_MOVU_SH))
96
+
97
+ #define BUF_SIZE 4096
98
+
99
+ #if (defined SLJIT_32BIT_ARCHITECTURE && SLJIT_32BIT_ARCHITECTURE)
100
+ #define ABUF_SIZE 2048
101
+ #else
102
+ #define ABUF_SIZE 4096
103
+ #endif
104
+
105
+ /* Jump flags. */
106
+ #define JUMP_LABEL 0x1
107
+ #define JUMP_ADDR 0x2
108
+ /* SLJIT_REWRITABLE_JUMP is 0x1000. */
109
+
110
+ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
111
+ # define PATCH_MB 0x4
112
+ # define PATCH_MW 0x8
113
+ #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
114
+ # define PATCH_MD 0x10
115
+ #endif
116
+ #endif
117
+
118
+ #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
119
+ # define IS_BL 0x4
120
+ # define PATCH_B 0x8
121
+ #endif
122
+
123
+ #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
124
+ # define CPOOL_SIZE 512
125
+ #endif
126
+
127
+ #if (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
128
+ # define IS_COND 0x04
129
+ # define IS_BL 0x08
130
+ /* cannot be encoded as branch */
131
+ # define B_TYPE0 0x00
132
+ /* conditional + imm8 */
133
+ # define B_TYPE1 0x10
134
+ /* conditional + imm20 */
135
+ # define B_TYPE2 0x20
136
+ /* IT + imm24 */
137
+ # define B_TYPE3 0x30
138
+ /* imm11 */
139
+ # define B_TYPE4 0x40
140
+ /* imm24 */
141
+ # define B_TYPE5 0x50
142
+ /* BL + imm24 */
143
+ # define BL_TYPE6 0x60
144
+ /* 0xf00 cc code for branches */
145
+ #endif
146
+
147
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
148
+ # define UNCOND_B 0x04
149
+ # define PATCH_B 0x08
150
+ # define ABSOLUTE_B 0x10
151
+ #endif
152
+
153
+ #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
154
+ # define IS_MOVABLE 0x04
155
+ # define IS_JAL 0x08
156
+ # define IS_BIT26_COND 0x10
157
+ # define IS_BIT16_COND 0x20
158
+
159
+ # define IS_COND (IS_BIT26_COND | IS_BIT16_COND)
160
+
161
+ # define PATCH_B 0x40
162
+ # define PATCH_J 0x80
163
+
164
+ /* instruction types */
165
+ # define MOVABLE_INS 0
166
+ /* 1 - 31 last destination register */
167
+ /* no destination (i.e: store) */
168
+ # define UNMOVABLE_INS 32
169
+ /* FPU status register */
170
+ # define FCSR_FCC 33
171
+ #endif
172
+
173
+ #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
174
+ # define IS_MOVABLE 0x04
175
+ # define IS_COND 0x08
176
+ # define IS_CALL 0x10
177
+
178
+ # define PATCH_B 0x20
179
+ # define PATCH_CALL 0x40
180
+
181
+ /* instruction types */
182
+ # define MOVABLE_INS 0
183
+ /* 1 - 31 last destination register */
184
+ /* no destination (i.e: store) */
185
+ # define UNMOVABLE_INS 32
186
+
187
+ # define DST_INS_MASK 0xff
188
+
189
+ /* ICC_SET is the same as SET_FLAGS. */
190
+ # define ICC_IS_SET (1 << 23)
191
+ # define FCC_IS_SET (1 << 24)
192
+ #endif
193
+
194
+ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
195
+ #define SLJIT_HAS_VARIABLE_LOCALS_OFFSET 1
196
+ #if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
197
+ #define FIXED_LOCALS_OFFSET (3 * sizeof(sljit_sw))
198
+ #endif
199
+ #endif
200
+
201
+ #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
202
+ #define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
203
+ #ifdef _WIN64
204
+ #define FIXED_LOCALS_OFFSET ((4 + 2) * sizeof(sljit_sw))
205
+ #else
206
+ #define FIXED_LOCALS_OFFSET (sizeof(sljit_sw))
207
+ #endif
208
+ #endif
209
+
210
+ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
211
+ #define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
212
+ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
213
+ #define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_sw))
214
+ #else
215
+ #define FIXED_LOCALS_OFFSET (2 * sizeof(sljit_sw))
216
+ #endif
217
+ #endif
218
+
219
+ #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
220
+ #define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
221
+ #define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_sw))
222
+ #endif
223
+
224
+ #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
225
+ #define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
226
+ #define FIXED_LOCALS_OFFSET (4 * sizeof(sljit_sw))
227
+ #endif
228
+
229
+ #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
230
+ #define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
231
+ #define FIXED_LOCALS_OFFSET (23 * sizeof(sljit_sw))
232
+ #endif
233
+
234
+ #if (defined SLJIT_HAS_VARIABLE_LOCALS_OFFSET && SLJIT_HAS_VARIABLE_LOCALS_OFFSET)
235
+
236
+ #define ADJUST_LOCAL_OFFSET(p, i) \
237
+ if ((p) == (SLJIT_MEM1(SLJIT_LOCALS_REG))) \
238
+ (i) += compiler->locals_offset;
239
+
240
+ #elif (defined SLJIT_HAS_FIXED_LOCALS_OFFSET && SLJIT_HAS_FIXED_LOCALS_OFFSET)
241
+
242
+ #define ADJUST_LOCAL_OFFSET(p, i) \
243
+ if ((p) == (SLJIT_MEM1(SLJIT_LOCALS_REG))) \
244
+ (i) += FIXED_LOCALS_OFFSET;
245
+
246
+ #else
247
+
248
+ #define ADJUST_LOCAL_OFFSET(p, i)
249
+
250
+ #endif
251
+
252
+ #endif /* !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) */
253
+
254
+ /* Utils can still be used even if SLJIT_CONFIG_UNSUPPORTED is set. */
255
+ #include "sljitUtils.c"
256
+
257
+ #if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
258
+
259
+ #if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)
260
+ #include "sljitExecAllocator.c"
261
+ #endif
262
+
263
+ #if (defined SLJIT_SSE2_AUTO && SLJIT_SSE2_AUTO) && !(defined SLJIT_SSE2 && SLJIT_SSE2)
264
+ #error SLJIT_SSE2_AUTO cannot be enabled without SLJIT_SSE2
265
+ #endif
266
+
267
+ /* --------------------------------------------------------------------- */
268
+ /* Public functions */
269
+ /* --------------------------------------------------------------------- */
270
+
271
+ #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || ((defined SLJIT_SSE2 && SLJIT_SSE2) && ((defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)))
272
+ #define SLJIT_NEEDS_COMPILER_INIT 1
273
+ static sljit_si compiler_initialized = 0;
274
+ /* A thread safe initialization. */
275
+ static void init_compiler(void);
276
+ #endif
277
+
278
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void)
279
+ {
280
+ struct sljit_compiler *compiler = (struct sljit_compiler*)SLJIT_MALLOC(sizeof(struct sljit_compiler));
281
+ if (!compiler)
282
+ return NULL;
283
+ SLJIT_ZEROMEM(compiler, sizeof(struct sljit_compiler));
284
+
285
+ SLJIT_COMPILE_ASSERT(
286
+ sizeof(sljit_sb) == 1 && sizeof(sljit_ub) == 1
287
+ && sizeof(sljit_sh) == 2 && sizeof(sljit_uh) == 2
288
+ && sizeof(sljit_si) == 4 && sizeof(sljit_ui) == 4
289
+ && (sizeof(sljit_p) == 4 || sizeof(sljit_p) == 8)
290
+ && sizeof(sljit_p) <= sizeof(sljit_sw)
291
+ && (sizeof(sljit_sw) == 4 || sizeof(sljit_sw) == 8)
292
+ && (sizeof(sljit_uw) == 4 || sizeof(sljit_uw) == 8),
293
+ invalid_integer_types);
294
+ SLJIT_COMPILE_ASSERT(SLJIT_INT_OP == SLJIT_SINGLE_OP,
295
+ int_op_and_single_op_must_be_the_same);
296
+ SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_SINGLE_OP,
297
+ rewritable_jump_and_single_op_must_not_be_the_same);
298
+
299
+ /* Only the non-zero members must be set. */
300
+ compiler->error = SLJIT_SUCCESS;
301
+
302
+ compiler->buf = (struct sljit_memory_fragment*)SLJIT_MALLOC(BUF_SIZE);
303
+ compiler->abuf = (struct sljit_memory_fragment*)SLJIT_MALLOC(ABUF_SIZE);
304
+
305
+ if (!compiler->buf || !compiler->abuf) {
306
+ if (compiler->buf)
307
+ SLJIT_FREE(compiler->buf);
308
+ if (compiler->abuf)
309
+ SLJIT_FREE(compiler->abuf);
310
+ SLJIT_FREE(compiler);
311
+ return NULL;
312
+ }
313
+
314
+ compiler->buf->next = NULL;
315
+ compiler->buf->used_size = 0;
316
+ compiler->abuf->next = NULL;
317
+ compiler->abuf->used_size = 0;
318
+
319
+ compiler->scratches = -1;
320
+ compiler->saveds = -1;
321
+
322
+ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
323
+ compiler->args = -1;
324
+ #endif
325
+
326
+ #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
327
+ compiler->cpool = (sljit_uw*)SLJIT_MALLOC(CPOOL_SIZE * sizeof(sljit_uw) + CPOOL_SIZE * sizeof(sljit_ub));
328
+ if (!compiler->cpool) {
329
+ SLJIT_FREE(compiler->buf);
330
+ SLJIT_FREE(compiler->abuf);
331
+ SLJIT_FREE(compiler);
332
+ return NULL;
333
+ }
334
+ compiler->cpool_unique = (sljit_ub*)(compiler->cpool + CPOOL_SIZE);
335
+ compiler->cpool_diff = 0xffffffff;
336
+ #endif
337
+
338
+ #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
339
+ compiler->delay_slot = UNMOVABLE_INS;
340
+ #endif
341
+
342
+ #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
343
+ compiler->delay_slot = UNMOVABLE_INS;
344
+ #endif
345
+
346
+ #if (defined SLJIT_NEEDS_COMPILER_INIT && SLJIT_NEEDS_COMPILER_INIT)
347
+ if (!compiler_initialized) {
348
+ init_compiler();
349
+ compiler_initialized = 1;
350
+ }
351
+ #endif
352
+
353
+ return compiler;
354
+ }
355
+
356
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_compiler(struct sljit_compiler *compiler)
357
+ {
358
+ struct sljit_memory_fragment *buf;
359
+ struct sljit_memory_fragment *curr;
360
+
361
+ buf = compiler->buf;
362
+ while (buf) {
363
+ curr = buf;
364
+ buf = buf->next;
365
+ SLJIT_FREE(curr);
366
+ }
367
+
368
+ buf = compiler->abuf;
369
+ while (buf) {
370
+ curr = buf;
371
+ buf = buf->next;
372
+ SLJIT_FREE(curr);
373
+ }
374
+
375
+ #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
376
+ SLJIT_FREE(compiler->cpool);
377
+ #endif
378
+ SLJIT_FREE(compiler);
379
+ }
380
+
381
+ #if (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
382
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code)
383
+ {
384
+ /* Remove thumb mode flag. */
385
+ SLJIT_FREE_EXEC((void*)((sljit_uw)code & ~0x1));
386
+ }
387
+ #elif (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
388
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code)
389
+ {
390
+ /* Resolve indirection. */
391
+ code = (void*)(*(sljit_uw*)code);
392
+ SLJIT_FREE_EXEC(code);
393
+ }
394
+ #else
395
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code)
396
+ {
397
+ SLJIT_FREE_EXEC(code);
398
+ }
399
+ #endif
400
+
401
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sljit_label* label)
402
+ {
403
+ if (SLJIT_LIKELY(!!jump) && SLJIT_LIKELY(!!label)) {
404
+ jump->flags &= ~JUMP_ADDR;
405
+ jump->flags |= JUMP_LABEL;
406
+ jump->u.label = label;
407
+ }
408
+ }
409
+
410
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_target(struct sljit_jump *jump, sljit_uw target)
411
+ {
412
+ if (SLJIT_LIKELY(!!jump)) {
413
+ SLJIT_ASSERT(jump->flags & SLJIT_REWRITABLE_JUMP);
414
+
415
+ jump->flags &= ~JUMP_LABEL;
416
+ jump->flags |= JUMP_ADDR;
417
+ jump->u.target = target;
418
+ }
419
+ }
420
+
421
+ /* --------------------------------------------------------------------- */
422
+ /* Private functions */
423
+ /* --------------------------------------------------------------------- */
424
+
425
+ static void* ensure_buf(struct sljit_compiler *compiler, sljit_uw size)
426
+ {
427
+ sljit_ub *ret;
428
+ struct sljit_memory_fragment *new_frag;
429
+
430
+ SLJIT_ASSERT(size <= 256);
431
+ if (compiler->buf->used_size + size <= (BUF_SIZE - (sljit_uw)SLJIT_OFFSETOF(struct sljit_memory_fragment, memory))) {
432
+ ret = compiler->buf->memory + compiler->buf->used_size;
433
+ compiler->buf->used_size += size;
434
+ return ret;
435
+ }
436
+ new_frag = (struct sljit_memory_fragment*)SLJIT_MALLOC(BUF_SIZE);
437
+ PTR_FAIL_IF_NULL(new_frag);
438
+ new_frag->next = compiler->buf;
439
+ compiler->buf = new_frag;
440
+ new_frag->used_size = size;
441
+ return new_frag->memory;
442
+ }
443
+
444
+ static void* ensure_abuf(struct sljit_compiler *compiler, sljit_uw size)
445
+ {
446
+ sljit_ub *ret;
447
+ struct sljit_memory_fragment *new_frag;
448
+
449
+ SLJIT_ASSERT(size <= 256);
450
+ if (compiler->abuf->used_size + size <= (ABUF_SIZE - (sljit_uw)SLJIT_OFFSETOF(struct sljit_memory_fragment, memory))) {
451
+ ret = compiler->abuf->memory + compiler->abuf->used_size;
452
+ compiler->abuf->used_size += size;
453
+ return ret;
454
+ }
455
+ new_frag = (struct sljit_memory_fragment*)SLJIT_MALLOC(ABUF_SIZE);
456
+ PTR_FAIL_IF_NULL(new_frag);
457
+ new_frag->next = compiler->abuf;
458
+ compiler->abuf = new_frag;
459
+ new_frag->used_size = size;
460
+ return new_frag->memory;
461
+ }
462
+
463
+ SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, sljit_si size)
464
+ {
465
+ CHECK_ERROR_PTR();
466
+
467
+ #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
468
+ if (size <= 0 || size > 128)
469
+ return NULL;
470
+ size = (size + 7) & ~7;
471
+ #else
472
+ if (size <= 0 || size > 64)
473
+ return NULL;
474
+ size = (size + 3) & ~3;
475
+ #endif
476
+ return ensure_abuf(compiler, size);
477
+ }
478
+
479
+ static SLJIT_INLINE void reverse_buf(struct sljit_compiler *compiler)
480
+ {
481
+ struct sljit_memory_fragment *buf = compiler->buf;
482
+ struct sljit_memory_fragment *prev = NULL;
483
+ struct sljit_memory_fragment *tmp;
484
+
485
+ do {
486
+ tmp = buf->next;
487
+ buf->next = prev;
488
+ prev = buf;
489
+ buf = tmp;
490
+ } while (buf != NULL);
491
+
492
+ compiler->buf = prev;
493
+ }
494
+
495
+ static SLJIT_INLINE void set_label(struct sljit_label *label, struct sljit_compiler *compiler)
496
+ {
497
+ label->next = NULL;
498
+ label->size = compiler->size;
499
+ if (compiler->last_label)
500
+ compiler->last_label->next = label;
501
+ else
502
+ compiler->labels = label;
503
+ compiler->last_label = label;
504
+ }
505
+
506
+ static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_si flags)
507
+ {
508
+ jump->next = NULL;
509
+ jump->flags = flags;
510
+ if (compiler->last_jump)
511
+ compiler->last_jump->next = jump;
512
+ else
513
+ compiler->jumps = jump;
514
+ compiler->last_jump = jump;
515
+ }
516
+
517
+ static SLJIT_INLINE void set_const(struct sljit_const *const_, struct sljit_compiler *compiler)
518
+ {
519
+ const_->next = NULL;
520
+ const_->addr = compiler->size;
521
+ if (compiler->last_const)
522
+ compiler->last_const->next = const_;
523
+ else
524
+ compiler->consts = const_;
525
+ compiler->last_const = const_;
526
+ }
527
+
528
+ #define ADDRESSING_DEPENDS_ON(exp, reg) \
529
+ (((exp) & SLJIT_MEM) && (((exp) & 0xf) == reg || (((exp) >> 4) & 0xf) == reg))
530
+
531
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
532
+ #define FUNCTION_CHECK_OP() \
533
+ SLJIT_ASSERT(!GET_FLAGS(op) || !(op & SLJIT_KEEP_FLAGS)); \
534
+ switch (GET_OPCODE(op)) { \
535
+ case SLJIT_NOT: \
536
+ case SLJIT_CLZ: \
537
+ case SLJIT_AND: \
538
+ case SLJIT_OR: \
539
+ case SLJIT_XOR: \
540
+ case SLJIT_SHL: \
541
+ case SLJIT_LSHR: \
542
+ case SLJIT_ASHR: \
543
+ SLJIT_ASSERT(!(op & (SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C))); \
544
+ break; \
545
+ case SLJIT_NEG: \
546
+ SLJIT_ASSERT(!(op & (SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_C))); \
547
+ break; \
548
+ case SLJIT_MUL: \
549
+ SLJIT_ASSERT(!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_C))); \
550
+ break; \
551
+ case SLJIT_CMPD: \
552
+ SLJIT_ASSERT(!(op & (SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
553
+ SLJIT_ASSERT((op & (SLJIT_SET_E | SLJIT_SET_S))); \
554
+ break; \
555
+ case SLJIT_ADD: \
556
+ SLJIT_ASSERT(!(op & (SLJIT_SET_S | SLJIT_SET_U))); \
557
+ break; \
558
+ case SLJIT_SUB: \
559
+ break; \
560
+ case SLJIT_ADDC: \
561
+ case SLJIT_SUBC: \
562
+ SLJIT_ASSERT(!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O))); \
563
+ break; \
564
+ case SLJIT_BREAKPOINT: \
565
+ case SLJIT_NOP: \
566
+ case SLJIT_UMUL: \
567
+ case SLJIT_SMUL: \
568
+ case SLJIT_MOV: \
569
+ case SLJIT_MOV_P: \
570
+ case SLJIT_MOVU: \
571
+ case SLJIT_MOVU_P: \
572
+ /* Nothing allowed */ \
573
+ SLJIT_ASSERT(!(op & (SLJIT_INT_OP | SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
574
+ break; \
575
+ default: \
576
+ /* Only SLJIT_INT_OP or SLJIT_SINGLE_OP is allowed. */ \
577
+ SLJIT_ASSERT(!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
578
+ break; \
579
+ }
580
+
581
+ #define FUNCTION_CHECK_IS_REG(r) \
582
+ ((r) == SLJIT_UNUSED || \
583
+ ((r) >= SLJIT_SCRATCH_REG1 && (r) <= SLJIT_SCRATCH_REG1 - 1 + compiler->scratches) || \
584
+ ((r) >= SLJIT_SAVED_REG1 && (r) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds))
585
+
586
+ #define FUNCTION_CHECK_SRC(p, i) \
587
+ SLJIT_ASSERT(compiler->scratches != -1 && compiler->saveds != -1); \
588
+ if (FUNCTION_CHECK_IS_REG(p)) \
589
+ SLJIT_ASSERT((i) == 0 && (p) != SLJIT_UNUSED); \
590
+ else if ((p) == SLJIT_IMM) \
591
+ ; \
592
+ else if ((p) == (SLJIT_MEM1(SLJIT_LOCALS_REG))) \
593
+ SLJIT_ASSERT((i) >= 0 && (i) < compiler->logical_local_size); \
594
+ else if ((p) & SLJIT_MEM) { \
595
+ SLJIT_ASSERT(FUNCTION_CHECK_IS_REG((p) & 0xf)); \
596
+ if ((p) & 0xf0) { \
597
+ SLJIT_ASSERT(FUNCTION_CHECK_IS_REG(((p) >> 4) & 0xf)); \
598
+ SLJIT_ASSERT(!((i) & ~0x3)); \
599
+ } \
600
+ SLJIT_ASSERT(((p) >> 9) == 0); \
601
+ } \
602
+ else \
603
+ SLJIT_ASSERT_STOP();
604
+
605
+ #define FUNCTION_CHECK_DST(p, i) \
606
+ SLJIT_ASSERT(compiler->scratches != -1 && compiler->saveds != -1); \
607
+ if (FUNCTION_CHECK_IS_REG(p)) \
608
+ SLJIT_ASSERT((i) == 0); \
609
+ else if ((p) == (SLJIT_MEM1(SLJIT_LOCALS_REG))) \
610
+ SLJIT_ASSERT((i) >= 0 && (i) < compiler->logical_local_size); \
611
+ else if ((p) & SLJIT_MEM) { \
612
+ SLJIT_ASSERT(FUNCTION_CHECK_IS_REG((p) & 0xf)); \
613
+ if ((p) & 0xf0) { \
614
+ SLJIT_ASSERT(FUNCTION_CHECK_IS_REG(((p) >> 4) & 0xf)); \
615
+ SLJIT_ASSERT(!((i) & ~0x3)); \
616
+ } \
617
+ SLJIT_ASSERT(((p) >> 9) == 0); \
618
+ } \
619
+ else \
620
+ SLJIT_ASSERT_STOP();
621
+
622
+ #define FUNCTION_FCHECK(p, i) \
623
+ if ((p) >= SLJIT_FLOAT_REG1 && (p) <= SLJIT_FLOAT_REG6) \
624
+ SLJIT_ASSERT(i == 0); \
625
+ else if ((p) & SLJIT_MEM) { \
626
+ SLJIT_ASSERT(FUNCTION_CHECK_IS_REG((p) & 0xf)); \
627
+ if ((p) & 0xf0) { \
628
+ SLJIT_ASSERT(FUNCTION_CHECK_IS_REG(((p) >> 4) & 0xf)); \
629
+ SLJIT_ASSERT(((p) & 0xf0) != (SLJIT_LOCALS_REG << 4) && !(i & ~0x3)); \
630
+ } else \
631
+ SLJIT_ASSERT((((p) >> 4) & 0xf) == 0); \
632
+ SLJIT_ASSERT(((p) >> 9) == 0); \
633
+ } \
634
+ else \
635
+ SLJIT_ASSERT_STOP();
636
+
637
+ #define FUNCTION_CHECK_OP1() \
638
+ if (GET_OPCODE(op) >= SLJIT_MOVU && GET_OPCODE(op) <= SLJIT_MOVU_P) { \
639
+ SLJIT_ASSERT(!(src & SLJIT_MEM) || (src & 0xf) != SLJIT_LOCALS_REG); \
640
+ SLJIT_ASSERT(!(dst & SLJIT_MEM) || (dst & 0xf) != SLJIT_LOCALS_REG); \
641
+ if ((src & SLJIT_MEM) && (src & 0xf)) \
642
+ SLJIT_ASSERT((dst & 0xf) != (src & 0xf) && ((dst >> 4) & 0xf) != (src & 0xf)); \
643
+ }
644
+
645
+ #endif
646
+
647
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
648
+
649
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_compiler_verbose(struct sljit_compiler *compiler, FILE* verbose)
650
+ {
651
+ compiler->verbose = verbose;
652
+ }
653
+
654
+ static char* reg_names[] = {
655
+ (char*)"<noreg>", (char*)"t1", (char*)"t2", (char*)"t3",
656
+ (char*)"te1", (char*)"te2", (char*)"s1", (char*)"s2",
657
+ (char*)"s3", (char*)"se1", (char*)"se2", (char*)"lcr"
658
+ };
659
+
660
+ static char* freg_names[] = {
661
+ (char*)"<noreg>", (char*)"float_r1", (char*)"float_r2", (char*)"float_r3",
662
+ (char*)"float_r4", (char*)"float_r5", (char*)"float_r6"
663
+ };
664
+
665
+ #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
666
+ #ifdef _WIN64
667
+ # define SLJIT_PRINT_D "I64"
668
+ #else
669
+ # define SLJIT_PRINT_D "l"
670
+ #endif
671
+ #else
672
+ # define SLJIT_PRINT_D ""
673
+ #endif
674
+
675
+ #define sljit_verbose_param(p, i) \
676
+ if ((p) & SLJIT_IMM) \
677
+ fprintf(compiler->verbose, "#%" SLJIT_PRINT_D "d", (i)); \
678
+ else if ((p) & SLJIT_MEM) { \
679
+ if ((p) & 0xf) { \
680
+ if (i) { \
681
+ if (((p) >> 4) & 0xf) \
682
+ fprintf(compiler->verbose, "[%s + %s * %d]", reg_names[(p) & 0xF], reg_names[((p) >> 4)& 0xF], 1 << (i)); \
683
+ else \
684
+ fprintf(compiler->verbose, "[%s + #%" SLJIT_PRINT_D "d]", reg_names[(p) & 0xF], (i)); \
685
+ } \
686
+ else { \
687
+ if (((p) >> 4) & 0xf) \
688
+ fprintf(compiler->verbose, "[%s + %s]", reg_names[(p) & 0xF], reg_names[((p) >> 4)& 0xF]); \
689
+ else \
690
+ fprintf(compiler->verbose, "[%s]", reg_names[(p) & 0xF]); \
691
+ } \
692
+ } \
693
+ else \
694
+ fprintf(compiler->verbose, "[#%" SLJIT_PRINT_D "d]", (i)); \
695
+ } else \
696
+ fprintf(compiler->verbose, "%s", reg_names[p]);
697
+ #define sljit_verbose_fparam(p, i) \
698
+ if ((p) & SLJIT_MEM) { \
699
+ if ((p) & 0xf) { \
700
+ if (i) { \
701
+ if (((p) >> 4) & 0xf) \
702
+ fprintf(compiler->verbose, "[%s + %s * %d]", reg_names[(p) & 0xF], reg_names[((p) >> 4)& 0xF], 1 << (i)); \
703
+ else \
704
+ fprintf(compiler->verbose, "[%s + #%" SLJIT_PRINT_D "d]", reg_names[(p) & 0xF], (i)); \
705
+ } \
706
+ else { \
707
+ if (((p) >> 4) & 0xF) \
708
+ fprintf(compiler->verbose, "[%s + %s]", reg_names[(p) & 0xF], reg_names[((p) >> 4)& 0xF]); \
709
+ else \
710
+ fprintf(compiler->verbose, "[%s]", reg_names[(p) & 0xF]); \
711
+ } \
712
+ } \
713
+ else \
714
+ fprintf(compiler->verbose, "[#%" SLJIT_PRINT_D "d]", (i)); \
715
+ } else \
716
+ fprintf(compiler->verbose, "%s", freg_names[p]);
717
+
718
+ static SLJIT_CONST char* op_names[] = {
719
+ /* op0 */
720
+ (char*)"breakpoint", (char*)"nop",
721
+ (char*)"umul", (char*)"smul", (char*)"udiv", (char*)"sdiv",
722
+ /* op1 */
723
+ (char*)"mov", (char*)"mov.ub", (char*)"mov.sb", (char*)"mov.uh",
724
+ (char*)"mov.sh", (char*)"mov.ui", (char*)"mov.si", (char*)"mov.p",
725
+ (char*)"movu", (char*)"movu.ub", (char*)"movu.sb", (char*)"movu.uh",
726
+ (char*)"movu.sh", (char*)"movu.ui", (char*)"movu.si", (char*)"movu.p",
727
+ (char*)"not", (char*)"neg", (char*)"clz",
728
+ /* op2 */
729
+ (char*)"add", (char*)"addc", (char*)"sub", (char*)"subc",
730
+ (char*)"mul", (char*)"and", (char*)"or", (char*)"xor",
731
+ (char*)"shl", (char*)"lshr", (char*)"ashr",
732
+ /* fop1 */
733
+ (char*)"cmp", (char*)"mov", (char*)"neg", (char*)"abs",
734
+ /* fop2 */
735
+ (char*)"add", (char*)"sub", (char*)"mul", (char*)"div"
736
+ };
737
+
738
+ static char* jump_names[] = {
739
+ (char*)"c_equal", (char*)"c_not_equal",
740
+ (char*)"c_less", (char*)"c_greater_equal",
741
+ (char*)"c_greater", (char*)"c_less_equal",
742
+ (char*)"c_sig_less", (char*)"c_sig_greater_equal",
743
+ (char*)"c_sig_greater", (char*)"c_sig_less_equal",
744
+ (char*)"c_overflow", (char*)"c_not_overflow",
745
+ (char*)"c_mul_overflow", (char*)"c_mul_not_overflow",
746
+ (char*)"c_float_equal", (char*)"c_float_not_equal",
747
+ (char*)"c_float_less", (char*)"c_float_greater_equal",
748
+ (char*)"c_float_greater", (char*)"c_float_less_equal",
749
+ (char*)"c_float_unordered", (char*)"c_float_ordered",
750
+ (char*)"jump", (char*)"fast_call",
751
+ (char*)"call0", (char*)"call1", (char*)"call2", (char*)"call3"
752
+ };
753
+
754
+ #endif
755
+
756
+ /* --------------------------------------------------------------------- */
757
+ /* Arch dependent */
758
+ /* --------------------------------------------------------------------- */
759
+
760
+ static SLJIT_INLINE void check_sljit_generate_code(struct sljit_compiler *compiler)
761
+ {
762
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
763
+ struct sljit_jump *jump;
764
+ #endif
765
+ /* If debug and verbose are disabled, all arguments are unused. */
766
+ SLJIT_UNUSED_ARG(compiler);
767
+
768
+ SLJIT_ASSERT(compiler->size > 0);
769
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
770
+ jump = compiler->jumps;
771
+ while (jump) {
772
+ /* All jumps have target. */
773
+ SLJIT_ASSERT(jump->flags & (JUMP_LABEL | JUMP_ADDR));
774
+ jump = jump->next;
775
+ }
776
+ #endif
777
+ }
778
+
779
+ static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si scratches, sljit_si saveds, sljit_si local_size)
780
+ {
781
+ /* If debug and verbose are disabled, all arguments are unused. */
782
+ SLJIT_UNUSED_ARG(compiler);
783
+ SLJIT_UNUSED_ARG(args);
784
+ SLJIT_UNUSED_ARG(scratches);
785
+ SLJIT_UNUSED_ARG(saveds);
786
+ SLJIT_UNUSED_ARG(local_size);
787
+
788
+ SLJIT_ASSERT(args >= 0 && args <= 3);
789
+ SLJIT_ASSERT(scratches >= 0 && scratches <= SLJIT_NO_TMP_REGISTERS);
790
+ SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
791
+ SLJIT_ASSERT(args <= saveds);
792
+ SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
793
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
794
+ if (SLJIT_UNLIKELY(!!compiler->verbose))
795
+ fprintf(compiler->verbose, " enter args=%d scratches=%d saveds=%d local_size=%d\n", args, scratches, saveds, local_size);
796
+ #endif
797
+ }
798
+
799
+ static SLJIT_INLINE void check_sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si scratches, sljit_si saveds, sljit_si local_size)
800
+ {
801
+ /* If debug and verbose are disabled, all arguments are unused. */
802
+ SLJIT_UNUSED_ARG(compiler);
803
+ SLJIT_UNUSED_ARG(args);
804
+ SLJIT_UNUSED_ARG(scratches);
805
+ SLJIT_UNUSED_ARG(saveds);
806
+ SLJIT_UNUSED_ARG(local_size);
807
+
808
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
809
+ if (SLJIT_UNLIKELY(compiler->skip_checks)) {
810
+ compiler->skip_checks = 0;
811
+ return;
812
+ }
813
+ #endif
814
+
815
+ SLJIT_ASSERT(args >= 0 && args <= 3);
816
+ SLJIT_ASSERT(scratches >= 0 && scratches <= SLJIT_NO_TMP_REGISTERS);
817
+ SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
818
+ SLJIT_ASSERT(args <= saveds);
819
+ SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
820
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
821
+ if (SLJIT_UNLIKELY(!!compiler->verbose))
822
+ fprintf(compiler->verbose, " set_context args=%d scratches=%d saveds=%d local_size=%d\n", args, scratches, saveds, local_size);
823
+ #endif
824
+ }
825
+
826
+ static SLJIT_INLINE void check_sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
827
+ {
828
+ /* If debug and verbose are disabled, all arguments are unused. */
829
+ SLJIT_UNUSED_ARG(compiler);
830
+ SLJIT_UNUSED_ARG(op);
831
+ SLJIT_UNUSED_ARG(src);
832
+ SLJIT_UNUSED_ARG(srcw);
833
+
834
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
835
+ if (op != SLJIT_UNUSED) {
836
+ SLJIT_ASSERT(op >= SLJIT_MOV && op <= SLJIT_MOV_P);
837
+ FUNCTION_CHECK_SRC(src, srcw);
838
+ }
839
+ else
840
+ SLJIT_ASSERT(src == 0 && srcw == 0);
841
+ #endif
842
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
843
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
844
+ if (op == SLJIT_UNUSED)
845
+ fprintf(compiler->verbose, " return\n");
846
+ else {
847
+ fprintf(compiler->verbose, " return %s ", op_names[op]);
848
+ sljit_verbose_param(src, srcw);
849
+ fprintf(compiler->verbose, "\n");
850
+ }
851
+ }
852
+ #endif
853
+ }
854
+
855
+ static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
856
+ {
857
+ /* If debug and verbose are disabled, all arguments are unused. */
858
+ SLJIT_UNUSED_ARG(compiler);
859
+ SLJIT_UNUSED_ARG(dst);
860
+ SLJIT_UNUSED_ARG(dstw);
861
+
862
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
863
+ FUNCTION_CHECK_DST(dst, dstw);
864
+ #endif
865
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
866
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
867
+ fprintf(compiler->verbose, " fast_enter ");
868
+ sljit_verbose_param(dst, dstw);
869
+ fprintf(compiler->verbose, "\n");
870
+ }
871
+ #endif
872
+ }
873
+
874
+ static SLJIT_INLINE void check_sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
875
+ {
876
+ /* If debug and verbose are disabled, all arguments are unused. */
877
+ SLJIT_UNUSED_ARG(compiler);
878
+ SLJIT_UNUSED_ARG(src);
879
+ SLJIT_UNUSED_ARG(srcw);
880
+
881
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
882
+ FUNCTION_CHECK_SRC(src, srcw);
883
+ #endif
884
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
885
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
886
+ fprintf(compiler->verbose, " fast_return ");
887
+ sljit_verbose_param(src, srcw);
888
+ fprintf(compiler->verbose, "\n");
889
+ }
890
+ #endif
891
+ }
892
+
893
+ static SLJIT_INLINE void check_sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
894
+ {
895
+ /* If debug and verbose are disabled, all arguments are unused. */
896
+ SLJIT_UNUSED_ARG(compiler);
897
+ SLJIT_UNUSED_ARG(op);
898
+
899
+ SLJIT_ASSERT((op >= SLJIT_BREAKPOINT && op <= SLJIT_SMUL)
900
+ || ((op & ~SLJIT_INT_OP) >= SLJIT_UDIV && (op & ~SLJIT_INT_OP) <= SLJIT_SDIV));
901
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
902
+ if (SLJIT_UNLIKELY(!!compiler->verbose))
903
+ fprintf(compiler->verbose, " %s%s\n", !(op & SLJIT_INT_OP) ? "" : "i", op_names[GET_OPCODE(op)]);
904
+ #endif
905
+ }
906
+
907
+ static SLJIT_INLINE void check_sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
908
+ sljit_si dst, sljit_sw dstw,
909
+ sljit_si src, sljit_sw srcw)
910
+ {
911
+ /* If debug and verbose are disabled, all arguments are unused. */
912
+ SLJIT_UNUSED_ARG(compiler);
913
+ SLJIT_UNUSED_ARG(op);
914
+ SLJIT_UNUSED_ARG(dst);
915
+ SLJIT_UNUSED_ARG(dstw);
916
+ SLJIT_UNUSED_ARG(src);
917
+ SLJIT_UNUSED_ARG(srcw);
918
+
919
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
920
+ if (SLJIT_UNLIKELY(compiler->skip_checks)) {
921
+ compiler->skip_checks = 0;
922
+ return;
923
+ }
924
+ #endif
925
+
926
+ SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_CLZ);
927
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
928
+ FUNCTION_CHECK_OP();
929
+ FUNCTION_CHECK_SRC(src, srcw);
930
+ FUNCTION_CHECK_DST(dst, dstw);
931
+ FUNCTION_CHECK_OP1();
932
+ #endif
933
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
934
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
935
+ fprintf(compiler->verbose, " %s%s%s%s%s%s%s%s ", !(op & SLJIT_INT_OP) ? "" : "i", op_names[GET_OPCODE(op)],
936
+ !(op & SLJIT_SET_E) ? "" : ".e", !(op & SLJIT_SET_S) ? "" : ".s", !(op & SLJIT_SET_U) ? "" : ".u",
937
+ !(op & SLJIT_SET_O) ? "" : ".o", !(op & SLJIT_SET_C) ? "" : ".c", !(op & SLJIT_KEEP_FLAGS) ? "" : ".k");
938
+ sljit_verbose_param(dst, dstw);
939
+ fprintf(compiler->verbose, ", ");
940
+ sljit_verbose_param(src, srcw);
941
+ fprintf(compiler->verbose, "\n");
942
+ }
943
+ #endif
944
+ }
945
+
946
+ static SLJIT_INLINE void check_sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
947
+ sljit_si dst, sljit_sw dstw,
948
+ sljit_si src1, sljit_sw src1w,
949
+ sljit_si src2, sljit_sw src2w)
950
+ {
951
+ /* If debug and verbose are disabled, all arguments are unused. */
952
+ SLJIT_UNUSED_ARG(compiler);
953
+ SLJIT_UNUSED_ARG(op);
954
+ SLJIT_UNUSED_ARG(dst);
955
+ SLJIT_UNUSED_ARG(dstw);
956
+ SLJIT_UNUSED_ARG(src1);
957
+ SLJIT_UNUSED_ARG(src1w);
958
+ SLJIT_UNUSED_ARG(src2);
959
+ SLJIT_UNUSED_ARG(src2w);
960
+
961
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
962
+ if (SLJIT_UNLIKELY(compiler->skip_checks)) {
963
+ compiler->skip_checks = 0;
964
+ return;
965
+ }
966
+ #endif
967
+
968
+ SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_ADD && GET_OPCODE(op) <= SLJIT_ASHR);
969
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
970
+ FUNCTION_CHECK_OP();
971
+ FUNCTION_CHECK_SRC(src1, src1w);
972
+ FUNCTION_CHECK_SRC(src2, src2w);
973
+ FUNCTION_CHECK_DST(dst, dstw);
974
+ #endif
975
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
976
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
977
+ fprintf(compiler->verbose, " %s%s%s%s%s%s%s%s ", !(op & SLJIT_INT_OP) ? "" : "i", op_names[GET_OPCODE(op)],
978
+ !(op & SLJIT_SET_E) ? "" : ".e", !(op & SLJIT_SET_S) ? "" : ".s", !(op & SLJIT_SET_U) ? "" : ".u",
979
+ !(op & SLJIT_SET_O) ? "" : ".o", !(op & SLJIT_SET_C) ? "" : ".c", !(op & SLJIT_KEEP_FLAGS) ? "" : ".k");
980
+ sljit_verbose_param(dst, dstw);
981
+ fprintf(compiler->verbose, ", ");
982
+ sljit_verbose_param(src1, src1w);
983
+ fprintf(compiler->verbose, ", ");
984
+ sljit_verbose_param(src2, src2w);
985
+ fprintf(compiler->verbose, "\n");
986
+ }
987
+ #endif
988
+ }
989
+
990
+ static SLJIT_INLINE void check_sljit_get_register_index(sljit_si reg)
991
+ {
992
+ SLJIT_UNUSED_ARG(reg);
993
+ SLJIT_ASSERT(reg > 0 && reg <= SLJIT_NO_REGISTERS);
994
+ }
995
+
996
+ static SLJIT_INLINE void check_sljit_emit_op_custom(struct sljit_compiler *compiler,
997
+ void *instruction, sljit_si size)
998
+ {
999
+ SLJIT_UNUSED_ARG(compiler);
1000
+ SLJIT_UNUSED_ARG(instruction);
1001
+ SLJIT_UNUSED_ARG(size);
1002
+ SLJIT_ASSERT(instruction);
1003
+ }
1004
+
1005
+ static SLJIT_INLINE void check_sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
1006
+ sljit_si dst, sljit_sw dstw,
1007
+ sljit_si src, sljit_sw srcw)
1008
+ {
1009
+ /* If debug and verbose are disabled, all arguments are unused. */
1010
+ SLJIT_UNUSED_ARG(compiler);
1011
+ SLJIT_UNUSED_ARG(op);
1012
+ SLJIT_UNUSED_ARG(dst);
1013
+ SLJIT_UNUSED_ARG(dstw);
1014
+ SLJIT_UNUSED_ARG(src);
1015
+ SLJIT_UNUSED_ARG(srcw);
1016
+
1017
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1018
+ if (SLJIT_UNLIKELY(compiler->skip_checks)) {
1019
+ compiler->skip_checks = 0;
1020
+ return;
1021
+ }
1022
+ #endif
1023
+
1024
+ SLJIT_ASSERT(sljit_is_fpu_available());
1025
+ SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_CMPD && GET_OPCODE(op) <= SLJIT_ABSD);
1026
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1027
+ FUNCTION_CHECK_OP();
1028
+ FUNCTION_FCHECK(src, srcw);
1029
+ FUNCTION_FCHECK(dst, dstw);
1030
+ #endif
1031
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1032
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1033
+ fprintf(compiler->verbose, " %s%s%s%s ", op_names[GET_OPCODE(op)], (op & SLJIT_SINGLE_OP) ? "s" : "d",
1034
+ !(op & SLJIT_SET_E) ? "" : ".e", !(op & SLJIT_SET_S) ? "" : ".s");
1035
+ sljit_verbose_fparam(dst, dstw);
1036
+ fprintf(compiler->verbose, ", ");
1037
+ sljit_verbose_fparam(src, srcw);
1038
+ fprintf(compiler->verbose, "\n");
1039
+ }
1040
+ #endif
1041
+ }
1042
+
1043
+ static SLJIT_INLINE void check_sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
1044
+ sljit_si dst, sljit_sw dstw,
1045
+ sljit_si src1, sljit_sw src1w,
1046
+ sljit_si src2, sljit_sw src2w)
1047
+ {
1048
+ /* If debug and verbose are disabled, all arguments are unused. */
1049
+ SLJIT_UNUSED_ARG(compiler);
1050
+ SLJIT_UNUSED_ARG(op);
1051
+ SLJIT_UNUSED_ARG(dst);
1052
+ SLJIT_UNUSED_ARG(dstw);
1053
+ SLJIT_UNUSED_ARG(src1);
1054
+ SLJIT_UNUSED_ARG(src1w);
1055
+ SLJIT_UNUSED_ARG(src2);
1056
+ SLJIT_UNUSED_ARG(src2w);
1057
+
1058
+ SLJIT_ASSERT(sljit_is_fpu_available());
1059
+ SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_ADDD && GET_OPCODE(op) <= SLJIT_DIVD);
1060
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1061
+ FUNCTION_CHECK_OP();
1062
+ FUNCTION_FCHECK(src1, src1w);
1063
+ FUNCTION_FCHECK(src2, src2w);
1064
+ FUNCTION_FCHECK(dst, dstw);
1065
+ #endif
1066
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1067
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1068
+ fprintf(compiler->verbose, " %s%s ", op_names[GET_OPCODE(op)], (op & SLJIT_SINGLE_OP) ? "s" : "d");
1069
+ sljit_verbose_fparam(dst, dstw);
1070
+ fprintf(compiler->verbose, ", ");
1071
+ sljit_verbose_fparam(src1, src1w);
1072
+ fprintf(compiler->verbose, ", ");
1073
+ sljit_verbose_fparam(src2, src2w);
1074
+ fprintf(compiler->verbose, "\n");
1075
+ }
1076
+ #endif
1077
+ }
1078
+
1079
+ static SLJIT_INLINE void check_sljit_emit_label(struct sljit_compiler *compiler)
1080
+ {
1081
+ /* If debug and verbose are disabled, all arguments are unused. */
1082
+ SLJIT_UNUSED_ARG(compiler);
1083
+
1084
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1085
+ if (SLJIT_UNLIKELY(!!compiler->verbose))
1086
+ fprintf(compiler->verbose, "label:\n");
1087
+ #endif
1088
+ }
1089
+
1090
+ static SLJIT_INLINE void check_sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
1091
+ {
1092
+ /* If debug and verbose are disabled, all arguments are unused. */
1093
+ SLJIT_UNUSED_ARG(compiler);
1094
+ SLJIT_UNUSED_ARG(type);
1095
+
1096
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1097
+ if (SLJIT_UNLIKELY(compiler->skip_checks)) {
1098
+ compiler->skip_checks = 0;
1099
+ return;
1100
+ }
1101
+ #endif
1102
+
1103
+ SLJIT_ASSERT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP)));
1104
+ SLJIT_ASSERT((type & 0xff) >= SLJIT_C_EQUAL && (type & 0xff) <= SLJIT_CALL3);
1105
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1106
+ if (SLJIT_UNLIKELY(!!compiler->verbose))
1107
+ fprintf(compiler->verbose, " jump%s<%s>\n", !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", jump_names[type & 0xff]);
1108
+ #endif
1109
+ }
1110
+
1111
+ static SLJIT_INLINE void check_sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
1112
+ sljit_si src1, sljit_sw src1w,
1113
+ sljit_si src2, sljit_sw src2w)
1114
+ {
1115
+ SLJIT_UNUSED_ARG(compiler);
1116
+ SLJIT_UNUSED_ARG(type);
1117
+ SLJIT_UNUSED_ARG(src1);
1118
+ SLJIT_UNUSED_ARG(src1w);
1119
+ SLJIT_UNUSED_ARG(src2);
1120
+ SLJIT_UNUSED_ARG(src2w);
1121
+
1122
+ SLJIT_ASSERT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_INT_OP)));
1123
+ SLJIT_ASSERT((type & 0xff) >= SLJIT_C_EQUAL && (type & 0xff) <= SLJIT_C_SIG_LESS_EQUAL);
1124
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1125
+ FUNCTION_CHECK_SRC(src1, src1w);
1126
+ FUNCTION_CHECK_SRC(src2, src2w);
1127
+ #endif
1128
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1129
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1130
+ fprintf(compiler->verbose, " %scmp%s<%s> ", !(type & SLJIT_INT_OP) ? "" : "i", !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", jump_names[type & 0xff]);
1131
+ sljit_verbose_param(src1, src1w);
1132
+ fprintf(compiler->verbose, ", ");
1133
+ sljit_verbose_param(src2, src2w);
1134
+ fprintf(compiler->verbose, "\n");
1135
+ }
1136
+ #endif
1137
+ }
1138
+
1139
+ static SLJIT_INLINE void check_sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
1140
+ sljit_si src1, sljit_sw src1w,
1141
+ sljit_si src2, sljit_sw src2w)
1142
+ {
1143
+ SLJIT_UNUSED_ARG(compiler);
1144
+ SLJIT_UNUSED_ARG(type);
1145
+ SLJIT_UNUSED_ARG(src1);
1146
+ SLJIT_UNUSED_ARG(src1w);
1147
+ SLJIT_UNUSED_ARG(src2);
1148
+ SLJIT_UNUSED_ARG(src2w);
1149
+
1150
+ SLJIT_ASSERT(sljit_is_fpu_available());
1151
+ SLJIT_ASSERT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_SINGLE_OP)));
1152
+ SLJIT_ASSERT((type & 0xff) >= SLJIT_C_FLOAT_EQUAL && (type & 0xff) <= SLJIT_C_FLOAT_ORDERED);
1153
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1154
+ FUNCTION_FCHECK(src1, src1w);
1155
+ FUNCTION_FCHECK(src2, src2w);
1156
+ #endif
1157
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1158
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1159
+ fprintf(compiler->verbose, " %scmp%s<%s> ", (type & SLJIT_SINGLE_OP) ? "s" : "d",
1160
+ !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", jump_names[type & 0xff]);
1161
+ sljit_verbose_fparam(src1, src1w);
1162
+ fprintf(compiler->verbose, ", ");
1163
+ sljit_verbose_fparam(src2, src2w);
1164
+ fprintf(compiler->verbose, "\n");
1165
+ }
1166
+ #endif
1167
+ }
1168
+
1169
+ static SLJIT_INLINE void check_sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
1170
+ {
1171
+ /* If debug and verbose are disabled, all arguments are unused. */
1172
+ SLJIT_UNUSED_ARG(compiler);
1173
+ SLJIT_UNUSED_ARG(type);
1174
+ SLJIT_UNUSED_ARG(src);
1175
+ SLJIT_UNUSED_ARG(srcw);
1176
+
1177
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1178
+ if (SLJIT_UNLIKELY(compiler->skip_checks)) {
1179
+ compiler->skip_checks = 0;
1180
+ return;
1181
+ }
1182
+ #endif
1183
+
1184
+ SLJIT_ASSERT(type >= SLJIT_JUMP && type <= SLJIT_CALL3);
1185
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1186
+ FUNCTION_CHECK_SRC(src, srcw);
1187
+ #endif
1188
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1189
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1190
+ fprintf(compiler->verbose, " ijump<%s> ", jump_names[type]);
1191
+ sljit_verbose_param(src, srcw);
1192
+ fprintf(compiler->verbose, "\n");
1193
+ }
1194
+ #endif
1195
+ }
1196
+
1197
+ static SLJIT_INLINE void check_sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_si op,
1198
+ sljit_si dst, sljit_sw dstw,
1199
+ sljit_si src, sljit_sw srcw,
1200
+ sljit_si type)
1201
+ {
1202
+ /* If debug and verbose are disabled, all arguments are unused. */
1203
+ SLJIT_UNUSED_ARG(compiler);
1204
+ SLJIT_UNUSED_ARG(op);
1205
+ SLJIT_UNUSED_ARG(dst);
1206
+ SLJIT_UNUSED_ARG(dstw);
1207
+ SLJIT_UNUSED_ARG(src);
1208
+ SLJIT_UNUSED_ARG(srcw);
1209
+ SLJIT_UNUSED_ARG(type);
1210
+
1211
+ SLJIT_ASSERT(type >= SLJIT_C_EQUAL && type < SLJIT_JUMP);
1212
+ SLJIT_ASSERT(op == SLJIT_MOV || GET_OPCODE(op) == SLJIT_MOV_UI || GET_OPCODE(op) == SLJIT_MOV_SI
1213
+ || (GET_OPCODE(op) >= SLJIT_AND && GET_OPCODE(op) <= SLJIT_XOR));
1214
+ SLJIT_ASSERT((op & (SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C)) == 0);
1215
+ SLJIT_ASSERT((op & (SLJIT_SET_E | SLJIT_KEEP_FLAGS)) != (SLJIT_SET_E | SLJIT_KEEP_FLAGS));
1216
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1217
+ if (GET_OPCODE(op) < SLJIT_ADD) {
1218
+ SLJIT_ASSERT(src == SLJIT_UNUSED && srcw == 0);
1219
+ } else {
1220
+ SLJIT_ASSERT(src == dst && srcw == dstw);
1221
+ }
1222
+ FUNCTION_CHECK_DST(dst, dstw);
1223
+ #endif
1224
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1225
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1226
+ fprintf(compiler->verbose, " op_flags<%s%s%s%s> ", !(op & SLJIT_INT_OP) ? "" : "i",
1227
+ op_names[GET_OPCODE(op)], !(op & SLJIT_SET_E) ? "" : ".e", !(op & SLJIT_KEEP_FLAGS) ? "" : ".k");
1228
+ sljit_verbose_param(dst, dstw);
1229
+ if (src != SLJIT_UNUSED) {
1230
+ fprintf(compiler->verbose, ", ");
1231
+ sljit_verbose_param(src, srcw);
1232
+ }
1233
+ fprintf(compiler->verbose, ", <%s>\n", jump_names[type]);
1234
+ }
1235
+ #endif
1236
+ }
1237
+
1238
+ static SLJIT_INLINE void check_sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
1239
+ {
1240
+ SLJIT_UNUSED_ARG(compiler);
1241
+ SLJIT_UNUSED_ARG(dst);
1242
+ SLJIT_UNUSED_ARG(dstw);
1243
+ SLJIT_UNUSED_ARG(offset);
1244
+
1245
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1246
+ FUNCTION_CHECK_DST(dst, dstw);
1247
+ #endif
1248
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1249
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1250
+ fprintf(compiler->verbose, " local_base ");
1251
+ sljit_verbose_param(dst, dstw);
1252
+ fprintf(compiler->verbose, ", #%" SLJIT_PRINT_D "d\n", offset);
1253
+ }
1254
+ #endif
1255
+ }
1256
+
1257
+ static SLJIT_INLINE void check_sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
1258
+ {
1259
+ /* If debug and verbose are disabled, all arguments are unused. */
1260
+ SLJIT_UNUSED_ARG(compiler);
1261
+ SLJIT_UNUSED_ARG(dst);
1262
+ SLJIT_UNUSED_ARG(dstw);
1263
+ SLJIT_UNUSED_ARG(init_value);
1264
+
1265
+ #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
1266
+ FUNCTION_CHECK_DST(dst, dstw);
1267
+ #endif
1268
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1269
+ if (SLJIT_UNLIKELY(!!compiler->verbose)) {
1270
+ fprintf(compiler->verbose, " const ");
1271
+ sljit_verbose_param(dst, dstw);
1272
+ fprintf(compiler->verbose, ", #%" SLJIT_PRINT_D "d\n", init_value);
1273
+ }
1274
+ #endif
1275
+ }
1276
+
1277
+ static SLJIT_INLINE sljit_si emit_mov_before_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
1278
+ {
1279
+ /* Return if don't need to do anything. */
1280
+ if (op == SLJIT_UNUSED)
1281
+ return SLJIT_SUCCESS;
1282
+
1283
+ #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
1284
+ /* At the moment the pointer size is always equal to sljit_sw. May be changed in the future. */
1285
+ if (src == SLJIT_RETURN_REG && (op == SLJIT_MOV || op == SLJIT_MOV_P))
1286
+ return SLJIT_SUCCESS;
1287
+ #else
1288
+ if (src == SLJIT_RETURN_REG && (op == SLJIT_MOV || op == SLJIT_MOV_UI || op == SLJIT_MOV_SI || op == SLJIT_MOV_P))
1289
+ return SLJIT_SUCCESS;
1290
+ #endif
1291
+
1292
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1293
+ compiler->skip_checks = 1;
1294
+ #endif
1295
+ return sljit_emit_op1(compiler, op, SLJIT_RETURN_REG, 0, src, srcw);
1296
+ }
1297
+
1298
+ /* CPU description section */
1299
+
1300
+ #if (defined SLJIT_32BIT_ARCHITECTURE && SLJIT_32BIT_ARCHITECTURE)
1301
+ #define SLJIT_CPUINFO_PART1 " 32bit ("
1302
+ #elif (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
1303
+ #define SLJIT_CPUINFO_PART1 " 64bit ("
1304
+ #else
1305
+ #error "Internal error: CPU type info missing"
1306
+ #endif
1307
+
1308
+ #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
1309
+ #define SLJIT_CPUINFO_PART2 "little endian + "
1310
+ #elif (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN)
1311
+ #define SLJIT_CPUINFO_PART2 "big endian + "
1312
+ #else
1313
+ #error "Internal error: CPU type info missing"
1314
+ #endif
1315
+
1316
+ #if (defined SLJIT_UNALIGNED && SLJIT_UNALIGNED)
1317
+ #define SLJIT_CPUINFO_PART3 "unaligned)"
1318
+ #else
1319
+ #define SLJIT_CPUINFO_PART3 "aligned)"
1320
+ #endif
1321
+
1322
+ #define SLJIT_CPUINFO SLJIT_CPUINFO_PART1 SLJIT_CPUINFO_PART2 SLJIT_CPUINFO_PART3
1323
+
1324
+ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
1325
+ # include "sljitNativeX86_common.c"
1326
+ #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
1327
+ # include "sljitNativeX86_common.c"
1328
+ #elif (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
1329
+ # include "sljitNativeARM_v5.c"
1330
+ #elif (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
1331
+ # include "sljitNativeARM_v5.c"
1332
+ #elif (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
1333
+ # include "sljitNativeARM_Thumb2.c"
1334
+ #elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
1335
+ # include "sljitNativePPC_common.c"
1336
+ #elif (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1337
+ # include "sljitNativePPC_common.c"
1338
+ #elif (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
1339
+ # include "sljitNativeMIPS_common.c"
1340
+ #elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
1341
+ # include "sljitNativeSPARC_common.c"
1342
+ #endif
1343
+
1344
+ #if !(defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
1345
+
1346
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
1347
+ sljit_si src1, sljit_sw src1w,
1348
+ sljit_si src2, sljit_sw src2w)
1349
+ {
1350
+ /* Default compare for most architectures. */
1351
+ sljit_si flags, tmp_src, condition;
1352
+ sljit_sw tmp_srcw;
1353
+
1354
+ CHECK_ERROR_PTR();
1355
+ check_sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w);
1356
+
1357
+ condition = type & 0xff;
1358
+ if (SLJIT_UNLIKELY((src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM))) {
1359
+ /* Immediate is prefered as second argument by most architectures. */
1360
+ switch (condition) {
1361
+ case SLJIT_C_LESS:
1362
+ condition = SLJIT_C_GREATER;
1363
+ break;
1364
+ case SLJIT_C_GREATER_EQUAL:
1365
+ condition = SLJIT_C_LESS_EQUAL;
1366
+ break;
1367
+ case SLJIT_C_GREATER:
1368
+ condition = SLJIT_C_LESS;
1369
+ break;
1370
+ case SLJIT_C_LESS_EQUAL:
1371
+ condition = SLJIT_C_GREATER_EQUAL;
1372
+ break;
1373
+ case SLJIT_C_SIG_LESS:
1374
+ condition = SLJIT_C_SIG_GREATER;
1375
+ break;
1376
+ case SLJIT_C_SIG_GREATER_EQUAL:
1377
+ condition = SLJIT_C_SIG_LESS_EQUAL;
1378
+ break;
1379
+ case SLJIT_C_SIG_GREATER:
1380
+ condition = SLJIT_C_SIG_LESS;
1381
+ break;
1382
+ case SLJIT_C_SIG_LESS_EQUAL:
1383
+ condition = SLJIT_C_SIG_GREATER_EQUAL;
1384
+ break;
1385
+ }
1386
+ type = condition | (type & (SLJIT_INT_OP | SLJIT_REWRITABLE_JUMP));
1387
+ tmp_src = src1;
1388
+ src1 = src2;
1389
+ src2 = tmp_src;
1390
+ tmp_srcw = src1w;
1391
+ src1w = src2w;
1392
+ src2w = tmp_srcw;
1393
+ }
1394
+
1395
+ if (condition <= SLJIT_C_NOT_ZERO)
1396
+ flags = SLJIT_SET_E;
1397
+ else if (condition <= SLJIT_C_LESS_EQUAL)
1398
+ flags = SLJIT_SET_U;
1399
+ else
1400
+ flags = SLJIT_SET_S;
1401
+
1402
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1403
+ compiler->skip_checks = 1;
1404
+ #endif
1405
+ PTR_FAIL_IF(sljit_emit_op2(compiler, SLJIT_SUB | flags | (type & SLJIT_INT_OP),
1406
+ SLJIT_UNUSED, 0, src1, src1w, src2, src2w));
1407
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1408
+ compiler->skip_checks = 1;
1409
+ #endif
1410
+ return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));
1411
+ }
1412
+
1413
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
1414
+ sljit_si src1, sljit_sw src1w,
1415
+ sljit_si src2, sljit_sw src2w)
1416
+ {
1417
+ sljit_si flags, condition;
1418
+
1419
+ check_sljit_emit_fcmp(compiler, type, src1, src1w, src2, src2w);
1420
+
1421
+ condition = type & 0xff;
1422
+ flags = (condition <= SLJIT_C_FLOAT_NOT_EQUAL) ? SLJIT_SET_E : SLJIT_SET_S;
1423
+ if (type & SLJIT_SINGLE_OP)
1424
+ flags |= SLJIT_SINGLE_OP;
1425
+
1426
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1427
+ compiler->skip_checks = 1;
1428
+ #endif
1429
+ sljit_emit_fop1(compiler, SLJIT_CMPD | flags, src1, src1w, src2, src2w);
1430
+
1431
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1432
+ compiler->skip_checks = 1;
1433
+ #endif
1434
+ return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));
1435
+ }
1436
+
1437
+ #endif
1438
+
1439
+ #if !(defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) && !(defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
1440
+
1441
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
1442
+ {
1443
+ CHECK_ERROR();
1444
+ check_sljit_get_local_base(compiler, dst, dstw, offset);
1445
+
1446
+ ADJUST_LOCAL_OFFSET(SLJIT_MEM1(SLJIT_LOCALS_REG), offset);
1447
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
1448
+ compiler->skip_checks = 1;
1449
+ #endif
1450
+ if (offset != 0)
1451
+ return sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_KEEP_FLAGS, dst, dstw, SLJIT_LOCALS_REG, 0, SLJIT_IMM, offset);
1452
+ return sljit_emit_op1(compiler, SLJIT_MOV, dst, dstw, SLJIT_LOCALS_REG, 0);
1453
+ }
1454
+
1455
+ #endif
1456
+
1457
+ #else /* SLJIT_CONFIG_UNSUPPORTED */
1458
+
1459
+ /* Empty function bodies for those machines, which are not (yet) supported. */
1460
+
1461
+ SLJIT_API_FUNC_ATTRIBUTE SLJIT_CONST char* sljit_get_platform_name(void)
1462
+ {
1463
+ return "unsupported";
1464
+ }
1465
+
1466
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void)
1467
+ {
1468
+ SLJIT_ASSERT_STOP();
1469
+ return NULL;
1470
+ }
1471
+
1472
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_compiler(struct sljit_compiler *compiler)
1473
+ {
1474
+ SLJIT_UNUSED_ARG(compiler);
1475
+ SLJIT_ASSERT_STOP();
1476
+ }
1477
+
1478
+ SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, sljit_si size)
1479
+ {
1480
+ SLJIT_UNUSED_ARG(compiler);
1481
+ SLJIT_UNUSED_ARG(size);
1482
+ SLJIT_ASSERT_STOP();
1483
+ return NULL;
1484
+ }
1485
+
1486
+ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
1487
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_compiler_verbose(struct sljit_compiler *compiler, FILE* verbose)
1488
+ {
1489
+ SLJIT_UNUSED_ARG(compiler);
1490
+ SLJIT_UNUSED_ARG(verbose);
1491
+ SLJIT_ASSERT_STOP();
1492
+ }
1493
+ #endif
1494
+
1495
+ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
1496
+ {
1497
+ SLJIT_UNUSED_ARG(compiler);
1498
+ SLJIT_ASSERT_STOP();
1499
+ return NULL;
1500
+ }
1501
+
1502
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code)
1503
+ {
1504
+ SLJIT_UNUSED_ARG(code);
1505
+ SLJIT_ASSERT_STOP();
1506
+ }
1507
+
1508
+ 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)
1509
+ {
1510
+ SLJIT_UNUSED_ARG(compiler);
1511
+ SLJIT_UNUSED_ARG(args);
1512
+ SLJIT_UNUSED_ARG(scratches);
1513
+ SLJIT_UNUSED_ARG(saveds);
1514
+ SLJIT_UNUSED_ARG(local_size);
1515
+ SLJIT_ASSERT_STOP();
1516
+ return SLJIT_ERR_UNSUPPORTED;
1517
+ }
1518
+
1519
+ 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)
1520
+ {
1521
+ SLJIT_UNUSED_ARG(compiler);
1522
+ SLJIT_UNUSED_ARG(args);
1523
+ SLJIT_UNUSED_ARG(scratches);
1524
+ SLJIT_UNUSED_ARG(saveds);
1525
+ SLJIT_UNUSED_ARG(local_size);
1526
+ SLJIT_ASSERT_STOP();
1527
+ }
1528
+
1529
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
1530
+ {
1531
+ SLJIT_UNUSED_ARG(compiler);
1532
+ SLJIT_UNUSED_ARG(op);
1533
+ SLJIT_UNUSED_ARG(src);
1534
+ SLJIT_UNUSED_ARG(srcw);
1535
+ SLJIT_ASSERT_STOP();
1536
+ return SLJIT_ERR_UNSUPPORTED;
1537
+ }
1538
+
1539
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
1540
+ {
1541
+ SLJIT_UNUSED_ARG(compiler);
1542
+ SLJIT_UNUSED_ARG(dst);
1543
+ SLJIT_UNUSED_ARG(dstw);
1544
+ SLJIT_ASSERT_STOP();
1545
+ return SLJIT_ERR_UNSUPPORTED;
1546
+ }
1547
+
1548
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
1549
+ {
1550
+ SLJIT_UNUSED_ARG(compiler);
1551
+ SLJIT_UNUSED_ARG(src);
1552
+ SLJIT_UNUSED_ARG(srcw);
1553
+ SLJIT_ASSERT_STOP();
1554
+ return SLJIT_ERR_UNSUPPORTED;
1555
+ }
1556
+
1557
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
1558
+ {
1559
+ SLJIT_UNUSED_ARG(compiler);
1560
+ SLJIT_UNUSED_ARG(op);
1561
+ SLJIT_ASSERT_STOP();
1562
+ return SLJIT_ERR_UNSUPPORTED;
1563
+ }
1564
+
1565
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
1566
+ sljit_si dst, sljit_sw dstw,
1567
+ sljit_si src, sljit_sw srcw)
1568
+ {
1569
+ SLJIT_UNUSED_ARG(compiler);
1570
+ SLJIT_UNUSED_ARG(op);
1571
+ SLJIT_UNUSED_ARG(dst);
1572
+ SLJIT_UNUSED_ARG(dstw);
1573
+ SLJIT_UNUSED_ARG(src);
1574
+ SLJIT_UNUSED_ARG(srcw);
1575
+ SLJIT_ASSERT_STOP();
1576
+ return SLJIT_ERR_UNSUPPORTED;
1577
+ }
1578
+
1579
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
1580
+ sljit_si dst, sljit_sw dstw,
1581
+ sljit_si src1, sljit_sw src1w,
1582
+ sljit_si src2, sljit_sw src2w)
1583
+ {
1584
+ SLJIT_UNUSED_ARG(compiler);
1585
+ SLJIT_UNUSED_ARG(op);
1586
+ SLJIT_UNUSED_ARG(dst);
1587
+ SLJIT_UNUSED_ARG(dstw);
1588
+ SLJIT_UNUSED_ARG(src1);
1589
+ SLJIT_UNUSED_ARG(src1w);
1590
+ SLJIT_UNUSED_ARG(src2);
1591
+ SLJIT_UNUSED_ARG(src2w);
1592
+ SLJIT_ASSERT_STOP();
1593
+ return SLJIT_ERR_UNSUPPORTED;
1594
+ }
1595
+
1596
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
1597
+ {
1598
+ SLJIT_ASSERT_STOP();
1599
+ return reg;
1600
+ }
1601
+
1602
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
1603
+ void *instruction, sljit_si size)
1604
+ {
1605
+ SLJIT_UNUSED_ARG(compiler);
1606
+ SLJIT_UNUSED_ARG(instruction);
1607
+ SLJIT_UNUSED_ARG(size);
1608
+ SLJIT_ASSERT_STOP();
1609
+ return SLJIT_ERR_UNSUPPORTED;
1610
+ }
1611
+
1612
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
1613
+ {
1614
+ SLJIT_ASSERT_STOP();
1615
+ return 0;
1616
+ }
1617
+
1618
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
1619
+ sljit_si dst, sljit_sw dstw,
1620
+ sljit_si src, sljit_sw srcw)
1621
+ {
1622
+ SLJIT_UNUSED_ARG(compiler);
1623
+ SLJIT_UNUSED_ARG(op);
1624
+ SLJIT_UNUSED_ARG(dst);
1625
+ SLJIT_UNUSED_ARG(dstw);
1626
+ SLJIT_UNUSED_ARG(src);
1627
+ SLJIT_UNUSED_ARG(srcw);
1628
+ SLJIT_ASSERT_STOP();
1629
+ return SLJIT_ERR_UNSUPPORTED;
1630
+ }
1631
+
1632
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
1633
+ sljit_si dst, sljit_sw dstw,
1634
+ sljit_si src1, sljit_sw src1w,
1635
+ sljit_si src2, sljit_sw src2w)
1636
+ {
1637
+ SLJIT_UNUSED_ARG(compiler);
1638
+ SLJIT_UNUSED_ARG(op);
1639
+ SLJIT_UNUSED_ARG(dst);
1640
+ SLJIT_UNUSED_ARG(dstw);
1641
+ SLJIT_UNUSED_ARG(src1);
1642
+ SLJIT_UNUSED_ARG(src1w);
1643
+ SLJIT_UNUSED_ARG(src2);
1644
+ SLJIT_UNUSED_ARG(src2w);
1645
+ SLJIT_ASSERT_STOP();
1646
+ return SLJIT_ERR_UNSUPPORTED;
1647
+ }
1648
+
1649
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler)
1650
+ {
1651
+ SLJIT_UNUSED_ARG(compiler);
1652
+ SLJIT_ASSERT_STOP();
1653
+ return NULL;
1654
+ }
1655
+
1656
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
1657
+ {
1658
+ SLJIT_UNUSED_ARG(compiler);
1659
+ SLJIT_UNUSED_ARG(type);
1660
+ SLJIT_ASSERT_STOP();
1661
+ return NULL;
1662
+ }
1663
+
1664
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
1665
+ sljit_si src1, sljit_sw src1w,
1666
+ sljit_si src2, sljit_sw src2w)
1667
+ {
1668
+ SLJIT_UNUSED_ARG(compiler);
1669
+ SLJIT_UNUSED_ARG(type);
1670
+ SLJIT_UNUSED_ARG(src1);
1671
+ SLJIT_UNUSED_ARG(src1w);
1672
+ SLJIT_UNUSED_ARG(src2);
1673
+ SLJIT_UNUSED_ARG(src2w);
1674
+ SLJIT_ASSERT_STOP();
1675
+ return NULL;
1676
+ }
1677
+
1678
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
1679
+ sljit_si src1, sljit_sw src1w,
1680
+ sljit_si src2, sljit_sw src2w)
1681
+ {
1682
+ SLJIT_UNUSED_ARG(compiler);
1683
+ SLJIT_UNUSED_ARG(type);
1684
+ SLJIT_UNUSED_ARG(src1);
1685
+ SLJIT_UNUSED_ARG(src1w);
1686
+ SLJIT_UNUSED_ARG(src2);
1687
+ SLJIT_UNUSED_ARG(src2w);
1688
+ SLJIT_ASSERT_STOP();
1689
+ return NULL;
1690
+ }
1691
+
1692
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sljit_label* label)
1693
+ {
1694
+ SLJIT_UNUSED_ARG(jump);
1695
+ SLJIT_UNUSED_ARG(label);
1696
+ SLJIT_ASSERT_STOP();
1697
+ }
1698
+
1699
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_target(struct sljit_jump *jump, sljit_uw target)
1700
+ {
1701
+ SLJIT_UNUSED_ARG(jump);
1702
+ SLJIT_UNUSED_ARG(target);
1703
+ SLJIT_ASSERT_STOP();
1704
+ }
1705
+
1706
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
1707
+ {
1708
+ SLJIT_UNUSED_ARG(compiler);
1709
+ SLJIT_UNUSED_ARG(type);
1710
+ SLJIT_UNUSED_ARG(src);
1711
+ SLJIT_UNUSED_ARG(srcw);
1712
+ SLJIT_ASSERT_STOP();
1713
+ return SLJIT_ERR_UNSUPPORTED;
1714
+ }
1715
+
1716
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_si op,
1717
+ sljit_si dst, sljit_sw dstw,
1718
+ sljit_si src, sljit_sw srcw,
1719
+ sljit_si type)
1720
+ {
1721
+ SLJIT_UNUSED_ARG(compiler);
1722
+ SLJIT_UNUSED_ARG(op);
1723
+ SLJIT_UNUSED_ARG(dst);
1724
+ SLJIT_UNUSED_ARG(dstw);
1725
+ SLJIT_UNUSED_ARG(src);
1726
+ SLJIT_UNUSED_ARG(srcw);
1727
+ SLJIT_UNUSED_ARG(type);
1728
+ SLJIT_ASSERT_STOP();
1729
+ return SLJIT_ERR_UNSUPPORTED;
1730
+ }
1731
+
1732
+ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
1733
+ {
1734
+ SLJIT_UNUSED_ARG(compiler);
1735
+ SLJIT_UNUSED_ARG(dst);
1736
+ SLJIT_UNUSED_ARG(dstw);
1737
+ SLJIT_UNUSED_ARG(offset);
1738
+ SLJIT_ASSERT_STOP();
1739
+ return SLJIT_ERR_UNSUPPORTED;
1740
+ }
1741
+
1742
+ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw initval)
1743
+ {
1744
+ SLJIT_UNUSED_ARG(compiler);
1745
+ SLJIT_UNUSED_ARG(dst);
1746
+ SLJIT_UNUSED_ARG(dstw);
1747
+ SLJIT_UNUSED_ARG(initval);
1748
+ SLJIT_ASSERT_STOP();
1749
+ return NULL;
1750
+ }
1751
+
1752
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_addr)
1753
+ {
1754
+ SLJIT_UNUSED_ARG(addr);
1755
+ SLJIT_UNUSED_ARG(new_addr);
1756
+ SLJIT_ASSERT_STOP();
1757
+ }
1758
+
1759
+ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
1760
+ {
1761
+ SLJIT_UNUSED_ARG(addr);
1762
+ SLJIT_UNUSED_ARG(new_constant);
1763
+ SLJIT_ASSERT_STOP();
1764
+ }
1765
+
1766
+ #endif