home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 December / PCWorld_2001-12_cd.bin / Software / Topware / Hackman / _SETUP.1 / ModuleAM.dat < prev    next >
Text File  |  2000-10-30  |  61KB  |  1,034 lines

  1. <PF2IW>
  2. [1]
  3. "PF2IW: Packed floating-point to integer word conversion with sign extend"
  4. ""
  5. "PF2IW is a vector instruction that converts a vector register containing single-precision floating-point operands to 16-bit signed integers using truncation. Arguments outside the range representable by signed 16-bit integers are saturated to the largest and smallest 16-bit integer, depending on their sign. All results are sign-extended to 32-bits."
  6. [2]
  7. "PF2IW mmreg1, mmreg2 performs the following operations:"
  8. ""
  9. "IF (mmreg2[31:0] >= 2 15 )"
  10. "THEN mmreg1[31:0] = 0x0000_7FFF"
  11. "ELSE IF (mmreg2[31:0] <= -2 15 )"
  12. "THEN mmreg1[31:0] = 0xFFFF_8000"
  13. "ELSE mmreg1[31:0] = int(mmreg2[31:0])"
  14. "IF (mmreg2[63:32] >= 2 15 )"
  15. "THEN mmreg1[63:32] = 0x0000_7FFF"
  16. "ELSE IF (mmreg2[63:32] <= -2 15 )"
  17. "THEN mmreg1[63:32] = 0xFFFF_8000"
  18. "ELSE mmreg1[63:32] = int(mmreg2[63:32])"
  19. ""
  20. "PF2IW mmreg, mem64 performs the following operations:"
  21. ""
  22. "IF (mem64[31:0] >= 2 15 )"
  23. "THEN mmreg[31:0] = 0x0000_7FFF"
  24. "ELSE IF (mem64[31:0] <= -2 15 )"
  25. "THEN mmreg[31:0] = 0xFFFF_8000"
  26. "ELSE mmreg[31:0] = int(mem64[31:0])"
  27. "IF (mem64[63:32] >= 2 15 )"
  28. "THEN mmreg[63:32] = 0x0000_7FFF"
  29. "ELSE IF (mem64[63:32] <= -2 15 )"
  30. "THEN mmreg[63:32] = 0xFFFF_8000"
  31. "ELSE mmreg[63:32] = int(mem64[63:32])"
  32. [3]
  33. "None."
  34. [4]
  35. "Protected Mode Exceptions"
  36. ""
  37. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  38. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  39. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  40. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  41. "#Page fault, A page fault resulted from the execution of the instruction."
  42. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  43. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  44. ""
  45. "Real-Address Mode Exceptions"
  46. ""
  47. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  48. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  49. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  50. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  51. ""
  52. "Virtual-8086 Mode Exceptions"
  53. ""
  54. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  55. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  56. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  57. "#Page fault, A page fault resulted from the execution of the instruction."
  58. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  59. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  60. [5]
  61. "0F 0F 1C /r PF2IW mmreg1, mmreg2 or PF2IW mmreg, mem64"
  62. [6]
  63. </PF2IW>
  64. <PFNACC>
  65. [1]
  66. "PFNACC: Packed floating-point negative accumulate"
  67. ""
  68. "PFNACC is a vector instruction that does negative accumulation of the two doublewords of the destination operand and the source operand. PFNACC then stores the results in the low and high words of the destination operand, respectively. Both operands are single-precision, floating-point operands with 24-bit significands."
  69. [2]
  70. "PFNACC mmreg1, mmreg2 performs the following operations:"
  71. ""
  72. "mmreg1[31:0] = mmreg1[31:0] û mmreg1[63:32]"
  73. "mmreg1[63:32] = mmreg2[31:0] û mmreg2[63:32]"
  74. ""
  75. "PFNACC mmreg, mem64 performs the following operations:"
  76. ""
  77. "mmreg[31:0] = mmreg[31:0] û mmreg[63:32]"
  78. "mmreg[63:32] = mem64[31:0] û mem64[63:32]"
  79. [3]
  80. "None."
  81. [4]
  82. "Protected Mode Exceptions"
  83. ""
  84. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  85. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  86. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  87. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  88. "#Page fault, A page fault resulted from the execution of the instruction."
  89. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  90. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  91. ""
  92. "Real-Address Mode Exceptions"
  93. ""
  94. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  95. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  96. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  97. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  98. ""
  99. "Virtual-8086 Mode Exceptions"
  100. ""
  101. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  102. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  103. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  104. "#Page fault, A page fault resulted from the execution of the instruction."
  105. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  106. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  107. [5]
  108. "0F 0F 8A /r PFNACC mmreg1, mmreg2 or PFNACC mmreg, mem64"
  109. [6]
  110. </PFNACC>
  111. <PFPNACC>
  112. [1]
  113. "PFPNACC: Packed floating-point mixed positive-negative accumulate"
  114. ""
  115. "PFPNACC is a vector instruction that does mixed negative and positive accumulation of the two doublewords of the destination operand and the source operand and stores the results in the low and high words of the destination operand, respectively. Both operands are single-precision, floating-point operands with 24-bit significands."
  116. [2]
  117. "PFPNACC mmreg1, mmreg2 performs the following operations:"
  118. ""
  119. "mmreg1[31:0] = mmreg1[31:0] û mmreg1[63:32]"
  120. "mmreg1[63:32] = mmreg2[31:0] + mmreg2[63:32]"
  121. "PFPNACC mmreg, mem64 performs the following operations:"
  122. ""
  123. "mmreg[31:0] = mmreg[31:0] û mmreg[63:32]"
  124. "mmreg[63:32] = mem64[31:0] + mem64[63:32]"
  125. [3]
  126. "None."
  127. [4]
  128. "Protected Mode Exceptions"
  129. ""
  130. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  131. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  132. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  133. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  134. "#Page fault, A page fault resulted from the execution of the instruction."
  135. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  136. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  137. ""
  138. "Real-Address Mode Exceptions"
  139. ""
  140. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  141. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  142. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  143. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  144. ""
  145. "Virtual-8086 Mode Exceptions"
  146. ""
  147. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  148. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  149. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  150. "#Page fault, A page fault resulted from the execution of the instruction."
  151. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  152. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  153. [5]
  154. "0F 0F 8E /r PFPNACC mmreg1, mmreg2 or PFPNACC mmreg, mem64"
  155. [6]
  156. </PFPNACC>
  157. <PI2FW>
  158. [1]
  159. "PI2FW: Packed 16-bit integer to floating-point conversion"
  160. ""
  161. "PI2FW is a vector instruction that converts a vector register containing signed, 16-bit integers to single-precision, floating-point operands."
  162. [2]
  163. "PI2FW mmreg1, mmreg2 performs the following operations:"
  164. ""
  165. "mmreg1[31:0] = float(mmreg2[15:0])"
  166. "mmreg1[63:32] = float(mmreg2[47:32])"
  167. "PI2FW mmreg, mem64ö performs the following operations:"
  168. ""
  169. "mmreg[31:0] = float(mem64[15:0])"
  170. "mmreg[63:32] = float(mem64[47:32])"
  171. [3]
  172. "None."
  173. [4]
  174. "Protected Mode Exceptions"
  175. ""
  176. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  177. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  178. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  179. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  180. "#Page fault, A page fault resulted from the execution of the instruction."
  181. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  182. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  183. ""
  184. "Real-Address Mode Exceptions"
  185. ""
  186. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  187. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  188. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  189. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  190. ""
  191. "Virtual-8086 Mode Exceptions"
  192. ""
  193. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  194. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  195. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  196. "#Page fault, A page fault resulted from the execution of the instruction."
  197. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  198. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  199. [5]
  200. "0F 0F 0C /r PI2FW mmreg1, mmreg2 or PI2FW mmreg, mem64"
  201. [6]
  202. </PI2FW>
  203. <PSWAPD>
  204. [1]
  205. "PSWAPD: Packed swap doubleword"
  206. ""
  207. "The PSWAPD instruction swaps or reverses the upper and lower doublewords of the source operand."
  208. [2]
  209. "PSWAPD mmreg1, mmreg2 performs the following operations:"
  210. ""
  211. "mmreg1[63:32] = mmreg2[31:0])"
  212. "mmreg1[31:0] = mmreg2[63:32])"
  213. ""
  214. "PSWAPD mmreg, mem64 performs the following operations:"
  215. ""
  216. "mmreg[63:32] = mem64[31:0])"
  217. "mmreg[31:0] = mem64[63:32])"
  218. [3]
  219. "None."
  220. [4]
  221. "Protected Mode Exceptions"
  222. ""
  223. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  224. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  225. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  226. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  227. "#Page fault, A page fault resulted from the execution of the instruction."
  228. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  229. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  230. ""
  231. "Real-Address Mode Exceptions"
  232. ""
  233. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  234. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  235. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  236. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  237. ""
  238. "Virtual-8086 Mode Exceptions"
  239. ""
  240. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  241. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  242. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  243. "#Page fault, A page fault resulted from the execution of the instruction."
  244. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  245. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  246. [5]
  247. "0F 0F BB /r PSWAPD mmreg1, mmreg2 or PSWAPD mmreg, mem64"
  248. [6]
  249. </PSWAPD>
  250. <MASKMOVQ>
  251. [1]
  252. "MASKMOVQ: Store using byte mask"
  253. ""
  254. "The MASKMOVQ instruction uses the result of an MMX compare instruction to conditionally store MMX data to memory on a byte-by-byte basis."
  255. [2]
  256. "MASKMOVQ mmreg1, mmreg2 (edi) performs the following operations:"
  257. ""
  258. "memory[edi][63:56] = mmreg2[63] ? mmreg1[63:56] : memory[edi][63:56]"
  259. "memory[edi][55:48] = mmreg2[55] ? mmreg1[55:48] : memory[edi][55:48]"
  260. "memory[edi][47:40] = mmreg2[47] ? mmreg1[47:40] : memory[edi][47:40]"
  261. "memory[edi][39:32] = mmreg2[39] ? mmreg1[39:32] : memory[edi][39:32]"
  262. "memory[edi][31:24] = mmreg2[31] ? mmreg1[31:24] : memory[edi][31:24]"
  263. "memory[edi][23:16] = mmreg2[23] ? mmreg1[23:16] : memory[edi][23:16]"
  264. "memory[edi][15:8] = mmreg2[15] ? mmreg1[15:8] : memory[edi][15:8]"
  265. "memory[edi][7:0] = mmreg2[7] ? mmreg1[7:0] : memory[edi][7:0]"
  266. [3]
  267. "None."
  268. [4]
  269. "Protected Mode Exceptions"
  270. ""
  271. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  272. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  273. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  274. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  275. "#Page fault, A page fault resulted from the execution of the instruction."
  276. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  277. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  278. ""
  279. "Real-Address Mode Exceptions"
  280. ""
  281. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  282. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  283. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  284. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  285. ""
  286. "Virtual-8086 Mode Exceptions"
  287. ""
  288. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  289. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  290. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  291. "#Page fault, A page fault resulted from the execution of the instruction."
  292. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  293. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  294. [5]
  295. "0F F7 /r MASKMOVQ mmreg1, mmreg2 (edi)"
  296. [6]
  297. </MASKMOVQ>
  298. <MOVNTQ>
  299. [1]
  300. "MOVNTQ: Streaming (cache bypass) store"
  301. ""
  302. "The MOVNTQ instruction is used to store data without first reading in old data (no write allocate)."
  303. [2]
  304. "MOVNTQ mem64, mmreg performs the following operations:"
  305. ""
  306. "mem64[63:0] = mmreg"
  307. [3]
  308. "None."
  309. [4]
  310. "Protected Mode Exceptions"
  311. ""
  312. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  313. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  314. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  315. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  316. "#Page fault, A page fault resulted from the execution of the instruction."
  317. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  318. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  319. ""
  320. "Real-Address Mode Exceptions"
  321. ""
  322. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  323. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  324. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  325. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  326. ""
  327. "Virtual-8086 Mode Exceptions"
  328. ""
  329. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  330. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  331. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  332. "#Page fault, A page fault resulted from the execution of the instruction."
  333. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  334. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  335. [5]
  336. "0F E7 /r MOVNTQ mem64, mmreg"
  337. [6]
  338. </MOVNTQ>
  339. <PAVGB>
  340. [1]
  341. "PAVGB: Packed average of unsigned byte"
  342. ""
  343. "The PAVGB instruction produces the rounded up averages of the eight unsigned 8-bit integer values in the source operand (an MMX register or a 64-bit memory location) and the eight corresponding unsigned 8-bit integer values in the destination operand (an MMX register). It does so by adding the source and destination byte values to get a 9-bit intermediate value. The intermediate value is then incremented by 1, divided by 2 (shifted right one place) and rounded up. The eight unsigned 8-bit results are stored in the MMX register specified as the destination operand."
  344. ""
  345. "The PAVGB instruction is identical to the 3DNow! PAVGUSB instruction and can be used for pixel averaging in MPEG-2 motion compensation and video scaling operations."
  346. [2]
  347. "PAVGB mmreg1, mmreg2 performs the following operations:"
  348. ""
  349. ";round up by using a ceiling function"
  350. "mmreg1[7:0] = (mmreg1[7:0] + mmreg2[7:0]) / 2"
  351. "mmreg1[15:8] = (mmreg1[15:8] + mmreg2[15:8]) / 2"
  352. "mmreg1[23:16] = (mmreg1[23:16] + mmreg2[23:16]) / 2"
  353. "mmreg1[31:24] = (mmreg1[31:24] + mmreg2[31:24]) / 2"
  354. "mmreg1[39:32] = (mmreg1[39:32] + mmreg2[39:32]) / 2"
  355. "mmreg1[47:40] = (mmreg1[47:40] + mmreg2[47:40]) / 2"
  356. "mmreg1[55:48] = (mmreg1[55:48] + mmreg2[55:48]) / 2"
  357. "mmreg1[63:56] = (mmreg1[63:56] + mmreg2[63:56]) / 2"
  358. ""
  359. "PAVGB mmreg, mem64 performs the following operations:"
  360. ""
  361. ";round up by using a ceiling function"
  362. "mmreg[7:0] = (mmreg[7:0] + mem64[7:0]) / 2"
  363. "mmreg[15:8] = (mmreg[15:8] + mem64[15:8]) / 2"
  364. "mmreg[23:16] = (mmreg[23:16] + mem64[23:16]) / 2"
  365. "mmreg[31:24] = (mmreg[31:24] + mem64[31:24]) / 2"
  366. "mmreg[39:32] = (mmreg[39:32] + mem64[39:32]) / 2"
  367. "mmreg[47:40] = (mmreg[47:40] + mem64[47:40]) / 2"
  368. "mmreg[55:48] = (mmreg[55:48] + mem64[55:48]) / 2"
  369. "mmreg[63:56] = (mmreg[63:56] + mem64[63:56]) / 2"
  370. [3]
  371. "None."
  372. [4]
  373. "Protected Mode Exceptions"
  374. ""
  375. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  376. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  377. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  378. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  379. "#Page fault, A page fault resulted from the execution of the instruction."
  380. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  381. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  382. ""
  383. "Real-Address Mode Exceptions"
  384. ""
  385. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  386. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  387. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  388. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  389. ""
  390. "Virtual-8086 Mode Exceptions"
  391. ""
  392. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  393. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  394. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  395. "#Page fault, A page fault resulted from the execution of the instruction."
  396. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  397. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  398. [5]
  399. "0F E0 /r PAVGB mmreg1, mmreg2 or PAVGB mmreg, mem64"
  400. [6]
  401. </PAVGB>
  402. <PAVGW>
  403. [1]
  404. "PAVGW: Packed average of unsigned word"
  405. ""
  406. "The PAVGW instruction produces the rounded up averages of the four unsigned 16-bit integer values in the source operand (an MMX register or a 64-bit memory location) and the four corresponding unsigned 16-bit integer values in the destination operand (an MMX register)."
  407. [2]
  408. "PAVGW mmreg1, mmreg2 performs the following operations:"
  409. ""
  410. ";round up by using a ceiling function"
  411. "mmreg1[15:0] = (mmreg1[15:0] + mmreg2[15:0]) / 2"
  412. "mmreg1[31:16] = (mmreg1[31:16] + mmreg2[31:16]) / 2"
  413. "mmreg1[47:32] = (mmreg1[47:32] + mmreg2[47:32]) / 2"
  414. "mmreg1[63:48] = (mmreg1[63:48] + mmreg2[63:48]) / 2"
  415. ""
  416. "PAVGW mmreg, mem64 performs the following operations:"
  417. ""
  418. ";round up by using a ceiling function"
  419. "mmreg[15:0] = (mmreg[15:0] + mem64[15:0]) / 2"
  420. "mmreg[31:16] = (mmreg[31:16] + mem64[31:16]) / 2"
  421. "mmreg[47:32] = (mmreg[47:32] + mem64[47:32]) / 2"
  422. "mmreg[63:48] = (mmreg[63:48] + mem64[63:48]) / 2"
  423. [3]
  424. "None."
  425. [4]
  426. "Protected Mode Exceptions"
  427. ""
  428. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  429. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  430. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  431. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  432. "#Page fault, A page fault resulted from the execution of the instruction."
  433. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  434. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  435. ""
  436. "Real-Address Mode Exceptions"
  437. ""
  438. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  439. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  440. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  441. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  442. ""
  443. "Virtual-8086 Mode Exceptions"
  444. ""
  445. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  446. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  447. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  448. "#Page fault, A page fault resulted from the execution of the instruction."
  449. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  450. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  451. [5]
  452. "0F E3 /r PAVGW mmreg1, mmreg2 or PAVGB mmreg, mem64"
  453. [6]
  454. </PAVGW>
  455. <PEXTRW>
  456. [1]
  457. "PEXTRW: Extract word into integer register"
  458. ""
  459. "The PEXTRW instruction extracts one of the four words pointed to by imm8 from an MMX register and stores that into the least significant word of a 32-bit integer register."
  460. [2]
  461. "PEXTRW reg32, mmreg, imm8 performs the following operations:"
  462. ""
  463. "index = imm8[1:0] * 16"
  464. "reg32[31:16] = 0"
  465. "reg32[15:0] = mmreg[index+15:index]"
  466. [3]
  467. "None."
  468. [4]
  469. "Protected Mode Exceptions"
  470. ""
  471. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  472. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  473. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  474. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  475. "#Page fault, A page fault resulted from the execution of the instruction."
  476. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  477. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  478. ""
  479. "Real-Address Mode Exceptions"
  480. ""
  481. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  482. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  483. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  484. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  485. ""
  486. "Virtual-8086 Mode Exceptions"
  487. ""
  488. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  489. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  490. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  491. "#Page fault, A page fault resulted from the execution of the instruction."
  492. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  493. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  494. [5]
  495. "0F C5 /r PEXTRW reg32, mmreg, imm8"
  496. [6]
  497. </PEXTRW>
  498. <PINSRW>
  499. [1]
  500. "PINSRW: Insert word from integer register"
  501. ""
  502. "The PINSRW instruction inserts the least significant word of an integer register into one of the four words of an MMX register."
  503. [2]
  504. "PINSRW mmreg, reg32, imm8 performs the following operations:"
  505. ""
  506. "index = imm8[1:0] * 16"
  507. "mmreg[index+15:index] = reg32[15:0]"
  508. "mmreg[rest] = mmreg[rest] / no change (merge)"
  509. ""
  510. "PINSRW mmreg, mem16, imm8 performs the following operations:"
  511. ""
  512. "index = imm8[1:0] * 16"
  513. "mmreg[index+15:index] = mem16[15:0]"
  514. "mmreg[rest] = mmreg[rest] / no change (merge)"
  515. [3]
  516. "None."
  517. [4]
  518. "Protected Mode Exceptions"
  519. ""
  520. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  521. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  522. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  523. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  524. "#Page fault, A page fault resulted from the execution of the instruction."
  525. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  526. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  527. ""
  528. "Real-Address Mode Exceptions"
  529. ""
  530. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  531. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  532. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  533. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  534. ""
  535. "Virtual-8086 Mode Exceptions"
  536. ""
  537. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  538. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  539. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  540. "#Page fault, A page fault resulted from the execution of the instruction."
  541. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  542. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  543. [5]
  544. "0F C4 /r PINSRW mmreg, reg32, imm8 or PINSRW mmreg, mem16, imm8"
  545. [6]
  546. </PINSRW>
  547. <PMAXSW>
  548. [1]
  549. "PMAXSW: Packed maximum signed word"
  550. ""
  551. "The PMAXSW instruction operates on signed 16-bit data and selects the maximum signed value between source 1 and source 2 for each of the four word positions."
  552. [2]
  553. "PMAXSW mmreg1, mmreg2 performs the following signed operations:"
  554. ""
  555. "mmreg1[15:0] = (mmreg1[15:0] > mmreg2[15:0]) ? mmreg1[15:0] : mmreg2[15:0]"
  556. "mmreg1[31:16] = (mmreg1[31:16] > mmreg2[31:16]) ? mmreg1[31:16] : mmreg2[31:16]"
  557. "mmreg1[47:32] = (mmreg1[47:32] > mmreg2[47:32]) ? mmreg1[47:32] : mmreg2[47:32]"
  558. "mmreg1[63:48] = (mmreg1[63:48] > mmreg2[63:48]) ? mmreg1[63:48] : mmreg2[63:48]"
  559. ""
  560. "PMAXSW mmreg, mem64 performs the following signed operations:"
  561. "mmreg[15:0] = (mmreg[15:0] > mem64[15:0]) ? mmreg[15:0] : mem64[15:0]"
  562. "mmreg[31:16] = (mmreg[31:16] > mem64[31:16]) ? mmreg[31:16] : mem64[31:16]"
  563. "mmreg[47:32] = (mmreg[47:32] > mem64[47:32]) ? mmreg[47:32] : mem64[47:32]"
  564. "mmreg[63:48] = (mmreg[63:48] > mem64[63:48]) ? mmreg[63:48] : mem64[63:48]"
  565. [3]
  566. "None."
  567. [4]
  568. "Protected Mode Exceptions"
  569. ""
  570. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  571. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  572. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  573. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  574. "#Page fault, A page fault resulted from the execution of the instruction."
  575. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  576. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  577. ""
  578. "Real-Address Mode Exceptions"
  579. ""
  580. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  581. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  582. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  583. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  584. ""
  585. "Virtual-8086 Mode Exceptions"
  586. ""
  587. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  588. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  589. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  590. "#Page fault, A page fault resulted from the execution of the instruction."
  591. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  592. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  593. [5]
  594. "0F EE /r PMAXSW mmreg1, mmreg2 or PMAXSW mmreg, mem64"
  595. [6]
  596. </PMAXSW>
  597. <PMAXUB>
  598. [1]
  599. "PMAXUB: Packed maximum unsigned byte"
  600. ""
  601. "The PMAXUB instruction operates on unsigned 8-bit data and selects the maximum unsigned value between source 1 and source 2 for each of the eight byte positions."
  602. [2]
  603. "PMAXUB mmreg1, mmreg2 performs the following unsigned operations:"
  604. ""
  605. "mmreg1[7:0] = (mmreg1[7:0] > mmreg2[7:0]) ? mmreg1[7:0] : mmreg2[7:0]"
  606. "mmreg1[15:8] = (mmreg1[15:8] > mmreg2[15:8]) ? mmreg1[15:8] : mmreg2[15:8]"
  607. "mmreg1[23:16] = (mmreg1[23:16] > mmreg2[23:16]) ? mmreg1[23:16] : mmreg2[23:16]"
  608. "mmreg1[31:24] = (mmreg1[31:24] > mmreg2[31:24]) ? mmreg1[31:24] : mmreg2[31:24]"
  609. "mmreg1[39:32] = (mmreg1[39:32] > mmreg2[39:32]) ? mmreg1[39:32] : mmreg2[39:32]"
  610. "mmreg1[47:40] = (mmreg1[47:40] > mmreg2[47:40]) ? mmreg1[47:40] : mmreg2[47:40]"
  611. "mmreg1[55:48] = (mmreg1[55:48] > mmreg2[55:48]) ? mmreg1[55:48] : mmreg2[55:48]"
  612. "mmreg1[63:56] = (mmreg1[63:56] > mmreg2[63:56]) ? mmreg1[63:56] : mmreg2[63:56]"
  613. ""
  614. "PMAXUB mmreg, mem64 performs the following unsigned operations:"
  615. ""
  616. "mmreg[7:0] = (mmreg[7:0] > mem64[7:0]) ? mmreg[7:0] : mem64[7:0]"
  617. "mmreg[15:8] = (mmreg[15:8] > mem64[15:8]) ? mmreg[15:8] : mem64[15:8]"
  618. "mmreg[23:16] = (mmreg[23:16] > mem64[23:16]) ? mmreg[23:16] : mem64[23:16]"
  619. "mmreg[31:24] = (mmreg[31:24] > mem64[31:24]) ? mmreg[31:24] : mem64[31:24]"
  620. "mmreg[39:32] = (mmreg[39:32] > mem64[39:32]) ? mmreg[39:32] : mem64[39:32]"
  621. "mmreg[47:40] = (mmreg[47:40] > mem64[47:40]) ? mmreg[47:40] : mem64[47:40]"
  622. "mmreg[55:48] = (mmreg[55:48] > mem64[55:48]) ? mmreg[55:48] : mem64[55:48]"
  623. "mmreg[63:56] = (mmreg[63:56] > mem64[63:56]) ? mmreg[63:56] : mem64[63:56]"
  624. [3]
  625. "None."
  626. [4]
  627. "Protected Mode Exceptions"
  628. ""
  629. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  630. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  631. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  632. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  633. "#Page fault, A page fault resulted from the execution of the instruction."
  634. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  635. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  636. ""
  637. "Real-Address Mode Exceptions"
  638. ""
  639. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  640. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  641. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  642. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  643. ""
  644. "Virtual-8086 Mode Exceptions"
  645. ""
  646. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  647. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  648. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  649. "#Page fault, A page fault resulted from the execution of the instruction."
  650. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  651. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  652. [5]
  653. "0F DE /r PMAXUB mmreg1, mmreg2 or PMAXUB mmreg, mem64"
  654. [6]
  655. </PMAXUB>
  656. <PMINSW>
  657. [1]
  658. "PMINSW: Packed minimum signed word"
  659. ""
  660. "The PMINSW instruction operates on signed 16-bit data and selects the minimum arithmetic value between source 1 and source 2 for each word."
  661. [2]
  662. "PMINSW mmreg1, mmreg2 performs the following signed operations:"
  663. ""
  664. "mmreg1[15:0] = (mmreg1[15:0] <= mmreg2[15:0]) ? mmreg1[15:0] : mmreg2[15:0]"
  665. "mmreg1[31:16] = (mmreg1[31:16] <= mmreg2[31:16]) ? mmreg1[31:16] : mmreg2[31:16]"
  666. "mmreg1[47:32] = (mmreg1[47:32] <= mmreg2[47:32]) ? mmreg1[47:32] : mmreg2[47:32]"
  667. "mmreg1[63:48] = (mmreg1[63:48] <= mmreg2[63:48]) ? mmreg1[63:48] : mmreg2[63:48]"
  668. ""
  669. "PMINSW mmreg, mem64 performs the following signed operations:"
  670. ""
  671. "mmreg[15:0] = (mmreg[15:0] <= mem64[15:0]) ? mmreg[15:0] : mem64[15:0]"
  672. "mmreg[31:16] = (mmreg[31:16] <= mem64[31:16]) ? mmreg[31:16] : mem64[31:16]"
  673. "mmreg[47:32] = (mmreg[47:32] <= mem64[47:32]) ? mmreg[47:32] : mem64[47:32]"
  674. "mmreg[63:48] = (mmreg[63:48] <= mem64[63:48]) ? mmreg[63:48] : mem64[63:48]"
  675. [3]
  676. "None."
  677. [4]
  678. "Protected Mode Exceptions"
  679. ""
  680. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  681. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  682. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  683. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  684. "#Page fault, A page fault resulted from the execution of the instruction."
  685. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  686. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  687. ""
  688. "Real-Address Mode Exceptions"
  689. ""
  690. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  691. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  692. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  693. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  694. ""
  695. "Virtual-8086 Mode Exceptions"
  696. ""
  697. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  698. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  699. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  700. "#Page fault, A page fault resulted from the execution of the instruction."
  701. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  702. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  703. [5]
  704. "0F EA /r PMINSW mmreg1, mmreg2 or PMINSW mmreg, mem64"
  705. [6]
  706. </PMINSW>
  707. <PMINUB>
  708. [1]
  709. "PMINUB: Packed minimum unsigned byte"
  710. ""
  711. "The PMINUB instruction operates on unsigned 8-bit data and selects the minimum value between source 1 and source 2 for each byte position."
  712. [2]
  713. "PMINUB mmreg1, mmreg2 performs the following unsigned operations:"
  714. ""
  715. "mmreg1[7:0] = (mmreg1[7:0] <= mmreg2[7:0]) ? mmreg1[7:0] : mmreg2[7:0]"
  716. "mmreg1[15:8] = (mmreg1[15:8] <= mmreg2[15:8]) ? mmreg1[15:8] : mmreg2[15:8]"
  717. "mmreg1[23:16] = (mmreg1[23:16] <= mmreg2[23:16]) ? mmreg1[23:16] : mmreg2[23:16]"
  718. "mmreg1[31:24] = (mmreg1[31:24] <= mmreg2[31:24]) ? mmreg1[31:24] : mmreg2[31:24]"
  719. "mmreg1[39:32] = (mmreg1[39:32] <= mmreg2[39:32]) ? mmreg1[39:32] : mmreg2[39:32]"
  720. "mmreg1[47:40] = (mmreg1[47:40] <= mmreg2[47:40]) ? mmreg1[47:40] : mmreg2[47:40]"
  721. "mmreg1[55:48] = (mmreg1[55:48] <= mmreg2[55:48]) ? mmreg1[55:48] : mmreg2[55:48]"
  722. "mmreg1[63:56] = (mmreg1[63:56] <= mmreg2[63:56]) ? mmreg1[63:56] : mmreg2[63:56]"
  723. ""
  724. "PMINUB mmreg1, mem64 performs the following unsigned operations:"
  725. ""
  726. "mmreg[7:0] = (mmreg[7:0] <= mem64[7:0]) ? mmreg[7:0] : mem64[7:0]"
  727. "mmreg[15:8] = (mmreg[15:8] <= mem64[15:8]) ? mmreg[15:8] : mem64[15:8]"
  728. "mmreg[23:16] = (mmreg[23:16] <= mem64[23:16]) ? mmreg[23:16] : mem64[23:16]"
  729. "mmreg[31:24] = (mmreg[31:24] <= mem64[31:24]) ? mmreg[31:24] : mem64[31:24]"
  730. "mmreg[39:32] = (mmreg[39:32] <= mem64[39:32]) ? mmreg[39:32] : mem64[39:32]"
  731. "mmreg[47:40] = (mmreg[47:40] <= mem64[47:40]) ? mmreg[47:40] : mem64[47:40]"
  732. "mmreg[55:48] = (mmreg[55:48] <= mem64[55:48]) ? mmreg[55:48] : mem64[55:48]"
  733. "mmreg[63:56] = (mmreg[63:56] <= mem64[63:56]) ? mmreg[63:56] : mem64[63:56]"
  734. [3]
  735. "None."
  736. [4]
  737. "Protected Mode Exceptions"
  738. ""
  739. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  740. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  741. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  742. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  743. "#Page fault, A page fault resulted from the execution of the instruction."
  744. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  745. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  746. ""
  747. "Real-Address Mode Exceptions"
  748. ""
  749. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  750. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  751. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  752. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  753. ""
  754. "Virtual-8086 Mode Exceptions"
  755. ""
  756. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  757. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  758. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  759. "#Page fault, A page fault resulted from the execution of the instruction."
  760. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  761. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  762. [5]
  763. "0F DA /r PMINUB mmreg1, mmreg2 or PMINUB mmreg, mem64"
  764. [6]
  765. </PMINUB>
  766. <PMOVMSKB>
  767. [1]
  768. "PMOVMSKB: Move mask to integer register"
  769. ""
  770. "The PMOVMSKB instruction selects the most significant bit from each byte position of an MMX register and collapses all eight bits into the least significant byte of an integer register."
  771. [2]
  772. "PMOVMSKB reg32, mmreg performs the following operations:"
  773. ""
  774. "reg32[31:8] = 0"
  775. "reg32[7] = mmreg[63]"
  776. "reg32[6] = mmreg[55]"
  777. "reg32[5] = mmreg[47]"
  778. "reg32[4] = mmreg[39]"
  779. "reg32[3] = mmreg[31]"
  780. "reg32[2] = mmreg[23]"
  781. "reg32[1] = mmreg[15]"
  782. "reg32[0] = mmreg[7]"
  783. [3]
  784. "None."
  785. [4]
  786. "Protected Mode Exceptions"
  787. ""
  788. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  789. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  790. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  791. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  792. "#Page fault, A page fault resulted from the execution of the instruction."
  793. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  794. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  795. ""
  796. "Real-Address Mode Exceptions"
  797. ""
  798. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  799. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  800. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  801. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  802. ""
  803. "Virtual-8086 Mode Exceptions"
  804. ""
  805. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  806. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  807. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  808. "#Page fault, A page fault resulted from the execution of the instruction."
  809. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  810. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  811. [5]
  812. "0F D7 /r PMOVMSKB reg32, mmreg"
  813. [6]
  814. </PMOVMSKB>
  815. <PMULHUW>
  816. [1]
  817. "PMULHUW: Packed multiply high unsigned word"
  818. ""
  819. "The PMULHUW instruction multiplies the four unsigned words in the source operand with the four unsigned words in the destination operand. The upper 16 bits of the 32-bit intermediate result is placed into the destination operand."
  820. [2]
  821. "PMULHUW mmreg1, mmreg2 performs the following operations:"
  822. ""
  823. "mmreg1[15:0] = (mmreg1[15:0] * mmreg2[15:0])[31:16]"
  824. "mmreg1[31:16] = (mmreg1[31:16] * mmreg2[31:16])[31:16]"
  825. "mmreg1[47:32] = (mmreg1[47:32] * mmreg2[47:32])[31:16]"
  826. "mmreg1[63:48] = (mmreg1[63:48] * mmreg2[63:48])[31:16]"
  827. "PMULHUW mmreg, mem64 performs the following operations:"
  828. ""
  829. "mmreg[15:0] = (mmreg[15:0] * mem64[15:0])[31:16]"
  830. "mmreg[31:16] = (mmreg[31:16] * mem64[31:16])[31:16]"
  831. "mmreg[47:32] = (mmreg[47:32] * mem64[47:32])[31:16]"
  832. "mmreg[63:48] = (mmreg[63:48] * mem64[63:48])[31:16]"
  833. [3]
  834. "None."
  835. [4]
  836. "Protected Mode Exceptions"
  837. ""
  838. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  839. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  840. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  841. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  842. "#Page fault, A page fault resulted from the execution of the instruction."
  843. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  844. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  845. ""
  846. "Real-Address Mode Exceptions"
  847. ""
  848. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  849. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  850. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  851. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  852. ""
  853. "Virtual-8086 Mode Exceptions"
  854. ""
  855. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  856. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  857. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  858. "#Page fault, A page fault resulted from the execution of the instruction."
  859. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  860. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  861. [5]
  862. "0F E4 /r PMULHUW mmreg1, mmreg2 or PMULHUW mmreg, mem64"
  863. [6]
  864. </PMULHUW>
  865. <PREFETCHNTA>
  866. <PREFETCHT0>
  867. <PREFETCHT1>
  868. <PREFETCHT2>
  869. [1]
  870. "PREFETCHNTA: Move data closer to the processor using the NTA reference."
  871. "PREFETCHT0: Move data closer to the processor using the T0 reference."
  872. "PREFETCHT1: Move data closer to the processor using the T1 reference."
  873. "PREFETCHT2: Move data closer to the processor using the T2 reference."
  874. ""
  875. "The prefetch instruction brings a cache line into the processor cache level(s) specified by a locality reference. The address of the prefetched cache line is specified by the mem8 value. The prefetch instruction loads a cache line even if the mem8 address is not aligned with the start of the line. If a cache level, which is closer than the locality reference, already has the cache line, or a memory fault is detected, then no bus cycle is initiated and the instruction is treated as a NOP."
  876. ""
  877. "The operation of the prefetch instructions is processor implementation dependent. The instructions can be ignored or changed by a processor implementation, though they will not change program behavior. The cache line size is also implementation dependent having a minimum size of 32 bytes. Bits 5:3 of the ModR/M byte indicate the cache locality references."
  878. [2]
  879. "NTA Move specified data into processor and minimize cache pollution."
  880. "T0 Move specified data into all cache levels."
  881. "T1 Move specified data into all cache levels except 0th level cache."
  882. "T2 Move specified data into all cache levels except 0th and 1st level caches."
  883. ""
  884. "Note: A 0th level cache is implementation dependent."
  885. [3]
  886. "None."
  887. [4]
  888. "None."
  889. [5]
  890. "0F 18 /0 PREFETCHNTA mem8"
  891. "0F 18 /1 PREFETCHT0 mem8"
  892. "0F 18 /2 PREFETCHT1 mem8"
  893. "0F 18 /3 PREFETCHT2 mem8"
  894. [6]
  895. </PREFETCHNTA>
  896. </PREFETCHT0>
  897. </PREFETCHT1>
  898. </PREFETCHT2>
  899. <PSADBW>
  900. [1]
  901. "PSADBW: Packed sum of absolute byte differences"
  902. ""
  903. "The PSADBW instruction is the sum of the absolute value of the differences between each byte position of source 1 and source 2."
  904. [2]
  905. "PSADBW mmreg1, mmreg2 performs the following operations:"
  906. ""
  907. "mmreg1[63:16] = 0"
  908. "mmreg1[15:0] = abs(mmreg1[7:0] û mmreg2[7:0]) +"
  909. "abs(mmreg1[15:8] û mmreg2[15:8]) +"
  910. "abs(mmreg1[23:16] û mmreg2[23:16]) +"
  911. "abs(mmreg1[31:24] û mmreg2[31:24]) +"
  912. "abs(mmreg1[39:32] û mmreg2[39:32]) +"
  913. "abs(mmreg1[47:40] û mmreg2[47:40]) +"
  914. "abs(mmreg1[55:48] û mmreg2[55:48]) +"
  915. "abs(mmreg1[63:56] û mmreg2[63:56])"
  916. ""
  917. "PSADBW mmreg, mem64 performs the following operations:"
  918. ""
  919. "mmreg[63:16] = 0"
  920. "mmreg[15:0] = abs(mmreg[7:0] û mem64[7:0]) +"
  921. "abs(mmreg[15:8] û mem64[15:8]) +"
  922. "abs(mmreg[23:16] û mem64[23:16]) +"
  923. "abs(mmreg[31:24] û mem64[31:24]) +"
  924. "abs(mmreg[39:32] û mem64[39:32]) +"
  925. "abs(mmreg[47:40] û mem64[47:40]) +"
  926. "abs(mmreg[55:48] û mem64[55:48]) +"
  927. "abs(mmreg[63:56] û mem64[63:56])"
  928. [3]
  929. "None."
  930. [4]
  931. "Protected Mode Exceptions"
  932. ""
  933. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  934. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  935. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  936. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  937. "#Page fault, A page fault resulted from the execution of the instruction."
  938. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  939. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  940. ""
  941. "Real-Address Mode Exceptions"
  942. ""
  943. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  944. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  945. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  946. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  947. ""
  948. "Virtual-8086 Mode Exceptions"
  949. ""
  950. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  951. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  952. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  953. "#Page fault, A page fault resulted from the execution of the instruction."
  954. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  955. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  956. [5]
  957. "0F F6 /r PSADBW mmreg1, mmreg2 or PSADBW mmreg, mem64"
  958. [6]
  959. </PSADBW>
  960. <PSHUFW>
  961. [1]
  962. "PSHUFW: Packed shuffle word"
  963. ""
  964. "The PSHUFW instruction rearranges the four words of an MMX register into one of 16 possible permutations as defined by an immediate byte."
  965. [2]
  966. "PSHUFW mmreg1, mmreg2, imm8 performs the following operations:"
  967. ""
  968. "index3 = imm8[7:6] * 16"
  969. "index2 = imm8[5:4] * 16"
  970. "index1 = imm8[3:2] * 16"
  971. "index0 = imm8[1:0] * 16"
  972. "mmreg1[63:48] = mmreg2[index3+15:index3]"
  973. "mmreg1[47:32] = mmreg2[index2+15:index2]"
  974. "mmreg1[31:16] = mmreg2[index1+15:index1]"
  975. "mmreg1[15:0] = mmreg2[index0+15:index0]"
  976. ""
  977. "PSHUFW mmreg, mem64, imm8 performs the following operations:"
  978. ""
  979. "index3 = imm8[7:6] * 16"
  980. "index2 = imm8[5:4] * 16"
  981. "index1 = imm8[3:2] * 16"
  982. "index0 = imm8[1:0] * 16"
  983. "mmreg[63:48] = mem64[index3+15:index3]"
  984. "mmreg[47:32] = mem64[index2+15:index2]"
  985. "mmreg[31:16] = mem64[index1+15:index1]"
  986. "mmreg[15:0] = mem64[index0+15:index0]"
  987. [3]
  988. "None."
  989. [4]
  990. "Protected Mode Exceptions"
  991. ""
  992. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  993. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  994. "#Stack Exception, During instruction execution, the stack segment limit was exceeded."
  995. "#General Protection, During instruction execution, the effective address of one of the segment registers used for the operand points to an illegal memory location."
  996. "#Page fault, A page fault resulted from the execution of the instruction."
  997. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  998. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  999. ""
  1000. "Real-Address Mode Exceptions"
  1001. ""
  1002. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  1003. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  1004. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  1005. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  1006. ""
  1007. "Virtual-8086 Mode Exceptions"
  1008. ""
  1009. "#Invalid Opcode, The emulate instruction bit (EM) of the control register (CR0) is set to 1."
  1010. "#Device Not Available, Save the floating-point or MMX state if the task switch bit (TS) of the control register (CR0) is set to 1."
  1011. "#Segment Overrun, One of the instruction data operands falls outside the address range 00000h to 0FFFFh."
  1012. "#Page fault, A page fault resulted from the execution of the instruction."
  1013. "#Float point exception pending, An exception is pending due to the floating-point execution unit."
  1014. "#Alignment check, An unaligned memory reference resulted from the instruction execution, and the alignment mask bit (AM) of the control register (CR0) is set to 1. (In Protected Mode, CPL = 3.)"
  1015. [5]
  1016. "0F 70 /r PSHUFW mmreg1, mmreg2, imm8 or PSHUFW mmreg, mem64, imm8"
  1017. [6]
  1018. </PSHUFW>
  1019. <SFENCE>
  1020. [1]
  1021. "SFENCE: Store fence"
  1022. ""
  1023. "The SFENCE instructions makes all previous writes globally visible before any later writes."
  1024. [2]
  1025. "See Description."
  1026. [3]
  1027. "None."
  1028. [4]
  1029. "None."
  1030. [5]
  1031. "0F AE /7 SFENCE"
  1032. [6]
  1033. </PSHUFW>
  1034.