Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

442 lines
10 KiB

  1. /******************************
  2. Intel Confidential
  3. ******************************/
  4. #ifndef _EM_PROTOTYPES_H
  5. #define _EM_PROTOTYPES_H
  6. #ifndef INLINE
  7. #define INLINE
  8. #endif
  9. #if !(defined(BIG_ENDIAN) || defined(LITTLE_ENDIAN))
  10. #error Endianness not established; define BIG_ENDIAN or LITTLE_ENDIAN
  11. #endif
  12. /**********************************************/
  13. /* Assembler Supported Instruction Prototypes */
  14. /**********************************************/
  15. /* Floating-point Absolute Maximum */
  16. void
  17. fp82_famax(EM_state_type *ps,
  18. EM_opcode_sf_type sf,
  19. EM_pred_reg_specifier qp,
  20. EM_fp_reg_specifier f1,
  21. EM_fp_reg_specifier f2,
  22. EM_fp_reg_specifier f3);
  23. /* Floating-point Parallel Absolute Maximum */
  24. void
  25. fp82_fpamax(EM_state_type *ps,
  26. EM_opcode_sf_type sf,
  27. EM_pred_reg_specifier qp,
  28. EM_fp_reg_specifier f1,
  29. EM_fp_reg_specifier f2,
  30. EM_fp_reg_specifier f3);
  31. /* Floating-point Absolute Minimum */
  32. void
  33. fp82_famin(EM_state_type *ps,
  34. EM_opcode_sf_type sf,
  35. EM_pred_reg_specifier qp,
  36. EM_fp_reg_specifier f1,
  37. EM_fp_reg_specifier f2,
  38. EM_fp_reg_specifier f3);
  39. /* Floating-point Parallel Absolute Minimum */
  40. void
  41. fp82_fpamin(EM_state_type *ps,
  42. EM_opcode_sf_type sf,
  43. EM_pred_reg_specifier qp,
  44. EM_fp_reg_specifier f1,
  45. EM_fp_reg_specifier f2,
  46. EM_fp_reg_specifier f3);
  47. /* Floating-point Compare */
  48. void
  49. fp82_fcmp_eq(EM_state_type *ps,
  50. EM_opcode_ctype_type ctype,
  51. EM_opcode_sf_type sf,
  52. EM_pred_reg_specifier qp,
  53. EM_pred_reg_specifier p1,
  54. EM_pred_reg_specifier p2,
  55. EM_fp_reg_specifier f2,
  56. EM_fp_reg_specifier f3);
  57. void
  58. fp82_fcmp_lt(EM_state_type *ps,
  59. EM_opcode_ctype_type ctype,
  60. EM_opcode_sf_type sf,
  61. EM_pred_reg_specifier qp,
  62. EM_pred_reg_specifier p1,
  63. EM_pred_reg_specifier p2,
  64. EM_fp_reg_specifier f2,
  65. EM_fp_reg_specifier f3);
  66. void
  67. fp82_fcmp_le(EM_state_type *ps,
  68. EM_opcode_ctype_type ctype,
  69. EM_opcode_sf_type sf,
  70. EM_pred_reg_specifier qp,
  71. EM_pred_reg_specifier p1,
  72. EM_pred_reg_specifier p2,
  73. EM_fp_reg_specifier f2,
  74. EM_fp_reg_specifier f3);
  75. void
  76. fp82_fcmp_unord(EM_state_type *ps,
  77. EM_opcode_ctype_type ctype,
  78. EM_opcode_sf_type sf,
  79. EM_pred_reg_specifier qp,
  80. EM_pred_reg_specifier p1,
  81. EM_pred_reg_specifier p2,
  82. EM_fp_reg_specifier f2,
  83. EM_fp_reg_specifier f3);
  84. /* Floating-point Paralel Compare */
  85. void
  86. fp82_fpcmp_eq(EM_state_type *ps,
  87. EM_opcode_sf_type sf,
  88. EM_pred_reg_specifier qp,
  89. EM_fp_reg_specifier f1,
  90. EM_fp_reg_specifier f2,
  91. EM_fp_reg_specifier f3);
  92. void
  93. fp82_fpcmp_lt(EM_state_type *ps,
  94. EM_opcode_sf_type sf,
  95. EM_pred_reg_specifier qp,
  96. EM_fp_reg_specifier f1,
  97. EM_fp_reg_specifier f2,
  98. EM_fp_reg_specifier f3);
  99. void
  100. fp82_fpcmp_le(EM_state_type *ps,
  101. EM_opcode_sf_type sf,
  102. EM_pred_reg_specifier qp,
  103. EM_fp_reg_specifier f1,
  104. EM_fp_reg_specifier f2,
  105. EM_fp_reg_specifier f3);
  106. void
  107. fp82_fpcmp_unord(EM_state_type *ps,
  108. EM_opcode_sf_type sf,
  109. EM_pred_reg_specifier qp,
  110. EM_fp_reg_specifier f1,
  111. EM_fp_reg_specifier f2,
  112. EM_fp_reg_specifier f3);
  113. void
  114. fp82_fpcmp_neq(EM_state_type *ps,
  115. EM_opcode_sf_type sf,
  116. EM_pred_reg_specifier qp,
  117. EM_fp_reg_specifier f1,
  118. EM_fp_reg_specifier f2,
  119. EM_fp_reg_specifier f3);
  120. void
  121. fp82_fpcmp_nlt(EM_state_type *ps,
  122. EM_opcode_sf_type sf,
  123. EM_pred_reg_specifier qp,
  124. EM_fp_reg_specifier f1,
  125. EM_fp_reg_specifier f2,
  126. EM_fp_reg_specifier f3);
  127. void
  128. fp82_fpcmp_nle(EM_state_type *ps,
  129. EM_opcode_sf_type sf,
  130. EM_pred_reg_specifier qp,
  131. EM_fp_reg_specifier f1,
  132. EM_fp_reg_specifier f2,
  133. EM_fp_reg_specifier f3);
  134. void
  135. fp82_fpcmp_ord(EM_state_type *ps,
  136. EM_opcode_sf_type sf,
  137. EM_pred_reg_specifier qp,
  138. EM_fp_reg_specifier f1,
  139. EM_fp_reg_specifier f2,
  140. EM_fp_reg_specifier f3);
  141. /* Convert Floating-point to Integer */
  142. void
  143. fp82_fcvt_fx(EM_state_type *ps,
  144. EM_opcode_sf_type sf,
  145. EM_pred_reg_specifier qp,
  146. EM_fp_reg_specifier f1,
  147. EM_fp_reg_specifier f2);
  148. void
  149. fp82_fcvt_fx_trunc(EM_state_type *ps,
  150. EM_opcode_sf_type sf,
  151. EM_pred_reg_specifier qp,
  152. EM_fp_reg_specifier f1,
  153. EM_fp_reg_specifier f2);
  154. void
  155. fp82_fcvt_fxu(EM_state_type *ps,
  156. EM_opcode_sf_type sf,
  157. EM_pred_reg_specifier qp,
  158. EM_fp_reg_specifier f1,
  159. EM_fp_reg_specifier f2);
  160. void
  161. fp82_fcvt_fxu_trunc(EM_state_type *ps,
  162. EM_opcode_sf_type sf,
  163. EM_pred_reg_specifier qp,
  164. EM_fp_reg_specifier f1,
  165. EM_fp_reg_specifier f2);
  166. /* Parallel Convert Floating-point to Integer */
  167. void
  168. fp82_fpcvt_fx(EM_state_type *ps,
  169. EM_opcode_sf_type sf,
  170. EM_pred_reg_specifier qp,
  171. EM_fp_reg_specifier f1,
  172. EM_fp_reg_specifier f2);
  173. void
  174. fp82_fpcvt_fx_trunc(EM_state_type *ps,
  175. EM_opcode_sf_type sf,
  176. EM_pred_reg_specifier qp,
  177. EM_fp_reg_specifier f1,
  178. EM_fp_reg_specifier f2);
  179. void
  180. fp82_fpcvt_fxu(EM_state_type *ps,
  181. EM_opcode_sf_type sf,
  182. EM_pred_reg_specifier qp,
  183. EM_fp_reg_specifier f1,
  184. EM_fp_reg_specifier f2);
  185. void
  186. fp82_fpcvt_fxu_trunc(EM_state_type *ps,
  187. EM_opcode_sf_type sf,
  188. EM_pred_reg_specifier qp,
  189. EM_fp_reg_specifier f1,
  190. EM_fp_reg_specifier f2);
  191. /* Floating-point Multiply Add */
  192. void
  193. fp82_fma(EM_state_type *ps,
  194. EM_opcode_pc_type pc,
  195. EM_opcode_sf_type sf,
  196. EM_pred_reg_specifier qp,
  197. EM_fp_reg_specifier f1,
  198. EM_fp_reg_specifier f3,
  199. EM_fp_reg_specifier f4,
  200. EM_fp_reg_specifier f2);
  201. /* Floating Point Parallel Multiply Add */
  202. void
  203. fp82_fpma(EM_state_type *ps,
  204. EM_opcode_sf_type sf,
  205. EM_pred_reg_specifier qp,
  206. EM_fp_reg_specifier f1,
  207. EM_fp_reg_specifier f3,
  208. EM_fp_reg_specifier f4,
  209. EM_fp_reg_specifier f2);
  210. /* Floating-point Maximum */
  211. void
  212. fp82_fmax(EM_state_type *ps,
  213. EM_opcode_sf_type sf,
  214. EM_pred_reg_specifier qp,
  215. EM_fp_reg_specifier f1,
  216. EM_fp_reg_specifier f2,
  217. EM_fp_reg_specifier f3);
  218. /* Floating-point Parallel Maximum */
  219. void
  220. fp82_fpmax(EM_state_type *ps,
  221. EM_opcode_sf_type sf,
  222. EM_pred_reg_specifier qp,
  223. EM_fp_reg_specifier f1,
  224. EM_fp_reg_specifier f2,
  225. EM_fp_reg_specifier f3);
  226. /* Floating-point Minimum */
  227. void
  228. fp82_fmin(EM_state_type *ps,
  229. EM_opcode_sf_type sf,
  230. EM_pred_reg_specifier qp,
  231. EM_fp_reg_specifier f1,
  232. EM_fp_reg_specifier f2,
  233. EM_fp_reg_specifier f3);
  234. /* Floating-point Parallel Minimum */
  235. void
  236. fp82_fpmin(EM_state_type *ps,
  237. EM_opcode_sf_type sf,
  238. EM_pred_reg_specifier qp,
  239. EM_fp_reg_specifier f1,
  240. EM_fp_reg_specifier f2,
  241. EM_fp_reg_specifier f3);
  242. /* Floating-point Multiply Subtract */
  243. void
  244. fp82_fms(EM_state_type *ps,
  245. EM_opcode_pc_type pc,
  246. EM_opcode_sf_type sf,
  247. EM_pred_reg_specifier qp,
  248. EM_fp_reg_specifier f1,
  249. EM_fp_reg_specifier f3,
  250. EM_fp_reg_specifier f4,
  251. EM_fp_reg_specifier f2);
  252. /* Floating-point Parallel Multiply Subtract */
  253. void
  254. fp82_fpms(EM_state_type *ps,
  255. EM_opcode_sf_type sf,
  256. EM_pred_reg_specifier qp,
  257. EM_fp_reg_specifier f1,
  258. EM_fp_reg_specifier f3,
  259. EM_fp_reg_specifier f4,
  260. EM_fp_reg_specifier f2);
  261. /* Floating-point Negative Multiply Add */
  262. void
  263. fp82_fnma(EM_state_type *ps,
  264. EM_opcode_pc_type pc,
  265. EM_opcode_sf_type sf,
  266. EM_pred_reg_specifier qp,
  267. EM_fp_reg_specifier f1,
  268. EM_fp_reg_specifier f3,
  269. EM_fp_reg_specifier f4,
  270. EM_fp_reg_specifier f2);
  271. /* Floating-point Parallel Negative Multiply Add */
  272. void
  273. fp82_fpnma(EM_state_type *ps,
  274. EM_opcode_sf_type sf,
  275. EM_pred_reg_specifier qp,
  276. EM_fp_reg_specifier f1,
  277. EM_fp_reg_specifier f3,
  278. EM_fp_reg_specifier f4,
  279. EM_fp_reg_specifier f2);
  280. /* Floating-point Reciprocal Approximation */
  281. void
  282. fp82_frcpa(EM_state_type *ps,
  283. EM_opcode_sf_type sf,
  284. EM_pred_reg_specifier qp,
  285. EM_fp_reg_specifier f1,
  286. EM_pred_reg_specifier p2,
  287. EM_fp_reg_specifier f2,
  288. EM_fp_reg_specifier f3);
  289. /* Floating-point Parallel Reciprocal Approximation */
  290. void
  291. fp82_fprcpa(EM_state_type *ps,
  292. EM_opcode_sf_type sf,
  293. EM_pred_reg_specifier qp,
  294. EM_fp_reg_specifier f1,
  295. EM_pred_reg_specifier p2,
  296. EM_fp_reg_specifier f2,
  297. EM_fp_reg_specifier f3);
  298. /* Floating-point Reciprocal Square Root Approximation */
  299. void
  300. fp82_frsqrta(EM_state_type *ps,
  301. EM_opcode_sf_type sf,
  302. EM_pred_reg_specifier qp,
  303. EM_fp_reg_specifier f1,
  304. EM_pred_reg_specifier p2,
  305. EM_fp_reg_specifier f3);
  306. /* Floating-point Parallel Reciprocal Square Root Approximation */
  307. void
  308. fp82_fprsqrta(EM_state_type *ps,
  309. EM_opcode_sf_type sf,
  310. EM_pred_reg_specifier qp,
  311. EM_fp_reg_specifier f1,
  312. EM_pred_reg_specifier p2,
  313. EM_fp_reg_specifier f3);
  314. /******************************************************************************/
  315. /* Define macros to simplify access to the fp82_ functions. This is done so */
  316. /* the namespace doesn't get cluttered, while retaining convenient access. */
  317. /* The FP82_NO_SHORTCUTS macro can be defined to prevent creation of these. */
  318. /******************************************************************************/
  319. #ifndef FP82_NO_SHORTCUTS
  320. #define famax fp82_famax
  321. #define fpamax fp82_fpamax
  322. #define famin fp82_famin
  323. #define fpamin fp82_fpamin
  324. #define fcmp_eq fp82_fcmp_eq
  325. #define fcmp_lt fp82_fcmp_lt
  326. #define fcmp_le fp82_fcmp_le
  327. #define fcmp_unord fp82_fcmp_unord
  328. #define fpcmp_eq fp82_fpcmp_eq
  329. #define fpcmp_lt fp82_fpcmp_lt
  330. #define fpcmp_le fp82_fpcmp_le
  331. #define fpcmp_unord fp82_fpcmp_unord
  332. #define fpcmp_neq fp82_fpcmp_neq
  333. #define fpcmp_nlt fp82_fpcmp_nlt
  334. #define fpcmp_nle fp82_fpcmp_nle
  335. #define fpcmp_ord fp82_fpcmp_ord
  336. #define fcvt_fx fp82_fcvt_fx
  337. #define fcvt_fx_trunc fp82_fcvt_fx_trunc
  338. #define fcvt_fxu fp82_fcvt_fxu
  339. #define fcvt_fxu_trunc fp82_fcvt_fxu_trunc
  340. #define fpcvt_fxu_trunc fp82_fpcvt_fxu_trunc
  341. #define fpcvt_fxu fp82_fpcvt_fxu
  342. #define fpcvt_fx fp82_fpcvt_fx
  343. #define fpcvt_fx_trunc fp82_fpcvt_fx_trunc
  344. #define fma fp82_fma
  345. #define fpma fp82_fpma
  346. #define fmax fp82_fmax
  347. #define fpmax fp82_fpmax
  348. #define fmin fp82_fmin
  349. #define fpmin fp82_fpmin
  350. #define fms fp82_fms
  351. #define fpms fp82_fpms
  352. #define fnma fp82_fnma
  353. #define fpnma fp82_fpnma
  354. #define frcpa fp82_frcpa
  355. #define fprcpa fp82_fprcpa
  356. #define frsqrta fp82_frsqrta
  357. #define fprsqrta fp82_fprsqrta
  358. #endif /* FP82_NO_SHORTCUTS */
  359. #endif /* _EM_PROTOTYPES_H */