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
@@ -1,275 +0,0 @@
1
- ****************
2
- Platform: ARM
3
- Code:0xed 0xff 0xff 0xeb 0x04 0xe0 0x2d 0xe5 0x00 0x00 0x00 0x00 0xe0 0x83 0x22 0xe5 0xf1 0x02 0x03 0x0e 0x00 0x00 0xa0 0xe3 0x02 0x30 0xc1 0xe7 0x00 0x00 0x53 0xe3 0x00 0x02 0x01 0xf1 0x05 0x40 0xd0 0xe8 0xf4 0x80 0x00 0x00
4
- Disasm:
5
- 0x1000: bl #0xfbc
6
- op_count: 1
7
- operands[0].type: IMM = 0xfbc
8
-
9
- 0x1004: str lr, [sp, #-4]!
10
- op_count: 2
11
- operands[0].type: REG = lr
12
- operands[1].type: MEM
13
- operands[1].mem.base: REG = sp
14
- operands[1].mem.disp: 0xfffffffc
15
- Write-back: True
16
-
17
- 0x1008: andeq r0, r0, r0
18
- op_count: 3
19
- operands[0].type: REG = r0
20
- operands[1].type: REG = r0
21
- operands[2].type: REG = r0
22
- Code condition: 1
23
-
24
- 0x100c: str r8, [r2, #-0x3e0]!
25
- op_count: 2
26
- operands[0].type: REG = r8
27
- operands[1].type: MEM
28
- operands[1].mem.base: REG = r2
29
- operands[1].mem.disp: 0xfffffc20
30
- Write-back: True
31
-
32
- 0x1010: mcreq p2, #0, r0, c3, c1, #7
33
- op_count: 6
34
- operands[0].type: P-IMM = 2
35
- operands[1].type: IMM = 0x0
36
- operands[2].type: REG = r0
37
- operands[3].type: C-IMM = 3
38
- operands[4].type: C-IMM = 1
39
- operands[5].type: IMM = 0x7
40
- Code condition: 1
41
-
42
- 0x1014: mov r0, #0
43
- op_count: 2
44
- operands[0].type: REG = r0
45
- operands[1].type: IMM = 0x0
46
-
47
- 0x1018: strb r3, [r1, r2]
48
- op_count: 2
49
- operands[0].type: REG = r3
50
- operands[1].type: MEM
51
- operands[1].mem.base: REG = r1
52
- operands[1].mem.index: REG = r2
53
-
54
- 0x101c: cmp r3, #0
55
- op_count: 2
56
- operands[0].type: REG = r3
57
- operands[1].type: IMM = 0x0
58
- Update-flags: True
59
-
60
- 0x1020: setend be
61
- op_count: 1
62
- operands[0].type: SETEND = be
63
-
64
- 0x1024: ldm r0, {r0, r2, lr} ^
65
- op_count: 4
66
- operands[0].type: REG = r0
67
- operands[1].type: REG = r0
68
- operands[2].type: REG = r2
69
- operands[3].type: REG = lr
70
- User-mode: True
71
-
72
- 0x1028: strdeq r8, sb, [r0], -r4
73
- op_count: 4
74
- operands[0].type: REG = r8
75
- operands[1].type: REG = sb
76
- operands[2].type: MEM
77
- operands[2].mem.base: REG = r0
78
- operands[3].type: REG = r4
79
- Subtracted: True
80
- Code condition: 1
81
- Write-back: True
82
-
83
- 0x102c:
84
-
85
- ****************
86
- Platform: Thumb
87
- Code:0x70 0x47 0xeb 0x46 0x83 0xb0 0xc9 0x68 0x1f 0xb1 0x30 0xbf 0xaf 0xf3 0x20 0x84
88
- Disasm:
89
- 0x1000: bx lr
90
- op_count: 1
91
- operands[0].type: REG = lr
92
-
93
- 0x1002: mov fp, sp
94
- op_count: 2
95
- operands[0].type: REG = fp
96
- operands[1].type: REG = sp
97
-
98
- 0x1004: sub sp, #0xc
99
- op_count: 2
100
- operands[0].type: REG = sp
101
- operands[1].type: IMM = 0xc
102
-
103
- 0x1006: ldr r1, [r1, #0xc]
104
- op_count: 2
105
- operands[0].type: REG = r1
106
- operands[1].type: MEM
107
- operands[1].mem.base: REG = r1
108
- operands[1].mem.disp: 0xc
109
-
110
- 0x1008: cbz r7, #0x1012
111
- op_count: 2
112
- operands[0].type: REG = r7
113
- operands[1].type: IMM = 0x1012
114
-
115
- 0x100a: wfi
116
-
117
- 0x100c: cpsie.w f
118
- CPSI-mode: 2
119
- CPSI-flag: 1
120
-
121
- 0x1010:
122
-
123
- ****************
124
- Platform: Thumb-mixed
125
- Code:0xd1 0xe8 0x00 0xf0 0xf0 0x24 0x04 0x07 0x1f 0x3c 0xf2 0xc0 0x00 0x00 0x4f 0xf0 0x00 0x01 0x46 0x6c
126
- Disasm:
127
- 0x1000: tbb [r1, r0]
128
- op_count: 1
129
- operands[0].type: MEM
130
- operands[0].mem.base: REG = r1
131
- operands[0].mem.index: REG = r0
132
-
133
- 0x1004: movs r4, #0xf0
134
- op_count: 2
135
- operands[0].type: REG = r4
136
- operands[1].type: IMM = 0xf0
137
- Update-flags: True
138
-
139
- 0x1006: lsls r4, r0, #0x1c
140
- op_count: 3
141
- operands[0].type: REG = r4
142
- operands[1].type: REG = r0
143
- operands[2].type: IMM = 0x1c
144
- Update-flags: True
145
-
146
- 0x1008: subs r4, #0x1f
147
- op_count: 2
148
- operands[0].type: REG = r4
149
- operands[1].type: IMM = 0x1f
150
- Update-flags: True
151
-
152
- 0x100a: stm r0!, {r1, r4, r5, r6, r7}
153
- op_count: 6
154
- operands[0].type: REG = r0
155
- operands[1].type: REG = r1
156
- operands[2].type: REG = r4
157
- operands[3].type: REG = r5
158
- operands[4].type: REG = r6
159
- operands[5].type: REG = r7
160
- Write-back: True
161
-
162
- 0x100c: movs r0, r0
163
- op_count: 2
164
- operands[0].type: REG = r0
165
- operands[1].type: REG = r0
166
- Update-flags: True
167
-
168
- 0x100e: mov.w r1, #0
169
- op_count: 2
170
- operands[0].type: REG = r1
171
- operands[1].type: IMM = 0x0
172
-
173
- 0x1012: ldr r6, [r0, #0x44]
174
- op_count: 2
175
- operands[0].type: REG = r6
176
- operands[1].type: MEM
177
- operands[1].mem.base: REG = r0
178
- operands[1].mem.disp: 0x44
179
-
180
- 0x1014:
181
-
182
- ****************
183
- Platform: Thumb-2 & register named with numbers
184
- Code:0x4f 0xf0 0x00 0x01 0xbd 0xe8 0x00 0x88 0xd1 0xe8 0x00 0xf0 0x18 0xbf 0xad 0xbf 0xf3 0xff 0x0b 0x0c 0x86 0xf3 0x00 0x89 0x80 0xf3 0x00 0x8c 0x4f 0xfa 0x99 0xf6 0xd0 0xff 0xa2 0x01
185
- Disasm:
186
- 0x1000: mov.w r1, #0
187
- op_count: 2
188
- operands[0].type: REG = r1
189
- operands[1].type: IMM = 0x0
190
-
191
- 0x1004: pop.w {r11, pc}
192
- op_count: 2
193
- operands[0].type: REG = r11
194
- operands[1].type: REG = pc
195
-
196
- 0x1008: tbb [r1, r0]
197
- op_count: 1
198
- operands[0].type: MEM
199
- operands[0].mem.base: REG = r1
200
- operands[0].mem.index: REG = r0
201
-
202
- 0x100c: it ne
203
- Code condition: 2
204
-
205
- 0x100e: iteet ge
206
- Code condition: 11
207
-
208
- 0x1010: vdupge.8 d16, d11[1]
209
- op_count: 2
210
- operands[0].type: REG = d16
211
- operands[1].type: REG = d11
212
- operands[1].vector_index = 1
213
- Code condition: 11
214
- Vector-size: 8
215
-
216
- 0x1014: msrlt cpsr_fc, r6
217
- op_count: 2
218
- operands[0].type: SYSREG = 144
219
- operands[1].type: REG = r6
220
- Code condition: 12
221
-
222
- 0x1018: msrlt apsr_nzcvqg, r0
223
- op_count: 2
224
- operands[0].type: SYSREG = 259
225
- operands[1].type: REG = r0
226
- Code condition: 12
227
-
228
- 0x101c: sxtbge.w r6, r9, ror #8
229
- op_count: 2
230
- operands[0].type: REG = r6
231
- operands[1].type: REG = r9
232
- Shift: 4 = 8
233
- Code condition: 11
234
-
235
- 0x1020: vaddw.u16 q8, q8, d18
236
- op_count: 3
237
- operands[0].type: REG = q8
238
- operands[1].type: REG = q8
239
- operands[2].type: REG = d18
240
- Vector-data: 10
241
-
242
- 0x1024:
243
-
244
- ****************
245
- Platform: Thumb-MClass
246
- Code:0xef 0xf3 0x02 0x80
247
- Disasm:
248
- 0x1000: mrs r0, eapsr
249
- op_count: 2
250
- operands[0].type: REG = r0
251
- operands[1].type: SYSREG = 263
252
-
253
- 0x1004:
254
-
255
- ****************
256
- Platform: Arm-V8
257
- Code:0xe0 0x3b 0xb2 0xee 0x42 0x00 0x01 0xe1 0x51 0xf0 0x7f 0xf5
258
- Disasm:
259
- 0x1000: vcvtt.f64.f16 d3, s1
260
- op_count: 2
261
- operands[0].type: REG = d3
262
- operands[1].type: REG = s1
263
- Vector-data: 17
264
-
265
- 0x1004: crc32b r0, r1, r2
266
- op_count: 3
267
- operands[0].type: REG = r0
268
- operands[1].type: REG = r1
269
- operands[2].type: REG = r2
270
-
271
- 0x1008: dmb oshld
272
- Memory-barrier: 2
273
-
274
- 0x100c:
275
-
data/test/test_arm64.rb DELETED
@@ -1,150 +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 TestARM64
12
-
13
- include Crabstone
14
- include Crabstone::ARM64
15
-
16
- ARM64_CODE = "\x09\x00\x38\xd5\xbf\x40\x00\xd5\x0c\x05\x13\xd5\x20\x50\x02\x0e\x20\xe4\x3d\x0f\x00\x18\xa0\x5f\xa2\x00\xae\x9e\x9f\x37\x03\xd5\xbf\x33\x03\xd5\xdf\x3f\x03\xd5\x21\x7c\x02\x9b\x21\x7c\x00\x53\x00\x40\x21\x4b\xe1\x0b\x40\xb9\x20\x04\x81\xda\x20\x08\x02\x8b\x10\x5b\xe8\x3c"
17
-
18
- @platforms = [
19
- Hash[
20
- 'arch' => ARCH_ARM64,
21
- 'mode' => MODE_ARM,
22
- 'code' => ARM64_CODE,
23
- 'comment' => "ARM-64"
24
- ],
25
- ]
26
-
27
- def self.uint32 i
28
- Integer(i) & 0xffffffff
29
- end
30
-
31
- def self.uint64 i
32
- Integer(i) & ((1<<64)-1)
33
- end
34
-
35
- def self.print_detail(cs, i, sio)
36
-
37
- # Sanity checks for register equivalency (string, const or numeric literal)
38
- if i.reads_reg?( 'sp' ) || i.reads_reg?( 12 ) || i.reads_reg?( REG_SP )
39
- unless i.reads_reg?( 'sp' ) && i.reads_reg?( 12 ) && i.reads_reg?( REG_SP )
40
- fail "Error in reg read decomposition"
41
- end
42
- end
43
- if i.writes_reg?( 'lr' ) || i.writes_reg?( 10 ) || i.writes_reg?( REG_LR )
44
- unless i.writes_reg?( 'lr' ) && i.writes_reg?( 10 ) && i.writes_reg?( REG_LR )
45
- fail "Error in reg write decomposition"
46
- end
47
- end
48
-
49
- if i.op_count > 0 then
50
- sio.puts "\top_count: #{i.op_count}"
51
- i.operands.each.with_index do |op,idx|
52
-
53
- case op[:type]
54
- when OP_REG
55
- sio.puts "\t\toperands[#{idx}].type: REG = #{cs.reg_name(op[:value][:reg])}"
56
- when OP_IMM
57
- sio.puts "\t\toperands[#{idx}].type: IMM = 0x#{self.uint64(op.value).to_s(16)}"
58
- when OP_FP
59
- sio.puts "\t\toperands[#{idx}].type: FP = 0x#{self.uint32(op[:value][:fp])}"
60
- when OP_CIMM
61
- sio.puts "\t\toperands[#{idx}].type: C-IMM = #{self.uint32(op[:value][:imm])}"
62
- when OP_MEM
63
- sio.puts "\t\toperands[#{idx}].type: MEM"
64
- if op[:value][:mem][:base].nonzero?
65
- sio.puts "\t\t\toperands[#{idx}].mem.base: REG = %s" % cs.reg_name(op.value[:base])
66
- end
67
- if op[:value][:mem][:index].nonzero?
68
- sio.puts "\t\t\toperands[#{idx}].mem.index: REG = %s" % cs.reg_name(op.value[:index])
69
- end
70
- if op[:value][:mem][:disp].nonzero?
71
- sio.puts "\t\t\toperands[#{idx}].mem.disp: 0x#{self.uint32(op.value[:disp]).to_s(16)}"
72
- end
73
- when OP_REG_MRS
74
- sio.puts "\t\toperands[#{idx}].type: REG_MRS = 0x#{op.value.to_s(16)}\n"
75
- when OP_REG_MSR
76
- sio.puts "\t\toperands[#{idx}].type: REG_MSR = 0x#{op[:value][:reg].to_s(16)}\n"
77
- when OP_PSTATE
78
- sio.puts "\t\toperands[#{idx}].type: PSTATE = 0x#{uint32(op.value)}\n"
79
- when OP_SYS
80
- sio.puts "\t\toperands[#{idx}].type: SYS = 0x#{uint32(op.value)}\n"
81
- when OP_PREFETCH
82
- sio.puts "\t\toperands[#{idx}].type: PREFETCH = 0x#{uint32(op.value)}\n"
83
- when OP_BARRIER
84
- sio.puts "\t\toperands[#{idx}].type: BARRIER = 0x#{uint32(op.value)}\n"
85
- else
86
- # unknown type - test will fail anyway
87
- end
88
-
89
- sio.puts "\t\t\tShift: type = #{op.shift_type}, value = #{op.shift_value}\n" if op.shift?
90
- sio.puts "\t\t\tVector Arrangement Specifier: 0x#{uint32(op[:vas])}\n" if op[:vas].nonzero?
91
- sio.puts "\t\t\tVector Element Size Specifier: #{op[:vess]}\n" if op[:vess].nonzero?
92
- sio.puts"\t\t\tVector Index: #{op[:vector_index]}\n" if op[:vector_index] != -1
93
- sio.puts "\t\t\tExt: #{op[:ext]}\n" if op[:ext].nonzero?
94
- end
95
- end
96
-
97
- sio.puts "\tUpdate-flags: True" if i.update_flags
98
- sio.puts "\tWrite-back: True" if i.writeback
99
- if not [CC_AL, CC_INVALID].include? i.cc
100
- sio.puts "\tCode-condition: #{i.cc}"
101
- end
102
-
103
- sio.puts
104
-
105
- end
106
-
107
- ours = StringIO.new
108
-
109
- begin
110
- cs = Disassembler.new(0,0)
111
- print "ARM64 Test: Capstone v #{cs.version.join('.')} - "
112
- ensure
113
- cs.close
114
- end
115
-
116
- #Test through all modes and architectures
117
- @platforms.each do |p|
118
- ours.puts "****************"
119
- ours.puts "Platform: #{p['comment']}"
120
- ours.puts "Code: #{p['code'].bytes.map {|b| "0x%.2x" % b}.join(' ')} "
121
- ours.puts "Disasm:"
122
- cs = Disassembler.new(p['arch'], p['mode'])
123
-
124
- if p['syntax']
125
- cs.syntax = p['syntax']
126
- end
127
-
128
- cs.decomposer = true
129
- cache = nil
130
- cs.disasm(p['code'], 0x2c).each {|insn|
131
- ours.puts "0x#{insn.address.to_s(16)}:\t#{insn.mnemonic}\t#{insn.op_str}"
132
- self.print_detail(cs, insn, ours)
133
- cache = insn.address + insn.size
134
- }
135
- ours.printf("0x%x:\n", cache)
136
- ours.puts
137
-
138
- cs.close
139
- end
140
-
141
- ours.rewind
142
- theirs = File.binread(__FILE__ + ".SPEC")
143
- if ours.read == theirs
144
- puts "#{__FILE__}: PASS"
145
- else
146
- ours.rewind
147
- puts ours.read
148
- puts "#{__FILE__}: FAIL"
149
- end
150
- end
@@ -1,116 +0,0 @@
1
- ****************
2
- Platform: ARM-64
3
- Code: 0x09 0x00 0x38 0xd5 0xbf 0x40 0x00 0xd5 0x0c 0x05 0x13 0xd5 0x20 0x50 0x02 0x0e 0x20 0xe4 0x3d 0x0f 0x00 0x18 0xa0 0x5f 0xa2 0x00 0xae 0x9e 0x9f 0x37 0x03 0xd5 0xbf 0x33 0x03 0xd5 0xdf 0x3f 0x03 0xd5 0x21 0x7c 0x02 0x9b 0x21 0x7c 0x00 0x53 0x00 0x40 0x21 0x4b 0xe1 0x0b 0x40 0xb9 0x20 0x04 0x81 0xda 0x20 0x08 0x02 0x8b 0x10 0x5b 0xe8 0x3c
4
- Disasm:
5
- 0x2c: mrs x9, midr_el1
6
- op_count: 2
7
- operands[0].type: REG = x9
8
- operands[1].type: REG_MRS = 0xc000
9
-
10
- 0x30: msr spsel, #0
11
- op_count: 2
12
- operands[0].type: PSTATE = 0x5
13
- operands[1].type: IMM = 0x0
14
- Update-flags: True
15
-
16
- 0x34: msr dbgdtrtx_el0, x12
17
- op_count: 2
18
- operands[0].type: REG_MSR = 0x9828
19
- operands[1].type: REG = x12
20
-
21
- 0x38: tbx v0.8b, {v1.16b, v2.16b, v3.16b}, v2.8b
22
- op_count: 5
23
- operands[0].type: REG = v0
24
- Vector Arrangement Specifier: 0x1
25
- operands[1].type: REG = v1
26
- Vector Arrangement Specifier: 0x2
27
- operands[2].type: REG = v2
28
- Vector Arrangement Specifier: 0x2
29
- operands[3].type: REG = v3
30
- Vector Arrangement Specifier: 0x2
31
- operands[4].type: REG = v2
32
- Vector Arrangement Specifier: 0x1
33
-
34
- 0x3c: scvtf v0.2s, v1.2s, #3
35
- op_count: 3
36
- operands[0].type: REG = v0
37
- Vector Arrangement Specifier: 0x5
38
- operands[1].type: REG = v1
39
- Vector Arrangement Specifier: 0x5
40
- operands[2].type: IMM = 0x3
41
-
42
- 0x40: fmla s0, s0, v0.s[3]
43
- op_count: 3
44
- operands[0].type: REG = s0
45
- operands[1].type: REG = s0
46
- operands[2].type: REG = v0
47
- Vector Element Size Specifier: 3
48
- Vector Index: 3
49
-
50
- 0x44: fmov x2, v5.d[1]
51
- op_count: 2
52
- operands[0].type: REG = x2
53
- operands[1].type: REG = v5
54
- Vector Element Size Specifier: 4
55
- Vector Index: 1
56
-
57
- 0x48: dsb nsh
58
- op_count: 1
59
- operands[0].type: BARRIER = 0x7
60
-
61
- 0x4c: dmb osh
62
- op_count: 1
63
- operands[0].type: BARRIER = 0x3
64
-
65
- 0x50: isb
66
-
67
- 0x54: mul x1, x1, x2
68
- op_count: 3
69
- operands[0].type: REG = x1
70
- operands[1].type: REG = x1
71
- operands[2].type: REG = x2
72
-
73
- 0x58: lsr w1, w1, #0
74
- op_count: 3
75
- operands[0].type: REG = w1
76
- operands[1].type: REG = w1
77
- operands[2].type: IMM = 0x0
78
-
79
- 0x5c: sub w0, w0, w1, uxtw
80
- op_count: 3
81
- operands[0].type: REG = w0
82
- operands[1].type: REG = w0
83
- operands[2].type: REG = w1
84
- Ext: 3
85
-
86
- 0x60: ldr w1, [sp, #8]
87
- op_count: 2
88
- operands[0].type: REG = w1
89
- operands[1].type: MEM
90
- operands[1].mem.base: REG = sp
91
- operands[1].mem.disp: 0x8
92
-
93
- 0x64: cneg x0, x1, ne
94
- op_count: 2
95
- operands[0].type: REG = x0
96
- operands[1].type: REG = x1
97
- Code-condition: 2
98
-
99
- 0x68: add x0, x1, x2, lsl #2
100
- op_count: 3
101
- operands[0].type: REG = x0
102
- operands[1].type: REG = x1
103
- operands[2].type: REG = x2
104
- Shift: type = 1, value = 2
105
-
106
- 0x6c: ldr q16, [x24, w8, uxtw #4]
107
- op_count: 2
108
- operands[0].type: REG = q16
109
- operands[1].type: MEM
110
- operands[1].mem.base: REG = x24
111
- operands[1].mem.index: REG = w8
112
- Shift: type = 1, value = 4
113
- Ext: 3
114
-
115
- 0x70:
116
-