Leaked source code of windows server 2003
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.

931 lines
16 KiB

  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