home *** CD-ROM | disk | FTP | other *** search
/ Total Destruction / Total_Destruction.iso / addons / Lccwin32.exe / Lccwin32 / lccpub / include / mmx.h < prev    next >
Encoding:
Text File  |  1997-09-09  |  7.5 KB  |  158 lines

  1. typedef struct _pW {
  2.     char high;
  3.     char low;
  4. } _packedWord;
  5.  
  6. typedef struct _pDW {
  7.     _packedWord high;
  8.     _packedWord low;
  9. } _packedDWord;
  10.  
  11. typedef struct _pQW {
  12.     _packedDWord high;
  13.     _packedDWord low;
  14. } _packedQWord;
  15.  
  16. typedef struct __Union {
  17.     _packedQWord packed;
  18.     int dwords[2];
  19.     short words[4];
  20.     char bytes[8];
  21. } _mmxdata;
  22.     
  23. void _stdcall _emms(void);
  24. /* pack with signed saturation */
  25. void _stdcall _packsswb(_mmxdata *array1,_mmxdata *array2,int n);
  26. void _stdcall _packsswbi(_mmxdata *array,_mmxdata *imm,int n);
  27. void _stdcall _packssdw(_mmxdata *array1,_mmxdata *array2,int n);
  28. void _stdcall _packssdwi(_mmxdata *array,_mmxdata *imm,int n);
  29. /* pack with unsigned saturation */
  30. void _stdcall _packuswb(_mmxdata *array1,_mmxdata *array2,int n);
  31. void _stdcall _packuswbi(_mmxdata *array,_mmxdata *imm,int n);
  32. /* packed add */
  33. void _stdcall _paddb(_mmxdata *array1,_mmxdata *array2,int n);
  34. void _stdcall _paddbi(_mmxdata *array,_mmxdata *imm,int n);
  35. void _stdcall _paddw(_mmxdata *array1,_mmxdata *array2,int n);
  36. void _stdcall _paddwi(_mmxdata *array,_mmxdata *imm,int n);
  37. void _stdcall _paddd(_mmxdata *array1,_mmxdata *array2,int n);
  38. void _stdcall _padddi(_mmxdata *array,_mmxdata *imm,int n);
  39. /* packed add with saturation */
  40. void _stdcall _paddsb(_mmxdata *array1,_mmxdata *array2,int n);
  41. void _stdcall _paddusb(_mmxdata *array1,_mmxdata *array2,int n);
  42. void _stdcall _paddusbi(_mmxdata *array1,_mmxdata *_imm,int n);
  43. void _stdcall _paddsbi(_mmxdata *array1,_mmxdata *imm,int n);
  44. void _stdcall _paddsw(_mmxdata *array1,_mmxdata *array2,int n);
  45. void _stdcall _paddusw(_mmxdata *array1,_mmxdata *array2,int n);
  46. void _stdcall _padduswi(_mmxdata *array1,_mmxdata *imm,int n);
  47. void _stdcall _paddswi(_mmxdata *array,_mmxdata *imm,int n);
  48. /* pand */
  49. void _stdcall _pand(_mmxdata *array1,_mmxdata *array2,int n);
  50. void _stdcall _pandi(void *array1,_mmxdata *imm,int n);
  51. /* pandn */
  52. void _stdcall _pandn(void *array1,void *array2,int n);
  53. void _stdcall _pandni(void *array1,_mmxdata *imm,int n);
  54. /* pcmpeq */
  55. void _stdcall _pcmpeqb(_mmxdata *array1,_mmxdata *array2,int n);
  56. void _stdcall _pcmpeqbi(_mmxdata *array1,_mmxdata *imm,int n);
  57. void _stdcall _pcmpeqw(_mmxdata *array1,_mmxdata *array2,int n);
  58. void _stdcall _pcmpeqwi(_mmxdata *array1,_mmxdata *imm,int n);
  59. void _stdcall _pcmpeqd(_mmxdata *array1,_mmxdata *array2,int n);
  60. void _stdcall _pcmpeqdi(_mmxdata *array1,_mmxdata *imm,int n);
  61. /* pcmpgt */
  62. void _stdcall _pcmpgtb(_mmxdata *array1,_mmxdata *array2,int n);
  63. void _stdcall _pcmpgtbi(_mmxdata *array1,_mmxdata *imm,int n);
  64. void _stdcall _pcmpgtw(_mmxdata *array1,_mmxdata *array2,int n);
  65. void _stdcall _pcmpgtwi(_mmxdata *array1,_mmxdata *imm,int n);
  66. void _stdcall _pcmpgtd(_mmxdata *array1,_mmxdata *array2,int n);
  67. void _stdcall _pcmpgtdi(_mmxdata *array1,_mmxdata *imm,int n);
  68. /* pmaddwd */
  69. void _stdcall _pmaddwd(_mmxdata *array1,_mmxdata *array2,int n);
  70. void _stdcall _pmaddwdi(_mmxdata *array1,_mmxdata *imm,int n);
  71. /* pmulhw */
  72. void _stdcall _pmulhw(_mmxdata *array1,_mmxdata *array2,int n);
  73. void _stdcall _pmulhwi(_mmxdata *array1,_mmxdata *array2,int n);
  74. /* pmullw */
  75. void _stdcall _pmullw(_mmxdata *array1,_mmxdata *array2,int n);
  76. void _stdcall _pmullwi(_mmxdata *array1,_mmxdata *imm,int n);
  77. /* por */
  78. void _stdcall _por(_mmxdata *array1,_mmxdata *array2,int n);
  79. void _stdcall _pori(_mmxdata *array1,_mmxdata *array2,int n);
  80. /* psl */
  81. void _stdcall _psllw(_mmxdata *array1,_mmxdata *imm,int n);
  82. void _stdcall _psllwi(_mmxdata *array,unsigned char int8,int n);
  83. void _stdcall _pslld(_mmxdata *array,_mmxdata *imm,int n);
  84. void _stdcall _pslldi(_mmxdata *array,unsigned char int8,int n);
  85. void _stdcall _psllq(_mmxdata *array,_mmxdata *imm,int n);
  86. void _stdcall _psllqi(_mmxdata *array,unsigned char int8,int n);
  87. /* psra */
  88. void _stdcall _psraw(_mmxdata *array,_mmxdata *imm,int n);
  89. void _stdcall _psrawi(_mmxdata *array,unsigned char int8,int n);
  90. void _stdcall _psrad(_mmxdata *array,_mmxdata *imm,int n);
  91. void _stdcall _psradi(_mmxdata *array,unsigned char int8,int n);
  92. /* psrl */
  93. void _stdcall _psrlw(_mmxdata *array,_mmxdata *imm,int n);
  94. void _stdcall _psrlwi(_mmxdata *array,unsigned char int8,int n);
  95. void _stdcall _psrld(_mmxdata *array,_mmxdata *imm,int n);
  96. void _stdcall _psrldi(_mmxdata *array,unsigned char int8,int n);
  97. void _stdcall _psrlq(_mmxdata *array,_mmxdata *imm,int n);
  98. void _stdcall _psrlqi(_mmxdata *array,unsigned char int8,int n);
  99. /* packed sub routines */
  100. void _stdcall _psubb(_mmxdata *array1,_mmxdata *array2,int n);
  101. void _stdcall _psubbi(_mmxdata *array1,_mmxdata *imm,int n);
  102. void _stdcall _psubw(_mmxdata *array1,_mmxdata *array2,int n);
  103. void _stdcall _psubwi(_mmxdata *array1,_mmxdata *imm,int n);
  104. void _stdcall _psubd(_mmxdata *array1,_mmxdata *array2,int n);
  105. void _stdcall _psubdi(_mmxdata *array1,_mmxdata *imm,int n);
  106. void _stdcall _psubsb(_mmxdata *array1,_mmxdata *array2,int n);
  107. void _stdcall _psubsbi(_mmxdata *array1,_mmxdata *imm,int n);
  108. void _stdcall _psubsw(_mmxdata *array1,_mmxdata *array2,int n);
  109. void _stdcall _psubswi(_mmxdata *array1,_mmxdata *imm,int n);
  110. void _stdcall _psubsb(_mmxdata *array1,_mmxdata *array2,int n);
  111. void _stdcall _psubsbi(_mmxdata *array1,_mmxdata *imm,int n);
  112. void _stdcall _psubsw(_mmxdata *array1,_mmxdata *array2,int n);
  113. void _stdcall _psubswi(_mmxdata *array1,_mmxdata *imm,int n);
  114. void _stdcall _psubusb(_mmxdata *array1,_mmxdata *array2,int n);
  115. void _stdcall _psubusbi(_mmxdata *array1,_mmxdata *imm,int n);
  116. void _stdcall _psubusw(_mmxdata *array1,_mmxdata *array2,int n);
  117. void _stdcall _psubuswi(_mmxdata *array1,_mmxdata *imm,int n);
  118. /* punpckhwd */
  119. void _stdcall _punpckhbw(_mmxdata *array1,_mmxdata *array2,int n);
  120. void _stdcall _punpckhbwi(_mmxdata *array1,_mmxdata *imm,int n);
  121. void _stdcall _punpckhwd(_mmxdata *array1,_mmxdata *array2,int n);
  122. void _stdcall _punpckhwdi(_mmxdata *array1,_mmxdata *imm,int n);
  123. void _stdcall _punpckhdq(_mmxdata *array1,_mmxdata *array2,int n);
  124. void _stdcall _punpckhdqi(_mmxdata *array1,_mmxdata *imm,int n);
  125. /* punpckl */
  126. void _stdcall _punpcklbw(_mmxdata *array1,_mmxdata *array2,int n);
  127. void _stdcall _punpcklbwi(_mmxdata *array1,_mmxdata *imm,int n);
  128. void _stdcall _punpcklwd(_mmxdata *array1,_mmxdata *array2,int n);
  129. void _stdcall _punpcklwdi(_mmxdata *array1,_mmxdata *imm,int n);
  130. void _stdcall _punpckldq(_mmxdata *array1,_mmxdata *array2,int n);
  131. void _stdcall _punpckldqi(_mmxdata *array1,_mmxdata *imm,int n);
  132. /* pxor */
  133. void _stdcall _pxor(_mmxdata *array1,_mmxdata *array2,int n);
  134. void _stdcall _pxori(_mmxdata *array1,_mmxdata *imm,int n);
  135. /* moves */
  136. void _stdcall _pmemmove(_mmxdata *dst,_mmxdata *src,int n);
  137. void _stdcall _pmemset(_mmxdata *dst,_mmxdata *imm,int n);
  138.  
  139. /* replicate instructions */
  140. void _stdcall _replicatebyte(_mmxdata *dst,unsigned char c);
  141. void _stdcall _replicateword(_mmxdata *dst,unsigned short w);
  142. void _stdcall _replicatedword(_mmxdata *dst,unsigned int i);
  143.  
  144. /* missing comparison instruction */
  145. /* pcmpeq */
  146. void _stdcall _pcmpneqb(_mmxdata *array1,_mmxdata *array2,int n);
  147. void _stdcall _pcmpneqbi(_mmxdata *array1,_mmxdata *imm,int n);
  148. void _stdcall _pcmpneqw(_mmxdata *array1,_mmxdata *array2,int n);
  149. void _stdcall _pcmpneqwi(_mmxdata *array1,_mmxdata *imm,int n);
  150. void _stdcall _pcmpneqd(_mmxdata *array1,_mmxdata *array2,int n);
  151. void _stdcall _pcmpneqdi(_mmxdata *array1,_mmxdata *imm,int n);
  152.  
  153. /* reduce */
  154. int _stdcall _reduceBooleanb(_mmxdata *map,int n);
  155. int _stdcall _reduceCmpeqb(_mmxdata *map,_mmxdata *imm,int n);
  156. int _stdcall _reduceGtb(_mmxdata *map,_mmxdata *imm,int n);
  157. int _stdcall _reduceLtb(_mmxdata *map,_mmxdata *imm,int n);
  158.