PageRenderTime 67ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/opengles/src/codegen/arm_dpimacros.h

http://ftk.googlecode.com/
C Header | 1500 lines | 1151 code | 223 blank | 126 comment | 0 complexity | 122b08f2b77866cec5f323e2a787148a MD5 | raw file
Possible License(s): LGPL-3.0
  1. /* Macros for DPI ops, auto-generated from template
  2. *
  3. * Copyright (c) 2002 Wild West Software
  4. * Copyright (c) 2001, 2002 Sergey Chaban
  5. *
  6. * Permission is hereby granted, free of charge, to any person
  7. * obtaining a copy of this software and associated documentation
  8. * files (the "Software"), to deal in the Software without restriction,
  9. * including without limitation the rights to use, copy, modify, merge,
  10. * publish, distribute, sublicense, and/or sell copies of the Software,
  11. * and to permit persons to whom the Software is furnished to do so,
  12. * subject to the following conditions:
  13. *
  14. * The above copyright notice and this permission notice shall be included
  15. * in all copies or substantial portions of the Software.
  16. *
  17. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  18. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  19. * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  20. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  21. * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  22. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
  23. * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  24. *
  25. */
  26. /* mov/mvn */
  27. /* Rd := imm8 ROR rot */
  28. #define ARM_MOV_REG_IMM_COND(p, reg, imm8, rot, cond) \
  29. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_MOV, reg, 0, imm8, rot, cond)
  30. #define ARM_MOV_REG_IMM(p, reg, imm8, rot) \
  31. ARM_MOV_REG_IMM_COND(p, reg, imm8, rot, ARMCOND_AL)
  32. /* S */
  33. #define ARM_MOVS_REG_IMM_COND(p, reg, imm8, rot, cond) \
  34. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_MOV, reg, 0, imm8, rot, cond)
  35. #define ARM_MOVS_REG_IMM(p, reg, imm8, rot) \
  36. ARM_MOVS_REG_IMM_COND(p, reg, imm8, rot, ARMCOND_AL)
  37. #ifndef ARM_NOIASM
  38. #define _MOV_REG_IMM_COND(reg, imm8, rot, cond) \
  39. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_MOV, reg, 0, imm8, rot, cond)
  40. #define _MOV_REG_IMM(reg, imm8, rot) \
  41. _MOV_REG_IMM_COND(reg, imm8, rot, ARMCOND_AL)
  42. /* S */
  43. #define _MOVS_REG_IMM_COND(reg, imm8, rot, cond) \
  44. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_MOV, reg, 0, imm8, rot, cond)
  45. #define _MOVS_REG_IMM(reg, imm8, rot) \
  46. _MOVS_REG_IMM_COND(reg, imm8, rot, ARMCOND_AL)
  47. #endif
  48. /* Rd := imm8 */
  49. #define ARM_MOV_REG_IMM8_COND(p, reg, imm8, cond) \
  50. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_MOV, reg, 0, imm8, 0, cond)
  51. #define ARM_MOV_REG_IMM8(p, reg, imm8) \
  52. ARM_MOV_REG_IMM8_COND(p, reg, imm8, ARMCOND_AL)
  53. /* S */
  54. #define ARM_MOVS_REG_IMM8_COND(p, reg, imm8, cond) \
  55. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_MOV, reg, 0, imm8, 0, cond)
  56. #define ARM_MOVS_REG_IMM8(p, reg, imm8) \
  57. ARM_MOVS_REG_IMM8_COND(p, reg, imm8, ARMCOND_AL)
  58. #ifndef ARM_NOIASM
  59. #define _MOV_REG_IMM8_COND(reg, imm8, cond) \
  60. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_MOV, reg, 0, imm8, 0, cond)
  61. #define _MOV_REG_IMM8(reg, imm8) \
  62. _MOV_REG_IMM8_COND(reg, imm8, ARMCOND_AL)
  63. /* S */
  64. #define _MOVS_REG_IMM8_COND(reg, imm8, cond) \
  65. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_MOV, reg, 0, imm8, 0, cond)
  66. #define _MOVS_REG_IMM8(reg, imm8) \
  67. _MOVS_REG_IMM8_COND(reg, imm8, ARMCOND_AL)
  68. #endif
  69. /* Rd := Rm */
  70. #define ARM_MOV_REG_REG_COND(p, rd, rm, cond) \
  71. ARM_DPIOP_REG_REG_COND(p, ARMOP_MOV, rd, 0, rm, cond)
  72. #define ARM_MOV_REG_REG(p, rd, rm) \
  73. ARM_MOV_REG_REG_COND(p, rd, rm, ARMCOND_AL)
  74. /* S */
  75. #define ARM_MOVS_REG_REG_COND(p, rd, rm, cond) \
  76. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_MOV, rd, 0, rm, cond)
  77. #define ARM_MOVS_REG_REG(p, rd, rm) \
  78. ARM_MOVS_REG_REG_COND(p, rd, rm, ARMCOND_AL)
  79. #ifndef ARM_NOIASM
  80. #define _MOV_REG_REG_COND(rd, rm, cond) \
  81. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_MOV, rd, 0, rm, cond)
  82. #define _MOV_REG_REG(rd, rm) \
  83. _MOV_REG_REG_COND(rd, rm, ARMCOND_AL)
  84. /* S */
  85. #define _MOVS_REG_REG_COND(rd, rm, cond) \
  86. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_MOV, rd, 0, rm, cond)
  87. #define _MOVS_REG_REG(rd, rm) \
  88. _MOVS_REG_REG_COND(rd, rm, ARMCOND_AL)
  89. #endif
  90. /* Rd := Rm <shift_type> imm_shift */
  91. #define ARM_MOV_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, cond) \
  92. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_MOV, rd, 0, rm, shift_type, imm_shift, cond)
  93. #define ARM_MOV_REG_IMMSHIFT(p, rd, rm, shift_type, imm_shift) \
  94. ARM_MOV_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, ARMCOND_AL)
  95. /* S */
  96. #define ARM_MOVS_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, cond) \
  97. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_MOV, rd, 0, rm, shift_type, imm_shift, cond)
  98. #define ARM_MOVS_REG_IMMSHIFT(p, rd, rm, shift_type, imm_shift) \
  99. ARM_MOVS_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, ARMCOND_AL)
  100. #ifndef ARM_NOIASM
  101. #define _MOV_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, cond) \
  102. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_MOV, rd, 0, rm, shift_type, imm_shift, cond)
  103. #define _MOV_REG_IMMSHIFT(rd, rm, shift_type, imm_shift) \
  104. _MOV_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, ARMCOND_AL)
  105. /* S */
  106. #define _MOVS_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, cond) \
  107. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_MOV, rd, 0, rm, shift_type, imm_shift, cond)
  108. #define _MOVS_REG_IMMSHIFT(rd, rm, shift_type, imm_shift) \
  109. _MOVS_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, ARMCOND_AL)
  110. #endif
  111. /* Rd := (Rm <shift_type> Rs) */
  112. #define ARM_MOV_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, cond) \
  113. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_MOV, rd, 0, rm, shift_type, rs, cond)
  114. #define ARM_MOV_REG_REGSHIFT(p, rd, rm, shift_type, rs) \
  115. ARM_MOV_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, ARMCOND_AL)
  116. /* S */
  117. #define ARM_MOVS_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, cond) \
  118. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_MOV, rd, 0, rm, shift_type, rs, cond)
  119. #define ARM_MOVS_REG_REGSHIFT(p, rd, rm, shift_type, rs) \
  120. ARM_MOVS_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, ARMCOND_AL)
  121. #ifndef ARM_NOIASM
  122. #define _MOV_REG_REGSHIFT_COND(rd, rm, shift_type, rs, cond) \
  123. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_MOV, rd, 0, rm, shift_type, rs, cond)
  124. #define _MOV_REG_REGSHIFT(rd, rm, shift_type, rs) \
  125. _MOV_REG_REGSHIFT_COND(rd, rm, shift_type, rs, ARMCOND_AL)
  126. /* S */
  127. #define _MOVS_REG_REGSHIFT_COND(rd, rm, shift_type, rs, cond) \
  128. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_MOV, rd, 0, rm, shift_type, rs, cond)
  129. #define _MOVS_REG_REGSHIFT(rd, rm, shift_type, rs) \
  130. _MOVS_REG_REGSHIFT_COND(rd, rm, shift_type, rs, ARMCOND_AL)
  131. #endif
  132. /* Rd := imm8 ROR rot */
  133. #define ARM_MVN_REG_IMM_COND(p, reg, imm8, rot, cond) \
  134. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_MVN, reg, 0, imm8, rot, cond)
  135. #define ARM_MVN_REG_IMM(p, reg, imm8, rot) \
  136. ARM_MVN_REG_IMM_COND(p, reg, imm8, rot, ARMCOND_AL)
  137. /* S */
  138. #define ARM_MVNS_REG_IMM_COND(p, reg, imm8, rot, cond) \
  139. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_MVN, reg, 0, imm8, rot, cond)
  140. #define ARM_MVNS_REG_IMM(p, reg, imm8, rot) \
  141. ARM_MVNS_REG_IMM_COND(p, reg, imm8, rot, ARMCOND_AL)
  142. #ifndef ARM_NOIASM
  143. #define _MVN_REG_IMM_COND(reg, imm8, rot, cond) \
  144. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_MVN, reg, 0, imm8, rot, cond)
  145. #define _MVN_REG_IMM(reg, imm8, rot) \
  146. _MVN_REG_IMM_COND(reg, imm8, rot, ARMCOND_AL)
  147. /* S */
  148. #define _MVNS_REG_IMM_COND(reg, imm8, rot, cond) \
  149. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_MVN, reg, 0, imm8, rot, cond)
  150. #define _MVNS_REG_IMM(reg, imm8, rot) \
  151. _MVNS_REG_IMM_COND(reg, imm8, rot, ARMCOND_AL)
  152. #endif
  153. /* Rd := imm8 */
  154. #define ARM_MVN_REG_IMM8_COND(p, reg, imm8, cond) \
  155. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_MVN, reg, 0, imm8, 0, cond)
  156. #define ARM_MVN_REG_IMM8(p, reg, imm8) \
  157. ARM_MVN_REG_IMM8_COND(p, reg, imm8, ARMCOND_AL)
  158. /* S */
  159. #define ARM_MVNS_REG_IMM8_COND(p, reg, imm8, cond) \
  160. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_MVN, reg, 0, imm8, 0, cond)
  161. #define ARM_MVNS_REG_IMM8(p, reg, imm8) \
  162. ARM_MVNS_REG_IMM8_COND(p, reg, imm8, ARMCOND_AL)
  163. #ifndef ARM_NOIASM
  164. #define _MVN_REG_IMM8_COND(reg, imm8, cond) \
  165. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_MVN, reg, 0, imm8, 0, cond)
  166. #define _MVN_REG_IMM8(reg, imm8) \
  167. _MVN_REG_IMM8_COND(reg, imm8, ARMCOND_AL)
  168. /* S */
  169. #define _MVNS_REG_IMM8_COND(reg, imm8, cond) \
  170. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_MVN, reg, 0, imm8, 0, cond)
  171. #define _MVNS_REG_IMM8(reg, imm8) \
  172. _MVNS_REG_IMM8_COND(reg, imm8, ARMCOND_AL)
  173. #endif
  174. /* Rd := Rm */
  175. #define ARM_MVN_REG_REG_COND(p, rd, rm, cond) \
  176. ARM_DPIOP_REG_REG_COND(p, ARMOP_MVN, rd, 0, rm, cond)
  177. #define ARM_MVN_REG_REG(p, rd, rm) \
  178. ARM_MVN_REG_REG_COND(p, rd, rm, ARMCOND_AL)
  179. /* S */
  180. #define ARM_MVNS_REG_REG_COND(p, rd, rm, cond) \
  181. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_MVN, rd, 0, rm, cond)
  182. #define ARM_MVNS_REG_REG(p, rd, rm) \
  183. ARM_MVNS_REG_REG_COND(p, rd, rm, ARMCOND_AL)
  184. #ifndef ARM_NOIASM
  185. #define _MVN_REG_REG_COND(rd, rm, cond) \
  186. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_MVN, rd, 0, rm, cond)
  187. #define _MVN_REG_REG(rd, rm) \
  188. _MVN_REG_REG_COND(rd, rm, ARMCOND_AL)
  189. /* S */
  190. #define _MVNS_REG_REG_COND(rd, rm, cond) \
  191. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_MVN, rd, 0, rm, cond)
  192. #define _MVNS_REG_REG(rd, rm) \
  193. _MVNS_REG_REG_COND(rd, rm, ARMCOND_AL)
  194. #endif
  195. /* Rd := Rm <shift_type> imm_shift */
  196. #define ARM_MVN_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, cond) \
  197. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_MVN, rd, 0, rm, shift_type, imm_shift, cond)
  198. #define ARM_MVN_REG_IMMSHIFT(p, rd, rm, shift_type, imm_shift) \
  199. ARM_MVN_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, ARMCOND_AL)
  200. /* S */
  201. #define ARM_MVNS_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, cond) \
  202. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_MVN, rd, 0, rm, shift_type, imm_shift, cond)
  203. #define ARM_MVNS_REG_IMMSHIFT(p, rd, rm, shift_type, imm_shift) \
  204. ARM_MVNS_REG_IMMSHIFT_COND(p, rd, rm, shift_type, imm_shift, ARMCOND_AL)
  205. #ifndef ARM_NOIASM
  206. #define _MVN_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, cond) \
  207. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_MVN, rd, 0, rm, shift_type, imm_shift, cond)
  208. #define _MVN_REG_IMMSHIFT(rd, rm, shift_type, imm_shift) \
  209. _MVN_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, ARMCOND_AL)
  210. /* S */
  211. #define _MVNS_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, cond) \
  212. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_MVN, rd, 0, rm, shift_type, imm_shift, cond)
  213. #define _MVNS_REG_IMMSHIFT(rd, rm, shift_type, imm_shift) \
  214. _MVNS_REG_IMMSHIFT_COND(rd, rm, shift_type, imm_shift, ARMCOND_AL)
  215. #endif
  216. /* Rd := (Rm <shift_type> Rs) */
  217. #define ARM_MVN_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, cond) \
  218. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_MVN, rd, 0, rm, shift_type, rs, cond)
  219. #define ARM_MVN_REG_REGSHIFT(p, rd, rm, shift_type, rs) \
  220. ARM_MVN_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, ARMCOND_AL)
  221. /* S */
  222. #define ARM_MVNS_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, cond) \
  223. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_MVN, rd, 0, rm, shift_type, rs, cond)
  224. #define ARM_MVNS_REG_REGSHIFT(p, rd, rm, shift_type, rs) \
  225. ARM_MVNS_REG_REGSHIFT_COND(p, rd, rm, shift_type, rs, ARMCOND_AL)
  226. #ifndef ARM_NOIASM
  227. #define _MVN_REG_REGSHIFT_COND(rd, rm, shift_type, rs, cond) \
  228. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_MVN, rd, 0, rm, shift_type, rs, cond)
  229. #define _MVN_REG_REGSHIFT(rd, rm, shift_type, rs) \
  230. _MVN_REG_REGSHIFT_COND(rd, rm, shift_type, rs, ARMCOND_AL)
  231. /* S */
  232. #define _MVNS_REG_REGSHIFT_COND(rd, rm, shift_type, rs, cond) \
  233. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_MVN, rd, 0, rm, shift_type, rs, cond)
  234. #define _MVNS_REG_REGSHIFT(rd, rm, shift_type, rs) \
  235. _MVNS_REG_REGSHIFT_COND(rd, rm, shift_type, rs, ARMCOND_AL)
  236. #endif
  237. /* DPIs, arithmetic and logical */
  238. /* -- AND -- */
  239. /* Rd := Rn AND (imm8 ROR rot) ; rot is power of 2 */
  240. #define ARM_AND_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  241. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_AND, rd, rn, imm8, rot, cond)
  242. #define ARM_AND_REG_IMM(p, rd, rn, imm8, rot) \
  243. ARM_AND_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  244. #define ARM_ANDS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  245. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_AND, rd, rn, imm8, rot, cond)
  246. #define ARM_ANDS_REG_IMM(p, rd, rn, imm8, rot) \
  247. ARM_ANDS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  248. #ifndef ARM_NOIASM
  249. #define _AND_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  250. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_AND, rd, rn, imm8, rot, cond)
  251. #define _AND_REG_IMM(rd, rn, imm8, rot) \
  252. _AND_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  253. #define _ANDS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  254. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_AND, rd, rn, imm8, rot, cond)
  255. #define _ANDS_REG_IMM(rd, rn, imm8, rot) \
  256. _ANDS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  257. #endif
  258. /* Rd := Rn AND imm8 */
  259. #define ARM_AND_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  260. ARM_AND_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  261. #define ARM_AND_REG_IMM8(p, rd, rn, imm8) \
  262. ARM_AND_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  263. #define ARM_ANDS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  264. ARM_ANDS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  265. #define ARM_ANDS_REG_IMM8(p, rd, rn, imm8) \
  266. ARM_ANDS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  267. #ifndef ARM_NOIASM
  268. #define _AND_REG_IMM8_COND(rd, rn, imm8, cond) \
  269. _AND_REG_IMM_COND(rd, rn, imm8, 0, cond)
  270. #define _AND_REG_IMM8(rd, rn, imm8) \
  271. _AND_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  272. #define _ANDS_REG_IMM8_COND(rd, rn, imm8, cond) \
  273. _ANDS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  274. #define _ANDS_REG_IMM8(rd, rn, imm8) \
  275. _ANDS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  276. #endif
  277. /* Rd := Rn AND Rm */
  278. #define ARM_AND_REG_REG_COND(p, rd, rn, rm, cond) \
  279. ARM_DPIOP_REG_REG_COND(p, ARMOP_AND, rd, rn, rm, cond)
  280. #define ARM_AND_REG_REG(p, rd, rn, rm) \
  281. ARM_AND_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  282. #define ARM_ANDS_REG_REG_COND(p, rd, rn, rm, cond) \
  283. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_AND, rd, rn, rm, cond)
  284. #define ARM_ANDS_REG_REG(p, rd, rn, rm) \
  285. ARM_ANDS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  286. #ifndef ARM_NOIASM
  287. #define _AND_REG_REG_COND(rd, rn, rm, cond) \
  288. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_AND, rd, rn, rm, cond)
  289. #define _AND_REG_REG(rd, rn, rm) \
  290. _AND_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  291. #define _ANDS_REG_REG_COND(rd, rn, rm, cond) \
  292. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_AND, rd, rn, rm, cond)
  293. #define _ANDS_REG_REG(rd, rn, rm) \
  294. _ANDS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  295. #endif
  296. /* Rd := Rn AND (Rm <shift_type> imm_shift) */
  297. #define ARM_AND_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  298. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_AND, rd, rn, rm, shift_type, imm_shift, cond)
  299. #define ARM_AND_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  300. ARM_AND_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  301. #define ARM_ANDS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  302. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_AND, rd, rn, rm, shift_type, imm_shift, cond)
  303. #define ARM_ANDS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  304. ARM_ANDS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  305. #ifndef ARM_NOIASM
  306. #define _AND_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  307. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_AND, rd, rn, rm, shift_type, imm_shift, cond)
  308. #define _AND_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  309. _AND_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  310. #define _ANDS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  311. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_AND, rd, rn, rm, shift_type, imm_shift, cond)
  312. #define _ANDS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  313. _ANDS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  314. #endif
  315. /* Rd := Rn AND (Rm <shift_type> Rs) */
  316. #define ARM_AND_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  317. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_AND, rd, rn, rm, shift_type, rs, cond)
  318. #define ARM_AND_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  319. ARM_AND_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  320. #define ARM_ANDS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  321. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_AND, rd, rn, rm, shift_type, rs, cond)
  322. #define ARM_ANDS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  323. ARM_ANDS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  324. #ifndef ARM_NOIASM
  325. #define _AND_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  326. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_AND, rd, rn, rm, shift_type, rs, cond)
  327. #define _AND_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  328. _AND_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  329. #define _ANDS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  330. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_AND, rd, rn, rm, shift_type, rs, cond)
  331. #define _ANDS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  332. _ANDS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  333. #endif
  334. /* -- EOR -- */
  335. /* Rd := Rn EOR (imm8 ROR rot) ; rot is power of 2 */
  336. #define ARM_EOR_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  337. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_EOR, rd, rn, imm8, rot, cond)
  338. #define ARM_EOR_REG_IMM(p, rd, rn, imm8, rot) \
  339. ARM_EOR_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  340. #define ARM_EORS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  341. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_EOR, rd, rn, imm8, rot, cond)
  342. #define ARM_EORS_REG_IMM(p, rd, rn, imm8, rot) \
  343. ARM_EORS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  344. #ifndef ARM_NOIASM
  345. #define _EOR_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  346. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_EOR, rd, rn, imm8, rot, cond)
  347. #define _EOR_REG_IMM(rd, rn, imm8, rot) \
  348. _EOR_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  349. #define _EORS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  350. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_EOR, rd, rn, imm8, rot, cond)
  351. #define _EORS_REG_IMM(rd, rn, imm8, rot) \
  352. _EORS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  353. #endif
  354. /* Rd := Rn EOR imm8 */
  355. #define ARM_EOR_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  356. ARM_EOR_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  357. #define ARM_EOR_REG_IMM8(p, rd, rn, imm8) \
  358. ARM_EOR_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  359. #define ARM_EORS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  360. ARM_EORS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  361. #define ARM_EORS_REG_IMM8(p, rd, rn, imm8) \
  362. ARM_EORS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  363. #ifndef ARM_NOIASM
  364. #define _EOR_REG_IMM8_COND(rd, rn, imm8, cond) \
  365. _EOR_REG_IMM_COND(rd, rn, imm8, 0, cond)
  366. #define _EOR_REG_IMM8(rd, rn, imm8) \
  367. _EOR_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  368. #define _EORS_REG_IMM8_COND(rd, rn, imm8, cond) \
  369. _EORS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  370. #define _EORS_REG_IMM8(rd, rn, imm8) \
  371. _EORS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  372. #endif
  373. /* Rd := Rn EOR Rm */
  374. #define ARM_EOR_REG_REG_COND(p, rd, rn, rm, cond) \
  375. ARM_DPIOP_REG_REG_COND(p, ARMOP_EOR, rd, rn, rm, cond)
  376. #define ARM_EOR_REG_REG(p, rd, rn, rm) \
  377. ARM_EOR_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  378. #define ARM_EORS_REG_REG_COND(p, rd, rn, rm, cond) \
  379. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_EOR, rd, rn, rm, cond)
  380. #define ARM_EORS_REG_REG(p, rd, rn, rm) \
  381. ARM_EORS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  382. #ifndef ARM_NOIASM
  383. #define _EOR_REG_REG_COND(rd, rn, rm, cond) \
  384. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_EOR, rd, rn, rm, cond)
  385. #define _EOR_REG_REG(rd, rn, rm) \
  386. _EOR_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  387. #define _EORS_REG_REG_COND(rd, rn, rm, cond) \
  388. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_EOR, rd, rn, rm, cond)
  389. #define _EORS_REG_REG(rd, rn, rm) \
  390. _EORS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  391. #endif
  392. /* Rd := Rn EOR (Rm <shift_type> imm_shift) */
  393. #define ARM_EOR_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  394. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_EOR, rd, rn, rm, shift_type, imm_shift, cond)
  395. #define ARM_EOR_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  396. ARM_EOR_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  397. #define ARM_EORS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  398. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_EOR, rd, rn, rm, shift_type, imm_shift, cond)
  399. #define ARM_EORS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  400. ARM_EORS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  401. #ifndef ARM_NOIASM
  402. #define _EOR_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  403. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_EOR, rd, rn, rm, shift_type, imm_shift, cond)
  404. #define _EOR_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  405. _EOR_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  406. #define _EORS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  407. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_EOR, rd, rn, rm, shift_type, imm_shift, cond)
  408. #define _EORS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  409. _EORS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  410. #endif
  411. /* Rd := Rn EOR (Rm <shift_type> Rs) */
  412. #define ARM_EOR_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  413. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_EOR, rd, rn, rm, shift_type, rs, cond)
  414. #define ARM_EOR_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  415. ARM_EOR_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  416. #define ARM_EORS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  417. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_EOR, rd, rn, rm, shift_type, rs, cond)
  418. #define ARM_EORS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  419. ARM_EORS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  420. #ifndef ARM_NOIASM
  421. #define _EOR_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  422. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_EOR, rd, rn, rm, shift_type, rs, cond)
  423. #define _EOR_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  424. _EOR_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  425. #define _EORS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  426. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_EOR, rd, rn, rm, shift_type, rs, cond)
  427. #define _EORS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  428. _EORS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  429. #endif
  430. /* -- SUB -- */
  431. /* Rd := Rn SUB (imm8 ROR rot) ; rot is power of 2 */
  432. #define ARM_SUB_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  433. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_SUB, rd, rn, imm8, rot, cond)
  434. #define ARM_SUB_REG_IMM(p, rd, rn, imm8, rot) \
  435. ARM_SUB_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  436. #define ARM_SUBS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  437. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_SUB, rd, rn, imm8, rot, cond)
  438. #define ARM_SUBS_REG_IMM(p, rd, rn, imm8, rot) \
  439. ARM_SUBS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  440. #ifndef ARM_NOIASM
  441. #define _SUB_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  442. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_SUB, rd, rn, imm8, rot, cond)
  443. #define _SUB_REG_IMM(rd, rn, imm8, rot) \
  444. _SUB_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  445. #define _SUBS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  446. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_SUB, rd, rn, imm8, rot, cond)
  447. #define _SUBS_REG_IMM(rd, rn, imm8, rot) \
  448. _SUBS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  449. #endif
  450. /* Rd := Rn SUB imm8 */
  451. #define ARM_SUB_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  452. ARM_SUB_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  453. #define ARM_SUB_REG_IMM8(p, rd, rn, imm8) \
  454. ARM_SUB_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  455. #define ARM_SUBS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  456. ARM_SUBS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  457. #define ARM_SUBS_REG_IMM8(p, rd, rn, imm8) \
  458. ARM_SUBS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  459. #ifndef ARM_NOIASM
  460. #define _SUB_REG_IMM8_COND(rd, rn, imm8, cond) \
  461. _SUB_REG_IMM_COND(rd, rn, imm8, 0, cond)
  462. #define _SUB_REG_IMM8(rd, rn, imm8) \
  463. _SUB_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  464. #define _SUBS_REG_IMM8_COND(rd, rn, imm8, cond) \
  465. _SUBS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  466. #define _SUBS_REG_IMM8(rd, rn, imm8) \
  467. _SUBS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  468. #endif
  469. /* Rd := Rn SUB Rm */
  470. #define ARM_SUB_REG_REG_COND(p, rd, rn, rm, cond) \
  471. ARM_DPIOP_REG_REG_COND(p, ARMOP_SUB, rd, rn, rm, cond)
  472. #define ARM_SUB_REG_REG(p, rd, rn, rm) \
  473. ARM_SUB_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  474. #define ARM_SUBS_REG_REG_COND(p, rd, rn, rm, cond) \
  475. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_SUB, rd, rn, rm, cond)
  476. #define ARM_SUBS_REG_REG(p, rd, rn, rm) \
  477. ARM_SUBS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  478. #ifndef ARM_NOIASM
  479. #define _SUB_REG_REG_COND(rd, rn, rm, cond) \
  480. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_SUB, rd, rn, rm, cond)
  481. #define _SUB_REG_REG(rd, rn, rm) \
  482. _SUB_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  483. #define _SUBS_REG_REG_COND(rd, rn, rm, cond) \
  484. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_SUB, rd, rn, rm, cond)
  485. #define _SUBS_REG_REG(rd, rn, rm) \
  486. _SUBS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  487. #endif
  488. /* Rd := Rn SUB (Rm <shift_type> imm_shift) */
  489. #define ARM_SUB_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  490. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_SUB, rd, rn, rm, shift_type, imm_shift, cond)
  491. #define ARM_SUB_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  492. ARM_SUB_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  493. #define ARM_SUBS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  494. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_SUB, rd, rn, rm, shift_type, imm_shift, cond)
  495. #define ARM_SUBS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  496. ARM_SUBS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  497. #ifndef ARM_NOIASM
  498. #define _SUB_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  499. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_SUB, rd, rn, rm, shift_type, imm_shift, cond)
  500. #define _SUB_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  501. _SUB_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  502. #define _SUBS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  503. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_SUB, rd, rn, rm, shift_type, imm_shift, cond)
  504. #define _SUBS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  505. _SUBS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  506. #endif
  507. /* Rd := Rn SUB (Rm <shift_type> Rs) */
  508. #define ARM_SUB_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  509. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_SUB, rd, rn, rm, shift_type, rs, cond)
  510. #define ARM_SUB_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  511. ARM_SUB_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  512. #define ARM_SUBS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  513. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_SUB, rd, rn, rm, shift_type, rs, cond)
  514. #define ARM_SUBS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  515. ARM_SUBS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  516. #ifndef ARM_NOIASM
  517. #define _SUB_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  518. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_SUB, rd, rn, rm, shift_type, rs, cond)
  519. #define _SUB_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  520. _SUB_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  521. #define _SUBS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  522. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_SUB, rd, rn, rm, shift_type, rs, cond)
  523. #define _SUBS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  524. _SUBS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  525. #endif
  526. /* -- RSB -- */
  527. /* Rd := Rn RSB (imm8 ROR rot) ; rot is power of 2 */
  528. #define ARM_RSB_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  529. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_RSB, rd, rn, imm8, rot, cond)
  530. #define ARM_RSB_REG_IMM(p, rd, rn, imm8, rot) \
  531. ARM_RSB_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  532. #define ARM_RSBS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  533. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_RSB, rd, rn, imm8, rot, cond)
  534. #define ARM_RSBS_REG_IMM(p, rd, rn, imm8, rot) \
  535. ARM_RSBS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  536. #ifndef ARM_NOIASM
  537. #define _RSB_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  538. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_RSB, rd, rn, imm8, rot, cond)
  539. #define _RSB_REG_IMM(rd, rn, imm8, rot) \
  540. _RSB_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  541. #define _RSBS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  542. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_RSB, rd, rn, imm8, rot, cond)
  543. #define _RSBS_REG_IMM(rd, rn, imm8, rot) \
  544. _RSBS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  545. #endif
  546. /* Rd := Rn RSB imm8 */
  547. #define ARM_RSB_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  548. ARM_RSB_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  549. #define ARM_RSB_REG_IMM8(p, rd, rn, imm8) \
  550. ARM_RSB_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  551. #define ARM_RSBS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  552. ARM_RSBS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  553. #define ARM_RSBS_REG_IMM8(p, rd, rn, imm8) \
  554. ARM_RSBS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  555. #ifndef ARM_NOIASM
  556. #define _RSB_REG_IMM8_COND(rd, rn, imm8, cond) \
  557. _RSB_REG_IMM_COND(rd, rn, imm8, 0, cond)
  558. #define _RSB_REG_IMM8(rd, rn, imm8) \
  559. _RSB_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  560. #define _RSBS_REG_IMM8_COND(rd, rn, imm8, cond) \
  561. _RSBS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  562. #define _RSBS_REG_IMM8(rd, rn, imm8) \
  563. _RSBS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  564. #endif
  565. /* Rd := Rn RSB Rm */
  566. #define ARM_RSB_REG_REG_COND(p, rd, rn, rm, cond) \
  567. ARM_DPIOP_REG_REG_COND(p, ARMOP_RSB, rd, rn, rm, cond)
  568. #define ARM_RSB_REG_REG(p, rd, rn, rm) \
  569. ARM_RSB_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  570. #define ARM_RSBS_REG_REG_COND(p, rd, rn, rm, cond) \
  571. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_RSB, rd, rn, rm, cond)
  572. #define ARM_RSBS_REG_REG(p, rd, rn, rm) \
  573. ARM_RSBS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  574. #ifndef ARM_NOIASM
  575. #define _RSB_REG_REG_COND(rd, rn, rm, cond) \
  576. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_RSB, rd, rn, rm, cond)
  577. #define _RSB_REG_REG(rd, rn, rm) \
  578. _RSB_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  579. #define _RSBS_REG_REG_COND(rd, rn, rm, cond) \
  580. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_RSB, rd, rn, rm, cond)
  581. #define _RSBS_REG_REG(rd, rn, rm) \
  582. _RSBS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  583. #endif
  584. /* Rd := Rn RSB (Rm <shift_type> imm_shift) */
  585. #define ARM_RSB_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  586. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_RSB, rd, rn, rm, shift_type, imm_shift, cond)
  587. #define ARM_RSB_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  588. ARM_RSB_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  589. #define ARM_RSBS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  590. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_RSB, rd, rn, rm, shift_type, imm_shift, cond)
  591. #define ARM_RSBS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  592. ARM_RSBS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  593. #ifndef ARM_NOIASM
  594. #define _RSB_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  595. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_RSB, rd, rn, rm, shift_type, imm_shift, cond)
  596. #define _RSB_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  597. _RSB_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  598. #define _RSBS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  599. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_RSB, rd, rn, rm, shift_type, imm_shift, cond)
  600. #define _RSBS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  601. _RSBS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  602. #endif
  603. /* Rd := Rn RSB (Rm <shift_type> Rs) */
  604. #define ARM_RSB_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  605. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_RSB, rd, rn, rm, shift_type, rs, cond)
  606. #define ARM_RSB_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  607. ARM_RSB_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  608. #define ARM_RSBS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  609. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_RSB, rd, rn, rm, shift_type, rs, cond)
  610. #define ARM_RSBS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  611. ARM_RSBS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  612. #ifndef ARM_NOIASM
  613. #define _RSB_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  614. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_RSB, rd, rn, rm, shift_type, rs, cond)
  615. #define _RSB_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  616. _RSB_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  617. #define _RSBS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  618. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_RSB, rd, rn, rm, shift_type, rs, cond)
  619. #define _RSBS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  620. _RSBS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  621. #endif
  622. /* -- ADD -- */
  623. /* Rd := Rn ADD (imm8 ROR rot) ; rot is power of 2 */
  624. #define ARM_ADD_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  625. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_ADD, rd, rn, imm8, rot, cond)
  626. #define ARM_ADD_REG_IMM(p, rd, rn, imm8, rot) \
  627. ARM_ADD_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  628. #define ARM_ADDS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  629. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_ADD, rd, rn, imm8, rot, cond)
  630. #define ARM_ADDS_REG_IMM(p, rd, rn, imm8, rot) \
  631. ARM_ADDS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  632. #ifndef ARM_NOIASM
  633. #define _ADD_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  634. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_ADD, rd, rn, imm8, rot, cond)
  635. #define _ADD_REG_IMM(rd, rn, imm8, rot) \
  636. _ADD_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  637. #define _ADDS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  638. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_ADD, rd, rn, imm8, rot, cond)
  639. #define _ADDS_REG_IMM(rd, rn, imm8, rot) \
  640. _ADDS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  641. #endif
  642. /* Rd := Rn ADD imm8 */
  643. #define ARM_ADD_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  644. ARM_ADD_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  645. #define ARM_ADD_REG_IMM8(p, rd, rn, imm8) \
  646. ARM_ADD_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  647. #define ARM_ADDS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  648. ARM_ADDS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  649. #define ARM_ADDS_REG_IMM8(p, rd, rn, imm8) \
  650. ARM_ADDS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  651. #ifndef ARM_NOIASM
  652. #define _ADD_REG_IMM8_COND(rd, rn, imm8, cond) \
  653. _ADD_REG_IMM_COND(rd, rn, imm8, 0, cond)
  654. #define _ADD_REG_IMM8(rd, rn, imm8) \
  655. _ADD_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  656. #define _ADDS_REG_IMM8_COND(rd, rn, imm8, cond) \
  657. _ADDS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  658. #define _ADDS_REG_IMM8(rd, rn, imm8) \
  659. _ADDS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  660. #endif
  661. /* Rd := Rn ADD Rm */
  662. #define ARM_ADD_REG_REG_COND(p, rd, rn, rm, cond) \
  663. ARM_DPIOP_REG_REG_COND(p, ARMOP_ADD, rd, rn, rm, cond)
  664. #define ARM_ADD_REG_REG(p, rd, rn, rm) \
  665. ARM_ADD_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  666. #define ARM_ADDS_REG_REG_COND(p, rd, rn, rm, cond) \
  667. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_ADD, rd, rn, rm, cond)
  668. #define ARM_ADDS_REG_REG(p, rd, rn, rm) \
  669. ARM_ADDS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  670. #ifndef ARM_NOIASM
  671. #define _ADD_REG_REG_COND(rd, rn, rm, cond) \
  672. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_ADD, rd, rn, rm, cond)
  673. #define _ADD_REG_REG(rd, rn, rm) \
  674. _ADD_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  675. #define _ADDS_REG_REG_COND(rd, rn, rm, cond) \
  676. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_ADD, rd, rn, rm, cond)
  677. #define _ADDS_REG_REG(rd, rn, rm) \
  678. _ADDS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  679. #endif
  680. /* Rd := Rn ADD (Rm <shift_type> imm_shift) */
  681. #define ARM_ADD_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  682. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_ADD, rd, rn, rm, shift_type, imm_shift, cond)
  683. #define ARM_ADD_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  684. ARM_ADD_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  685. #define ARM_ADDS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  686. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_ADD, rd, rn, rm, shift_type, imm_shift, cond)
  687. #define ARM_ADDS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  688. ARM_ADDS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  689. #ifndef ARM_NOIASM
  690. #define _ADD_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  691. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_ADD, rd, rn, rm, shift_type, imm_shift, cond)
  692. #define _ADD_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  693. _ADD_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  694. #define _ADDS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  695. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_ADD, rd, rn, rm, shift_type, imm_shift, cond)
  696. #define _ADDS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  697. _ADDS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  698. #endif
  699. /* Rd := Rn ADD (Rm <shift_type> Rs) */
  700. #define ARM_ADD_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  701. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_ADD, rd, rn, rm, shift_type, rs, cond)
  702. #define ARM_ADD_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  703. ARM_ADD_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  704. #define ARM_ADDS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  705. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_ADD, rd, rn, rm, shift_type, rs, cond)
  706. #define ARM_ADDS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  707. ARM_ADDS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  708. #ifndef ARM_NOIASM
  709. #define _ADD_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  710. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_ADD, rd, rn, rm, shift_type, rs, cond)
  711. #define _ADD_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  712. _ADD_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  713. #define _ADDS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  714. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_ADD, rd, rn, rm, shift_type, rs, cond)
  715. #define _ADDS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  716. _ADDS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  717. #endif
  718. /* -- ADC -- */
  719. /* Rd := Rn ADC (imm8 ROR rot) ; rot is power of 2 */
  720. #define ARM_ADC_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  721. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_ADC, rd, rn, imm8, rot, cond)
  722. #define ARM_ADC_REG_IMM(p, rd, rn, imm8, rot) \
  723. ARM_ADC_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  724. #define ARM_ADCS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  725. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_ADC, rd, rn, imm8, rot, cond)
  726. #define ARM_ADCS_REG_IMM(p, rd, rn, imm8, rot) \
  727. ARM_ADCS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  728. #ifndef ARM_NOIASM
  729. #define _ADC_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  730. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_ADC, rd, rn, imm8, rot, cond)
  731. #define _ADC_REG_IMM(rd, rn, imm8, rot) \
  732. _ADC_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  733. #define _ADCS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  734. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_ADC, rd, rn, imm8, rot, cond)
  735. #define _ADCS_REG_IMM(rd, rn, imm8, rot) \
  736. _ADCS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  737. #endif
  738. /* Rd := Rn ADC imm8 */
  739. #define ARM_ADC_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  740. ARM_ADC_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  741. #define ARM_ADC_REG_IMM8(p, rd, rn, imm8) \
  742. ARM_ADC_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  743. #define ARM_ADCS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  744. ARM_ADCS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  745. #define ARM_ADCS_REG_IMM8(p, rd, rn, imm8) \
  746. ARM_ADCS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  747. #ifndef ARM_NOIASM
  748. #define _ADC_REG_IMM8_COND(rd, rn, imm8, cond) \
  749. _ADC_REG_IMM_COND(rd, rn, imm8, 0, cond)
  750. #define _ADC_REG_IMM8(rd, rn, imm8) \
  751. _ADC_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  752. #define _ADCS_REG_IMM8_COND(rd, rn, imm8, cond) \
  753. _ADCS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  754. #define _ADCS_REG_IMM8(rd, rn, imm8) \
  755. _ADCS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  756. #endif
  757. /* Rd := Rn ADC Rm */
  758. #define ARM_ADC_REG_REG_COND(p, rd, rn, rm, cond) \
  759. ARM_DPIOP_REG_REG_COND(p, ARMOP_ADC, rd, rn, rm, cond)
  760. #define ARM_ADC_REG_REG(p, rd, rn, rm) \
  761. ARM_ADC_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  762. #define ARM_ADCS_REG_REG_COND(p, rd, rn, rm, cond) \
  763. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_ADC, rd, rn, rm, cond)
  764. #define ARM_ADCS_REG_REG(p, rd, rn, rm) \
  765. ARM_ADCS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  766. #ifndef ARM_NOIASM
  767. #define _ADC_REG_REG_COND(rd, rn, rm, cond) \
  768. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_ADC, rd, rn, rm, cond)
  769. #define _ADC_REG_REG(rd, rn, rm) \
  770. _ADC_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  771. #define _ADCS_REG_REG_COND(rd, rn, rm, cond) \
  772. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_ADC, rd, rn, rm, cond)
  773. #define _ADCS_REG_REG(rd, rn, rm) \
  774. _ADCS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  775. #endif
  776. /* Rd := Rn ADC (Rm <shift_type> imm_shift) */
  777. #define ARM_ADC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  778. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_ADC, rd, rn, rm, shift_type, imm_shift, cond)
  779. #define ARM_ADC_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  780. ARM_ADC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  781. #define ARM_ADCS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  782. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_ADC, rd, rn, rm, shift_type, imm_shift, cond)
  783. #define ARM_ADCS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  784. ARM_ADCS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  785. #ifndef ARM_NOIASM
  786. #define _ADC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  787. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_ADC, rd, rn, rm, shift_type, imm_shift, cond)
  788. #define _ADC_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  789. _ADC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  790. #define _ADCS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  791. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_ADC, rd, rn, rm, shift_type, imm_shift, cond)
  792. #define _ADCS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  793. _ADCS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  794. #endif
  795. /* Rd := Rn ADC (Rm <shift_type> Rs) */
  796. #define ARM_ADC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  797. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_ADC, rd, rn, rm, shift_type, rs, cond)
  798. #define ARM_ADC_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  799. ARM_ADC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  800. #define ARM_ADCS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  801. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_ADC, rd, rn, rm, shift_type, rs, cond)
  802. #define ARM_ADCS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  803. ARM_ADCS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  804. #ifndef ARM_NOIASM
  805. #define _ADC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  806. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_ADC, rd, rn, rm, shift_type, rs, cond)
  807. #define _ADC_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  808. _ADC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  809. #define _ADCS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  810. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_ADC, rd, rn, rm, shift_type, rs, cond)
  811. #define _ADCS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  812. _ADCS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  813. #endif
  814. /* -- SBC -- */
  815. /* Rd := Rn SBC (imm8 ROR rot) ; rot is power of 2 */
  816. #define ARM_SBC_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  817. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_SBC, rd, rn, imm8, rot, cond)
  818. #define ARM_SBC_REG_IMM(p, rd, rn, imm8, rot) \
  819. ARM_SBC_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  820. #define ARM_SBCS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  821. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_SBC, rd, rn, imm8, rot, cond)
  822. #define ARM_SBCS_REG_IMM(p, rd, rn, imm8, rot) \
  823. ARM_SBCS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  824. #ifndef ARM_NOIASM
  825. #define _SBC_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  826. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_SBC, rd, rn, imm8, rot, cond)
  827. #define _SBC_REG_IMM(rd, rn, imm8, rot) \
  828. _SBC_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  829. #define _SBCS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  830. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_SBC, rd, rn, imm8, rot, cond)
  831. #define _SBCS_REG_IMM(rd, rn, imm8, rot) \
  832. _SBCS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  833. #endif
  834. /* Rd := Rn SBC imm8 */
  835. #define ARM_SBC_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  836. ARM_SBC_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  837. #define ARM_SBC_REG_IMM8(p, rd, rn, imm8) \
  838. ARM_SBC_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  839. #define ARM_SBCS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  840. ARM_SBCS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  841. #define ARM_SBCS_REG_IMM8(p, rd, rn, imm8) \
  842. ARM_SBCS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  843. #ifndef ARM_NOIASM
  844. #define _SBC_REG_IMM8_COND(rd, rn, imm8, cond) \
  845. _SBC_REG_IMM_COND(rd, rn, imm8, 0, cond)
  846. #define _SBC_REG_IMM8(rd, rn, imm8) \
  847. _SBC_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  848. #define _SBCS_REG_IMM8_COND(rd, rn, imm8, cond) \
  849. _SBCS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  850. #define _SBCS_REG_IMM8(rd, rn, imm8) \
  851. _SBCS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  852. #endif
  853. /* Rd := Rn SBC Rm */
  854. #define ARM_SBC_REG_REG_COND(p, rd, rn, rm, cond) \
  855. ARM_DPIOP_REG_REG_COND(p, ARMOP_SBC, rd, rn, rm, cond)
  856. #define ARM_SBC_REG_REG(p, rd, rn, rm) \
  857. ARM_SBC_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  858. #define ARM_SBCS_REG_REG_COND(p, rd, rn, rm, cond) \
  859. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_SBC, rd, rn, rm, cond)
  860. #define ARM_SBCS_REG_REG(p, rd, rn, rm) \
  861. ARM_SBCS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  862. #ifndef ARM_NOIASM
  863. #define _SBC_REG_REG_COND(rd, rn, rm, cond) \
  864. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_SBC, rd, rn, rm, cond)
  865. #define _SBC_REG_REG(rd, rn, rm) \
  866. _SBC_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  867. #define _SBCS_REG_REG_COND(rd, rn, rm, cond) \
  868. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_SBC, rd, rn, rm, cond)
  869. #define _SBCS_REG_REG(rd, rn, rm) \
  870. _SBCS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  871. #endif
  872. /* Rd := Rn SBC (Rm <shift_type> imm_shift) */
  873. #define ARM_SBC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  874. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_SBC, rd, rn, rm, shift_type, imm_shift, cond)
  875. #define ARM_SBC_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  876. ARM_SBC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  877. #define ARM_SBCS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  878. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_SBC, rd, rn, rm, shift_type, imm_shift, cond)
  879. #define ARM_SBCS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  880. ARM_SBCS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  881. #ifndef ARM_NOIASM
  882. #define _SBC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  883. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_SBC, rd, rn, rm, shift_type, imm_shift, cond)
  884. #define _SBC_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  885. _SBC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  886. #define _SBCS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  887. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_SBC, rd, rn, rm, shift_type, imm_shift, cond)
  888. #define _SBCS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  889. _SBCS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  890. #endif
  891. /* Rd := Rn SBC (Rm <shift_type> Rs) */
  892. #define ARM_SBC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  893. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_SBC, rd, rn, rm, shift_type, rs, cond)
  894. #define ARM_SBC_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  895. ARM_SBC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  896. #define ARM_SBCS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  897. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_SBC, rd, rn, rm, shift_type, rs, cond)
  898. #define ARM_SBCS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  899. ARM_SBCS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  900. #ifndef ARM_NOIASM
  901. #define _SBC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  902. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_SBC, rd, rn, rm, shift_type, rs, cond)
  903. #define _SBC_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  904. _SBC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  905. #define _SBCS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  906. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_SBC, rd, rn, rm, shift_type, rs, cond)
  907. #define _SBCS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  908. _SBCS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  909. #endif
  910. /* -- RSC -- */
  911. /* Rd := Rn RSC (imm8 ROR rot) ; rot is power of 2 */
  912. #define ARM_RSC_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  913. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_RSC, rd, rn, imm8, rot, cond)
  914. #define ARM_RSC_REG_IMM(p, rd, rn, imm8, rot) \
  915. ARM_RSC_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  916. #define ARM_RSCS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  917. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_RSC, rd, rn, imm8, rot, cond)
  918. #define ARM_RSCS_REG_IMM(p, rd, rn, imm8, rot) \
  919. ARM_RSCS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  920. #ifndef ARM_NOIASM
  921. #define _RSC_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  922. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_RSC, rd, rn, imm8, rot, cond)
  923. #define _RSC_REG_IMM(rd, rn, imm8, rot) \
  924. _RSC_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  925. #define _RSCS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  926. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_RSC, rd, rn, imm8, rot, cond)
  927. #define _RSCS_REG_IMM(rd, rn, imm8, rot) \
  928. _RSCS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  929. #endif
  930. /* Rd := Rn RSC imm8 */
  931. #define ARM_RSC_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  932. ARM_RSC_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  933. #define ARM_RSC_REG_IMM8(p, rd, rn, imm8) \
  934. ARM_RSC_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  935. #define ARM_RSCS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  936. ARM_RSCS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  937. #define ARM_RSCS_REG_IMM8(p, rd, rn, imm8) \
  938. ARM_RSCS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  939. #ifndef ARM_NOIASM
  940. #define _RSC_REG_IMM8_COND(rd, rn, imm8, cond) \
  941. _RSC_REG_IMM_COND(rd, rn, imm8, 0, cond)
  942. #define _RSC_REG_IMM8(rd, rn, imm8) \
  943. _RSC_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  944. #define _RSCS_REG_IMM8_COND(rd, rn, imm8, cond) \
  945. _RSCS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  946. #define _RSCS_REG_IMM8(rd, rn, imm8) \
  947. _RSCS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  948. #endif
  949. /* Rd := Rn RSC Rm */
  950. #define ARM_RSC_REG_REG_COND(p, rd, rn, rm, cond) \
  951. ARM_DPIOP_REG_REG_COND(p, ARMOP_RSC, rd, rn, rm, cond)
  952. #define ARM_RSC_REG_REG(p, rd, rn, rm) \
  953. ARM_RSC_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  954. #define ARM_RSCS_REG_REG_COND(p, rd, rn, rm, cond) \
  955. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_RSC, rd, rn, rm, cond)
  956. #define ARM_RSCS_REG_REG(p, rd, rn, rm) \
  957. ARM_RSCS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  958. #ifndef ARM_NOIASM
  959. #define _RSC_REG_REG_COND(rd, rn, rm, cond) \
  960. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_RSC, rd, rn, rm, cond)
  961. #define _RSC_REG_REG(rd, rn, rm) \
  962. _RSC_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  963. #define _RSCS_REG_REG_COND(rd, rn, rm, cond) \
  964. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_RSC, rd, rn, rm, cond)
  965. #define _RSCS_REG_REG(rd, rn, rm) \
  966. _RSCS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  967. #endif
  968. /* Rd := Rn RSC (Rm <shift_type> imm_shift) */
  969. #define ARM_RSC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  970. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_RSC, rd, rn, rm, shift_type, imm_shift, cond)
  971. #define ARM_RSC_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  972. ARM_RSC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  973. #define ARM_RSCS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  974. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_RSC, rd, rn, rm, shift_type, imm_shift, cond)
  975. #define ARM_RSCS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  976. ARM_RSCS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  977. #ifndef ARM_NOIASM
  978. #define _RSC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  979. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_RSC, rd, rn, rm, shift_type, imm_shift, cond)
  980. #define _RSC_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  981. _RSC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  982. #define _RSCS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  983. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_RSC, rd, rn, rm, shift_type, imm_shift, cond)
  984. #define _RSCS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  985. _RSCS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  986. #endif
  987. /* Rd := Rn RSC (Rm <shift_type> Rs) */
  988. #define ARM_RSC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  989. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_RSC, rd, rn, rm, shift_type, rs, cond)
  990. #define ARM_RSC_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  991. ARM_RSC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  992. #define ARM_RSCS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  993. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_RSC, rd, rn, rm, shift_type, rs, cond)
  994. #define ARM_RSCS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  995. ARM_RSCS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  996. #ifndef ARM_NOIASM
  997. #define _RSC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  998. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_RSC, rd, rn, rm, shift_type, rs, cond)
  999. #define _RSC_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  1000. _RSC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1001. #define _RSCS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  1002. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_RSC, rd, rn, rm, shift_type, rs, cond)
  1003. #define _RSCS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  1004. _RSCS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1005. #endif
  1006. /* -- ORR -- */
  1007. /* Rd := Rn ORR (imm8 ROR rot) ; rot is power of 2 */
  1008. #define ARM_ORR_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  1009. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_ORR, rd, rn, imm8, rot, cond)
  1010. #define ARM_ORR_REG_IMM(p, rd, rn, imm8, rot) \
  1011. ARM_ORR_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  1012. #define ARM_ORRS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  1013. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_ORR, rd, rn, imm8, rot, cond)
  1014. #define ARM_ORRS_REG_IMM(p, rd, rn, imm8, rot) \
  1015. ARM_ORRS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  1016. #ifndef ARM_NOIASM
  1017. #define _ORR_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  1018. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_ORR, rd, rn, imm8, rot, cond)
  1019. #define _ORR_REG_IMM(rd, rn, imm8, rot) \
  1020. _ORR_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  1021. #define _ORRS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  1022. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_ORR, rd, rn, imm8, rot, cond)
  1023. #define _ORRS_REG_IMM(rd, rn, imm8, rot) \
  1024. _ORRS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  1025. #endif
  1026. /* Rd := Rn ORR imm8 */
  1027. #define ARM_ORR_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  1028. ARM_ORR_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  1029. #define ARM_ORR_REG_IMM8(p, rd, rn, imm8) \
  1030. ARM_ORR_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  1031. #define ARM_ORRS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  1032. ARM_ORRS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  1033. #define ARM_ORRS_REG_IMM8(p, rd, rn, imm8) \
  1034. ARM_ORRS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  1035. #ifndef ARM_NOIASM
  1036. #define _ORR_REG_IMM8_COND(rd, rn, imm8, cond) \
  1037. _ORR_REG_IMM_COND(rd, rn, imm8, 0, cond)
  1038. #define _ORR_REG_IMM8(rd, rn, imm8) \
  1039. _ORR_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  1040. #define _ORRS_REG_IMM8_COND(rd, rn, imm8, cond) \
  1041. _ORRS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  1042. #define _ORRS_REG_IMM8(rd, rn, imm8) \
  1043. _ORRS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  1044. #endif
  1045. /* Rd := Rn ORR Rm */
  1046. #define ARM_ORR_REG_REG_COND(p, rd, rn, rm, cond) \
  1047. ARM_DPIOP_REG_REG_COND(p, ARMOP_ORR, rd, rn, rm, cond)
  1048. #define ARM_ORR_REG_REG(p, rd, rn, rm) \
  1049. ARM_ORR_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  1050. #define ARM_ORRS_REG_REG_COND(p, rd, rn, rm, cond) \
  1051. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_ORR, rd, rn, rm, cond)
  1052. #define ARM_ORRS_REG_REG(p, rd, rn, rm) \
  1053. ARM_ORRS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  1054. #ifndef ARM_NOIASM
  1055. #define _ORR_REG_REG_COND(rd, rn, rm, cond) \
  1056. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_ORR, rd, rn, rm, cond)
  1057. #define _ORR_REG_REG(rd, rn, rm) \
  1058. _ORR_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  1059. #define _ORRS_REG_REG_COND(rd, rn, rm, cond) \
  1060. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_ORR, rd, rn, rm, cond)
  1061. #define _ORRS_REG_REG(rd, rn, rm) \
  1062. _ORRS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  1063. #endif
  1064. /* Rd := Rn ORR (Rm <shift_type> imm_shift) */
  1065. #define ARM_ORR_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  1066. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_ORR, rd, rn, rm, shift_type, imm_shift, cond)
  1067. #define ARM_ORR_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  1068. ARM_ORR_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1069. #define ARM_ORRS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  1070. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_ORR, rd, rn, rm, shift_type, imm_shift, cond)
  1071. #define ARM_ORRS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  1072. ARM_ORRS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1073. #ifndef ARM_NOIASM
  1074. #define _ORR_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  1075. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_ORR, rd, rn, rm, shift_type, imm_shift, cond)
  1076. #define _ORR_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  1077. _ORR_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1078. #define _ORRS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  1079. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_ORR, rd, rn, rm, shift_type, imm_shift, cond)
  1080. #define _ORRS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  1081. _ORRS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1082. #endif
  1083. /* Rd := Rn ORR (Rm <shift_type> Rs) */
  1084. #define ARM_ORR_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  1085. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_ORR, rd, rn, rm, shift_type, rs, cond)
  1086. #define ARM_ORR_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  1087. ARM_ORR_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1088. #define ARM_ORRS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  1089. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_ORR, rd, rn, rm, shift_type, rs, cond)
  1090. #define ARM_ORRS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  1091. ARM_ORRS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1092. #ifndef ARM_NOIASM
  1093. #define _ORR_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  1094. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_ORR, rd, rn, rm, shift_type, rs, cond)
  1095. #define _ORR_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  1096. _ORR_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1097. #define _ORRS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  1098. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_ORR, rd, rn, rm, shift_type, rs, cond)
  1099. #define _ORRS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  1100. _ORRS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1101. #endif
  1102. /* -- BIC -- */
  1103. /* Rd := Rn BIC (imm8 ROR rot) ; rot is power of 2 */
  1104. #define ARM_BIC_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  1105. ARM_DPIOP_REG_IMM8ROT_COND(p, ARMOP_BIC, rd, rn, imm8, rot, cond)
  1106. #define ARM_BIC_REG_IMM(p, rd, rn, imm8, rot) \
  1107. ARM_BIC_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  1108. #define ARM_BICS_REG_IMM_COND(p, rd, rn, imm8, rot, cond) \
  1109. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_BIC, rd, rn, imm8, rot, cond)
  1110. #define ARM_BICS_REG_IMM(p, rd, rn, imm8, rot) \
  1111. ARM_BICS_REG_IMM_COND(p, rd, rn, imm8, rot, ARMCOND_AL)
  1112. #ifndef ARM_NOIASM
  1113. #define _BIC_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  1114. ARM_IASM_DPIOP_REG_IMM8ROT_COND(ARMOP_BIC, rd, rn, imm8, rot, cond)
  1115. #define _BIC_REG_IMM(rd, rn, imm8, rot) \
  1116. _BIC_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  1117. #define _BICS_REG_IMM_COND(rd, rn, imm8, rot, cond) \
  1118. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_BIC, rd, rn, imm8, rot, cond)
  1119. #define _BICS_REG_IMM(rd, rn, imm8, rot) \
  1120. _BICS_REG_IMM_COND(rd, rn, imm8, rot, ARMCOND_AL)
  1121. #endif
  1122. /* Rd := Rn BIC imm8 */
  1123. #define ARM_BIC_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  1124. ARM_BIC_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  1125. #define ARM_BIC_REG_IMM8(p, rd, rn, imm8) \
  1126. ARM_BIC_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  1127. #define ARM_BICS_REG_IMM8_COND(p, rd, rn, imm8, cond) \
  1128. ARM_BICS_REG_IMM_COND(p, rd, rn, imm8, 0, cond)
  1129. #define ARM_BICS_REG_IMM8(p, rd, rn, imm8) \
  1130. ARM_BICS_REG_IMM8_COND(p, rd, rn, imm8, ARMCOND_AL)
  1131. #ifndef ARM_NOIASM
  1132. #define _BIC_REG_IMM8_COND(rd, rn, imm8, cond) \
  1133. _BIC_REG_IMM_COND(rd, rn, imm8, 0, cond)
  1134. #define _BIC_REG_IMM8(rd, rn, imm8) \
  1135. _BIC_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  1136. #define _BICS_REG_IMM8_COND(rd, rn, imm8, cond) \
  1137. _BICS_REG_IMM_COND(rd, rn, imm8, 0, cond)
  1138. #define _BICS_REG_IMM8(rd, rn, imm8) \
  1139. _BICS_REG_IMM8_COND(rd, rn, imm8, ARMCOND_AL)
  1140. #endif
  1141. /* Rd := Rn BIC Rm */
  1142. #define ARM_BIC_REG_REG_COND(p, rd, rn, rm, cond) \
  1143. ARM_DPIOP_REG_REG_COND(p, ARMOP_BIC, rd, rn, rm, cond)
  1144. #define ARM_BIC_REG_REG(p, rd, rn, rm) \
  1145. ARM_BIC_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  1146. #define ARM_BICS_REG_REG_COND(p, rd, rn, rm, cond) \
  1147. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_BIC, rd, rn, rm, cond)
  1148. #define ARM_BICS_REG_REG(p, rd, rn, rm) \
  1149. ARM_BICS_REG_REG_COND(p, rd, rn, rm, ARMCOND_AL)
  1150. #ifndef ARM_NOIASM
  1151. #define _BIC_REG_REG_COND(rd, rn, rm, cond) \
  1152. ARM_IASM_DPIOP_REG_REG_COND(ARMOP_BIC, rd, rn, rm, cond)
  1153. #define _BIC_REG_REG(rd, rn, rm) \
  1154. _BIC_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  1155. #define _BICS_REG_REG_COND(rd, rn, rm, cond) \
  1156. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_BIC, rd, rn, rm, cond)
  1157. #define _BICS_REG_REG(rd, rn, rm) \
  1158. _BICS_REG_REG_COND(rd, rn, rm, ARMCOND_AL)
  1159. #endif
  1160. /* Rd := Rn BIC (Rm <shift_type> imm_shift) */
  1161. #define ARM_BIC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  1162. ARM_DPIOP_REG_IMMSHIFT_COND(p, ARMOP_BIC, rd, rn, rm, shift_type, imm_shift, cond)
  1163. #define ARM_BIC_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  1164. ARM_BIC_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1165. #define ARM_BICS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, cond) \
  1166. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_BIC, rd, rn, rm, shift_type, imm_shift, cond)
  1167. #define ARM_BICS_REG_IMMSHIFT(p, rd, rn, rm, shift_type, imm_shift) \
  1168. ARM_BICS_REG_IMMSHIFT_COND(p, rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1169. #ifndef ARM_NOIASM
  1170. #define _BIC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  1171. ARM_IASM_DPIOP_REG_IMMSHIFT_COND(ARMOP_BIC, rd, rn, rm, shift_type, imm_shift, cond)
  1172. #define _BIC_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  1173. _BIC_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1174. #define _BICS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, cond) \
  1175. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_BIC, rd, rn, rm, shift_type, imm_shift, cond)
  1176. #define _BICS_REG_IMMSHIFT(rd, rn, rm, shift_type, imm_shift) \
  1177. _BICS_REG_IMMSHIFT_COND(rd, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1178. #endif
  1179. /* Rd := Rn BIC (Rm <shift_type> Rs) */
  1180. #define ARM_BIC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  1181. ARM_DPIOP_REG_REGSHIFT_COND(p, ARMOP_BIC, rd, rn, rm, shift_type, rs, cond)
  1182. #define ARM_BIC_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  1183. ARM_BIC_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1184. #define ARM_BICS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, cond) \
  1185. ARM_DPIOP_S_REG_REGSHIFT_COND(p, ARMOP_BIC, rd, rn, rm, shift_type, rs, cond)
  1186. #define ARM_BICS_REG_REGSHIFT(p, rd, rn, rm, shift_type, rs) \
  1187. ARM_BICS_REG_REGSHIFT_COND(p, rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1188. #ifndef ARM_NOIASM
  1189. #define _BIC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  1190. ARM_IASM_DPIOP_REG_REGSHIFT_COND(ARMOP_BIC, rd, rn, rm, shift_type, rs, cond)
  1191. #define _BIC_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  1192. _BIC_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1193. #define _BICS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, cond) \
  1194. ARM_IASM_DPIOP_S_REG_REGSHIFT_COND(ARMOP_BIC, rd, rn, rm, shift_type, rs, cond)
  1195. #define _BICS_REG_REGSHIFT(rd, rn, rm, shift_type, rs) \
  1196. _BICS_REG_REGSHIFT_COND(rd, rn, rm, shift_type, rs, ARMCOND_AL)
  1197. #endif
  1198. /* DPIs, comparison */
  1199. /* PSR := TST Rn, (imm8 ROR 2*rot) */
  1200. #define ARM_TST_REG_IMM_COND(p, rn, imm8, rot, cond) \
  1201. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_TST, 0, rn, imm8, rot, cond)
  1202. #define ARM_TST_REG_IMM(p, rn, imm8, rot) \
  1203. ARM_TST_REG_IMM_COND(p, rn, imm8, rot, ARMCOND_AL)
  1204. #ifndef ARM_NOIASM
  1205. #define _TST_REG_IMM_COND(rn, imm8, rot, cond) \
  1206. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_TST, 0, rn, imm8, rot, cond)
  1207. #define _TST_REG_IMM(rn, imm8, rot) \
  1208. _TST_REG_IMM_COND(rn, imm8, rot, ARMCOND_AL)
  1209. #endif
  1210. /* PSR := TST Rn, imm8 */
  1211. #define ARM_TST_REG_IMM8_COND(p, rn, imm8, cond) \
  1212. ARM_TST_REG_IMM_COND(p, rn, imm8, 0, cond)
  1213. #define ARM_TST_REG_IMM8(p, rn, imm8) \
  1214. ARM_TST_REG_IMM8_COND(p, rn, imm8, ARMCOND_AL)
  1215. #ifndef ARM_NOIASM
  1216. #define _TST_REG_IMM8_COND(rn, imm8, cond) \
  1217. _TST_REG_IMM_COND(rn, imm8, 0, cond)
  1218. #define _TST_REG_IMM8(rn, imm8) \
  1219. _TST_REG_IMM8_COND(rn, imm8, ARMCOND_AL)
  1220. #endif
  1221. /* PSR := TST Rn, Rm */
  1222. #define ARM_TST_REG_REG_COND(p, rn, rm, cond) \
  1223. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_TST, 0, rn, rm, cond)
  1224. #define ARM_TST_REG_REG(p, rn, rm) \
  1225. ARM_TST_REG_REG_COND(p, rn, rm, ARMCOND_AL)
  1226. #ifndef ARM_NOIASM
  1227. #define _TST_REG_REG_COND(rn, rm, cond) \
  1228. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_TST, 0, rn, rm, cond)
  1229. #define _TST_REG_REG(rn, rm) \
  1230. _TST_REG_REG_COND(rn, rm, ARMCOND_AL)
  1231. #endif
  1232. /* PSR := TST Rn, (Rm <shift_type> imm8) */
  1233. #define ARM_TST_REG_IMMSHIFT_COND(p, rn, rm, shift_type, imm_shift, cond) \
  1234. ARM_DPIOP_S_REG_IMMSHIFT_COND(p, ARMOP_TST, 0, rn, rm, shift_type, imm_shift, cond)
  1235. #define ARM_TST_REG_IMMSHIFT(p, rn, rm, shift_type, imm_shift) \
  1236. ARM_TST_REG_IMMSHIFT_COND(p, rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1237. #ifndef ARM_NOIASM
  1238. #define _TST_REG_IMMSHIFT_COND(rn, rm, shift_type, imm_shift, cond) \
  1239. ARM_IASM_DPIOP_S_REG_IMMSHIFT_COND(ARMOP_TST, 0, rn, rm, shift_type, imm_shift, cond)
  1240. #define _TST_REG_IMMSHIFT(rn, rm, shift_type, imm_shift) \
  1241. _TST_REG_IMMSHIFT_COND(rn, rm, shift_type, imm_shift, ARMCOND_AL)
  1242. #endif
  1243. /* PSR := TEQ Rn, (imm8 ROR 2*rot) */
  1244. #define ARM_TEQ_REG_IMM_COND(p, rn, imm8, rot, cond) \
  1245. ARM_DPIOP_S_REG_IMM8ROT_COND(p, ARMOP_TEQ, 0, rn, imm8, rot, cond)
  1246. #define ARM_TEQ_REG_IMM(p, rn, imm8, rot) \
  1247. ARM_TEQ_REG_IMM_COND(p, rn, imm8, rot, ARMCOND_AL)
  1248. #ifndef ARM_NOIASM
  1249. #define _TEQ_REG_IMM_COND(rn, imm8, rot, cond) \
  1250. ARM_IASM_DPIOP_S_REG_IMM8ROT_COND(ARMOP_TEQ, 0, rn, imm8, rot, cond)
  1251. #define _TEQ_REG_IMM(rn, imm8, rot) \
  1252. _TEQ_REG_IMM_COND(rn, imm8, rot, ARMCOND_AL)
  1253. #endif
  1254. /* PSR := TEQ Rn, imm8 */
  1255. #define ARM_TEQ_REG_IMM8_COND(p, rn, imm8, cond) \
  1256. ARM_TEQ_REG_IMM_COND(p, rn, imm8, 0, cond)
  1257. #define ARM_TEQ_REG_IMM8(p, rn, imm8) \
  1258. ARM_TEQ_REG_IMM8_COND(p, rn, imm8, ARMCOND_AL)
  1259. #ifndef ARM_NOIASM
  1260. #define _TEQ_REG_IMM8_COND(rn, imm8, cond) \
  1261. _TEQ_REG_IMM_COND(rn, imm8, 0, cond)
  1262. #define _TEQ_REG_IMM8(rn, imm8) \
  1263. _TEQ_REG_IMM8_COND(rn, imm8, ARMCOND_AL)
  1264. #endif
  1265. /* PSR := TEQ Rn, Rm */
  1266. #define ARM_TEQ_REG_REG_COND(p, rn, rm, cond) \
  1267. ARM_DPIOP_S_REG_REG_COND(p, ARMOP_TEQ, 0, rn, rm, cond)
  1268. #define ARM_TEQ_REG_REG(p, rn, rm) \
  1269. ARM_TEQ_REG_REG_COND(p, rn, rm, ARMCOND_AL)
  1270. #ifndef ARM_NOIASM
  1271. #define _TEQ_REG_REG_COND(rn, rm, cond) \
  1272. ARM_IASM_DPIOP_S_REG_REG_COND(ARMOP_TEQ, 0, rn, rm, cond)
  1273. #define _TEQ_REG_REG(rn, rm) \
  1274. _TEQ_REG_REG_COND(rn, rm, ARMCOND_AL)
  1275. #endif
  1276. /* PSR := TEQ Rn, (Rm <shift_type> imm8) */
  1277. #define ARM_TEQ_REG_IMMSHIFT_COND(p, rn, rm