10.4 Pentium III instructions

-------------------------------

Support for 19 new MMX expanded instructions has been added to C--.

MASKMOVQ mmx,mmx

MOVNTQ m64,mmx

PAVGB mmx,mmx/m64

PAVGW mmx,mmx/m64

PEXTRW r32,mmx,i8

PINSRW mmx,r32/m16,i8

PMAXUB mmx,mmx/m64

PMAXSW mmx,mmx/m64

PMINUB mmx,mmx/m64

PMINSW mmx,mmx/m64

PMOVMSKB r32,mmx

PMULHUW mmx,mmx/m64

PREFETCHT0 mem

PREFETCHT1 mem

PREFETCHT2 mem

PREFETCHNTA mem

SFENCE

PSADBW mmx,mmx/m64

PSHUFW mmx,mmx/m64,i8

There is now also support for 46 instructions involving SSE extensions.

ADDPS xmm,m128/xmm

ADDSS xmm,xmm/m32

ANDNPS xmm,xmm/m128

ANDPS xmm,xmm/m128

ANDPS xmm,xmm/m128

DIVPS xmm,m128/xmm

DIVSS xmm,xmm/m32

MAXPS xmm,m128/xmm

MAXSS xmm,xmm/m32

MINPS xmm,m128/xmm

MINSS xmm,xmm/m32

MULPS xmm,m128/xmm

MULSS xmm,xmm/m32

ORPS xmm,xmm/m128

RCPPS xmm,xmm/m128

RCPSS xmm,xmm/m32

RSQRTPS xmm,xmm/m128

RSQRTSS xmm,xmm/m32

SQRTPS xmm,m128/xmm

SQRTSS xmm,xmm/m32

SUBPS xmm,m128/xmm

SUBSS xmm,xmm/m32

UCOMISS xmm,xmm/m32

UNPCKHPS xmm,xmm/m128

UNPCKLPS xmm,xmm/m128

XORPS xmm,xmm/m128

CMPPS xmm,xmm/m128,i8

CMPSS xmm,xmm/m32,i8

SHUFPS xmm,xmm/m128,i8

CVTPI2PS xmm,m64/mmx

CVTSI2SS xmm,m32/r32

CVTPS2PI mmx,m128/xmm

CVTTPS2PI mmx,xmm/m128

CVTSS2SI r32,xmm/m128

CVTTSS2SI r32,xmm/m128

LDMXCSR m32

STMXCSR m32

MOVHLPS xmm,xmm

MOVLHPS xmm,xmm

MOVMSKPS r32,xmm

MOVNTPS m128,xmm

MOVAPS m128/xmm,xmm/m128

MOVSS xmm/m32,xmm/m32

MOVUPS xmm/m128,m128/xmm

MOVHPS xmm/m64,m64/xmm

MOVLPS xmm/m64,m64/xmm

Many of these instructions can use 64-bit and 128-bit operands. But C--

can work only with 32-bit variables. Therefore any types of variables can

be used for instructions which have more than 32-bit operands. The compiler

will not generate an error message, but it will use the address of this

variable, and the instruction itself will use the correct number of memory

bits, starting from the address of the variable. For example:

For the instruction 'movaps' one of the operands can be 128-bit. Use

the following syntax:

byte var8_128[16];

word var16_128[8];

word var16_128[8];

void proc()

{

asm{

movaps var8_128,xmm0 // The contents of XMM0 will be recorded into a 16-byte array

movaps xmm1,var16_128 // The contents of 8 words will be recorded into XMM1

movaps var32_128,xmm1 // XMM1 will be recorded into an array of 4 double words

}

}