crabstone 3.0.3 → 4.0.4

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 (347) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +59 -42
  3. data/README.md +37 -39
  4. data/lib/{arch → crabstone/arch/3}/arm.rb +28 -49
  5. data/lib/crabstone/arch/3/arm64.rb +124 -0
  6. data/lib/{arch → crabstone/arch/3}/arm64_const.rb +45 -86
  7. data/lib/{arch → crabstone/arch/3}/arm_const.rb +19 -47
  8. data/lib/crabstone/arch/3/mips.rb +57 -0
  9. data/lib/{arch → crabstone/arch/3}/mips_const.rb +18 -38
  10. data/lib/crabstone/arch/3/ppc.rb +73 -0
  11. data/lib/{arch → crabstone/arch/3}/ppc_const.rb +27 -43
  12. data/lib/crabstone/arch/3/sparc.rb +60 -0
  13. data/lib/{arch → crabstone/arch/3}/sparc_const.rb +49 -67
  14. data/lib/crabstone/arch/3/sysz.rb +67 -0
  15. data/lib/{arch → crabstone/arch/3}/sysz_const.rb +11 -25
  16. data/lib/crabstone/arch/3/x86.rb +82 -0
  17. data/lib/{arch → crabstone/arch/3}/x86_const.rb +15 -36
  18. data/lib/crabstone/arch/3/xcore.rb +59 -0
  19. data/lib/{arch → crabstone/arch/3}/xcore_const.rb +10 -22
  20. data/lib/crabstone/arch/4/arm.rb +110 -0
  21. data/lib/crabstone/arch/4/arm64.rb +125 -0
  22. data/lib/crabstone/arch/4/arm64_const.rb +1016 -0
  23. data/lib/crabstone/arch/4/arm_const.rb +785 -0
  24. data/lib/crabstone/arch/4/evm.rb +20 -0
  25. data/lib/crabstone/arch/4/evm_const.rb +161 -0
  26. data/lib/crabstone/arch/4/m680x.rb +106 -0
  27. data/lib/crabstone/arch/4/m680x_const.rb +426 -0
  28. data/lib/crabstone/arch/4/m68k.rb +129 -0
  29. data/lib/crabstone/arch/4/m68k_const.rb +496 -0
  30. data/lib/crabstone/arch/4/mips.rb +57 -0
  31. data/lib/crabstone/arch/4/mips_const.rb +869 -0
  32. data/lib/crabstone/arch/4/ppc.rb +73 -0
  33. data/lib/crabstone/arch/4/ppc_const.rb +1375 -0
  34. data/lib/crabstone/arch/4/sparc.rb +60 -0
  35. data/lib/crabstone/arch/4/sparc_const.rb +439 -0
  36. data/lib/crabstone/arch/4/sysz.rb +67 -0
  37. data/lib/crabstone/arch/4/sysz_const.rb +763 -0
  38. data/lib/crabstone/arch/4/tms320c64x.rb +87 -0
  39. data/lib/crabstone/arch/4/tms320c64x_const.rb +287 -0
  40. data/lib/crabstone/arch/4/x86.rb +91 -0
  41. data/lib/crabstone/arch/4/x86_const.rb +1972 -0
  42. data/lib/crabstone/arch/4/xcore.rb +59 -0
  43. data/lib/crabstone/arch/4/xcore_const.rb +171 -0
  44. data/lib/crabstone/arch/extension.rb +27 -0
  45. data/lib/crabstone/arch/register.rb +34 -0
  46. data/lib/crabstone/arch.rb +37 -0
  47. data/lib/crabstone/binding/3/detail.rb +36 -0
  48. data/lib/crabstone/binding/3/instruction.rb +23 -0
  49. data/lib/crabstone/binding/4/detail.rb +40 -0
  50. data/lib/crabstone/binding/4/instruction.rb +23 -0
  51. data/lib/crabstone/binding/structs.rb +32 -0
  52. data/lib/crabstone/binding.rb +59 -0
  53. data/lib/crabstone/constants.rb +110 -0
  54. data/lib/crabstone/cs_version.rb +57 -0
  55. data/lib/crabstone/disassembler.rb +147 -0
  56. data/lib/crabstone/error.rb +74 -0
  57. data/lib/crabstone/instruction.rb +178 -0
  58. data/lib/crabstone/version.rb +5 -0
  59. data/lib/crabstone.rb +5 -557
  60. metadata +142 -331
  61. data/MANIFEST +0 -312
  62. data/Rakefile +0 -27
  63. data/bin/genconst +0 -66
  64. data/bin/genreg +0 -99
  65. data/crabstone.gemspec +0 -27
  66. data/examples/hello_world.rb +0 -43
  67. data/lib/arch/arm64.rb +0 -167
  68. data/lib/arch/arm64_registers.rb +0 -295
  69. data/lib/arch/arm_registers.rb +0 -149
  70. data/lib/arch/mips.rb +0 -78
  71. data/lib/arch/mips_registers.rb +0 -208
  72. data/lib/arch/ppc.rb +0 -90
  73. data/lib/arch/ppc_registers.rb +0 -209
  74. data/lib/arch/sparc.rb +0 -79
  75. data/lib/arch/sparc_registers.rb +0 -121
  76. data/lib/arch/systemz.rb +0 -79
  77. data/lib/arch/sysz_registers.rb +0 -66
  78. data/lib/arch/x86.rb +0 -107
  79. data/lib/arch/x86_registers.rb +0 -265
  80. data/lib/arch/xcore.rb +0 -78
  81. data/lib/arch/xcore_registers.rb +0 -57
  82. data/test/MC/AArch64/basic-a64-instructions.s.cs +0 -2014
  83. data/test/MC/AArch64/gicv3-regs.s.cs +0 -111
  84. data/test/MC/AArch64/neon-2velem.s.cs +0 -113
  85. data/test/MC/AArch64/neon-3vdiff.s.cs +0 -143
  86. data/test/MC/AArch64/neon-aba-abd.s.cs +0 -28
  87. data/test/MC/AArch64/neon-across.s.cs +0 -40
  88. data/test/MC/AArch64/neon-add-pairwise.s.cs +0 -11
  89. data/test/MC/AArch64/neon-add-sub-instructions.s.cs +0 -21
  90. data/test/MC/AArch64/neon-bitwise-instructions.s.cs +0 -17
  91. data/test/MC/AArch64/neon-compare-instructions.s.cs +0 -136
  92. data/test/MC/AArch64/neon-crypto.s.cs +0 -15
  93. data/test/MC/AArch64/neon-extract.s.cs +0 -3
  94. data/test/MC/AArch64/neon-facge-facgt.s.cs +0 -13
  95. data/test/MC/AArch64/neon-frsqrt-frecp.s.cs +0 -7
  96. data/test/MC/AArch64/neon-halving-add-sub.s.cs +0 -25
  97. data/test/MC/AArch64/neon-max-min-pairwise.s.cs +0 -37
  98. data/test/MC/AArch64/neon-max-min.s.cs +0 -37
  99. data/test/MC/AArch64/neon-mla-mls-instructions.s.cs +0 -19
  100. data/test/MC/AArch64/neon-mov.s.cs +0 -74
  101. data/test/MC/AArch64/neon-mul-div-instructions.s.cs +0 -24
  102. data/test/MC/AArch64/neon-perm.s.cs +0 -43
  103. data/test/MC/AArch64/neon-rounding-halving-add.s.cs +0 -13
  104. data/test/MC/AArch64/neon-rounding-shift.s.cs +0 -15
  105. data/test/MC/AArch64/neon-saturating-add-sub.s.cs +0 -29
  106. data/test/MC/AArch64/neon-saturating-rounding-shift.s.cs +0 -15
  107. data/test/MC/AArch64/neon-saturating-shift.s.cs +0 -15
  108. data/test/MC/AArch64/neon-scalar-abs.s.cs +0 -8
  109. data/test/MC/AArch64/neon-scalar-add-sub.s.cs +0 -3
  110. data/test/MC/AArch64/neon-scalar-by-elem-mla.s.cs +0 -13
  111. data/test/MC/AArch64/neon-scalar-by-elem-mul.s.cs +0 -13
  112. data/test/MC/AArch64/neon-scalar-by-elem-saturating-mla.s.cs +0 -15
  113. data/test/MC/AArch64/neon-scalar-by-elem-saturating-mul.s.cs +0 -18
  114. data/test/MC/AArch64/neon-scalar-compare.s.cs +0 -12
  115. data/test/MC/AArch64/neon-scalar-cvt.s.cs +0 -34
  116. data/test/MC/AArch64/neon-scalar-dup.s.cs +0 -23
  117. data/test/MC/AArch64/neon-scalar-extract-narrow.s.cs +0 -10
  118. data/test/MC/AArch64/neon-scalar-fp-compare.s.cs +0 -21
  119. data/test/MC/AArch64/neon-scalar-mul.s.cs +0 -13
  120. data/test/MC/AArch64/neon-scalar-neg.s.cs +0 -6
  121. data/test/MC/AArch64/neon-scalar-recip.s.cs +0 -11
  122. data/test/MC/AArch64/neon-scalar-reduce-pairwise.s.cs +0 -3
  123. data/test/MC/AArch64/neon-scalar-rounding-shift.s.cs +0 -3
  124. data/test/MC/AArch64/neon-scalar-saturating-add-sub.s.cs +0 -25
  125. data/test/MC/AArch64/neon-scalar-saturating-rounding-shift.s.cs +0 -9
  126. data/test/MC/AArch64/neon-scalar-saturating-shift.s.cs +0 -9
  127. data/test/MC/AArch64/neon-scalar-shift-imm.s.cs +0 -42
  128. data/test/MC/AArch64/neon-scalar-shift.s.cs +0 -3
  129. data/test/MC/AArch64/neon-shift-left-long.s.cs +0 -13
  130. data/test/MC/AArch64/neon-shift.s.cs +0 -22
  131. data/test/MC/AArch64/neon-simd-copy.s.cs +0 -42
  132. data/test/MC/AArch64/neon-simd-ldst-multi-elem.s.cs +0 -197
  133. data/test/MC/AArch64/neon-simd-ldst-one-elem.s.cs +0 -129
  134. data/test/MC/AArch64/neon-simd-misc.s.cs +0 -213
  135. data/test/MC/AArch64/neon-simd-post-ldst-multi-elem.s.cs +0 -107
  136. data/test/MC/AArch64/neon-simd-shift.s.cs +0 -151
  137. data/test/MC/AArch64/neon-tbl.s.cs +0 -21
  138. data/test/MC/AArch64/trace-regs.s.cs +0 -383
  139. data/test/MC/ARM/arm-aliases.s.cs +0 -7
  140. data/test/MC/ARM/arm-arithmetic-aliases.s.cs +0 -50
  141. data/test/MC/ARM/arm-it-block.s.cs +0 -2
  142. data/test/MC/ARM/arm-memory-instructions.s.cs +0 -138
  143. data/test/MC/ARM/arm-shift-encoding.s.cs +0 -50
  144. data/test/MC/ARM/arm-thumb-trustzone.s.cs +0 -3
  145. data/test/MC/ARM/arm-trustzone.s.cs +0 -3
  146. data/test/MC/ARM/arm_addrmode2.s.cs +0 -15
  147. data/test/MC/ARM/arm_addrmode3.s.cs +0 -9
  148. data/test/MC/ARM/arm_instructions.s.cs +0 -25
  149. data/test/MC/ARM/basic-arm-instructions-v8.s.cs +0 -10
  150. data/test/MC/ARM/basic-arm-instructions.s.cs +0 -997
  151. data/test/MC/ARM/basic-thumb-instructions.s.cs +0 -130
  152. data/test/MC/ARM/basic-thumb2-instructions-v8.s.cs +0 -1
  153. data/test/MC/ARM/basic-thumb2-instructions.s.cs +0 -1242
  154. data/test/MC/ARM/crc32-thumb.s.cs +0 -7
  155. data/test/MC/ARM/crc32.s.cs +0 -7
  156. data/test/MC/ARM/dot-req.s.cs +0 -3
  157. data/test/MC/ARM/fp-armv8.s.cs +0 -52
  158. data/test/MC/ARM/idiv-thumb.s.cs +0 -3
  159. data/test/MC/ARM/idiv.s.cs +0 -3
  160. data/test/MC/ARM/load-store-acquire-release-v8-thumb.s.cs +0 -15
  161. data/test/MC/ARM/load-store-acquire-release-v8.s.cs +0 -15
  162. data/test/MC/ARM/mode-switch.s.cs +0 -7
  163. data/test/MC/ARM/neon-abs-encoding.s.cs +0 -15
  164. data/test/MC/ARM/neon-absdiff-encoding.s.cs +0 -39
  165. data/test/MC/ARM/neon-add-encoding.s.cs +0 -119
  166. data/test/MC/ARM/neon-bitcount-encoding.s.cs +0 -15
  167. data/test/MC/ARM/neon-bitwise-encoding.s.cs +0 -126
  168. data/test/MC/ARM/neon-cmp-encoding.s.cs +0 -88
  169. data/test/MC/ARM/neon-convert-encoding.s.cs +0 -27
  170. data/test/MC/ARM/neon-crypto.s.cs +0 -16
  171. data/test/MC/ARM/neon-dup-encoding.s.cs +0 -13
  172. data/test/MC/ARM/neon-minmax-encoding.s.cs +0 -57
  173. data/test/MC/ARM/neon-mov-encoding.s.cs +0 -76
  174. data/test/MC/ARM/neon-mul-accum-encoding.s.cs +0 -39
  175. data/test/MC/ARM/neon-mul-encoding.s.cs +0 -72
  176. data/test/MC/ARM/neon-neg-encoding.s.cs +0 -15
  177. data/test/MC/ARM/neon-pairwise-encoding.s.cs +0 -47
  178. data/test/MC/ARM/neon-reciprocal-encoding.s.cs +0 -13
  179. data/test/MC/ARM/neon-reverse-encoding.s.cs +0 -13
  180. data/test/MC/ARM/neon-satshift-encoding.s.cs +0 -75
  181. data/test/MC/ARM/neon-shift-encoding.s.cs +0 -238
  182. data/test/MC/ARM/neon-shiftaccum-encoding.s.cs +0 -97
  183. data/test/MC/ARM/neon-shuffle-encoding.s.cs +0 -59
  184. data/test/MC/ARM/neon-sub-encoding.s.cs +0 -82
  185. data/test/MC/ARM/neon-table-encoding.s.cs +0 -9
  186. data/test/MC/ARM/neon-v8.s.cs +0 -38
  187. data/test/MC/ARM/neon-vld-encoding.s.cs +0 -213
  188. data/test/MC/ARM/neon-vst-encoding.s.cs +0 -120
  189. data/test/MC/ARM/neon-vswp.s.cs +0 -3
  190. data/test/MC/ARM/neont2-abs-encoding.s.cs +0 -15
  191. data/test/MC/ARM/neont2-absdiff-encoding.s.cs +0 -39
  192. data/test/MC/ARM/neont2-add-encoding.s.cs +0 -65
  193. data/test/MC/ARM/neont2-bitcount-encoding.s.cs +0 -15
  194. data/test/MC/ARM/neont2-bitwise-encoding.s.cs +0 -15
  195. data/test/MC/ARM/neont2-cmp-encoding.s.cs +0 -17
  196. data/test/MC/ARM/neont2-convert-encoding.s.cs +0 -19
  197. data/test/MC/ARM/neont2-dup-encoding.s.cs +0 -19
  198. data/test/MC/ARM/neont2-minmax-encoding.s.cs +0 -57
  199. data/test/MC/ARM/neont2-mov-encoding.s.cs +0 -58
  200. data/test/MC/ARM/neont2-mul-accum-encoding.s.cs +0 -41
  201. data/test/MC/ARM/neont2-mul-encoding.s.cs +0 -31
  202. data/test/MC/ARM/neont2-neg-encoding.s.cs +0 -15
  203. data/test/MC/ARM/neont2-pairwise-encoding.s.cs +0 -43
  204. data/test/MC/ARM/neont2-reciprocal-encoding.s.cs +0 -13
  205. data/test/MC/ARM/neont2-reverse-encoding.s.cs +0 -13
  206. data/test/MC/ARM/neont2-satshift-encoding.s.cs +0 -75
  207. data/test/MC/ARM/neont2-shift-encoding.s.cs +0 -80
  208. data/test/MC/ARM/neont2-shiftaccum-encoding.s.cs +0 -97
  209. data/test/MC/ARM/neont2-shuffle-encoding.s.cs +0 -23
  210. data/test/MC/ARM/neont2-sub-encoding.s.cs +0 -23
  211. data/test/MC/ARM/neont2-table-encoding.s.cs +0 -9
  212. data/test/MC/ARM/neont2-vld-encoding.s.cs +0 -51
  213. data/test/MC/ARM/neont2-vst-encoding.s.cs +0 -48
  214. data/test/MC/ARM/simple-fp-encoding.s.cs +0 -157
  215. data/test/MC/ARM/thumb-fp-armv8.s.cs +0 -51
  216. data/test/MC/ARM/thumb-hints.s.cs +0 -12
  217. data/test/MC/ARM/thumb-neon-crypto.s.cs +0 -16
  218. data/test/MC/ARM/thumb-neon-v8.s.cs +0 -38
  219. data/test/MC/ARM/thumb-shift-encoding.s.cs +0 -19
  220. data/test/MC/ARM/thumb.s.cs +0 -19
  221. data/test/MC/ARM/thumb2-b.w-encodingT4.s.cs +0 -2
  222. data/test/MC/ARM/thumb2-branches.s.cs +0 -85
  223. data/test/MC/ARM/thumb2-mclass.s.cs +0 -41
  224. data/test/MC/ARM/thumb2-narrow-dp.ll.cs +0 -379
  225. data/test/MC/ARM/thumb2-pldw.s.cs +0 -2
  226. data/test/MC/ARM/vfp4-thumb.s.cs +0 -13
  227. data/test/MC/ARM/vfp4.s.cs +0 -13
  228. data/test/MC/ARM/vpush-vpop-thumb.s.cs +0 -9
  229. data/test/MC/ARM/vpush-vpop.s.cs +0 -9
  230. data/test/MC/Mips/hilo-addressing.s.cs +0 -4
  231. data/test/MC/Mips/micromips-alu-instructions-EB.s.cs +0 -33
  232. data/test/MC/Mips/micromips-alu-instructions.s.cs +0 -33
  233. data/test/MC/Mips/micromips-branch-instructions-EB.s.cs +0 -11
  234. data/test/MC/Mips/micromips-branch-instructions.s.cs +0 -11
  235. data/test/MC/Mips/micromips-expansions.s.cs +0 -20
  236. data/test/MC/Mips/micromips-jump-instructions-EB.s.cs +0 -5
  237. data/test/MC/Mips/micromips-jump-instructions.s.cs +0 -6
  238. data/test/MC/Mips/micromips-loadstore-instructions-EB.s.cs +0 -9
  239. data/test/MC/Mips/micromips-loadstore-instructions.s.cs +0 -9
  240. data/test/MC/Mips/micromips-loadstore-unaligned-EB.s.cs +0 -5
  241. data/test/MC/Mips/micromips-loadstore-unaligned.s.cs +0 -5
  242. data/test/MC/Mips/micromips-movcond-instructions-EB.s.cs +0 -5
  243. data/test/MC/Mips/micromips-movcond-instructions.s.cs +0 -5
  244. data/test/MC/Mips/micromips-multiply-instructions-EB.s.cs +0 -5
  245. data/test/MC/Mips/micromips-multiply-instructions.s.cs +0 -5
  246. data/test/MC/Mips/micromips-shift-instructions-EB.s.cs +0 -9
  247. data/test/MC/Mips/micromips-shift-instructions.s.cs +0 -9
  248. data/test/MC/Mips/micromips-trap-instructions-EB.s.cs +0 -13
  249. data/test/MC/Mips/micromips-trap-instructions.s.cs +0 -13
  250. data/test/MC/Mips/mips-alu-instructions.s.cs +0 -53
  251. data/test/MC/Mips/mips-control-instructions-64.s.cs +0 -33
  252. data/test/MC/Mips/mips-control-instructions.s.cs +0 -33
  253. data/test/MC/Mips/mips-coprocessor-encodings.s.cs +0 -17
  254. data/test/MC/Mips/mips-dsp-instructions.s.cs +0 -43
  255. data/test/MC/Mips/mips-expansions.s.cs +0 -20
  256. data/test/MC/Mips/mips-fpu-instructions.s.cs +0 -93
  257. data/test/MC/Mips/mips-jump-instructions.s.cs +0 -1
  258. data/test/MC/Mips/mips-memory-instructions.s.cs +0 -17
  259. data/test/MC/Mips/mips-register-names.s.cs +0 -33
  260. data/test/MC/Mips/mips64-alu-instructions.s.cs +0 -47
  261. data/test/MC/Mips/mips64-instructions.s.cs +0 -3
  262. data/test/MC/Mips/mips64-register-names.s.cs +0 -33
  263. data/test/MC/Mips/mips_directives.s.cs +0 -12
  264. data/test/MC/Mips/nabi-regs.s.cs +0 -12
  265. data/test/MC/Mips/set-at-directive.s.cs +0 -6
  266. data/test/MC/Mips/test_2r.s.cs +0 -16
  267. data/test/MC/Mips/test_2rf.s.cs +0 -33
  268. data/test/MC/Mips/test_3r.s.cs +0 -243
  269. data/test/MC/Mips/test_3rf.s.cs +0 -83
  270. data/test/MC/Mips/test_bit.s.cs +0 -49
  271. data/test/MC/Mips/test_cbranch.s.cs +0 -11
  272. data/test/MC/Mips/test_ctrlregs.s.cs +0 -33
  273. data/test/MC/Mips/test_elm.s.cs +0 -16
  274. data/test/MC/Mips/test_elm_insert.s.cs +0 -4
  275. data/test/MC/Mips/test_elm_insve.s.cs +0 -5
  276. data/test/MC/Mips/test_i10.s.cs +0 -5
  277. data/test/MC/Mips/test_i5.s.cs +0 -45
  278. data/test/MC/Mips/test_i8.s.cs +0 -11
  279. data/test/MC/Mips/test_lsa.s.cs +0 -5
  280. data/test/MC/Mips/test_mi10.s.cs +0 -24
  281. data/test/MC/Mips/test_vec.s.cs +0 -8
  282. data/test/MC/PowerPC/ppc64-encoding-bookII.s.cs +0 -25
  283. data/test/MC/PowerPC/ppc64-encoding-bookIII.s.cs +0 -35
  284. data/test/MC/PowerPC/ppc64-encoding-ext.s.cs +0 -535
  285. data/test/MC/PowerPC/ppc64-encoding-fp.s.cs +0 -110
  286. data/test/MC/PowerPC/ppc64-encoding-vmx.s.cs +0 -170
  287. data/test/MC/PowerPC/ppc64-encoding.s.cs +0 -202
  288. data/test/MC/PowerPC/ppc64-operands.s.cs +0 -32
  289. data/test/MC/README +0 -6
  290. data/test/MC/Sparc/sparc-alu-instructions.s.cs +0 -47
  291. data/test/MC/Sparc/sparc-atomic-instructions.s.cs +0 -7
  292. data/test/MC/Sparc/sparc-ctrl-instructions.s.cs +0 -11
  293. data/test/MC/Sparc/sparc-fp-instructions.s.cs +0 -59
  294. data/test/MC/Sparc/sparc-mem-instructions.s.cs +0 -25
  295. data/test/MC/Sparc/sparc-vis.s.cs +0 -2
  296. data/test/MC/Sparc/sparc64-alu-instructions.s.cs +0 -13
  297. data/test/MC/Sparc/sparc64-ctrl-instructions.s.cs +0 -102
  298. data/test/MC/Sparc/sparcv8-instructions.s.cs +0 -7
  299. data/test/MC/Sparc/sparcv9-instructions.s.cs +0 -1
  300. data/test/MC/SystemZ/insn-good-z196.s.cs +0 -589
  301. data/test/MC/SystemZ/insn-good.s.cs +0 -2265
  302. data/test/MC/SystemZ/regs-good.s.cs +0 -45
  303. data/test/MC/X86/3DNow.s.cs +0 -29
  304. data/test/MC/X86/address-size.s.cs +0 -5
  305. data/test/MC/X86/avx512-encodings.s.cs +0 -12
  306. data/test/MC/X86/intel-syntax-encoding.s.cs +0 -30
  307. data/test/MC/X86/x86-32-avx.s.cs +0 -833
  308. data/test/MC/X86/x86-32-fma3.s.cs +0 -169
  309. data/test/MC/X86/x86-32-ms-inline-asm.s.cs +0 -27
  310. data/test/MC/X86/x86_64-avx-clmul-encoding.s.cs +0 -11
  311. data/test/MC/X86/x86_64-avx-encoding.s.cs +0 -1058
  312. data/test/MC/X86/x86_64-bmi-encoding.s.cs +0 -51
  313. data/test/MC/X86/x86_64-encoding.s.cs +0 -59
  314. data/test/MC/X86/x86_64-fma3-encoding.s.cs +0 -169
  315. data/test/MC/X86/x86_64-fma4-encoding.s.cs +0 -98
  316. data/test/MC/X86/x86_64-hle-encoding.s.cs +0 -3
  317. data/test/MC/X86/x86_64-imm-widths.s.cs +0 -27
  318. data/test/MC/X86/x86_64-rand-encoding.s.cs +0 -13
  319. data/test/MC/X86/x86_64-rtm-encoding.s.cs +0 -4
  320. data/test/MC/X86/x86_64-sse4a.s.cs +0 -1
  321. data/test/MC/X86/x86_64-tbm-encoding.s.cs +0 -40
  322. data/test/MC/X86/x86_64-xop-encoding.s.cs +0 -152
  323. data/test/README +0 -6
  324. data/test/test.rb +0 -205
  325. data/test/test.rb.SPEC +0 -235
  326. data/test/test_arm.rb +0 -202
  327. data/test/test_arm.rb.SPEC +0 -275
  328. data/test/test_arm64.rb +0 -150
  329. data/test/test_arm64.rb.SPEC +0 -116
  330. data/test/test_detail.rb +0 -228
  331. data/test/test_detail.rb.SPEC +0 -322
  332. data/test/test_exhaustive.rb +0 -80
  333. data/test/test_mips.rb +0 -118
  334. data/test/test_mips.rb.SPEC +0 -91
  335. data/test/test_ppc.rb +0 -137
  336. data/test/test_ppc.rb.SPEC +0 -84
  337. data/test/test_sanity.rb +0 -83
  338. data/test/test_skipdata.rb +0 -111
  339. data/test/test_skipdata.rb.SPEC +0 -58
  340. data/test/test_sparc.rb +0 -113
  341. data/test/test_sparc.rb.SPEC +0 -116
  342. data/test/test_sysz.rb +0 -111
  343. data/test/test_sysz.rb.SPEC +0 -61
  344. data/test/test_x86.rb +0 -189
  345. data/test/test_x86.rb.SPEC +0 -579
  346. data/test/test_xcore.rb +0 -100
  347. data/test/test_xcore.rb.SPEC +0 -75
data/test/test_sparc.rb DELETED
@@ -1,113 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Library by Nguyen Anh Quynh
4
- # Original binding by Nguyen Anh Quynh and Tan Sheng Di
5
- # Additional binding work by Ben Nagy
6
- # (c) 2013 COSEINC. All Rights Reserved.
7
-
8
- require 'crabstone'
9
- require 'stringio'
10
-
11
- module TestSparc
12
-
13
- SPARC_CODE = "\x80\xa0\x40\x02\x85\xc2\x60\x08\x85\xe8\x20\x01\x81\xe8\x00\x00\x90\x10\x20\x01\xd5\xf6\x10\x16\x21\x00\x00\x0a\x86\x00\x40\x02\x01\x00\x00\x00\x12\xbf\xff\xff\x10\xbf\xff\xff\xa0\x02\x00\x09\x0d\xbf\xff\xff\xd4\x20\x60\x00\xd4\x4e\x00\x16\x2a\xc2\x80\x03"
14
- SPARCV9_CODE = "\x81\xa8\x0a\x24\x89\xa0\x10\x20\x89\xa0\x1a\x60\x89\xa0\x00\xe0"
15
-
16
- include Crabstone
17
- include Crabstone::Sparc
18
-
19
- @platforms = [
20
- Hash[
21
- 'arch' => ARCH_SPARC,
22
- 'mode' => MODE_BIG_ENDIAN,
23
- 'code' => SPARC_CODE,
24
- 'comment' => "Sparc"
25
- ],
26
- Hash[
27
- 'arch' => ARCH_SPARC,
28
- 'mode' => MODE_BIG_ENDIAN + MODE_V9,
29
- 'code' => SPARCV9_CODE,
30
- 'comment' => "SparcV9"
31
- ]
32
- ]
33
-
34
- def self.uint32 i
35
- Integer(i) & 0xffffffff
36
- end
37
-
38
- def self.print_detail cs, insn, sio
39
- if insn.op_count > 0
40
- sio.puts "\top_count: #{insn.op_count}"
41
- insn.operands.each_with_index do |op,idx|
42
- case op[:type]
43
- when OP_REG
44
- sio.puts "\t\toperands[#{idx}].type: REG = #{cs.reg_name(op.value)}"
45
- when OP_IMM
46
- sio.puts "\t\toperands[#{idx}].type: IMM = 0x#{self.uint32(op.value).to_s(16)}"
47
- when OP_MEM
48
- sio.puts "\t\toperands[#{idx}].type: MEM"
49
- if op.value[:base].nonzero?
50
- sio.puts "\t\t\toperands[#{idx}].mem.base: REG = %s" % cs.reg_name(op.value[:base])
51
- end
52
- if op.value[:index].nonzero?
53
- sio.puts "\t\t\toperands[#{idx}].mem.index: REG = %s" % cs.reg_name(op.value[:index])
54
- end
55
- if op.value[:disp].nonzero?
56
- sio.puts "\t\t\toperands[#{idx}].mem.disp: 0x%x" % (self.uint32(op.value[:disp]))
57
- end
58
- end
59
- end
60
- end
61
-
62
- if insn.cc.nonzero?
63
- sio.puts("\tCode condition: %u" % insn.cc)
64
- end
65
-
66
- if insn.hint.nonzero?
67
- sio.puts("\tHint code: %u" % insn.hint)
68
- end
69
-
70
- sio.puts
71
- end
72
-
73
- ours = StringIO.new
74
-
75
- begin
76
- cs = Disassembler.new(0,0)
77
- print "Sparc Test: Capstone v #{cs.version.join('.')} - "
78
- ensure
79
- cs.close
80
- end
81
-
82
- #Test through all modes and architectures
83
- @platforms.each do |p|
84
- ours.puts "****************"
85
- ours.puts "Platform: #{p['comment']}"
86
- ours.puts "Code:#{p['code'].bytes.map {|b| "0x%.2x" % b}.join(' ')} "
87
- ours.puts "Disasm:"
88
-
89
- cs = Disassembler.new(p['arch'], p['mode'])
90
- cs.decomposer = true
91
- cache = nil
92
-
93
- cs.disasm(p['code'], 0x1000).each {|insn|
94
- ours.puts "0x#{insn.address.to_s(16)}:\t#{insn.mnemonic}\t#{insn.op_str}"
95
- self.print_detail(cs, insn, ours)
96
- cache = insn.address + insn.size
97
- }
98
-
99
- ours.printf("0x%x:\n", cache)
100
- ours.puts
101
- cs.close
102
- end
103
-
104
- ours.rewind
105
- theirs = File.binread(__FILE__ + ".SPEC")
106
- if ours.read == theirs
107
- puts "#{__FILE__}: PASS"
108
- else
109
- ours.rewind
110
- puts ours.read
111
- puts "#{__FILE__}: FAIL"
112
- end
113
- end
@@ -1,116 +0,0 @@
1
- ****************
2
- Platform: Sparc
3
- Code:0x80 0xa0 0x40 0x02 0x85 0xc2 0x60 0x08 0x85 0xe8 0x20 0x01 0x81 0xe8 0x00 0x00 0x90 0x10 0x20 0x01 0xd5 0xf6 0x10 0x16 0x21 0x00 0x00 0x0a 0x86 0x00 0x40 0x02 0x01 0x00 0x00 0x00 0x12 0xbf 0xff 0xff 0x10 0xbf 0xff 0xff 0xa0 0x02 0x00 0x09 0x0d 0xbf 0xff 0xff 0xd4 0x20 0x60 0x00 0xd4 0x4e 0x00 0x16 0x2a 0xc2 0x80 0x03
4
- Disasm:
5
- 0x1000: cmp %g1, %g2
6
- op_count: 2
7
- operands[0].type: REG = g1
8
- operands[1].type: REG = g2
9
-
10
- 0x1004: jmpl %o1+8, %g2
11
- op_count: 2
12
- operands[0].type: MEM
13
- operands[0].mem.base: REG = o1
14
- operands[0].mem.disp: 0x8
15
- operands[1].type: REG = g2
16
-
17
- 0x1008: restore %g0, 1, %g2
18
- op_count: 3
19
- operands[0].type: REG = g0
20
- operands[1].type: IMM = 0x1
21
- operands[2].type: REG = g2
22
-
23
- 0x100c: restore
24
-
25
- 0x1010: mov 1, %o0
26
- op_count: 2
27
- operands[0].type: IMM = 0x1
28
- operands[1].type: REG = o0
29
-
30
- 0x1014: casx [%i0], %l6, %o2
31
- op_count: 3
32
- operands[0].type: MEM
33
- operands[0].mem.base: REG = i0
34
- operands[1].type: REG = l6
35
- operands[2].type: REG = o2
36
-
37
- 0x1018: sethi 0xa, %l0
38
- op_count: 2
39
- operands[0].type: IMM = 0xa
40
- operands[1].type: REG = l0
41
-
42
- 0x101c: add %g1, %g2, %g3
43
- op_count: 3
44
- operands[0].type: REG = g1
45
- operands[1].type: REG = g2
46
- operands[2].type: REG = g3
47
-
48
- 0x1020: nop
49
-
50
- 0x1024: bne 0x1020
51
- op_count: 1
52
- operands[0].type: IMM = 0x1020
53
- Code condition: 265
54
-
55
- 0x1028: ba 0x1024
56
- op_count: 1
57
- operands[0].type: IMM = 0x1024
58
-
59
- 0x102c: add %o0, %o1, %l0
60
- op_count: 3
61
- operands[0].type: REG = o0
62
- operands[1].type: REG = o1
63
- operands[2].type: REG = l0
64
-
65
- 0x1030: fbg 0x102c
66
- op_count: 1
67
- operands[0].type: IMM = 0x102c
68
- Code condition: 278
69
-
70
- 0x1034: st %o2, [%g1]
71
- op_count: 2
72
- operands[0].type: REG = o2
73
- operands[1].type: MEM
74
- operands[1].mem.base: REG = g1
75
-
76
- 0x1038: ldsb [%i0+%l6], %o2
77
- op_count: 2
78
- operands[0].type: MEM
79
- operands[0].mem.base: REG = i0
80
- operands[0].mem.index: REG = l6
81
- operands[1].type: REG = o2
82
-
83
- 0x103c: brnz,a,pn %o2, 0x1048
84
- op_count: 2
85
- operands[0].type: REG = o2
86
- operands[1].type: IMM = 0x1048
87
- Hint code: 5
88
-
89
- 0x1040:
90
-
91
- ****************
92
- Platform: SparcV9
93
- Code:0x81 0xa8 0x0a 0x24 0x89 0xa0 0x10 0x20 0x89 0xa0 0x1a 0x60 0x89 0xa0 0x00 0xe0
94
- Disasm:
95
- 0x1000: fcmps %f0, %f4
96
- op_count: 2
97
- operands[0].type: REG = f0
98
- operands[1].type: REG = f4
99
-
100
- 0x1004: fstox %f0, %f4
101
- op_count: 2
102
- operands[0].type: REG = f0
103
- operands[1].type: REG = f4
104
-
105
- 0x1008: fqtoi %f0, %f4
106
- op_count: 2
107
- operands[0].type: REG = f0
108
- operands[1].type: REG = f4
109
-
110
- 0x100c: fnegq %f0, %f4
111
- op_count: 2
112
- operands[0].type: REG = f0
113
- operands[1].type: REG = f4
114
-
115
- 0x1010:
116
-
data/test/test_sysz.rb DELETED
@@ -1,111 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Library by Nguyen Anh Quynh
4
- # Original binding by Nguyen Anh Quynh and Tan Sheng Di
5
- # Additional binding work by Ben Nagy
6
- # (c) 2013 COSEINC. All Rights Reserved.
7
-
8
- require 'crabstone'
9
- require 'stringio'
10
-
11
- module TestSysZ
12
-
13
- SYSZ_CODE = "\xed\x00\x00\x00\x00\x1a\x5a\x0f\x1f\xff\xc2\x09\x80\x00\x00\x00\x07\xf7\xeb\x2a\xff\xff\x7f\x57\xe3\x01\xff\xff\x7f\x57\xeb\x00\xf0\x00\x00\x24\xb2\x4f\x00\x78\xec\x18\x00\x00\xc1\x7f"
14
-
15
- include Crabstone
16
- include Crabstone::SysZ
17
-
18
- @platforms = [
19
- Hash[
20
- 'arch' => ARCH_SYSZ,
21
- 'mode' => MODE_BIG_ENDIAN,
22
- 'code' => SYSZ_CODE,
23
- 'comment' => "SystemZ"
24
- ]
25
- ]
26
-
27
- def self.uint32 i
28
- Integer(i) & 0xffffffff
29
- end
30
-
31
- def self.uint64 i
32
- Integer(i) & 0xffffffffffffffff
33
- end
34
-
35
- def self.print_detail cs, insn, sio
36
- if insn.op_count > 0
37
- sio.puts "\top_count: #{insn.op_count}"
38
- insn.operands.each_with_index do |op,idx|
39
- case op[:type]
40
- when OP_REG
41
- sio.puts "\t\toperands[#{idx}].type: REG = #{cs.reg_name(op.value)}"
42
- when OP_ACREG
43
- sio.puts "\t\toperands[#{idx}].type: ACREG = #{op.value}"
44
- when OP_IMM
45
- sio.puts "\t\toperands[#{idx}].type: IMM = 0x#{self.uint64(op.value).to_s(16)}"
46
- when OP_MEM
47
- sio.puts "\t\toperands[#{idx}].type: MEM"
48
- if op.value[:base].nonzero?
49
- sio.puts "\t\t\toperands[#{idx}].mem.base: REG = %s" % cs.reg_name(op.value[:base])
50
- end
51
- if op.value[:index].nonzero?
52
- sio.puts "\t\t\toperands[#{idx}].mem.index: REG = %s" % cs.reg_name(op.value[:index])
53
- end
54
- if op.value[:length].nonzero?
55
- sio.puts "\t\t\toperands[#{idx}].mem.length: REG = %s" % cs.reg_name(op.value[:length])
56
- end
57
- if op.value[:disp].nonzero?
58
- sio.puts "\t\t\toperands[#{idx}].mem.disp: 0x%x" % (self.uint32(op.value[:disp]))
59
- end
60
- end
61
- end
62
- end
63
-
64
- if insn.cc.nonzero?
65
- sio.puts("\tCode condition: %u" % insn.cc)
66
- end
67
-
68
- sio.puts
69
- end
70
-
71
- ours = StringIO.new
72
-
73
- begin
74
- cs = Disassembler.new(0,0)
75
- print "SystemZ Test: Capstone v #{cs.version.join('.')} - "
76
- ensure
77
- cs.close
78
- end
79
-
80
- #Test through all modes and architectures
81
- @platforms.each do |p|
82
- ours.puts "****************"
83
- ours.puts "Platform: #{p['comment']}"
84
- ours.puts "Code:#{p['code'].bytes.map {|b| "0x%.2x" % b}.join(' ')} "
85
- ours.puts "Disasm:"
86
-
87
- cs = Disassembler.new(p['arch'], p['mode'])
88
- cs.decomposer = true
89
- cache = nil
90
-
91
- cs.disasm(p['code'], 0x1000).each {|insn|
92
- ours.puts "0x#{insn.address.to_s(16)}:\t#{insn.mnemonic}\t#{insn.op_str}"
93
- self.print_detail(cs, insn, ours)
94
- cache = insn.address + insn.size
95
- }
96
-
97
- ours.printf("0x%x:\n", cache)
98
- ours.puts
99
- cs.close
100
- end
101
-
102
- ours.rewind
103
- theirs = File.binread(__FILE__ + ".SPEC")
104
- if ours.read == theirs
105
- puts "#{__FILE__}: PASS"
106
- else
107
- ours.rewind
108
- puts ours.read
109
- puts "#{__FILE__}: FAIL"
110
- end
111
- end
@@ -1,61 +0,0 @@
1
- ****************
2
- Platform: SystemZ
3
- Code:0xed 0x00 0x00 0x00 0x00 0x1a 0x5a 0x0f 0x1f 0xff 0xc2 0x09 0x80 0x00 0x00 0x00 0x07 0xf7 0xeb 0x2a 0xff 0xff 0x7f 0x57 0xe3 0x01 0xff 0xff 0x7f 0x57 0xeb 0x00 0xf0 0x00 0x00 0x24 0xb2 0x4f 0x00 0x78 0xec 0x18 0x00 0x00 0xc1 0x7f
4
- Disasm:
5
- 0x1000: adb %f0, 0
6
- op_count: 2
7
- operands[0].type: REG = f0
8
- operands[1].type: IMM = 0x0
9
-
10
- 0x1006: a %r0, 0xfff(%r15, %r1)
11
- op_count: 2
12
- operands[0].type: REG = 0
13
- operands[1].type: MEM
14
- operands[1].mem.base: REG = 1
15
- operands[1].mem.index: REG = 15
16
- operands[1].mem.disp: 0xfff
17
-
18
- 0x100a: afi %r0, -0x80000000
19
- op_count: 2
20
- operands[0].type: REG = 0
21
- operands[1].type: IMM = 0xffffffff80000000
22
-
23
- 0x1010: br %r7
24
- op_count: 1
25
- operands[0].type: REG = 7
26
-
27
- 0x1012: xiy 0x7ffff(%r15), 0x2a
28
- op_count: 2
29
- operands[0].type: MEM
30
- operands[0].mem.base: REG = 15
31
- operands[0].mem.disp: 0x7ffff
32
- operands[1].type: IMM = 0x2a
33
-
34
- 0x1018: xy %r0, 0x7ffff(%r1, %r15)
35
- op_count: 2
36
- operands[0].type: REG = 0
37
- operands[1].type: MEM
38
- operands[1].mem.base: REG = 15
39
- operands[1].mem.index: REG = 1
40
- operands[1].mem.disp: 0x7ffff
41
-
42
- 0x101e: stmg %r0, %r0, 0(%r15)
43
- op_count: 3
44
- operands[0].type: REG = 0
45
- operands[1].type: REG = 0
46
- operands[2].type: MEM
47
- operands[2].mem.base: REG = 15
48
-
49
- 0x1024: ear %r7, %a8
50
- op_count: 2
51
- operands[0].type: REG = 7
52
- operands[1].type: ACREG = 8
53
-
54
- 0x1028: clije %r1, 0xc1, 0x1028
55
- op_count: 3
56
- operands[0].type: REG = 1
57
- operands[1].type: IMM = 0xc1
58
- operands[2].type: IMM = 0x1028
59
-
60
- 0x102e:
61
-
data/test/test_x86.rb DELETED
@@ -1,189 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Library by Nguyen Anh Quynh
4
- # Original binding by Nguyen Anh Quynh and Tan Sheng Di
5
- # Additional binding work by Ben Nagy
6
- # (c) 2013 COSEINC. All Rights Reserved.
7
-
8
- # This is UGLY, but it's ported C test code, sorry. :(
9
-
10
- require 'crabstone'
11
- require 'stringio'
12
-
13
- module TestX86
14
-
15
- X86_CODE64 = "\x55\x48\x8b\x05\xb8\x13\x00\x00"
16
- X86_CODE16 = "\x8d\x4c\x32\x08\x01\xd8\x81\xc6\x34\x12\x00\x00\x05\x23\x01\x00\x00\x36\x8b\x84\x91\x23\x01\x00\x00\x41\x8d\x84\x39\x89\x67\x00\x00\x8d\x87\x89\x67\x00\x00\xb4\xc6"
17
- X86_CODE32 = "\x8d\x4c\x32\x08\x01\xd8\x81\xc6\x34\x12\x00\x00\x05\x23\x01\x00\x00\x36\x8b\x84\x91\x23\x01\x00\x00\x41\x8d\x84\x39\x89\x67\x00\x00\x8d\x87\x89\x67\x00\x00\xb4\xc6"
18
-
19
- include Crabstone
20
- include Crabstone::X86
21
-
22
- @platforms = [
23
- Hash[
24
- 'arch' => ARCH_X86,
25
- 'mode' => MODE_16,
26
- 'code' => X86_CODE16,
27
- 'comment' => "X86 16bit (Intel syntax)"
28
- ],
29
- Hash[
30
- 'arch' => ARCH_X86,
31
- 'mode' => MODE_32,
32
- 'code' => X86_CODE32,
33
- 'syntax' => :att,
34
- 'comment' => "X86 32 (AT&T syntax)"
35
- ],
36
- Hash[
37
- 'arch' => ARCH_X86,
38
- 'mode' => MODE_32,
39
- 'code' => X86_CODE32,
40
- 'comment' => "X86 32 (Intel syntax)"
41
- ],
42
- Hash[
43
- 'arch' => ARCH_X86,
44
- 'mode' => MODE_64,
45
- 'code' => X86_CODE64,
46
- 'comment' => "X86 64 (Intel syntax)"
47
- ]
48
- ]
49
-
50
- def self.uint32 i
51
- Integer(i) & 0xffffffff
52
- end
53
-
54
- def self.uint64 i
55
- Integer(i) & 0xffffffffffffffff
56
- end
57
-
58
- def self.print_detail cs, i, mode, sio
59
-
60
- sio.puts("\tPrefix:#{i.prefix.to_a.map {|b| "0x%.2x" % b}.join(' ')} ")
61
- sio.puts("\tOpcode:#{i.opcode.to_a.map {|b| "0x%.2x" % b}.join(' ')} ")
62
- sio.printf("\trex: 0x%x\n", uint32(i[:rex]))
63
- sio.printf("\taddr_size: %u\n", uint32(i[:addr_size]))
64
- sio.printf("\tmodrm: 0x%x\n", i.modrm)
65
- sio.printf("\tdisp: 0x%x\n", (self.uint32(i.disp)))
66
-
67
- # // SIB is not available in 16-bit mode
68
- unless mode == MODE_16
69
- sio.printf("\tsib: 0x%x\n", i.sib)
70
- unless i.sib_index == REG_INVALID
71
- sio.printf(
72
- "\t\tsib_base: %s\n\t\tsib_index: %s\n\t\tsib_scale: %u\n",
73
- cs.reg_name(i.sib_base),
74
- cs.reg_name(i.sib_index),
75
- i.sib_scale
76
- )
77
- end
78
- end
79
-
80
- sio.printf("\tsse_cc: %d\n", i[:sse_cc]) if i[:sse_cc].nonzero?
81
- sio.printf("\tavx_cc: %d\n", i[:avx_cc]) if i[:avx_cc].nonzero?
82
- sio.printf("\tavx_sae: True\n") if i[:avx_sae]
83
- sio.printf("\tavx_rm: %d\n", i[:avx_rm]) if i[:avx_rm].nonzero?
84
-
85
- if i.reads_reg?( :eax ) || i.reads_reg?( 19 ) || i.reads_reg?( REG_EAX )
86
- print '[eax:r] '
87
- unless i.reads_reg?( :eax ) && i.reads_reg?( 'eax' ) && i.reads_reg?( 19 ) && i.reads_reg?( REG_EAX )
88
- fail "Error in reg read decomposition"
89
- end
90
- end
91
-
92
- if i.writes_reg?( 'eax' ) || i.writes_reg?( 19 ) || i.writes_reg?( REG_EAX )
93
- print '[eax:w] '
94
- unless i.writes_reg?( 'eax' ) && i.writes_reg?( 19 ) && i.writes_reg?( REG_EAX )
95
- fail "Error in reg write decomposition"
96
- end
97
- end
98
-
99
- if (count=i.op_count(OP_IMM)).nonzero?
100
- sio.puts "\timm_count: #{count}"
101
- i.operands.select(&:imm?).each_with_index {|op,j|
102
- sio.puts "\t\timms[#{j+1}]: 0x#{self.uint64(op.value).to_s(16)}"
103
- }
104
- end
105
-
106
- if i.op_count > 0 then
107
- sio.puts "\top_count: #{i.op_count}"
108
- i.operands.each_with_index do |op,c|
109
- if op.reg?
110
- sio.puts "\t\toperands[#{c}].type: REG = #{cs.reg_name(op.value)}"
111
- elsif op.imm?
112
- sio.puts "\t\toperands[#{c}].type: IMM = 0x#{self.uint64(op.value).to_s(16)}"
113
- elsif op.fp?
114
- sio.puts "\t\toperands[#{c}].type: FP = 0x#{(self.uint32(op.value))}"
115
- elsif op.mem?
116
- sio.puts "\t\toperands[#{c}].type: MEM"
117
- if op.value[:segment].nonzero?
118
- sio.puts "\t\t\toperands[#{c}].mem.segment: REG = %s" % cs.reg_name(op.value[:segment])
119
- end
120
- if op.value[:base].nonzero?
121
- sio.puts "\t\t\toperands[#{c}].mem.base: REG = %s" % cs.reg_name(op.value[:base])
122
- end
123
- if op.value[:index].nonzero?
124
- sio.puts "\t\t\toperands[#{c}].mem.index: REG = %s" % cs.reg_name(op.value[:index])
125
- end
126
- if op.value[:scale] != 1
127
- sio.puts "\t\t\toperands[#{c}].mem.scale: %u" % op.value[:scale]
128
- end
129
- if op.value[:disp].nonzero?
130
- sio.puts "\t\t\toperands[#{c}].mem.disp: 0x%x" % (self.uint64(op.value[:disp]))
131
- end
132
- end
133
-
134
- sio.printf("\t\toperands[#{c}].avx_bcast: %u\n", op[:avx_bcast]) if op[:avx_bcast].nonzero?
135
- sio.printf("\t\toperands[#{c}].avx_zero_opmask: TRUE\n") if op[:avx_zero_opmask]
136
- sio.printf("\t\toperands[#{c}].size: %u\n", op[:size])
137
-
138
- end
139
- end
140
-
141
- sio.puts
142
- end
143
-
144
- ours = StringIO.new
145
-
146
- #Test through all modes and architectures
147
- begin
148
- cs = Disassembler.new(0,0)
149
- print "X86 Test: Capstone v #{cs.version.join('.')} - "
150
- ensure
151
- cs.close
152
- end
153
- @platforms.each do |p|
154
- ours.puts "****************"
155
- ours.puts "Platform: #{p['comment']}"
156
- ours.puts "Code:#{p['code'].bytes.map {|b| "0x%.2x" % b}.join(' ')} "
157
- ours.puts "Disasm:"
158
-
159
- cs = Disassembler.new(p['arch'], p['mode'])
160
- cs.decomposer = true
161
- if p['syntax']
162
- cs.syntax = p['syntax']
163
- end
164
- cache = nil
165
-
166
- # This form is NOT RECOMMENDED in real code except as a last resort - use
167
- # the block form if possible.
168
- insns = cs.disasm(p['code'], 0x1000)
169
-
170
- insns.each {|insn|
171
- ours.puts "0x#{insn.address.to_s(16)}:\t#{insn.mnemonic}\t#{insn.op_str}"
172
- self.print_detail(cs, insn, cs.mode, ours)
173
- cache = insn
174
- }
175
- ours.printf("0x%x:\n", cache.address + cache.size)
176
- ours.puts
177
- cs.close
178
- end
179
-
180
- ours.rewind
181
- theirs = File.binread(__FILE__ + ".SPEC")
182
- if ours.read == theirs
183
- puts "#{__FILE__}: PASS"
184
- else
185
- ours.rewind
186
- puts ours.read
187
- puts "#{__FILE__}: FAIL"
188
- end
189
- end