Table B-4. IA MMX Instruction Formats and Encodings |
Instruction | Format | B | W | DW | QW |
EMMS - Empty MMX state | 0000 1111:01110111 | n/a | n/a | n/a | n/a |
MOVD - Move doubleword | | N | N | Y | N |
reg to mmxreg | 0000 1111:01101110: 11 mmxreg reg | | | | |
reg from mmxreg | 0000 1111:01111110: 11 mmxreg reg | | | | |
mem to mmxreg | 0000 1111:01101110: mod mmxreg r/m | | | | |
mem from mmxreg | 0000 1111:01111110: mod mmxreg r/m | | | | |
MOVQ - Move quadword | | N | N | N | Y |
mmxreg2 to mmxreg1 | 0000 1111:01101111: 11 mmxreg1 mmxreg2 | | | | |
mmxreg2 from mmxreg1 | 0000 1111:01111111: 11 mmxreg1 mmxreg2 | | | | |
mem to mmxreg | 0000 1111:01101111: mod mmxreg r/m | | | | |
mem from mmxreg | 0000 1111:01111111: mod mmxreg r/m | | | | |
PACKSSDW1 - Pack dword to word data (signed with saturation) | | n/a | O | I | n/a |
mmxreg2 to mmxreg1 | 0000 1111:01101011: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:01101011: mod mmxreg r/m | | | | |
PACKSSWB1 - Pack word to byte data (signed with saturation) | | O | I | n/a | n/a |
mmxreg2 to mmxreg1 | 0000 1111:01100011: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:01100011: mod mmxreg r/m | | | | |
PACKUSWB1 - Pack word to byte data (unsigned with saturation) | | O | I | n/a | n/a |
mmxreg2 to mmxreg1 | 0000 1111:01100111: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:01100111: mod mmxreg r/m | | | | |
PADD - Add with wrap-around | | Y | Y | Y | N |
mmxreg2 to mmxreg1 | 0000 1111: 111111gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111: 111111gg: mod mmxreg r/m | | | | |
PADDS - Add signed with saturation | | Y | Y | N | N |
mmxreg2 to mmxreg1 | 0000 1111: 111011gg: 11 mmxreg1 mmxreg2 | | | | |
memory to reg | 0000 1111: 111011gg: mod reg r/m | | | | |
PADDUS - Add unsigned with saturation | | Y | Y | N | N |
mmxreg2 to mmxreg1 | 0000 1111: 110111gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111: 110111gg: mod mmxreg r/m | | | | |
PAND - Bitwise And | | N | N | N | Y |
mmxreg2 to mmxreg1 | 0000 1111:11011011: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11011011: mod mmxreg r/m | | | | |
PANDN - Bitwise AndNot | | N | N | N | Y |
mmxreg2 to mmxreg1 | 0000 1111:11011111: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11011111: mod mmxreg r/m | | | | |
PCMPEQ - Packed compare for equality | | Y | Y | Y | N |
mmxreg2 with mmxreg1 | 0000 1111:011101gg: 11 mmxreg1 mmxreg2 | | | | |
memory with mmxreg | 0000 1111:011101gg: mod mmxreg r/m | | | | |
PCMPGT - Packed compare greater (signed) | | Y | Y | Y | N |
mmxreg2 with mmxreg1 | 0000 1111:011001gg: 11 mmxreg1 mmxreg2 | | | | |
memory with mmxreg | 0000 1111:011001gg: mod mmxreg r/m | | | | |
PMADD - Packed multiply add | | n/a | I | O | n/a |
mmxreg2 to mmxreg1 | 0000 1111:11110101: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11110101: mod mmxreg r/m | | | | |
PMULH - Packed multiplication | | N | Y | N | N |
mmxreg2 to mmxreg1 | 0000 1111:11100101: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11100101: mod mmxreg r/m | | | | |
PMULL - Packed multiplication | | N | Y | N | N |
mmxreg2 to mmxreg1 | 0000 1111:11010101: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11010101: mod mmxreg r/m | | | | |
POR - Bitwise Or | | N | N | N | Y |
mmxreg2 to mmxreg1 | 0000 1111:11101011: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11101011: mod mmxreg r/m | | | | |
PSLL2 - Packed shift left logical | | N | Y | Y | Y |
mmxreg2 by mmxreg1 | 0000 1111:111100gg: 11 mmxreg1 mmxreg2 | | | | |
mmxreg by memory | 0000 1111:111100gg: 11 mmxreg r/m | | | | |
mmxreg by immediate | 0000 1111:011100gg: 11 110 mmxreg: imm8 data | | | | |
PSRA2 - Packed shift right arithmetic | | N | Y | Y | N |
mmxreg2 by mmxreg1 | 0000 1111:111000gg: 11 mmxreg1 mmxreg2 | | | | |
mmxreg by memory | 0000 1111:111000gg: 11 mmxreg r/m | | | | |
mmxreg by immediate | 0000 1111:011100gg: 11 100 mmxreg: imm8 data | | | | |
PSRL2 - Packed shift right logical | | N | Y | Y | Y |
mmxreg2 by mmxreg1 | 0000 1111:110100gg: 11 mmxreg1 mmxreg2 | | | | |
mmxreg by memory | 0000 1111:110100gg: 11 mmxreg r/m | | | | |
mmxreg by immediate | 0000 1111:011100gg: 11 010 mmxreg: imm8 data | | | | |
PSUB - Subtract with wrap-around | | Y | Y | Y | N |
mmxreg2 to mmxreg1 | 0000 1111:111110gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:111110gg: mod mmxreg r/m | | | | |
PSUBS - Subtract signed with saturation | | Y | Y | N | N |
mmxreg2 to mmxreg1 | 0000 1111:111010gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:111010gg: mod mmxreg r/m | | | | |
PSUBUS - Subtract unsigned with saturation | | Y | Y | N | N |
mmxreg2 to mmxreg1 | 0000 1111:110110gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:110110gg: mod mmxreg r/m | | | | |
PUNPCKH - Unpack high data to next larger type | | Y | Y | Y | N |
mmxreg2 to mmxreg1 | 0000 1111:011010gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:011010gg: mod mmxreg r/m | | | | |
PUNPCKL - Unpack low data to next larger type | | Y | Y | Y | N |
mmxreg2 to mmxreg1 | 0000 1111:011000gg: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:011000gg: mod mmxreg r/m | | | | |
PXOR - Bitwise Xor | | N | N | N | Y |
mmxreg2 to mmxreg1 | 0000 1111:11101111: 11 mmxreg1 mmxreg2 | | | | |
memory to mmxreg | 0000 1111:11101111: mod mmxreg r/m | | | | |