asmjit 0.2.0 → 0.2.2

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/Rakefile +5 -3
  4. data/asmjit.gemspec +1 -3
  5. data/ext/asmjit/asmjit/.editorconfig +10 -0
  6. data/ext/asmjit/asmjit/.github/FUNDING.yml +1 -0
  7. data/ext/asmjit/asmjit/.github/workflows/build-config.json +47 -0
  8. data/ext/asmjit/asmjit/.github/workflows/build.yml +156 -0
  9. data/ext/asmjit/asmjit/.gitignore +6 -0
  10. data/ext/asmjit/asmjit/CMakeLists.txt +611 -0
  11. data/ext/asmjit/asmjit/LICENSE.md +17 -0
  12. data/ext/asmjit/asmjit/README.md +69 -0
  13. data/ext/asmjit/asmjit/src/asmjit/a64.h +62 -0
  14. data/ext/asmjit/asmjit/src/asmjit/arm/a64archtraits_p.h +81 -0
  15. data/ext/asmjit/asmjit/src/asmjit/arm/a64assembler.cpp +5115 -0
  16. data/ext/asmjit/asmjit/src/asmjit/arm/a64assembler.h +72 -0
  17. data/ext/asmjit/asmjit/src/asmjit/arm/a64builder.cpp +51 -0
  18. data/ext/asmjit/asmjit/src/asmjit/arm/a64builder.h +57 -0
  19. data/ext/asmjit/asmjit/src/asmjit/arm/a64compiler.cpp +60 -0
  20. data/ext/asmjit/asmjit/src/asmjit/arm/a64compiler.h +247 -0
  21. data/ext/asmjit/asmjit/src/asmjit/arm/a64emithelper.cpp +464 -0
  22. data/ext/asmjit/asmjit/src/asmjit/arm/a64emithelper_p.h +50 -0
  23. data/ext/asmjit/asmjit/src/asmjit/arm/a64emitter.h +1228 -0
  24. data/ext/asmjit/asmjit/src/asmjit/arm/a64formatter.cpp +298 -0
  25. data/ext/asmjit/asmjit/src/asmjit/arm/a64formatter_p.h +59 -0
  26. data/ext/asmjit/asmjit/src/asmjit/arm/a64func.cpp +189 -0
  27. data/ext/asmjit/asmjit/src/asmjit/arm/a64func_p.h +33 -0
  28. data/ext/asmjit/asmjit/src/asmjit/arm/a64globals.h +1894 -0
  29. data/ext/asmjit/asmjit/src/asmjit/arm/a64instapi.cpp +278 -0
  30. data/ext/asmjit/asmjit/src/asmjit/arm/a64instapi_p.h +41 -0
  31. data/ext/asmjit/asmjit/src/asmjit/arm/a64instdb.cpp +1957 -0
  32. data/ext/asmjit/asmjit/src/asmjit/arm/a64instdb.h +74 -0
  33. data/ext/asmjit/asmjit/src/asmjit/arm/a64instdb_p.h +876 -0
  34. data/ext/asmjit/asmjit/src/asmjit/arm/a64operand.cpp +85 -0
  35. data/ext/asmjit/asmjit/src/asmjit/arm/a64operand.h +312 -0
  36. data/ext/asmjit/asmjit/src/asmjit/arm/a64rapass.cpp +852 -0
  37. data/ext/asmjit/asmjit/src/asmjit/arm/a64rapass_p.h +105 -0
  38. data/ext/asmjit/asmjit/src/asmjit/arm/a64utils.h +179 -0
  39. data/ext/asmjit/asmjit/src/asmjit/arm/armformatter.cpp +143 -0
  40. data/ext/asmjit/asmjit/src/asmjit/arm/armformatter_p.h +44 -0
  41. data/ext/asmjit/asmjit/src/asmjit/arm/armglobals.h +21 -0
  42. data/ext/asmjit/asmjit/src/asmjit/arm/armoperand.h +621 -0
  43. data/ext/asmjit/asmjit/src/asmjit/arm.h +62 -0
  44. data/ext/asmjit/asmjit/src/asmjit/asmjit-scope-begin.h +17 -0
  45. data/ext/asmjit/asmjit/src/asmjit/asmjit-scope-end.h +9 -0
  46. data/ext/asmjit/asmjit/src/asmjit/asmjit.h +33 -0
  47. data/ext/asmjit/asmjit/src/asmjit/core/api-build_p.h +55 -0
  48. data/ext/asmjit/asmjit/src/asmjit/core/api-config.h +613 -0
  49. data/ext/asmjit/asmjit/src/asmjit/core/archcommons.h +229 -0
  50. data/ext/asmjit/asmjit/src/asmjit/core/archtraits.cpp +160 -0
  51. data/ext/asmjit/asmjit/src/asmjit/core/archtraits.h +290 -0
  52. data/ext/asmjit/asmjit/src/asmjit/core/assembler.cpp +406 -0
  53. data/ext/asmjit/asmjit/src/asmjit/core/assembler.h +129 -0
  54. data/ext/asmjit/asmjit/src/asmjit/core/builder.cpp +889 -0
  55. data/ext/asmjit/asmjit/src/asmjit/core/builder.h +1391 -0
  56. data/ext/asmjit/asmjit/src/asmjit/core/codebuffer.h +113 -0
  57. data/ext/asmjit/asmjit/src/asmjit/core/codeholder.cpp +1149 -0
  58. data/ext/asmjit/asmjit/src/asmjit/core/codeholder.h +1035 -0
  59. data/ext/asmjit/asmjit/src/asmjit/core/codewriter.cpp +175 -0
  60. data/ext/asmjit/asmjit/src/asmjit/core/codewriter_p.h +179 -0
  61. data/ext/asmjit/asmjit/src/asmjit/core/compiler.cpp +582 -0
  62. data/ext/asmjit/asmjit/src/asmjit/core/compiler.h +737 -0
  63. data/ext/asmjit/asmjit/src/asmjit/core/compilerdefs.h +173 -0
  64. data/ext/asmjit/asmjit/src/asmjit/core/constpool.cpp +363 -0
  65. data/ext/asmjit/asmjit/src/asmjit/core/constpool.h +250 -0
  66. data/ext/asmjit/asmjit/src/asmjit/core/cpuinfo.cpp +1162 -0
  67. data/ext/asmjit/asmjit/src/asmjit/core/cpuinfo.h +813 -0
  68. data/ext/asmjit/asmjit/src/asmjit/core/emithelper.cpp +323 -0
  69. data/ext/asmjit/asmjit/src/asmjit/core/emithelper_p.h +58 -0
  70. data/ext/asmjit/asmjit/src/asmjit/core/emitter.cpp +333 -0
  71. data/ext/asmjit/asmjit/src/asmjit/core/emitter.h +741 -0
  72. data/ext/asmjit/asmjit/src/asmjit/core/emitterutils.cpp +129 -0
  73. data/ext/asmjit/asmjit/src/asmjit/core/emitterutils_p.h +89 -0
  74. data/ext/asmjit/asmjit/src/asmjit/core/environment.cpp +46 -0
  75. data/ext/asmjit/asmjit/src/asmjit/core/environment.h +508 -0
  76. data/ext/asmjit/asmjit/src/asmjit/core/errorhandler.cpp +14 -0
  77. data/ext/asmjit/asmjit/src/asmjit/core/errorhandler.h +228 -0
  78. data/ext/asmjit/asmjit/src/asmjit/core/formatter.cpp +584 -0
  79. data/ext/asmjit/asmjit/src/asmjit/core/formatter.h +247 -0
  80. data/ext/asmjit/asmjit/src/asmjit/core/formatter_p.h +34 -0
  81. data/ext/asmjit/asmjit/src/asmjit/core/func.cpp +286 -0
  82. data/ext/asmjit/asmjit/src/asmjit/core/func.h +1445 -0
  83. data/ext/asmjit/asmjit/src/asmjit/core/funcargscontext.cpp +293 -0
  84. data/ext/asmjit/asmjit/src/asmjit/core/funcargscontext_p.h +199 -0
  85. data/ext/asmjit/asmjit/src/asmjit/core/globals.cpp +133 -0
  86. data/ext/asmjit/asmjit/src/asmjit/core/globals.h +393 -0
  87. data/ext/asmjit/asmjit/src/asmjit/core/inst.cpp +113 -0
  88. data/ext/asmjit/asmjit/src/asmjit/core/inst.h +772 -0
  89. data/ext/asmjit/asmjit/src/asmjit/core/jitallocator.cpp +1242 -0
  90. data/ext/asmjit/asmjit/src/asmjit/core/jitallocator.h +261 -0
  91. data/ext/asmjit/asmjit/src/asmjit/core/jitruntime.cpp +80 -0
  92. data/ext/asmjit/asmjit/src/asmjit/core/jitruntime.h +89 -0
  93. data/ext/asmjit/asmjit/src/asmjit/core/logger.cpp +69 -0
  94. data/ext/asmjit/asmjit/src/asmjit/core/logger.h +198 -0
  95. data/ext/asmjit/asmjit/src/asmjit/core/misc_p.h +33 -0
  96. data/ext/asmjit/asmjit/src/asmjit/core/operand.cpp +132 -0
  97. data/ext/asmjit/asmjit/src/asmjit/core/operand.h +1611 -0
  98. data/ext/asmjit/asmjit/src/asmjit/core/osutils.cpp +84 -0
  99. data/ext/asmjit/asmjit/src/asmjit/core/osutils.h +61 -0
  100. data/ext/asmjit/asmjit/src/asmjit/core/osutils_p.h +68 -0
  101. data/ext/asmjit/asmjit/src/asmjit/core/raassignment_p.h +418 -0
  102. data/ext/asmjit/asmjit/src/asmjit/core/rabuilders_p.h +612 -0
  103. data/ext/asmjit/asmjit/src/asmjit/core/radefs_p.h +1204 -0
  104. data/ext/asmjit/asmjit/src/asmjit/core/ralocal.cpp +1166 -0
  105. data/ext/asmjit/asmjit/src/asmjit/core/ralocal_p.h +254 -0
  106. data/ext/asmjit/asmjit/src/asmjit/core/rapass.cpp +1969 -0
  107. data/ext/asmjit/asmjit/src/asmjit/core/rapass_p.h +1183 -0
  108. data/ext/asmjit/asmjit/src/asmjit/core/rastack.cpp +184 -0
  109. data/ext/asmjit/asmjit/src/asmjit/core/rastack_p.h +171 -0
  110. data/ext/asmjit/asmjit/src/asmjit/core/string.cpp +559 -0
  111. data/ext/asmjit/asmjit/src/asmjit/core/string.h +372 -0
  112. data/ext/asmjit/asmjit/src/asmjit/core/support.cpp +494 -0
  113. data/ext/asmjit/asmjit/src/asmjit/core/support.h +1773 -0
  114. data/ext/asmjit/asmjit/src/asmjit/core/target.cpp +14 -0
  115. data/ext/asmjit/asmjit/src/asmjit/core/target.h +53 -0
  116. data/ext/asmjit/asmjit/src/asmjit/core/type.cpp +74 -0
  117. data/ext/asmjit/asmjit/src/asmjit/core/type.h +419 -0
  118. data/ext/asmjit/asmjit/src/asmjit/core/virtmem.cpp +722 -0
  119. data/ext/asmjit/asmjit/src/asmjit/core/virtmem.h +242 -0
  120. data/ext/asmjit/asmjit/src/asmjit/core/zone.cpp +353 -0
  121. data/ext/asmjit/asmjit/src/asmjit/core/zone.h +615 -0
  122. data/ext/asmjit/asmjit/src/asmjit/core/zonehash.cpp +309 -0
  123. data/ext/asmjit/asmjit/src/asmjit/core/zonehash.h +186 -0
  124. data/ext/asmjit/asmjit/src/asmjit/core/zonelist.cpp +163 -0
  125. data/ext/asmjit/asmjit/src/asmjit/core/zonelist.h +209 -0
  126. data/ext/asmjit/asmjit/src/asmjit/core/zonestack.cpp +176 -0
  127. data/ext/asmjit/asmjit/src/asmjit/core/zonestack.h +239 -0
  128. data/ext/asmjit/asmjit/src/asmjit/core/zonestring.h +120 -0
  129. data/ext/asmjit/asmjit/src/asmjit/core/zonetree.cpp +99 -0
  130. data/ext/asmjit/asmjit/src/asmjit/core/zonetree.h +380 -0
  131. data/ext/asmjit/asmjit/src/asmjit/core/zonevector.cpp +356 -0
  132. data/ext/asmjit/asmjit/src/asmjit/core/zonevector.h +690 -0
  133. data/ext/asmjit/asmjit/src/asmjit/core.h +1861 -0
  134. data/ext/asmjit/asmjit/src/asmjit/x86/x86archtraits_p.h +148 -0
  135. data/ext/asmjit/asmjit/src/asmjit/x86/x86assembler.cpp +5110 -0
  136. data/ext/asmjit/asmjit/src/asmjit/x86/x86assembler.h +685 -0
  137. data/ext/asmjit/asmjit/src/asmjit/x86/x86builder.cpp +52 -0
  138. data/ext/asmjit/asmjit/src/asmjit/x86/x86builder.h +351 -0
  139. data/ext/asmjit/asmjit/src/asmjit/x86/x86compiler.cpp +61 -0
  140. data/ext/asmjit/asmjit/src/asmjit/x86/x86compiler.h +721 -0
  141. data/ext/asmjit/asmjit/src/asmjit/x86/x86emithelper.cpp +619 -0
  142. data/ext/asmjit/asmjit/src/asmjit/x86/x86emithelper_p.h +60 -0
  143. data/ext/asmjit/asmjit/src/asmjit/x86/x86emitter.h +4315 -0
  144. data/ext/asmjit/asmjit/src/asmjit/x86/x86formatter.cpp +944 -0
  145. data/ext/asmjit/asmjit/src/asmjit/x86/x86formatter_p.h +58 -0
  146. data/ext/asmjit/asmjit/src/asmjit/x86/x86func.cpp +503 -0
  147. data/ext/asmjit/asmjit/src/asmjit/x86/x86func_p.h +33 -0
  148. data/ext/asmjit/asmjit/src/asmjit/x86/x86globals.h +2169 -0
  149. data/ext/asmjit/asmjit/src/asmjit/x86/x86instapi.cpp +1732 -0
  150. data/ext/asmjit/asmjit/src/asmjit/x86/x86instapi_p.h +41 -0
  151. data/ext/asmjit/asmjit/src/asmjit/x86/x86instdb.cpp +4427 -0
  152. data/ext/asmjit/asmjit/src/asmjit/x86/x86instdb.h +563 -0
  153. data/ext/asmjit/asmjit/src/asmjit/x86/x86instdb_p.h +311 -0
  154. data/ext/asmjit/asmjit/src/asmjit/x86/x86opcode_p.h +436 -0
  155. data/ext/asmjit/asmjit/src/asmjit/x86/x86operand.cpp +231 -0
  156. data/ext/asmjit/asmjit/src/asmjit/x86/x86operand.h +1085 -0
  157. data/ext/asmjit/asmjit/src/asmjit/x86/x86rapass.cpp +1509 -0
  158. data/ext/asmjit/asmjit/src/asmjit/x86/x86rapass_p.h +94 -0
  159. data/ext/asmjit/asmjit/src/asmjit/x86.h +93 -0
  160. data/ext/asmjit/asmjit/src/asmjit.natvis +245 -0
  161. data/ext/asmjit/asmjit/test/asmjit_test_assembler.cpp +84 -0
  162. data/ext/asmjit/asmjit/test/asmjit_test_assembler.h +85 -0
  163. data/ext/asmjit/asmjit/test/asmjit_test_assembler_a64.cpp +4006 -0
  164. data/ext/asmjit/asmjit/test/asmjit_test_assembler_x64.cpp +17833 -0
  165. data/ext/asmjit/asmjit/test/asmjit_test_assembler_x86.cpp +8300 -0
  166. data/ext/asmjit/asmjit/test/asmjit_test_compiler.cpp +253 -0
  167. data/ext/asmjit/asmjit/test/asmjit_test_compiler.h +73 -0
  168. data/ext/asmjit/asmjit/test/asmjit_test_compiler_a64.cpp +690 -0
  169. data/ext/asmjit/asmjit/test/asmjit_test_compiler_x86.cpp +4317 -0
  170. data/ext/asmjit/asmjit/test/asmjit_test_emitters.cpp +197 -0
  171. data/ext/asmjit/asmjit/test/asmjit_test_instinfo.cpp +181 -0
  172. data/ext/asmjit/asmjit/test/asmjit_test_misc.h +257 -0
  173. data/ext/asmjit/asmjit/test/asmjit_test_perf.cpp +62 -0
  174. data/ext/asmjit/asmjit/test/asmjit_test_perf.h +61 -0
  175. data/ext/asmjit/asmjit/test/asmjit_test_perf_a64.cpp +699 -0
  176. data/ext/asmjit/asmjit/test/asmjit_test_perf_x86.cpp +5032 -0
  177. data/ext/asmjit/asmjit/test/asmjit_test_unit.cpp +172 -0
  178. data/ext/asmjit/asmjit/test/asmjit_test_x86_sections.cpp +172 -0
  179. data/ext/asmjit/asmjit/test/asmjitutils.h +38 -0
  180. data/ext/asmjit/asmjit/test/broken.cpp +312 -0
  181. data/ext/asmjit/asmjit/test/broken.h +148 -0
  182. data/ext/asmjit/asmjit/test/cmdline.h +61 -0
  183. data/ext/asmjit/asmjit/test/performancetimer.h +41 -0
  184. data/ext/asmjit/asmjit/tools/configure-makefiles.sh +13 -0
  185. data/ext/asmjit/asmjit/tools/configure-ninja.sh +13 -0
  186. data/ext/asmjit/asmjit/tools/configure-sanitizers.sh +13 -0
  187. data/ext/asmjit/asmjit/tools/configure-vs2019-x64.bat +2 -0
  188. data/ext/asmjit/asmjit/tools/configure-vs2019-x86.bat +2 -0
  189. data/ext/asmjit/asmjit/tools/configure-vs2022-x64.bat +2 -0
  190. data/ext/asmjit/asmjit/tools/configure-vs2022-x86.bat +2 -0
  191. data/ext/asmjit/asmjit/tools/configure-xcode.sh +8 -0
  192. data/ext/asmjit/asmjit/tools/enumgen.js +417 -0
  193. data/ext/asmjit/asmjit/tools/enumgen.sh +3 -0
  194. data/ext/asmjit/asmjit/tools/tablegen-arm.js +365 -0
  195. data/ext/asmjit/asmjit/tools/tablegen-arm.sh +3 -0
  196. data/ext/asmjit/asmjit/tools/tablegen-x86.js +2638 -0
  197. data/ext/asmjit/asmjit/tools/tablegen-x86.sh +3 -0
  198. data/ext/asmjit/asmjit/tools/tablegen.js +947 -0
  199. data/ext/asmjit/asmjit/tools/tablegen.sh +4 -0
  200. data/ext/asmjit/asmjit.cc +167 -30
  201. data/ext/asmjit/extconf.rb +9 -9
  202. data/lib/asmjit/version.rb +1 -1
  203. data/lib/asmjit.rb +14 -4
  204. metadata +198 -17
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ set -e
3
+ node ./tablegen-arm.js $@
4
+ node ./tablegen-x86.js $@
data/ext/asmjit/asmjit.cc CHANGED
@@ -7,10 +7,14 @@ using namespace std;
7
7
 
8
8
  using namespace asmjit;
9
9
 
10
+ static BaseEmitter *get_emitter(VALUE self);
11
+
10
12
  static VALUE rb_mAsmjit;
11
13
  static VALUE rb_eAsmJITError;
12
14
  static VALUE rb_cOperand;
13
15
  static VALUE cX86Reg;
16
+ static VALUE cLabel;
17
+ static VALUE cImm;
14
18
  static VALUE cX86Mem;
15
19
 
16
20
  static JitRuntime jit_runtime;
@@ -23,13 +27,32 @@ class RubyErrorHandler : public ErrorHandler {
23
27
  };
24
28
  RubyErrorHandler rubyErrorHandler;
25
29
 
30
+ class RubyLogger : public Logger {
31
+ public:
32
+ RubyLogger(VALUE obj) : obj(obj) {}
33
+ VALUE obj;
34
+
35
+ Error _log(const char* data, size_t size) noexcept override {
36
+ VALUE string;
37
+ if (size == SIZE_MAX) {
38
+ string = rb_str_new_cstr(data);
39
+ } else {
40
+ string = rb_str_new(data, size);
41
+ }
42
+ rb_funcall(obj, rb_intern("<<"), 1, string);
43
+ return kErrorOk;
44
+ }
45
+ };
46
+
26
47
  struct CodeHolderWrapper {
27
48
  CodeHolder *code;
49
+ RubyLogger *logger;
28
50
  };
29
51
 
30
52
  void code_holder_free(void *data) {
31
53
  CodeHolderWrapper *wrapper = static_cast<CodeHolderWrapper *>(data);
32
54
  delete wrapper->code;
55
+ delete wrapper->logger;
33
56
  xfree(wrapper);
34
57
  }
35
58
 
@@ -47,11 +70,41 @@ static const rb_data_type_t code_holder_type = {
47
70
  VALUE code_holder_alloc(VALUE self) {
48
71
  CodeHolderWrapper *wrapper = static_cast<CodeHolderWrapper *>(xmalloc(sizeof(CodeHolderWrapper)));
49
72
  wrapper->code = new CodeHolder();
73
+ wrapper->logger = NULL;
50
74
  wrapper->code->setErrorHandler(&rubyErrorHandler);
51
75
 
52
76
  return TypedData_Wrap_Struct(self, &code_holder_type, wrapper);
53
77
  }
54
78
 
79
+ VALUE code_holder_set_logger(VALUE self, VALUE object) {
80
+ CodeHolderWrapper *wrapper;
81
+ TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper);
82
+
83
+ if (wrapper->logger) {
84
+ wrapper->code->resetLogger();
85
+ delete wrapper->logger;
86
+ }
87
+
88
+ if (RTEST(object)) {
89
+ wrapper->logger = new RubyLogger(object);
90
+ wrapper->logger->setFlags(FormatFlags::kHexImms);
91
+ wrapper->code->setLogger(wrapper->logger);
92
+ }
93
+
94
+ return object;
95
+ }
96
+
97
+ VALUE code_holder_get_logger(VALUE self) {
98
+ CodeHolderWrapper *wrapper;
99
+ TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper);
100
+
101
+ if (wrapper->logger) {
102
+ return wrapper->logger->obj;
103
+ } else {
104
+ return Qnil;
105
+ }
106
+ }
107
+
55
108
  VALUE code_holder_initialize(VALUE self) {
56
109
  CodeHolderWrapper *wrapper;
57
110
  TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper);
@@ -133,21 +186,29 @@ static VALUE build_register(const char *c_name, x86::Reg reg) {
133
186
  return obj;
134
187
  }
135
188
 
136
- static VALUE build_label(Label label) {
137
- OperandWrapper *wrapper = static_cast<OperandWrapper *>(xmalloc(sizeof(OperandWrapper)));
138
- wrapper->opnd = label;
139
-
140
- VALUE obj = TypedData_Wrap_Struct(cX86Reg, &operand_type, wrapper);
141
- return obj;
142
- }
143
-
144
-
145
189
  static Operand opnd_get(VALUE val) {
146
190
  OperandWrapper *wrapper;
147
191
  TypedData_Get_Struct(val, OperandWrapper, &operand_type, wrapper);
148
192
  return wrapper->opnd;
149
193
  }
150
194
 
195
+ static VALUE operand_to_s(VALUE obj) {
196
+ Operand opnd = opnd_get(obj);
197
+ Arch arch = jit_runtime.arch();
198
+
199
+ const BaseEmitter *emitter = NULL;
200
+
201
+ VALUE emitterv = rb_iv_get(obj, "@emitter");
202
+ if (RTEST(emitterv)) {
203
+ emitter = get_emitter(emitterv);
204
+ }
205
+
206
+ String s;
207
+ Formatter::formatOperand(s, FormatFlags::kNone, emitter, arch, opnd);
208
+
209
+ return rb_str_new(s.data(), s.size());
210
+ }
211
+
151
212
  static Label label_get(VALUE val) {
152
213
  Operand opnd = opnd_get(val);
153
214
  if (!opnd.isLabel()) {
@@ -188,17 +249,77 @@ static VALUE x86_ptr(VALUE _self, VALUE regv, VALUE offsetv, VALUE sizev) {
188
249
  return obj;
189
250
  }
190
251
 
252
+ static VALUE imm_new(VALUE _self, VALUE val) {
253
+ Imm imm = Imm(NUM2LL(val));
254
+
255
+ OperandWrapper *wrapper = static_cast<OperandWrapper *>(xmalloc(sizeof(OperandWrapper)));
256
+ wrapper->opnd = imm;
257
+ return TypedData_Wrap_Struct(_self, &operand_type, wrapper);
258
+ }
259
+
191
260
  static VALUE build_registers_hash() {
192
261
  VALUE hash = rb_hash_new();
193
262
 
194
263
  #define REGISTER(name) rb_hash_aset(hash, ID2SYM(rb_intern(#name)), build_register((#name), x86::name))
195
264
 
265
+ REGISTER(ah);
266
+ REGISTER(bh);
267
+ REGISTER(ch);
268
+ REGISTER(dh);
269
+
270
+ REGISTER(al);
271
+ REGISTER(bl);
272
+ REGISTER(cl);
273
+ REGISTER(dl);
274
+ REGISTER(dil);
275
+ REGISTER(sil);
276
+ REGISTER(spl);
277
+ REGISTER(bpl);
278
+
279
+ REGISTER(r8b);
280
+ REGISTER(r9b);
281
+ REGISTER(r10b);
282
+ REGISTER(r11b);
283
+ REGISTER(r12b);
284
+ REGISTER(r13b);
285
+ REGISTER(r14b);
286
+ REGISTER(r15b);
287
+
288
+ REGISTER(ax);
289
+ REGISTER(bx);
290
+ REGISTER(cx);
291
+ REGISTER(dx);
292
+ REGISTER(di);
293
+ REGISTER(si);
294
+ REGISTER(sp);
295
+ REGISTER(bp);
296
+
297
+ REGISTER(r8w);
298
+ REGISTER(r9w);
299
+ REGISTER(r10w);
300
+ REGISTER(r11w);
301
+ REGISTER(r12w);
302
+ REGISTER(r13w);
303
+ REGISTER(r14w);
304
+ REGISTER(r15w);
305
+
196
306
  REGISTER(eax);
197
307
  REGISTER(ebx);
198
308
  REGISTER(ecx);
199
309
  REGISTER(edx);
200
310
  REGISTER(edi);
201
311
  REGISTER(esi);
312
+ REGISTER(esp);
313
+ REGISTER(ebp);
314
+
315
+ REGISTER(r8d);
316
+ REGISTER(r9d);
317
+ REGISTER(r10d);
318
+ REGISTER(r11d);
319
+ REGISTER(r12d);
320
+ REGISTER(r13d);
321
+ REGISTER(r14d);
322
+ REGISTER(r15d);
202
323
 
203
324
  REGISTER(rax);
204
325
  REGISTER(rbx);
@@ -206,6 +327,17 @@ static VALUE build_registers_hash() {
206
327
  REGISTER(rdx);
207
328
  REGISTER(rdi);
208
329
  REGISTER(rsi);
330
+ REGISTER(rsp);
331
+ REGISTER(rbp);
332
+
333
+ REGISTER(r8);
334
+ REGISTER(r9);
335
+ REGISTER(r10);
336
+ REGISTER(r11);
337
+ REGISTER(r12);
338
+ REGISTER(r13);
339
+ REGISTER(r14);
340
+ REGISTER(r15);
209
341
 
210
342
  #undef REGISTER
211
343
 
@@ -239,6 +371,12 @@ static const rb_data_type_t base_emitter_type = {
239
371
  .flags = RUBY_TYPED_FREE_IMMEDIATELY,
240
372
  };
241
373
 
374
+ static BaseEmitter *get_emitter(VALUE self) {
375
+ BaseEmitterWrapper *wrapper;
376
+ TypedData_Get_Struct(self, BaseEmitterWrapper, &base_emitter_type, wrapper);
377
+ return wrapper->emitter;
378
+ }
379
+
242
380
  VALUE x86_assembler_new(VALUE self, VALUE code_holder) {
243
381
  BaseEmitterWrapper *wrapper = static_cast<BaseEmitterWrapper *>(xmalloc(sizeof(CodeHolderWrapper)));
244
382
 
@@ -254,28 +392,21 @@ VALUE x86_assembler_new(VALUE self, VALUE code_holder) {
254
392
  return TypedData_Wrap_Struct(self, &base_emitter_type, wrapper);
255
393
  }
256
394
 
257
- Operand parse_operand(VALUE val) {
258
- if (FIXNUM_P(val)) {
259
- return Imm(NUM2LL(val));
260
- } else if (rb_obj_is_kind_of(val, rb_cOperand)) {
261
- return opnd_get(val);
262
- }
263
- rb_raise(rb_eAsmJITError, "bad operand: %" PRIsVALUE, val);
264
- }
265
-
266
395
  VALUE base_emitter_new_label(VALUE self) {
267
- BaseEmitterWrapper *wrapper;
268
- TypedData_Get_Struct(self, BaseEmitterWrapper, &base_emitter_type, wrapper);
269
- BaseEmitter *emitter = wrapper->emitter;
396
+ BaseEmitter *emitter = get_emitter(self);
270
397
 
271
398
  Label label = emitter->newLabel();
272
- return build_label(label);
399
+
400
+ OperandWrapper *opnd_wrapper = static_cast<OperandWrapper *>(xmalloc(sizeof(OperandWrapper)));
401
+ opnd_wrapper->opnd = label;
402
+
403
+ VALUE obj = TypedData_Wrap_Struct(cLabel, &operand_type, opnd_wrapper);
404
+ rb_iv_set(obj, "@emitter", self);
405
+ return obj;
273
406
  }
274
407
 
275
408
  VALUE base_emitter_bind(VALUE self, VALUE labelv) {
276
- BaseEmitterWrapper *wrapper;
277
- TypedData_Get_Struct(self, BaseEmitterWrapper, &base_emitter_type, wrapper);
278
- BaseEmitter *emitter = wrapper->emitter;
409
+ BaseEmitter *emitter = get_emitter(self);
279
410
 
280
411
  Label label = label_get(labelv);
281
412
 
@@ -288,10 +419,7 @@ VALUE base_emitter_bind(VALUE self, VALUE labelv) {
288
419
  }
289
420
 
290
421
  VALUE base_emitter_emit(int argc, VALUE* argv, VALUE self) {
291
- BaseEmitterWrapper *wrapper;
292
- TypedData_Get_Struct(self, BaseEmitterWrapper, &base_emitter_type, wrapper);
293
-
294
- BaseEmitter *emitter = wrapper->emitter;
422
+ BaseEmitter *emitter = get_emitter(self);
295
423
 
296
424
  if (argc < 1) return Qnil;
297
425
  if (argc > 7) return Qnil;
@@ -302,7 +430,7 @@ VALUE base_emitter_emit(int argc, VALUE* argv, VALUE self) {
302
430
 
303
431
  Operand operands[6];
304
432
  for (int i = 0; i < argc - 1; i++) {
305
- operands[i] = parse_operand(argv[i + 1]);
433
+ operands[i] = opnd_get(argv[i + 1]);
306
434
  }
307
435
 
308
436
  emitter->emitOpArray(inst_id, &operands[0], argc - 1);
@@ -330,6 +458,9 @@ Init_asmjit(void)
330
458
  rb_define_method(cCodeHolder, "def_method", code_holder_define_method, 3);
331
459
  rb_define_method(cCodeHolder, "binary", code_holder_binary, 0);
332
460
 
461
+ rb_define_method(cCodeHolder, "logger", code_holder_get_logger, 0);
462
+ rb_define_method(cCodeHolder, "logger=", code_holder_set_logger, 1);
463
+
333
464
  VALUE rb_mX86 = rb_define_module_under(rb_mAsmjit, "X86");
334
465
 
335
466
  VALUE rb_cBaseEmitter = rb_define_class_under(rb_mAsmjit, "BaseEmitter", rb_cObject);
@@ -343,6 +474,7 @@ Init_asmjit(void)
343
474
 
344
475
  rb_cOperand = rb_define_class_under(rb_mAsmjit, "Operand", rb_cObject);
345
476
  rb_undef_alloc_func(rb_cOperand);
477
+ rb_define_method(rb_cOperand, "to_s", operand_to_s, 0);
346
478
 
347
479
  cX86Reg = rb_define_class_under(rb_mX86, "Reg", rb_cOperand);
348
480
  rb_define_attr(cX86Reg, "name", 1, 0);
@@ -350,6 +482,11 @@ Init_asmjit(void)
350
482
  cX86Mem = rb_define_class_under(rb_mX86, "Mem", rb_cOperand);
351
483
  rb_define_singleton_method(cX86Mem, "new", x86_ptr, 3);
352
484
 
485
+ cImm = rb_define_class_under(rb_mAsmjit, "Imm", rb_cOperand);
486
+ rb_define_singleton_method(cImm, "new", imm_new, 1);
487
+
488
+ cLabel = rb_define_class_under(rb_mAsmjit, "Label", rb_cOperand);
489
+
353
490
  VALUE instructions = rb_ary_new();
354
491
 
355
492
  auto instid = x86::Inst::kIdNone;
@@ -2,16 +2,16 @@
2
2
 
3
3
  require "mkmf"
4
4
 
5
- asmjit_dir = File.expand_path("asmjit/src/", __dir__)
5
+ Dir.chdir __dir__ do
6
+ $srcs = [
7
+ Dir["*.cc"],
8
+ Dir["asmjit/src/**/*.cpp"]
9
+ ].flatten.map { |f| File.basename f }
6
10
 
7
- $INCFLAGS << " -I#{asmjit_dir} "
11
+ $VPATH.concat Dir["asmjit/src/**/"].map { |x| "$(srcdir)/#{x}" }
12
+ end
8
13
 
9
- $CXXFLAGS << " -DASMJIT_EMBED "
10
-
11
- $srcs = []
12
- $srcs.concat Dir[File.join(__dir__, "*.cc")]
13
- $srcs.concat Dir[File.join(asmjit_dir, "**/*.cpp")]
14
-
15
- $objs = $srcs.map{|x| x.gsub(/\.(cc|cpp)\z/, ".o") }
14
+ append_cppflags("-I$(srcdir)/asmjit/src")
15
+ append_cppflags("-DASMJIT_EMBED")
16
16
 
17
17
  create_makefile("asmjit/asmjit")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AsmJIT
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.2"
5
5
  end
data/lib/asmjit.rb CHANGED
@@ -5,8 +5,7 @@ require_relative "asmjit/asmjit"
5
5
 
6
6
  AsmJit = AsmJIT
7
7
  module AsmJIT
8
- def self.assemble
9
- code = CodeHolder.new
8
+ def self.assemble(code = CodeHolder.new)
10
9
  yield code.assembler
11
10
  code
12
11
  end
@@ -39,13 +38,24 @@ module AsmJIT
39
38
  end
40
39
  end
41
40
 
41
+ class Operand
42
+ def inspect
43
+ "#<#{self.class} #{to_s}>"
44
+ end
45
+ end
46
+
42
47
  module X86
43
48
  module Helpers
44
49
  extend self
45
50
 
46
51
  def parse_operand(arg)
47
- if Symbol === arg && reg = REGISTERS[arg]
48
- reg
52
+ case arg
53
+ when Operand
54
+ arg
55
+ when Symbol
56
+ REGISTERS.fetch(arg)
57
+ when Integer
58
+ Imm.new(arg)
49
59
  else
50
60
  arg
51
61
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asmjit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-12 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: hatstone
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
11
+ date: 2022-10-22 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: 'Ruby wrapper for asmjit: a lightweight library for machine code generation'
28
14
  email:
29
15
  - john@hawthorn.email
@@ -43,6 +29,201 @@ files:
43
29
  - bin/setup
44
30
  - ext/asmjit/asmjit.cc
45
31
  - ext/asmjit/asmjit.h
32
+ - ext/asmjit/asmjit/.editorconfig
33
+ - ext/asmjit/asmjit/.github/FUNDING.yml
34
+ - ext/asmjit/asmjit/.github/workflows/build-config.json
35
+ - ext/asmjit/asmjit/.github/workflows/build.yml
36
+ - ext/asmjit/asmjit/.gitignore
37
+ - ext/asmjit/asmjit/CMakeLists.txt
38
+ - ext/asmjit/asmjit/LICENSE.md
39
+ - ext/asmjit/asmjit/README.md
40
+ - ext/asmjit/asmjit/src/asmjit.natvis
41
+ - ext/asmjit/asmjit/src/asmjit/a64.h
42
+ - ext/asmjit/asmjit/src/asmjit/arm.h
43
+ - ext/asmjit/asmjit/src/asmjit/arm/a64archtraits_p.h
44
+ - ext/asmjit/asmjit/src/asmjit/arm/a64assembler.cpp
45
+ - ext/asmjit/asmjit/src/asmjit/arm/a64assembler.h
46
+ - ext/asmjit/asmjit/src/asmjit/arm/a64builder.cpp
47
+ - ext/asmjit/asmjit/src/asmjit/arm/a64builder.h
48
+ - ext/asmjit/asmjit/src/asmjit/arm/a64compiler.cpp
49
+ - ext/asmjit/asmjit/src/asmjit/arm/a64compiler.h
50
+ - ext/asmjit/asmjit/src/asmjit/arm/a64emithelper.cpp
51
+ - ext/asmjit/asmjit/src/asmjit/arm/a64emithelper_p.h
52
+ - ext/asmjit/asmjit/src/asmjit/arm/a64emitter.h
53
+ - ext/asmjit/asmjit/src/asmjit/arm/a64formatter.cpp
54
+ - ext/asmjit/asmjit/src/asmjit/arm/a64formatter_p.h
55
+ - ext/asmjit/asmjit/src/asmjit/arm/a64func.cpp
56
+ - ext/asmjit/asmjit/src/asmjit/arm/a64func_p.h
57
+ - ext/asmjit/asmjit/src/asmjit/arm/a64globals.h
58
+ - ext/asmjit/asmjit/src/asmjit/arm/a64instapi.cpp
59
+ - ext/asmjit/asmjit/src/asmjit/arm/a64instapi_p.h
60
+ - ext/asmjit/asmjit/src/asmjit/arm/a64instdb.cpp
61
+ - ext/asmjit/asmjit/src/asmjit/arm/a64instdb.h
62
+ - ext/asmjit/asmjit/src/asmjit/arm/a64instdb_p.h
63
+ - ext/asmjit/asmjit/src/asmjit/arm/a64operand.cpp
64
+ - ext/asmjit/asmjit/src/asmjit/arm/a64operand.h
65
+ - ext/asmjit/asmjit/src/asmjit/arm/a64rapass.cpp
66
+ - ext/asmjit/asmjit/src/asmjit/arm/a64rapass_p.h
67
+ - ext/asmjit/asmjit/src/asmjit/arm/a64utils.h
68
+ - ext/asmjit/asmjit/src/asmjit/arm/armformatter.cpp
69
+ - ext/asmjit/asmjit/src/asmjit/arm/armformatter_p.h
70
+ - ext/asmjit/asmjit/src/asmjit/arm/armglobals.h
71
+ - ext/asmjit/asmjit/src/asmjit/arm/armoperand.h
72
+ - ext/asmjit/asmjit/src/asmjit/asmjit-scope-begin.h
73
+ - ext/asmjit/asmjit/src/asmjit/asmjit-scope-end.h
74
+ - ext/asmjit/asmjit/src/asmjit/asmjit.h
75
+ - ext/asmjit/asmjit/src/asmjit/core.h
76
+ - ext/asmjit/asmjit/src/asmjit/core/api-build_p.h
77
+ - ext/asmjit/asmjit/src/asmjit/core/api-config.h
78
+ - ext/asmjit/asmjit/src/asmjit/core/archcommons.h
79
+ - ext/asmjit/asmjit/src/asmjit/core/archtraits.cpp
80
+ - ext/asmjit/asmjit/src/asmjit/core/archtraits.h
81
+ - ext/asmjit/asmjit/src/asmjit/core/assembler.cpp
82
+ - ext/asmjit/asmjit/src/asmjit/core/assembler.h
83
+ - ext/asmjit/asmjit/src/asmjit/core/builder.cpp
84
+ - ext/asmjit/asmjit/src/asmjit/core/builder.h
85
+ - ext/asmjit/asmjit/src/asmjit/core/codebuffer.h
86
+ - ext/asmjit/asmjit/src/asmjit/core/codeholder.cpp
87
+ - ext/asmjit/asmjit/src/asmjit/core/codeholder.h
88
+ - ext/asmjit/asmjit/src/asmjit/core/codewriter.cpp
89
+ - ext/asmjit/asmjit/src/asmjit/core/codewriter_p.h
90
+ - ext/asmjit/asmjit/src/asmjit/core/compiler.cpp
91
+ - ext/asmjit/asmjit/src/asmjit/core/compiler.h
92
+ - ext/asmjit/asmjit/src/asmjit/core/compilerdefs.h
93
+ - ext/asmjit/asmjit/src/asmjit/core/constpool.cpp
94
+ - ext/asmjit/asmjit/src/asmjit/core/constpool.h
95
+ - ext/asmjit/asmjit/src/asmjit/core/cpuinfo.cpp
96
+ - ext/asmjit/asmjit/src/asmjit/core/cpuinfo.h
97
+ - ext/asmjit/asmjit/src/asmjit/core/emithelper.cpp
98
+ - ext/asmjit/asmjit/src/asmjit/core/emithelper_p.h
99
+ - ext/asmjit/asmjit/src/asmjit/core/emitter.cpp
100
+ - ext/asmjit/asmjit/src/asmjit/core/emitter.h
101
+ - ext/asmjit/asmjit/src/asmjit/core/emitterutils.cpp
102
+ - ext/asmjit/asmjit/src/asmjit/core/emitterutils_p.h
103
+ - ext/asmjit/asmjit/src/asmjit/core/environment.cpp
104
+ - ext/asmjit/asmjit/src/asmjit/core/environment.h
105
+ - ext/asmjit/asmjit/src/asmjit/core/errorhandler.cpp
106
+ - ext/asmjit/asmjit/src/asmjit/core/errorhandler.h
107
+ - ext/asmjit/asmjit/src/asmjit/core/formatter.cpp
108
+ - ext/asmjit/asmjit/src/asmjit/core/formatter.h
109
+ - ext/asmjit/asmjit/src/asmjit/core/formatter_p.h
110
+ - ext/asmjit/asmjit/src/asmjit/core/func.cpp
111
+ - ext/asmjit/asmjit/src/asmjit/core/func.h
112
+ - ext/asmjit/asmjit/src/asmjit/core/funcargscontext.cpp
113
+ - ext/asmjit/asmjit/src/asmjit/core/funcargscontext_p.h
114
+ - ext/asmjit/asmjit/src/asmjit/core/globals.cpp
115
+ - ext/asmjit/asmjit/src/asmjit/core/globals.h
116
+ - ext/asmjit/asmjit/src/asmjit/core/inst.cpp
117
+ - ext/asmjit/asmjit/src/asmjit/core/inst.h
118
+ - ext/asmjit/asmjit/src/asmjit/core/jitallocator.cpp
119
+ - ext/asmjit/asmjit/src/asmjit/core/jitallocator.h
120
+ - ext/asmjit/asmjit/src/asmjit/core/jitruntime.cpp
121
+ - ext/asmjit/asmjit/src/asmjit/core/jitruntime.h
122
+ - ext/asmjit/asmjit/src/asmjit/core/logger.cpp
123
+ - ext/asmjit/asmjit/src/asmjit/core/logger.h
124
+ - ext/asmjit/asmjit/src/asmjit/core/misc_p.h
125
+ - ext/asmjit/asmjit/src/asmjit/core/operand.cpp
126
+ - ext/asmjit/asmjit/src/asmjit/core/operand.h
127
+ - ext/asmjit/asmjit/src/asmjit/core/osutils.cpp
128
+ - ext/asmjit/asmjit/src/asmjit/core/osutils.h
129
+ - ext/asmjit/asmjit/src/asmjit/core/osutils_p.h
130
+ - ext/asmjit/asmjit/src/asmjit/core/raassignment_p.h
131
+ - ext/asmjit/asmjit/src/asmjit/core/rabuilders_p.h
132
+ - ext/asmjit/asmjit/src/asmjit/core/radefs_p.h
133
+ - ext/asmjit/asmjit/src/asmjit/core/ralocal.cpp
134
+ - ext/asmjit/asmjit/src/asmjit/core/ralocal_p.h
135
+ - ext/asmjit/asmjit/src/asmjit/core/rapass.cpp
136
+ - ext/asmjit/asmjit/src/asmjit/core/rapass_p.h
137
+ - ext/asmjit/asmjit/src/asmjit/core/rastack.cpp
138
+ - ext/asmjit/asmjit/src/asmjit/core/rastack_p.h
139
+ - ext/asmjit/asmjit/src/asmjit/core/string.cpp
140
+ - ext/asmjit/asmjit/src/asmjit/core/string.h
141
+ - ext/asmjit/asmjit/src/asmjit/core/support.cpp
142
+ - ext/asmjit/asmjit/src/asmjit/core/support.h
143
+ - ext/asmjit/asmjit/src/asmjit/core/target.cpp
144
+ - ext/asmjit/asmjit/src/asmjit/core/target.h
145
+ - ext/asmjit/asmjit/src/asmjit/core/type.cpp
146
+ - ext/asmjit/asmjit/src/asmjit/core/type.h
147
+ - ext/asmjit/asmjit/src/asmjit/core/virtmem.cpp
148
+ - ext/asmjit/asmjit/src/asmjit/core/virtmem.h
149
+ - ext/asmjit/asmjit/src/asmjit/core/zone.cpp
150
+ - ext/asmjit/asmjit/src/asmjit/core/zone.h
151
+ - ext/asmjit/asmjit/src/asmjit/core/zonehash.cpp
152
+ - ext/asmjit/asmjit/src/asmjit/core/zonehash.h
153
+ - ext/asmjit/asmjit/src/asmjit/core/zonelist.cpp
154
+ - ext/asmjit/asmjit/src/asmjit/core/zonelist.h
155
+ - ext/asmjit/asmjit/src/asmjit/core/zonestack.cpp
156
+ - ext/asmjit/asmjit/src/asmjit/core/zonestack.h
157
+ - ext/asmjit/asmjit/src/asmjit/core/zonestring.h
158
+ - ext/asmjit/asmjit/src/asmjit/core/zonetree.cpp
159
+ - ext/asmjit/asmjit/src/asmjit/core/zonetree.h
160
+ - ext/asmjit/asmjit/src/asmjit/core/zonevector.cpp
161
+ - ext/asmjit/asmjit/src/asmjit/core/zonevector.h
162
+ - ext/asmjit/asmjit/src/asmjit/x86.h
163
+ - ext/asmjit/asmjit/src/asmjit/x86/x86archtraits_p.h
164
+ - ext/asmjit/asmjit/src/asmjit/x86/x86assembler.cpp
165
+ - ext/asmjit/asmjit/src/asmjit/x86/x86assembler.h
166
+ - ext/asmjit/asmjit/src/asmjit/x86/x86builder.cpp
167
+ - ext/asmjit/asmjit/src/asmjit/x86/x86builder.h
168
+ - ext/asmjit/asmjit/src/asmjit/x86/x86compiler.cpp
169
+ - ext/asmjit/asmjit/src/asmjit/x86/x86compiler.h
170
+ - ext/asmjit/asmjit/src/asmjit/x86/x86emithelper.cpp
171
+ - ext/asmjit/asmjit/src/asmjit/x86/x86emithelper_p.h
172
+ - ext/asmjit/asmjit/src/asmjit/x86/x86emitter.h
173
+ - ext/asmjit/asmjit/src/asmjit/x86/x86formatter.cpp
174
+ - ext/asmjit/asmjit/src/asmjit/x86/x86formatter_p.h
175
+ - ext/asmjit/asmjit/src/asmjit/x86/x86func.cpp
176
+ - ext/asmjit/asmjit/src/asmjit/x86/x86func_p.h
177
+ - ext/asmjit/asmjit/src/asmjit/x86/x86globals.h
178
+ - ext/asmjit/asmjit/src/asmjit/x86/x86instapi.cpp
179
+ - ext/asmjit/asmjit/src/asmjit/x86/x86instapi_p.h
180
+ - ext/asmjit/asmjit/src/asmjit/x86/x86instdb.cpp
181
+ - ext/asmjit/asmjit/src/asmjit/x86/x86instdb.h
182
+ - ext/asmjit/asmjit/src/asmjit/x86/x86instdb_p.h
183
+ - ext/asmjit/asmjit/src/asmjit/x86/x86opcode_p.h
184
+ - ext/asmjit/asmjit/src/asmjit/x86/x86operand.cpp
185
+ - ext/asmjit/asmjit/src/asmjit/x86/x86operand.h
186
+ - ext/asmjit/asmjit/src/asmjit/x86/x86rapass.cpp
187
+ - ext/asmjit/asmjit/src/asmjit/x86/x86rapass_p.h
188
+ - ext/asmjit/asmjit/test/asmjit_test_assembler.cpp
189
+ - ext/asmjit/asmjit/test/asmjit_test_assembler.h
190
+ - ext/asmjit/asmjit/test/asmjit_test_assembler_a64.cpp
191
+ - ext/asmjit/asmjit/test/asmjit_test_assembler_x64.cpp
192
+ - ext/asmjit/asmjit/test/asmjit_test_assembler_x86.cpp
193
+ - ext/asmjit/asmjit/test/asmjit_test_compiler.cpp
194
+ - ext/asmjit/asmjit/test/asmjit_test_compiler.h
195
+ - ext/asmjit/asmjit/test/asmjit_test_compiler_a64.cpp
196
+ - ext/asmjit/asmjit/test/asmjit_test_compiler_x86.cpp
197
+ - ext/asmjit/asmjit/test/asmjit_test_emitters.cpp
198
+ - ext/asmjit/asmjit/test/asmjit_test_instinfo.cpp
199
+ - ext/asmjit/asmjit/test/asmjit_test_misc.h
200
+ - ext/asmjit/asmjit/test/asmjit_test_perf.cpp
201
+ - ext/asmjit/asmjit/test/asmjit_test_perf.h
202
+ - ext/asmjit/asmjit/test/asmjit_test_perf_a64.cpp
203
+ - ext/asmjit/asmjit/test/asmjit_test_perf_x86.cpp
204
+ - ext/asmjit/asmjit/test/asmjit_test_unit.cpp
205
+ - ext/asmjit/asmjit/test/asmjit_test_x86_sections.cpp
206
+ - ext/asmjit/asmjit/test/asmjitutils.h
207
+ - ext/asmjit/asmjit/test/broken.cpp
208
+ - ext/asmjit/asmjit/test/broken.h
209
+ - ext/asmjit/asmjit/test/cmdline.h
210
+ - ext/asmjit/asmjit/test/performancetimer.h
211
+ - ext/asmjit/asmjit/tools/configure-makefiles.sh
212
+ - ext/asmjit/asmjit/tools/configure-ninja.sh
213
+ - ext/asmjit/asmjit/tools/configure-sanitizers.sh
214
+ - ext/asmjit/asmjit/tools/configure-vs2019-x64.bat
215
+ - ext/asmjit/asmjit/tools/configure-vs2019-x86.bat
216
+ - ext/asmjit/asmjit/tools/configure-vs2022-x64.bat
217
+ - ext/asmjit/asmjit/tools/configure-vs2022-x86.bat
218
+ - ext/asmjit/asmjit/tools/configure-xcode.sh
219
+ - ext/asmjit/asmjit/tools/enumgen.js
220
+ - ext/asmjit/asmjit/tools/enumgen.sh
221
+ - ext/asmjit/asmjit/tools/tablegen-arm.js
222
+ - ext/asmjit/asmjit/tools/tablegen-arm.sh
223
+ - ext/asmjit/asmjit/tools/tablegen-x86.js
224
+ - ext/asmjit/asmjit/tools/tablegen-x86.sh
225
+ - ext/asmjit/asmjit/tools/tablegen.js
226
+ - ext/asmjit/asmjit/tools/tablegen.sh
46
227
  - ext/asmjit/extconf.rb
47
228
  - lib/asmjit.rb
48
229
  - lib/asmjit/version.rb