iammx.inc
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 16k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. ;/*
  2. ;*    INTEL CORPORATION PROPRIETARY INFORMATION 
  3. ;*
  4. ;*    This software is supplied under the terms of a license
  5. ;*    agreement or nondisclosure agreement with Intel Corporation 
  6. ;*    and may not be copied or disclosed except in accordance with 
  7. ;*    the terms of that agreement.
  8. ;*    Copyright (c) 1991,1992,1993  Intel Corporation. 
  9. ;*
  10. ;*/
  11. ;NOTE:NOTE:NOTE:
  12. ; IF YOU MODIFY ANY OF THE OPCODES HERE, MAKE SURE TO REFLECT THAT
  13. ; IN THE ValidMmxOpcode[] array in mm.c. 
  14. ;
  15. ;Please use MMWORD and not DWORD (QWORD does not work) for 64 bit data 
  16. ; in MMX instructions. After getting a real assembler you will just have to
  17. ; add the line " MMWORD TEXTEQU <QWORD>" to your code.
  18. MMWORD TEXTEQU <DWORD>
  19. opc_Rdpmc     = 033H
  20. opc_Emms      = 077H
  21. opc_Movd_ld   = 06EH
  22. opc_Movd_st   = 07EH
  23. opc_Movq_ld   = 06FH
  24. opc_Movq_st   = 07FH
  25. opc_Packssdw  = 06BH
  26. opc_Packsswb  = 063H
  27. opc_Packuswb  = 067H
  28. opc_Paddb     = 0FCH
  29. opc_Paddd     = 0FEH
  30. opc_Paddsb    = 0ECH
  31. opc_Paddsw    = 0EDH
  32. opc_Paddusb   = 0DCH
  33. opc_Paddusw   = 0DDH
  34. opc_Paddw     = 0FDH
  35. opc_Pand      = 0DBH
  36. opc_Pandn     = 0DFH
  37. opc_Pcmpeqb   = 074H
  38. opc_Pcmpeqd   = 076H
  39. opc_Pcmpeqw   = 075H
  40. opc_Pcmpgtb   = 064H
  41. opc_Pcmpgtd   = 066H
  42. opc_Pcmpgtw   = 065H
  43. opc_Pmaddwd   = 0F5H
  44. opc_Pmulhw    = 0E5H
  45. opc_Pmullw    = 0D5H
  46. opc_Por       = 0EBH
  47. opc_PSHimd    = 072H
  48. opc_PSHimq    = 073H
  49. opc_PSHimw    = 071H
  50. opc_Pslld     = 0F2H
  51. opc_Psllq     = 0F3H
  52. opc_Psllw     = 0F1H
  53. opc_Psrad     = 0E2H
  54. opc_Psraw     = 0E1H
  55. opc_Psrld     = 0D2H
  56. opc_Psrlq     = 0D3H
  57. opc_Psrlw     = 0D1H
  58. opc_Psubb     = 0F8H
  59. opc_Psubd     = 0FAH
  60. opc_Psubsb    = 0E8H
  61. opc_Psubsw    = 0E9H
  62. opc_Psubusb   = 0D8H
  63. opc_Psubusw   = 0D9H
  64. opc_Psubw     = 0F9H
  65. opc_Punpcklbw = 060H
  66. opc_Punpckldq = 062H
  67. opc_Punpcklwd = 061H
  68. opc_Punpckhbw = 068H
  69. opc_Punpckhdq = 06AH
  70. opc_Punpckhwd = 069H
  71. opc_Pxor      = 0EFH
  72. .486P
  73. ; ALIAS R# to MM# registers
  74. DefineMMxRegs Macro
  75. IFDEF APP_16BIT
  76. MM0 TEXTEQU <AX>
  77. MM1 TEXTEQU <CX>
  78. MM2 TEXTEQU <DX>
  79. MM3 TEXTEQU <BX>
  80. MM4 TEXTEQU <SP>
  81. MM5 TEXTEQU <BP>
  82. MM6 TEXTEQU <SI>
  83. MM7 TEXTEQU <DI>
  84. mm0 TEXTEQU <AX>
  85. mm1 TEXTEQU <CX>
  86. mm2 TEXTEQU <DX>
  87. mm3 TEXTEQU <BX>
  88. mm4 TEXTEQU <SP>
  89. mm5 TEXTEQU <BP>
  90. mm6 TEXTEQU <SI>
  91. mm7 TEXTEQU <DI>
  92. Mm0 TEXTEQU <AX>
  93. Mm1 TEXTEQU <CX>
  94. Mm2 TEXTEQU <DX>
  95. Mm3 TEXTEQU <BX>
  96. Mm4 TEXTEQU <SP>
  97. Mm5 TEXTEQU <BP>
  98. Mm6 TEXTEQU <SI>
  99. Mm7 TEXTEQU <DI>
  100. mM0 TEXTEQU <AX>
  101. mM1 TEXTEQU <CX>
  102. mM2 TEXTEQU <DX>
  103. mM3 TEXTEQU <BX>
  104. mM4 TEXTEQU <SP>
  105. mM5 TEXTEQU <BP>
  106. mM6 TEXTEQU <SI>
  107. mM7 TEXTEQU <DI>
  108. ELSE
  109. MM0 TEXTEQU <EAX>
  110. MM1 TEXTEQU <ECX>
  111. MM2 TEXTEQU <EDX>
  112. MM3 TEXTEQU <EBX>
  113. MM4 TEXTEQU <ESP>
  114. MM5 TEXTEQU <EBP>
  115. MM6 TEXTEQU <ESI>
  116. MM7 TEXTEQU <EDI>
  117. mm0 TEXTEQU <EAX>
  118. mm1 TEXTEQU <ECX>
  119. mm2 TEXTEQU <EDX>
  120. mm3 TEXTEQU <EBX>
  121. mm4 TEXTEQU <ESP>
  122. mm5 TEXTEQU <EBP>
  123. mm6 TEXTEQU <ESI>
  124. mm7 TEXTEQU <EDI>
  125. Mm0 TEXTEQU <EAX>
  126. Mm1 TEXTEQU <ECX>
  127. Mm2 TEXTEQU <EDX>
  128. Mm3 TEXTEQU <EBX>
  129. Mm4 TEXTEQU <ESP>
  130. Mm5 TEXTEQU <EBP>
  131. Mm6 TEXTEQU <ESI>
  132. Mm7 TEXTEQU <EDI>
  133. mM0 TEXTEQU <EAX>
  134. mM1 TEXTEQU <ECX>
  135. mM2 TEXTEQU <EDX>
  136. mM3 TEXTEQU <EBX>
  137. mM4 TEXTEQU <ESP>
  138. mM5 TEXTEQU <EBP>
  139. mM6 TEXTEQU <ESI>
  140. mM7 TEXTEQU <EDI>
  141. ENDIF
  142. EndM
  143. ; ALIAS R# to MM# registers
  144. DefineMMxNUM Macro
  145. MM0 TEXTEQU <0>
  146. MM1 TEXTEQU <0>
  147. MM2 TEXTEQU <0>
  148. MM3 TEXTEQU <0>
  149. MM4 TEXTEQU <0>
  150. MM5 TEXTEQU <0>
  151. MM6 TEXTEQU <0>
  152. MM7 TEXTEQU <0>
  153. mm0 TEXTEQU <0>
  154. mm1 TEXTEQU <0>
  155. mm2 TEXTEQU <0>
  156. mm3 TEXTEQU <0>
  157. mm4 TEXTEQU <0>
  158. mm5 TEXTEQU <0>
  159. mm6 TEXTEQU <0>
  160. mm7 TEXTEQU <0>
  161. Mm0 TEXTEQU <0>
  162. Mm1 TEXTEQU <0>
  163. Mm2 TEXTEQU <0>
  164. Mm3 TEXTEQU <0>
  165. Mm4 TEXTEQU <0>
  166. Mm5 TEXTEQU <0>
  167. Mm6 TEXTEQU <0>
  168. Mm7 TEXTEQU <0>
  169. mM0 TEXTEQU <0>
  170. mM1 TEXTEQU <0>
  171. mM2 TEXTEQU <0>
  172. mM3 TEXTEQU <0>
  173. mM4 TEXTEQU <0>
  174. mM5 TEXTEQU <0>
  175. mM6 TEXTEQU <0>
  176. mM7 TEXTEQU <0>
  177. EndM
  178. UnDefineMMxRegs Macro
  179. MM0 TEXTEQU <MM0>
  180. MM1 TEXTEQU <MM1>
  181. MM2 TEXTEQU <MM2>
  182. MM3 TEXTEQU <MM3>
  183. MM4 TEXTEQU <MM4>
  184. MM5 TEXTEQU <MM5>
  185. MM6 TEXTEQU <MM6>
  186. MM7 TEXTEQU <MM7>
  187. mm0 TEXTEQU <mm0>
  188. mm1 TEXTEQU <mm1>
  189. mm2 TEXTEQU <mm2>
  190. mm3 TEXTEQU <mm3>
  191. mm4 TEXTEQU <mm4>
  192. mm5 TEXTEQU <mm5>
  193. mm6 TEXTEQU <mm6>
  194. mm7 TEXTEQU <mm7>
  195. Mm0 TEXTEQU <Mm0>
  196. Mm1 TEXTEQU <Mm1>
  197. Mm2 TEXTEQU <Mm2>
  198. Mm3 TEXTEQU <Mm3>
  199. Mm4 TEXTEQU <Mm4>
  200. Mm5 TEXTEQU <Mm5>
  201. Mm6 TEXTEQU <Mm6>
  202. Mm7 TEXTEQU <Mm7>
  203. mM0 TEXTEQU <mM0>
  204. mM1 TEXTEQU <mM1>
  205. mM2 TEXTEQU <mM2>
  206. mM3 TEXTEQU <mM3>
  207. mM4 TEXTEQU <mM4>
  208. mM5 TEXTEQU <mM5>
  209. mM6 TEXTEQU <mM6>
  210. mM7 TEXTEQU <mM7>
  211. EndM
  212. rdpmc     macro
  213. db 0fh, opc_Rdpmc
  214. endm
  215. emms     macro
  216. db 0fh, opc_Emms
  217. endm
  218. movd   macro   dst:req, src:req
  219.         local   x, y
  220. DefineMMxNUM
  221. IF (OPATTR(dst)) AND 00010000y ; register
  222. DefineMMxRegs
  223. x:
  224.         cmpxchg   dst, src
  225. y:
  226.         org     x+1
  227.         byte    opc_Movd_st 
  228.         org     y
  229. UnDefineMMxRegs
  230. ELSE
  231. DefineMMxRegs
  232. IF (OPATTR(dst)) AND 00010000y ; register
  233. x:
  234.         cmpxchg   src, dst
  235. y:
  236.         org     x+1
  237.         byte    opc_Movd_ld 
  238.         org     y
  239. ELSE
  240. x:
  241.         cmpxchg   dst, src
  242. y:
  243.         org     x+1
  244.         byte    opc_Movd_st 
  245.         org     y
  246. ENDIF
  247. UnDefineMMxRegs
  248. ENDIF
  249.         endm
  250. movdt    macro   dst:req, src:req
  251.         local   x, y
  252. DefineMMxRegs
  253. x:
  254.         cmpxchg   src, dst
  255. y:
  256.         org     x+1
  257.         byte    opc_Movd_ld 
  258.         org     y
  259. UnDefineMMxRegs
  260.         endm
  261. movdf   macro   dst:req, src:req
  262.         local   x, y
  263. DefineMMxRegs
  264. x:
  265.         cmpxchg   dst, src
  266. y:
  267.         org     x+1
  268.         byte    opc_Movd_st
  269.         org     y
  270. UnDefineMMxRegs
  271.         endm
  272. movq   macro   dst:req, src:req
  273.         local   x, y
  274. DefineMMxRegs
  275. IF (OPATTR(dst)) AND 00010000y ; register
  276. x:
  277.         cmpxchg   src, dst
  278. y:
  279.         org     x+1
  280.         byte    opc_Movq_ld 
  281.         org     y
  282. ELSE
  283. x:
  284.         cmpxchg   dst, src
  285. y:
  286.         org     x+1
  287.         byte    opc_Movq_st 
  288.         org     y
  289. ENDIF
  290. UnDefineMMxRegs
  291.         endm
  292. packssdw    macro   dst:req, src:req
  293.         local   x, y
  294. DefineMMxRegs
  295. x:
  296.         cmpxchg   src, dst
  297. y:
  298.         org     x+1
  299.         byte    opc_Packssdw
  300.         org     y
  301. UnDefineMMxRegs
  302.         endm
  303. packsswb    macro   dst:req, src:req
  304.         local   x, y
  305. DefineMMxRegs
  306. x:
  307.         cmpxchg   src, dst
  308. y:
  309.         org     x+1
  310.         byte    opc_Packsswb
  311.         org     y
  312. UnDefineMMxRegs
  313.         endm
  314. packuswb    macro   dst:req, src:req
  315.         local   x, y
  316. DefineMMxRegs
  317. x:
  318.         cmpxchg   src, dst
  319. y:
  320.         org     x+1
  321.         byte    opc_Packuswb
  322.         org     y
  323. UnDefineMMxRegs
  324.         endm
  325. paddd    macro   dst:req, src:req
  326.         local   x, y
  327. DefineMMxRegs
  328. x:
  329.         cmpxchg   src, dst
  330. y:
  331.         org     x+1
  332.         byte    opc_Paddd   
  333.         org     y
  334. UnDefineMMxRegs
  335.         endm
  336. paddsb    macro   dst:req, src:req
  337.         local   x, y
  338. DefineMMxRegs
  339. x:
  340.         cmpxchg   src, dst
  341. y:
  342.         org     x+1
  343.         byte    opc_Paddsb  
  344.         org     y
  345. UnDefineMMxRegs
  346.         endm
  347. paddsw    macro   dst:req, src:req
  348.         local   x, y
  349. DefineMMxRegs
  350. x:
  351.         cmpxchg   src, dst
  352. y:
  353.         org     x+1
  354.         byte    opc_Paddsw  
  355.         org     y
  356. UnDefineMMxRegs
  357.         endm
  358. paddusb    macro   dst:req, src:req
  359.         local   x, y
  360. DefineMMxRegs
  361. x:
  362.         cmpxchg   src, dst
  363. y:
  364.         org     x+1
  365.         byte    opc_Paddusb 
  366.         org     y
  367. UnDefineMMxRegs
  368.         endm
  369. paddusw    macro   dst:req, src:req
  370.         local   x, y
  371. DefineMMxRegs
  372. x:
  373.         cmpxchg   src, dst
  374. y:
  375.         org     x+1
  376.         byte    opc_Paddusw 
  377.         org     y
  378. UnDefineMMxRegs
  379.         endm
  380. paddb    macro   dst:req, src:req
  381.         local   x, y
  382. DefineMMxRegs
  383. x:
  384.         cmpxchg   src, dst
  385. y:
  386.         org     x+1
  387.         byte    opc_Paddb   
  388.         org     y
  389. UnDefineMMxRegs
  390.         endm
  391. paddw    macro   dst:req, src:req
  392.         local   x, y
  393. DefineMMxRegs
  394. x:
  395.         cmpxchg   src, dst
  396. y:
  397.         org     x+1
  398.         byte    opc_Paddw   
  399.         org     y
  400. UnDefineMMxRegs
  401.         endm
  402. pand    macro   dst:req, src:req
  403.         local   x, y
  404. DefineMMxRegs
  405. x:
  406.         cmpxchg   src, dst
  407. y:
  408.         org     x+1
  409.         byte    opc_Pand    
  410.         org     y
  411. UnDefineMMxRegs
  412.         endm
  413. pandn    macro   dst:req, src:req
  414.         local   x, y
  415. DefineMMxRegs
  416. x:
  417.         cmpxchg   src, dst
  418. y:
  419.         org     x+1
  420.         byte    opc_Pandn   
  421.         org     y
  422. UnDefineMMxRegs
  423.         endm
  424. pcmpeqb    macro   dst:req, src:req
  425.         local   x, y
  426. DefineMMxRegs
  427. x:
  428.         cmpxchg   src, dst
  429. y:
  430.         org     x+1
  431.         byte    opc_Pcmpeqb 
  432.         org     y
  433. UnDefineMMxRegs
  434.         endm
  435. pcmpeqd    macro   dst:req, src:req
  436.         local   x, y
  437. DefineMMxRegs
  438. x:
  439.         cmpxchg   src, dst
  440. y:
  441.         org     x+1
  442.         byte    opc_Pcmpeqd 
  443.         org     y
  444. UnDefineMMxRegs
  445.         endm
  446. pcmpeqw    macro   dst:req, src:req
  447.         local   x, y
  448. DefineMMxRegs
  449. x:
  450.         cmpxchg   src, dst
  451. y:
  452.         org     x+1
  453.         byte    opc_Pcmpeqw 
  454.         org     y
  455. UnDefineMMxRegs
  456.         endm
  457. pcmpgtb    macro   dst:req, src:req
  458.         local   x, y
  459. DefineMMxRegs
  460. x:
  461.         cmpxchg   src, dst
  462. y:
  463.         org     x+1
  464.         byte    opc_Pcmpgtb 
  465.         org     y
  466. UnDefineMMxRegs
  467.         endm
  468. pcmpgtd    macro   dst:req, src:req
  469.         local   x, y
  470. DefineMMxRegs
  471. x:
  472.         cmpxchg   src, dst
  473. y:
  474.         org     x+1
  475.         byte    opc_Pcmpgtd 
  476.         org     y
  477. UnDefineMMxRegs
  478.         endm
  479. pcmpgtw    macro   dst:req, src:req
  480.         local   x, y
  481. DefineMMxRegs
  482. x:
  483.         cmpxchg   src, dst
  484. y:
  485.         org     x+1
  486.         byte    opc_Pcmpgtw 
  487.         org     y
  488. UnDefineMMxRegs
  489.         endm
  490. pmaddwd    macro   dst:req, src:req
  491.         local   x, y
  492. DefineMMxRegs
  493. x:
  494.         cmpxchg   src, dst
  495. y:
  496.         org     x+1
  497.         byte    opc_Pmaddwd 
  498.         org     y
  499. UnDefineMMxRegs
  500.         endm
  501. pmulhw    macro   dst:req, src:req
  502.         local   x, y
  503. DefineMMxRegs
  504. x:
  505.         cmpxchg   src, dst
  506. y:
  507.         org     x+1
  508.         byte    opc_Pmulhw  
  509.         org     y
  510. UnDefineMMxRegs
  511.         endm
  512. pmullw    macro   dst:req, src:req
  513.         local   x, y
  514. DefineMMxRegs
  515. x:
  516.         cmpxchg   src, dst
  517. y:
  518.         org     x+1
  519.         byte    opc_Pmullw  
  520.         org     y
  521. UnDefineMMxRegs
  522.         endm
  523. por    macro   dst:req, src:req
  524.         local   x, y
  525. DefineMMxRegs
  526. x:
  527.         cmpxchg   src, dst
  528. y:
  529.         org     x+1
  530.         byte    opc_Por     
  531.         org     y
  532. UnDefineMMxRegs
  533.         endm
  534. pslld    macro   dst:req, src:req
  535.         local   x, y
  536. DefineMMxRegs
  537. IF (OPATTR(src)) AND 00000100y ; constant
  538. x:
  539.         btr   dst, src
  540. y:
  541.         org     x+1
  542.         byte    opc_PSHimd  
  543.         org     y
  544. ELSE
  545. x:
  546.         cmpxchg   src, dst
  547. y:
  548.         org     x+1
  549.         byte    opc_Pslld   
  550.         org     y
  551. ENDIF
  552. UnDefineMMxRegs
  553.         endm
  554. psllw    macro   dst:req, src:req
  555.         local   x, y
  556. DefineMMxRegs
  557. IF (OPATTR(src)) AND 00000100y ; constant
  558. x:
  559.         btr   dst, src
  560. y:
  561.         org     x+1
  562.         byte    opc_PSHimw  
  563.         org     y
  564. ELSE
  565. x:
  566.         cmpxchg   src, dst
  567. y:
  568.         org     x+1
  569.         byte    opc_Psllw   
  570.         org     y
  571. ENDIF
  572. UnDefineMMxRegs
  573.         endm
  574. psrad    macro   dst:req, src:req
  575.         local   x, y
  576. DefineMMxRegs
  577. IF (OPATTR(src)) AND 00000100y ; constant
  578. x:
  579.         bt   dst, src
  580. y:
  581.         org     x+1
  582.         byte    opc_PSHimd  
  583.         org     y
  584. ELSE
  585. x:
  586.         cmpxchg   src, dst
  587. y:
  588.         org     x+1
  589.         byte    opc_Psrad   
  590.         org     y
  591. ENDIF
  592. UnDefineMMxRegs
  593.         endm
  594. psraw    macro   dst:req, src:req
  595.         local   x, y
  596. DefineMMxRegs
  597. IF (OPATTR(src)) AND 00000100y ; constant
  598. x:
  599.         bt   dst, src
  600. y:
  601.         org     x+1
  602.         byte    opc_PSHimw  
  603.         org     y
  604. ELSE
  605. x:
  606.         cmpxchg   src, dst
  607. y:
  608.         org     x+1
  609.         byte    opc_Psraw   
  610.         org     y
  611. ENDIF
  612. UnDefineMMxRegs
  613.         endm
  614. psrld    macro   dst:req, src:req
  615.         local   x, y
  616. DefineMMxRegs
  617. IF (OPATTR(src)) AND 00000100y ; constant
  618. x:
  619.         cmpxchg dst,MM2
  620. byte src
  621. y:
  622.         org     x+1
  623.         byte    opc_PSHimd  
  624.         org     y
  625. ELSE
  626. x:
  627.         cmpxchg   src, dst
  628. y:
  629.         org     x+1
  630.         byte    opc_Psrld   
  631.         org     y
  632. ENDIF
  633. UnDefineMMxRegs
  634.         endm
  635. psrlq    macro   dst:req, src:req
  636.         local   x, y
  637. DefineMMxRegs
  638. IF (OPATTR(src)) AND 00000100y ; constant
  639. x:
  640.         cmpxchg dst,MM2
  641. byte src
  642. y:
  643.         org     x+1
  644.         byte    opc_PSHimq  
  645.         org     y
  646. ELSE
  647. x:
  648.         cmpxchg   src, dst
  649. y:
  650.         org     x+1
  651.         byte    opc_Psrlq   
  652.         org     y
  653. ENDIF
  654. UnDefineMMxRegs
  655.         endm
  656. psllq    macro   dst:req, src:req
  657.         local   x, y
  658. DefineMMxRegs
  659. IF (OPATTR(src)) AND 00000100y ; constant
  660. x:
  661.         btr   dst, src
  662. y:
  663.         org     x+1
  664.         byte    opc_PSHimq  
  665.         org     y
  666. ELSE
  667. x:
  668.         cmpxchg   src, dst
  669. y:
  670.         org     x+1
  671.         byte    opc_Psllq   
  672.         org     y
  673. ENDIF
  674. UnDefineMMxRegs
  675.         endm
  676. psrlw    macro   dst:req, src:req
  677.         local   x, y
  678. DefineMMxRegs
  679. IF (OPATTR(src)) AND 00000100y ; constant
  680. x:
  681.         cmpxchg dst,MM2
  682. byte src
  683. y:
  684.         org     x+1
  685.         byte    opc_PSHimw  
  686.         org     y
  687. ELSE
  688. x:
  689.         cmpxchg   src, dst
  690. y:
  691.         org     x+1
  692.         byte    opc_Psrlw   
  693.         org     y
  694. ENDIF
  695. UnDefineMMxRegs
  696.         endm
  697. psubsb    macro   dst:req, src:req
  698.         local   x, y
  699. DefineMMxRegs
  700. x:
  701.         cmpxchg   src, dst
  702. y:
  703.         org     x+1
  704.         byte    opc_Psubsb  
  705.         org     y
  706. UnDefineMMxRegs
  707.         endm
  708. psubsw    macro   dst:req, src:req
  709.         local   x, y
  710. DefineMMxRegs
  711. x:
  712.         cmpxchg   src, dst
  713. y:
  714.         org     x+1
  715.         byte    opc_Psubsw  
  716.         org     y
  717. UnDefineMMxRegs
  718.         endm
  719. psubusb    macro   dst:req, src:req
  720.         local   x, y
  721. DefineMMxRegs
  722. x:
  723.         cmpxchg   src, dst
  724. y:
  725.         org     x+1
  726.         byte    opc_Psubusb 
  727.         org     y
  728. UnDefineMMxRegs
  729.         endm
  730. psubusw    macro   dst:req, src:req
  731.         local   x, y
  732. DefineMMxRegs
  733. x:
  734.         cmpxchg   src, dst
  735. y:
  736.         org     x+1
  737.         byte    opc_Psubusw 
  738.         org     y
  739. UnDefineMMxRegs
  740.         endm
  741. psubb    macro   dst:req, src:req
  742.         local   x, y
  743. DefineMMxRegs
  744. x:
  745.         cmpxchg   src, dst
  746. y:
  747.         org     x+1
  748.         byte    opc_Psubb   
  749.         org     y
  750. UnDefineMMxRegs
  751.         endm
  752. psubw    macro   dst:req, src:req
  753.         local   x, y
  754. DefineMMxRegs
  755. x:
  756.         cmpxchg   src, dst
  757. y:
  758.         org     x+1
  759.         byte    opc_Psubw   
  760.         org     y
  761. UnDefineMMxRegs
  762.         endm
  763. punpcklbw    macro   dst:req, src:req
  764.         local   x, y
  765. DefineMMxRegs
  766. x:
  767.         cmpxchg   src, dst
  768. y:
  769.         org     x+1
  770.         byte    opc_Punpcklbw
  771.         org     y
  772. UnDefineMMxRegs
  773.         endm
  774. punpckhdq    macro   dst:req, src:req
  775.         local   x, y
  776. DefineMMxRegs
  777. x:
  778.         cmpxchg   src, dst
  779. y:
  780.         org     x+1
  781.         byte    opc_Punpckhdq
  782.         org     y
  783. UnDefineMMxRegs
  784.         endm
  785. punpcklwd    macro   dst:req, src:req
  786.         local   x, y
  787. DefineMMxRegs
  788. x:
  789.         cmpxchg   src, dst
  790. y:
  791.         org     x+1
  792.         byte    opc_Punpcklwd
  793.         org     y
  794. UnDefineMMxRegs
  795.         endm
  796. punpckhbw    macro   dst:req, src:req
  797.         local   x, y
  798. DefineMMxRegs
  799. x:
  800.         cmpxchg   src, dst
  801. y:
  802.         org     x+1
  803.         byte    opc_Punpckhbw
  804.         org     y
  805. UnDefineMMxRegs
  806.         endm
  807. punpckldq    macro   dst:req, src:req
  808.         local   x, y
  809. DefineMMxRegs
  810. x:
  811.         cmpxchg   src, dst
  812. y:
  813.         org     x+1
  814.         byte    opc_Punpckldq
  815.         org     y
  816. UnDefineMMxRegs
  817.         endm
  818. punpckhwd    macro   dst:req, src:req
  819.         local   x, y
  820. DefineMMxRegs
  821. x:
  822.         cmpxchg   src, dst
  823. y:
  824.         org     x+1
  825.         byte    opc_Punpckhwd
  826.         org     y
  827. UnDefineMMxRegs
  828.         endm
  829. pxor    macro   dst:req, src:req
  830.         local   x, y
  831. DefineMMxRegs
  832. x:
  833.         cmpxchg   src, dst
  834. y:
  835.         org     x+1
  836.         byte    opc_Pxor    
  837.         org     y
  838. UnDefineMMxRegs
  839.         endm
  840. psubd   macro   dst:req, src:req
  841.         local   x, y
  842. DefineMMxRegs
  843. x:
  844.         cmpxchg   src, dst
  845. y:
  846.         org     x+1
  847.         byte    opc_Psubd   
  848.         org     y
  849. UnDefineMMxRegs
  850.         endm