From c9d9744d10910982b75ecc188655b54dfdb002f1 Mon Sep 17 00:00:00 2001 From: clc5q <clc5q@git.zephyr-software.com> Date: Fri, 11 Apr 2008 17:45:22 +0000 Subject: [PATCH] Move conditional moves from type category 12 to 0; most of category 15 to 14 (FP with MemSrc possible but not MemDest). --- SMPDataFlowAnalysis.cpp | 443 ++++++++++++++++++++-------------------- 1 file changed, 222 insertions(+), 221 deletions(-) diff --git a/SMPDataFlowAnalysis.cpp b/SMPDataFlowAnalysis.cpp index ca63a9d0..cb8216ff 100644 --- a/SMPDataFlowAnalysis.cpp +++ b/SMPDataFlowAnalysis.cpp @@ -1666,10 +1666,11 @@ void InitTypeCategory(void) { // Category 13 instructions imply that their memory destination is 'n'. // Category 14 instructions imply that their reg or memory source operand is 'n'; // if source is not memory, they are category 1 (inferences, but no instrumentation). + // There should never be a memory destination (usual destination is fpreg or flags). // Category 15 instructions always have 'n' source AND destination operands; - // if addressed using indexed addressing, they are a subset of category 0 - // (must be instrumented by mmStrata to keep index in bounds), else they are - // a subset of category 14 (numeric memory source if any, no instrumentation). + // if addressed using indirect or indexed addressing, they are a subset of category 0 + // (must be instrumented by mmStrata to keep index in bounds). Memory destinations + // are common in this category. // NOTE: The Memory Monitor SDT needs just three categories, corresponding // to categories 0, 1, and all others. For all categories > 1, the @@ -1923,22 +1924,22 @@ SMPTypeCategory[NN_rsm] = 1; // Resume from System Management Mo // Pentium Pro instructions // -SMPTypeCategory[NN_cmova] = 12; // Move if Above (CF=0 & ZF=0) -SMPTypeCategory[NN_cmovb] = 12; // Move if Below (CF=1) -SMPTypeCategory[NN_cmovbe] = 12; // Move if Below or Equal (CF=1 | ZF=1) -SMPTypeCategory[NN_cmovg] = 12; // Move if Greater (ZF=0 & SF=OF) -SMPTypeCategory[NN_cmovge] = 12; // Move if Greater or Equal (SF=OF) -SMPTypeCategory[NN_cmovl] = 12; // Move if Less (SF!=OF) -SMPTypeCategory[NN_cmovle] = 12; // Move if Less or Equal (ZF=1 | SF!=OF) -SMPTypeCategory[NN_cmovnb] = 12; // Move if Not Below (CF=0) -SMPTypeCategory[NN_cmovno] = 12; // Move if Not Overflow (OF=0) -SMPTypeCategory[NN_cmovnp] = 12; // Move if Not Parity (PF=0) -SMPTypeCategory[NN_cmovns] = 12; // Move if Not Sign (SF=0) -SMPTypeCategory[NN_cmovnz] = 12; // Move if Not Zero (ZF=0) -SMPTypeCategory[NN_cmovo] = 12; // Move if Overflow (OF=1) -SMPTypeCategory[NN_cmovp] = 12; // Move if Parity (PF=1) -SMPTypeCategory[NN_cmovs] = 12; // Move if Sign (SF=1) -SMPTypeCategory[NN_cmovz] = 12; // Move if Zero (ZF=1) +SMPTypeCategory[NN_cmova] = 0; // Move if Above (CF=0 & ZF=0) +SMPTypeCategory[NN_cmovb] = 0; // Move if Below (CF=1) +SMPTypeCategory[NN_cmovbe] = 0; // Move if Below or Equal (CF=1 | ZF=1) +SMPTypeCategory[NN_cmovg] = 0; // Move if Greater (ZF=0 & SF=OF) +SMPTypeCategory[NN_cmovge] = 0; // Move if Greater or Equal (SF=OF) +SMPTypeCategory[NN_cmovl] = 0; // Move if Less (SF!=OF) +SMPTypeCategory[NN_cmovle] = 0; // Move if Less or Equal (ZF=1 | SF!=OF) +SMPTypeCategory[NN_cmovnb] = 0; // Move if Not Below (CF=0) +SMPTypeCategory[NN_cmovno] = 0; // Move if Not Overflow (OF=0) +SMPTypeCategory[NN_cmovnp] = 0; // Move if Not Parity (PF=0) +SMPTypeCategory[NN_cmovns] = 0; // Move if Not Sign (SF=0) +SMPTypeCategory[NN_cmovnz] = 0; // Move if Not Zero (ZF=0) +SMPTypeCategory[NN_cmovo] = 0; // Move if Overflow (OF=1) +SMPTypeCategory[NN_cmovp] = 0; // Move if Parity (PF=1) +SMPTypeCategory[NN_cmovs] = 0; // Move if Sign (SF=1) +SMPTypeCategory[NN_cmovz] = 0; // Move if Zero (ZF=1) SMPTypeCategory[NN_fcmovb] = 1; // Floating Move if Below SMPTypeCategory[NN_fcmove] = 1; // Floating Move if Equal SMPTypeCategory[NN_fcmovbe] = 1; // Floating Move if Below or Equal @@ -2068,50 +2069,50 @@ SMPTypeCategory[NN_loadall] = 0; // Load the entire CPU state from E SMPTypeCategory[NN_emms] = 1; // Empty MMX state SMPTypeCategory[NN_movd] = 15; // Move 32 bits SMPTypeCategory[NN_movq] = 15; // Move 64 bits -SMPTypeCategory[NN_packsswb] = 15; // Pack with Signed Saturation (Word->Byte) -SMPTypeCategory[NN_packssdw] = 15; // Pack with Signed Saturation (Dword->Word) -SMPTypeCategory[NN_packuswb] = 15; // Pack with Unsigned Saturation (Word->Byte) -SMPTypeCategory[NN_paddb] = 15; // Packed Add Byte -SMPTypeCategory[NN_paddw] = 15; // Packed Add Word -SMPTypeCategory[NN_paddd] = 15; // Packed Add Dword -SMPTypeCategory[NN_paddsb] = 15; // Packed Add with Saturation (Byte) -SMPTypeCategory[NN_paddsw] = 15; // Packed Add with Saturation (Word) -SMPTypeCategory[NN_paddusb] = 15; // Packed Add Unsigned with Saturation (Byte) -SMPTypeCategory[NN_paddusw] = 15; // Packed Add Unsigned with Saturation (Word) -SMPTypeCategory[NN_pand] = 15; // Bitwise Logical And -SMPTypeCategory[NN_pandn] = 15; // Bitwise Logical And Not -SMPTypeCategory[NN_pcmpeqb] = 15; // Packed Compare for Equal (Byte) -SMPTypeCategory[NN_pcmpeqw] = 15; // Packed Compare for Equal (Word) -SMPTypeCategory[NN_pcmpeqd] = 15; // Packed Compare for Equal (Dword) -SMPTypeCategory[NN_pcmpgtb] = 15; // Packed Compare for Greater Than (Byte) -SMPTypeCategory[NN_pcmpgtw] = 15; // Packed Compare for Greater Than (Word) -SMPTypeCategory[NN_pcmpgtd] = 15; // Packed Compare for Greater Than (Dword) -SMPTypeCategory[NN_pmaddwd] = 15; // Packed Multiply and Add -SMPTypeCategory[NN_pmulhw] = 15; // Packed Multiply High -SMPTypeCategory[NN_pmullw] = 15; // Packed Multiply Low -SMPTypeCategory[NN_por] = 15; // Bitwise Logical Or -SMPTypeCategory[NN_psllw] = 15; // Packed Shift Left Logical (Word) -SMPTypeCategory[NN_pslld] = 15; // Packed Shift Left Logical (Dword) -SMPTypeCategory[NN_psllq] = 15; // Packed Shift Left Logical (Qword) -SMPTypeCategory[NN_psraw] = 15; // Packed Shift Right Arithmetic (Word) -SMPTypeCategory[NN_psrad] = 15; // Packed Shift Right Arithmetic (Dword) -SMPTypeCategory[NN_psrlw] = 15; // Packed Shift Right Logical (Word) -SMPTypeCategory[NN_psrld] = 15; // Packed Shift Right Logical (Dword) -SMPTypeCategory[NN_psrlq] = 15; // Packed Shift Right Logical (Qword) -SMPTypeCategory[NN_psubb] = 15; // Packed Subtract Byte -SMPTypeCategory[NN_psubw] = 15; // Packed Subtract Word -SMPTypeCategory[NN_psubd] = 15; // Packed Subtract Dword -SMPTypeCategory[NN_psubsb] = 15; // Packed Subtract with Saturation (Byte) -SMPTypeCategory[NN_psubsw] = 15; // Packed Subtract with Saturation (Word) -SMPTypeCategory[NN_psubusb] = 15; // Packed Subtract Unsigned with Saturation (Byte) -SMPTypeCategory[NN_psubusw] = 15; // Packed Subtract Unsigned with Saturation (Word) -SMPTypeCategory[NN_punpckhbw] = 15; // Unpack High Packed Data (Byte->Word) -SMPTypeCategory[NN_punpckhwd] = 15; // Unpack High Packed Data (Word->Dword) -SMPTypeCategory[NN_punpckhdq] = 15; // Unpack High Packed Data (Dword->Qword) -SMPTypeCategory[NN_punpcklbw] = 15; // Unpack Low Packed Data (Byte->Word) -SMPTypeCategory[NN_punpcklwd] = 15; // Unpack Low Packed Data (Word->Dword) -SMPTypeCategory[NN_punpckldq] = 15; // Unpack Low Packed Data (Dword->Qword) -SMPTypeCategory[NN_pxor] = 15; // Bitwise Logical Exclusive Or +SMPTypeCategory[NN_packsswb] = 14; // Pack with Signed Saturation (Word->Byte) +SMPTypeCategory[NN_packssdw] = 14; // Pack with Signed Saturation (Dword->Word) +SMPTypeCategory[NN_packuswb] = 14; // Pack with Unsigned Saturation (Word->Byte) +SMPTypeCategory[NN_paddb] = 14; // Packed Add Byte +SMPTypeCategory[NN_paddw] = 14; // Packed Add Word +SMPTypeCategory[NN_paddd] = 14; // Packed Add Dword +SMPTypeCategory[NN_paddsb] = 14; // Packed Add with Saturation (Byte) +SMPTypeCategory[NN_paddsw] = 14; // Packed Add with Saturation (Word) +SMPTypeCategory[NN_paddusb] = 14; // Packed Add Unsigned with Saturation (Byte) +SMPTypeCategory[NN_paddusw] = 14; // Packed Add Unsigned with Saturation (Word) +SMPTypeCategory[NN_pand] = 14; // Bitwise Logical And +SMPTypeCategory[NN_pandn] = 14; // Bitwise Logical And Not +SMPTypeCategory[NN_pcmpeqb] = 14; // Packed Compare for Equal (Byte) +SMPTypeCategory[NN_pcmpeqw] = 14; // Packed Compare for Equal (Word) +SMPTypeCategory[NN_pcmpeqd] = 14; // Packed Compare for Equal (Dword) +SMPTypeCategory[NN_pcmpgtb] = 14; // Packed Compare for Greater Than (Byte) +SMPTypeCategory[NN_pcmpgtw] = 14; // Packed Compare for Greater Than (Word) +SMPTypeCategory[NN_pcmpgtd] = 14; // Packed Compare for Greater Than (Dword) +SMPTypeCategory[NN_pmaddwd] = 14; // Packed Multiply and Add +SMPTypeCategory[NN_pmulhw] = 14; // Packed Multiply High +SMPTypeCategory[NN_pmullw] = 14; // Packed Multiply Low +SMPTypeCategory[NN_por] = 14; // Bitwise Logical Or +SMPTypeCategory[NN_psllw] = 14; // Packed Shift Left Logical (Word) +SMPTypeCategory[NN_pslld] = 14; // Packed Shift Left Logical (Dword) +SMPTypeCategory[NN_psllq] = 14; // Packed Shift Left Logical (Qword) +SMPTypeCategory[NN_psraw] = 14; // Packed Shift Right Arithmetic (Word) +SMPTypeCategory[NN_psrad] = 14; // Packed Shift Right Arithmetic (Dword) +SMPTypeCategory[NN_psrlw] = 14; // Packed Shift Right Logical (Word) +SMPTypeCategory[NN_psrld] = 14; // Packed Shift Right Logical (Dword) +SMPTypeCategory[NN_psrlq] = 14; // Packed Shift Right Logical (Qword) +SMPTypeCategory[NN_psubb] = 14; // Packed Subtract Byte +SMPTypeCategory[NN_psubw] = 14; // Packed Subtract Word +SMPTypeCategory[NN_psubd] = 14; // Packed Subtract Dword +SMPTypeCategory[NN_psubsb] = 14; // Packed Subtract with Saturation (Byte) +SMPTypeCategory[NN_psubsw] = 14; // Packed Subtract with Saturation (Word) +SMPTypeCategory[NN_psubusb] = 14; // Packed Subtract Unsigned with Saturation (Byte) +SMPTypeCategory[NN_psubusw] = 14; // Packed Subtract Unsigned with Saturation (Word) +SMPTypeCategory[NN_punpckhbw] = 14; // Unpack High Packed Data (Byte->Word) +SMPTypeCategory[NN_punpckhwd] = 14; // Unpack High Packed Data (Word->Dword) +SMPTypeCategory[NN_punpckhdq] = 14; // Unpack High Packed Data (Dword->Qword) +SMPTypeCategory[NN_punpcklbw] = 14; // Unpack Low Packed Data (Byte->Word) +SMPTypeCategory[NN_punpcklwd] = 14; // Unpack Low Packed Data (Word->Dword) +SMPTypeCategory[NN_punpckldq] = 14; // Unpack Low Packed Data (Dword->Qword) +SMPTypeCategory[NN_pxor] = 14; // Bitwise Logical Exclusive Or // // Undocumented Deschutes processor instructions @@ -2127,25 +2128,25 @@ SMPTypeCategory[NN_sysexit] = 1; // Fast Transition from System Call // 3DNow! instructions -SMPTypeCategory[NN_pavgusb] = 15; // Packed 8-bit Unsigned Integer Averaging -SMPTypeCategory[NN_pfadd] = 15; // Packed Floating-Point Addition -SMPTypeCategory[NN_pfsub] = 15; // Packed Floating-Point Subtraction -SMPTypeCategory[NN_pfsubr] = 15; // Packed Floating-Point Reverse Subtraction -SMPTypeCategory[NN_pfacc] = 15; // Packed Floating-Point Accumulate -SMPTypeCategory[NN_pfcmpge] = 15; // Packed Floating-Point Comparison, Greater or Equal -SMPTypeCategory[NN_pfcmpgt] = 15; // Packed Floating-Point Comparison, Greater -SMPTypeCategory[NN_pfcmpeq] = 15; // Packed Floating-Point Comparison, Equal -SMPTypeCategory[NN_pfmin] = 15; // Packed Floating-Point Minimum -SMPTypeCategory[NN_pfmax] = 15; // Packed Floating-Point Maximum -SMPTypeCategory[NN_pi2fd] = 15; // Packed 32-bit Integer to Floating-Point -SMPTypeCategory[NN_pf2id] = 15; // Packed Floating-Point to 32-bit Integer -SMPTypeCategory[NN_pfrcp] = 15; // Packed Floating-Point Reciprocal Approximation -SMPTypeCategory[NN_pfrsqrt] = 15; // Packed Floating-Point Reciprocal Square Root Approximation -SMPTypeCategory[NN_pfmul] = 15; // Packed Floating-Point Multiplication -SMPTypeCategory[NN_pfrcpit1] = 15; // Packed Floating-Point Reciprocal First Iteration Step -SMPTypeCategory[NN_pfrsqit1] = 15; // Packed Floating-Point Reciprocal Square Root First Iteration Step -SMPTypeCategory[NN_pfrcpit2] = 15; // Packed Floating-Point Reciprocal Second Iteration Step -SMPTypeCategory[NN_pmulhrw] = 15; // Packed Floating-Point 16-bit Integer Multiply with rounding +SMPTypeCategory[NN_pavgusb] = 14; // Packed 8-bit Unsigned Integer Averaging +SMPTypeCategory[NN_pfadd] = 14; // Packed Floating-Point Addition +SMPTypeCategory[NN_pfsub] = 14; // Packed Floating-Point Subtraction +SMPTypeCategory[NN_pfsubr] = 14; // Packed Floating-Point Reverse Subtraction +SMPTypeCategory[NN_pfacc] = 14; // Packed Floating-Point Accumulate +SMPTypeCategory[NN_pfcmpge] = 14; // Packed Floating-Point Comparison, Greater or Equal +SMPTypeCategory[NN_pfcmpgt] = 14; // Packed Floating-Point Comparison, Greater +SMPTypeCategory[NN_pfcmpeq] = 14; // Packed Floating-Point Comparison, Equal +SMPTypeCategory[NN_pfmin] = 14; // Packed Floating-Point Minimum +SMPTypeCategory[NN_pfmax] = 14; // Packed Floating-Point Maximum +SMPTypeCategory[NN_pi2fd] = 14; // Packed 32-bit Integer to Floating-Point +SMPTypeCategory[NN_pf2id] = 14; // Packed Floating-Point to 32-bit Integer +SMPTypeCategory[NN_pfrcp] = 14; // Packed Floating-Point Reciprocal Approximation +SMPTypeCategory[NN_pfrsqrt] = 14; // Packed Floating-Point Reciprocal Square Root Approximation +SMPTypeCategory[NN_pfmul] = 14; // Packed Floating-Point Multiplication +SMPTypeCategory[NN_pfrcpit1] = 14; // Packed Floating-Point Reciprocal First Iteration Step +SMPTypeCategory[NN_pfrsqit1] = 14; // Packed Floating-Point Reciprocal Square Root First Iteration Step +SMPTypeCategory[NN_pfrcpit2] = 14; // Packed Floating-Point Reciprocal Second Iteration Step +SMPTypeCategory[NN_pmulhrw] = 14; // Packed Floating-Point 16-bit Integer Multiply with rounding SMPTypeCategory[NN_femms] = 1; // Faster entry/exit of the MMX or floating-point state SMPTypeCategory[NN_prefetch] = 1; // Prefetch at least a 32-byte line into L1 data cache SMPTypeCategory[NN_prefetchw] = 1; // Prefetch processor cache line into L1 data cache (mark as modified) @@ -2153,26 +2154,26 @@ SMPTypeCategory[NN_prefetchw] = 1; // Prefetch processor cache line in // Pentium III instructions -SMPTypeCategory[NN_addps] = 15; // Packed Single-FP Add -SMPTypeCategory[NN_addss] = 15; // Scalar Single-FP Add -SMPTypeCategory[NN_andnps] = 15; // Bitwise Logical And Not for Single-FP -SMPTypeCategory[NN_andps] = 15; // Bitwise Logical And for Single-FP -SMPTypeCategory[NN_cmpps] = 15; // Packed Single-FP Compare -SMPTypeCategory[NN_cmpss] = 15; // Scalar Single-FP Compare -SMPTypeCategory[NN_comiss] = 15; // Scalar Ordered Single-FP Compare and Set EFLAGS -SMPTypeCategory[NN_cvtpi2ps] = 15; // Packed signed INT32 to Packed Single-FP conversion -SMPTypeCategory[NN_cvtps2pi] = 15; // Packed Single-FP to Packed INT32 conversion -SMPTypeCategory[NN_cvtsi2ss] = 15; // Scalar signed INT32 to Single-FP conversion -SMPTypeCategory[NN_cvtss2si] = 15; // Scalar Single-FP to signed INT32 conversion -SMPTypeCategory[NN_cvttps2pi] = 15; // Packed Single-FP to Packed INT32 conversion (truncate) -SMPTypeCategory[NN_cvttss2si] = 15; // Scalar Single-FP to signed INT32 conversion (truncate) -SMPTypeCategory[NN_divps] = 15; // Packed Single-FP Divide -SMPTypeCategory[NN_divss] = 15; // Scalar Single-FP Divide -SMPTypeCategory[NN_ldmxcsr] = 15; // Load Streaming SIMD Extensions Technology Control/Status Register -SMPTypeCategory[NN_maxps] = 15; // Packed Single-FP Maximum -SMPTypeCategory[NN_maxss] = 15; // Scalar Single-FP Maximum -SMPTypeCategory[NN_minps] = 15; // Packed Single-FP Minimum -SMPTypeCategory[NN_minss] = 15; // Scalar Single-FP Minimum +SMPTypeCategory[NN_addps] = 14; // Packed Single-FP Add +SMPTypeCategory[NN_addss] = 14; // Scalar Single-FP Add +SMPTypeCategory[NN_andnps] = 14; // Bitwise Logical And Not for Single-FP +SMPTypeCategory[NN_andps] = 14; // Bitwise Logical And for Single-FP +SMPTypeCategory[NN_cmpps] = 14; // Packed Single-FP Compare +SMPTypeCategory[NN_cmpss] = 14; // Scalar Single-FP Compare +SMPTypeCategory[NN_comiss] = 14; // Scalar Ordered Single-FP Compare and Set EFLAGS +SMPTypeCategory[NN_cvtpi2ps] = 14; // Packed signed INT32 to Packed Single-FP conversion +SMPTypeCategory[NN_cvtps2pi] = 14; // Packed Single-FP to Packed INT32 conversion +SMPTypeCategory[NN_cvtsi2ss] = 14; // Scalar signed INT32 to Single-FP conversion +SMPTypeCategory[NN_cvtss2si] = 14; // Scalar Single-FP to signed INT32 conversion +SMPTypeCategory[NN_cvttps2pi] = 14; // Packed Single-FP to Packed INT32 conversion (truncate) +SMPTypeCategory[NN_cvttss2si] = 14; // Scalar Single-FP to signed INT32 conversion (truncate) +SMPTypeCategory[NN_divps] = 14; // Packed Single-FP Divide +SMPTypeCategory[NN_divss] = 14; // Scalar Single-FP Divide +SMPTypeCategory[NN_ldmxcsr] = 14; // Load Streaming SIMD Extensions Technology Control/Status Register +SMPTypeCategory[NN_maxps] = 14; // Packed Single-FP Maximum +SMPTypeCategory[NN_maxss] = 14; // Scalar Single-FP Maximum +SMPTypeCategory[NN_minps] = 14; // Packed Single-FP Minimum +SMPTypeCategory[NN_minss] = 14; // Scalar Single-FP Minimum SMPTypeCategory[NN_movaps] = 15; // Move Aligned Four Packed Single-FP ** infer memsrc 'n'? SMPTypeCategory[NN_movhlps] = 15; // Move High to Low Packed Single-FP SMPTypeCategory[NN_movhps] = 15; // Move High Packed Single-FP @@ -2181,35 +2182,35 @@ SMPTypeCategory[NN_movlps] = 15; // Move Low Packed Single-FP SMPTypeCategory[NN_movmskps] = 15; // Move Mask to Register SMPTypeCategory[NN_movss] = 15; // Move Scalar Single-FP SMPTypeCategory[NN_movups] = 15; // Move Unaligned Four Packed Single-FP -SMPTypeCategory[NN_mulps] = 15; // Packed Single-FP Multiply -SMPTypeCategory[NN_mulss] = 15; // Scalar Single-FP Multiply -SMPTypeCategory[NN_orps] = 15; // Bitwise Logical OR for Single-FP Data -SMPTypeCategory[NN_rcpps] = 15; // Packed Single-FP Reciprocal -SMPTypeCategory[NN_rcpss] = 15; // Scalar Single-FP Reciprocal -SMPTypeCategory[NN_rsqrtps] = 15; // Packed Single-FP Square Root Reciprocal -SMPTypeCategory[NN_rsqrtss] = 15; // Scalar Single-FP Square Root Reciprocal -SMPTypeCategory[NN_shufps] = 15; // Shuffle Single-FP -SMPTypeCategory[NN_sqrtps] = 15; // Packed Single-FP Square Root -SMPTypeCategory[NN_sqrtss] = 15; // Scalar Single-FP Square Root +SMPTypeCategory[NN_mulps] = 14; // Packed Single-FP Multiply +SMPTypeCategory[NN_mulss] = 14; // Scalar Single-FP Multiply +SMPTypeCategory[NN_orps] = 14; // Bitwise Logical OR for Single-FP Data +SMPTypeCategory[NN_rcpps] = 14; // Packed Single-FP Reciprocal +SMPTypeCategory[NN_rcpss] = 14; // Scalar Single-FP Reciprocal +SMPTypeCategory[NN_rsqrtps] = 14; // Packed Single-FP Square Root Reciprocal +SMPTypeCategory[NN_rsqrtss] = 14; // Scalar Single-FP Square Root Reciprocal +SMPTypeCategory[NN_shufps] = 14; // Shuffle Single-FP +SMPTypeCategory[NN_sqrtps] = 14; // Packed Single-FP Square Root +SMPTypeCategory[NN_sqrtss] = 14; // Scalar Single-FP Square Root SMPTypeCategory[NN_stmxcsr] = 15; // Store Streaming SIMD Extensions Technology Control/Status Register ** Infer dest is 'n' -SMPTypeCategory[NN_subps] = 15; // Packed Single-FP Subtract -SMPTypeCategory[NN_subss] = 15; // Scalar Single-FP Subtract -SMPTypeCategory[NN_ucomiss] = 15; // Scalar Unordered Single-FP Compare and Set EFLAGS -SMPTypeCategory[NN_unpckhps] = 15; // Unpack High Packed Single-FP Data -SMPTypeCategory[NN_unpcklps] = 15; // Unpack Low Packed Single-FP Data -SMPTypeCategory[NN_xorps] = 15; // Bitwise Logical XOR for Single-FP Data -SMPTypeCategory[NN_pavgb] = 15; // Packed Average (Byte) -SMPTypeCategory[NN_pavgw] = 15; // Packed Average (Word) -SMPTypeCategory[NN_pextrw] = 15; // Extract Word -SMPTypeCategory[NN_pinsrw] = 15; // Insert Word -SMPTypeCategory[NN_pmaxsw] = 15; // Packed Signed Integer Word Maximum -SMPTypeCategory[NN_pmaxub] = 15; // Packed Unsigned Integer Byte Maximum -SMPTypeCategory[NN_pminsw] = 15; // Packed Signed Integer Word Minimum -SMPTypeCategory[NN_pminub] = 15; // Packed Unsigned Integer Byte Minimum -SMPTypeCategory[NN_pmovmskb] = 15; // Move Byte Mask to Integer -SMPTypeCategory[NN_pmulhuw] = 15; // Packed Multiply High Unsigned -SMPTypeCategory[NN_psadbw] = 15; // Packed Sum of Absolute Differences -SMPTypeCategory[NN_pshufw] = 15; // Packed Shuffle Word +SMPTypeCategory[NN_subps] = 14; // Packed Single-FP Subtract +SMPTypeCategory[NN_subss] = 14; // Scalar Single-FP Subtract +SMPTypeCategory[NN_ucomiss] = 14; // Scalar Unordered Single-FP Compare and Set EFLAGS +SMPTypeCategory[NN_unpckhps] = 14; // Unpack High Packed Single-FP Data +SMPTypeCategory[NN_unpcklps] = 14; // Unpack Low Packed Single-FP Data +SMPTypeCategory[NN_xorps] = 14; // Bitwise Logical XOR for Single-FP Data +SMPTypeCategory[NN_pavgb] = 14; // Packed Average (Byte) +SMPTypeCategory[NN_pavgw] = 14; // Packed Average (Word) +SMPTypeCategory[NN_pextrw] = 2; // Extract Word +SMPTypeCategory[NN_pinsrw] = 14; // Insert Word +SMPTypeCategory[NN_pmaxsw] = 14; // Packed Signed Integer Word Maximum +SMPTypeCategory[NN_pmaxub] = 14; // Packed Unsigned Integer Byte Maximum +SMPTypeCategory[NN_pminsw] = 14; // Packed Signed Integer Word Minimum +SMPTypeCategory[NN_pminub] = 14; // Packed Unsigned Integer Byte Minimum +SMPTypeCategory[NN_pmovmskb] = 2; // Move Byte Mask to Integer +SMPTypeCategory[NN_pmulhuw] = 14; // Packed Multiply High Unsigned +SMPTypeCategory[NN_psadbw] = 14; // Packed Sum of Absolute Differences +SMPTypeCategory[NN_pshufw] = 14; // Packed Shuffle Word SMPTypeCategory[NN_maskmovq] = 15; // Byte Mask write ** Infer dest is 'n' SMPTypeCategory[NN_movntps] = 13; // Move Aligned Four Packed Single-FP Non Temporal * infer dest is 'n' SMPTypeCategory[NN_movntq] = 13; // Move 64 Bits Non Temporal ** Infer dest is 'n' @@ -2221,22 +2222,22 @@ SMPTypeCategory[NN_sfence] = 1; // Store Fence // Pentium III Pseudo instructions -SMPTypeCategory[NN_cmpeqps] = 15; // Packed Single-FP Compare EQ -SMPTypeCategory[NN_cmpltps] = 15; // Packed Single-FP Compare LT -SMPTypeCategory[NN_cmpleps] = 15; // Packed Single-FP Compare LE -SMPTypeCategory[NN_cmpunordps] = 15; // Packed Single-FP Compare UNORD -SMPTypeCategory[NN_cmpneqps] = 15; // Packed Single-FP Compare NOT EQ -SMPTypeCategory[NN_cmpnltps] = 15; // Packed Single-FP Compare NOT LT -SMPTypeCategory[NN_cmpnleps] = 15; // Packed Single-FP Compare NOT LE -SMPTypeCategory[NN_cmpordps] = 15; // Packed Single-FP Compare ORDERED -SMPTypeCategory[NN_cmpeqss] = 15; // Scalar Single-FP Compare EQ -SMPTypeCategory[NN_cmpltss] = 15; // Scalar Single-FP Compare LT -SMPTypeCategory[NN_cmpless] = 15; // Scalar Single-FP Compare LE -SMPTypeCategory[NN_cmpunordss] = 15; // Scalar Single-FP Compare UNORD -SMPTypeCategory[NN_cmpneqss] = 15; // Scalar Single-FP Compare NOT EQ -SMPTypeCategory[NN_cmpnltss] = 15; // Scalar Single-FP Compare NOT LT -SMPTypeCategory[NN_cmpnless] = 15; // Scalar Single-FP Compare NOT LE -SMPTypeCategory[NN_cmpordss] = 15; // Scalar Single-FP Compare ORDERED +SMPTypeCategory[NN_cmpeqps] = 14; // Packed Single-FP Compare EQ +SMPTypeCategory[NN_cmpltps] = 14; // Packed Single-FP Compare LT +SMPTypeCategory[NN_cmpleps] = 14; // Packed Single-FP Compare LE +SMPTypeCategory[NN_cmpunordps] = 14; // Packed Single-FP Compare UNORD +SMPTypeCategory[NN_cmpneqps] = 14; // Packed Single-FP Compare NOT EQ +SMPTypeCategory[NN_cmpnltps] = 14; // Packed Single-FP Compare NOT LT +SMPTypeCategory[NN_cmpnleps] = 14; // Packed Single-FP Compare NOT LE +SMPTypeCategory[NN_cmpordps] = 14; // Packed Single-FP Compare ORDERED +SMPTypeCategory[NN_cmpeqss] = 14; // Scalar Single-FP Compare EQ +SMPTypeCategory[NN_cmpltss] = 14; // Scalar Single-FP Compare LT +SMPTypeCategory[NN_cmpless] = 14; // Scalar Single-FP Compare LE +SMPTypeCategory[NN_cmpunordss] = 14; // Scalar Single-FP Compare UNORD +SMPTypeCategory[NN_cmpneqss] = 14; // Scalar Single-FP Compare NOT EQ +SMPTypeCategory[NN_cmpnltss] = 14; // Scalar Single-FP Compare NOT LT +SMPTypeCategory[NN_cmpnless] = 14; // Scalar Single-FP Compare NOT LE +SMPTypeCategory[NN_cmpordss] = 14; // Scalar Single-FP Compare ORDERED // AMD K7 instructions @@ -2261,39 +2262,39 @@ SMPTypeCategory[NN_fstp9] = 9; // Alias of Store Real and Pop // Pentium 4 instructions -SMPTypeCategory[NN_addpd] = 15; // Add Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_addsd] = 15; // Add Scalar Double-Precision Floating-Point Values -SMPTypeCategory[NN_andnpd] = 15; // Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_andpd] = 15; // Bitwise Logical AND of Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_addpd] = 14; // Add Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_addsd] = 14; // Add Scalar Double-Precision Floating-Point Values +SMPTypeCategory[NN_andnpd] = 14; // Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_andpd] = 14; // Bitwise Logical AND of Packed Double-Precision Floating-Point Values SMPTypeCategory[NN_clflush] = 1; // Flush Cache Line -SMPTypeCategory[NN_cmppd] = 15; // Compare Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_cmpsd] = 15; // Compare Scalar Double-Precision Floating-Point Values -SMPTypeCategory[NN_comisd] = 15; // Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS -SMPTypeCategory[NN_cvtdq2pd] = 15; // Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values -SMPTypeCategory[NN_cvtdq2ps] = 15; // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_cvtpd2dq] = 15; // Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers -SMPTypeCategory[NN_cvtpd2pi] = 15; // Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers -SMPTypeCategory[NN_cvtpd2ps] = 15; // Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision Floating-Point Values -SMPTypeCategory[NN_cvtpi2pd] = 15; // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_cvtps2dq] = 15; // Convert Packed Single-Precision Floating-Point Values to Packed Doubleword Integers -SMPTypeCategory[NN_cvtps2pd] = 15; // Convert Packed Single-Precision Floating-Point Values to Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_cvtsd2si] = 15; // Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer -SMPTypeCategory[NN_cvtsd2ss] = 15; // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value -SMPTypeCategory[NN_cvtsi2sd] = 15; // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value -SMPTypeCategory[NN_cvtss2sd] = 15; // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value -SMPTypeCategory[NN_cvttpd2dq] = 15; // Convert With Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers -SMPTypeCategory[NN_cvttpd2pi] = 15; // Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers -SMPTypeCategory[NN_cvttps2dq] = 15; // Convert With Truncation Packed Single-Precision Floating-Point Values to Packed Doubleword Integers -SMPTypeCategory[NN_cvttsd2si] = 15; // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer -SMPTypeCategory[NN_divpd] = 15; // Divide Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_divsd] = 15; // Divide Scalar Double-Precision Floating-Point Values +SMPTypeCategory[NN_cmppd] = 14; // Compare Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_cmpsd] = 14; // Compare Scalar Double-Precision Floating-Point Values +SMPTypeCategory[NN_comisd] = 14; // Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS +SMPTypeCategory[NN_cvtdq2pd] = 14; // Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values +SMPTypeCategory[NN_cvtdq2ps] = 14; // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_cvtpd2dq] = 14; // Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers +SMPTypeCategory[NN_cvtpd2pi] = 14; // Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers +SMPTypeCategory[NN_cvtpd2ps] = 14; // Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision Floating-Point Values +SMPTypeCategory[NN_cvtpi2pd] = 14; // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_cvtps2dq] = 14; // Convert Packed Single-Precision Floating-Point Values to Packed Doubleword Integers +SMPTypeCategory[NN_cvtps2pd] = 14; // Convert Packed Single-Precision Floating-Point Values to Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_cvtsd2si] = 14; // Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer +SMPTypeCategory[NN_cvtsd2ss] = 14; // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value +SMPTypeCategory[NN_cvtsi2sd] = 14; // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value +SMPTypeCategory[NN_cvtss2sd] = 14; // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value +SMPTypeCategory[NN_cvttpd2dq] = 14; // Convert With Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers +SMPTypeCategory[NN_cvttpd2pi] = 14; // Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers +SMPTypeCategory[NN_cvttps2dq] = 14; // Convert With Truncation Packed Single-Precision Floating-Point Values to Packed Doubleword Integers +SMPTypeCategory[NN_cvttsd2si] = 14; // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer +SMPTypeCategory[NN_divpd] = 14; // Divide Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_divsd] = 14; // Divide Scalar Double-Precision Floating-Point Values SMPTypeCategory[NN_lfence] = 1; // Load Fence SMPTypeCategory[NN_maskmovdqu] = 13; // Store Selected Bytes of Double Quadword ** Infer dest is 'n' -SMPTypeCategory[NN_maxpd] = 15; // Return Maximum Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_maxsd] = 15; // Return Maximum Scalar Double-Precision Floating-Point Value +SMPTypeCategory[NN_maxpd] = 14; // Return Maximum Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_maxsd] = 14; // Return Maximum Scalar Double-Precision Floating-Point Value SMPTypeCategory[NN_mfence] = 1; // Memory Fence -SMPTypeCategory[NN_minpd] = 15; // Return Minimum Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_minsd] = 15; // Return Minimum Scalar Double-Precision Floating-Point Value +SMPTypeCategory[NN_minpd] = 14; // Return Minimum Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_minsd] = 14; // Return Minimum Scalar Double-Precision Floating-Point Value SMPTypeCategory[NN_movapd] = 15; // Move Aligned Packed Double-Precision Floating-Point Values ** Infer dest is 'n' SMPTypeCategory[NN_movdq2q] = 15; // Move Quadword from XMM to MMX Register SMPTypeCategory[NN_movdqa] = 15; // Move Aligned Double Quadword ** Infer dest is 'n' @@ -2307,29 +2308,29 @@ SMPTypeCategory[NN_movntpd] = 13; // Store Packed Double-Precision F SMPTypeCategory[NN_movq2dq] = 1; // Move Quadword from MMX to XMM Register SMPTypeCategory[NN_movsd] = 15; // Move Scalar Double-Precision Floating-Point Values SMPTypeCategory[NN_movupd] = 15; // Move Unaligned Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_mulpd] = 15; // Multiply Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_mulsd] = 15; // Multiply Scalar Double-Precision Floating-Point Values -SMPTypeCategory[NN_orpd] = 15; // Bitwise Logical OR of Double-Precision Floating-Point Values -SMPTypeCategory[NN_paddq] = 15; // Add Packed Quadword Integers +SMPTypeCategory[NN_mulpd] = 14; // Multiply Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_mulsd] = 14; // Multiply Scalar Double-Precision Floating-Point Values +SMPTypeCategory[NN_orpd] = 14; // Bitwise Logical OR of Double-Precision Floating-Point Values +SMPTypeCategory[NN_paddq] = 14; // Add Packed Quadword Integers SMPTypeCategory[NN_pause] = 1; // Spin Loop Hint -SMPTypeCategory[NN_pmuludq] = 15; // Multiply Packed Unsigned Doubleword Integers -SMPTypeCategory[NN_pshufd] = 15; // Shuffle Packed Doublewords -SMPTypeCategory[NN_pshufhw] = 15; // Shuffle Packed High Words -SMPTypeCategory[NN_pshuflw] = 15; // Shuffle Packed Low Words -SMPTypeCategory[NN_pslldq] = 15; // Shift Double Quadword Left Logical -SMPTypeCategory[NN_psrldq] = 15; // Shift Double Quadword Right Logical -SMPTypeCategory[NN_psubq] = 15; // Subtract Packed Quadword Integers -SMPTypeCategory[NN_punpckhqdq] = 15; // Unpack High Data -SMPTypeCategory[NN_punpcklqdq] = 15; // Unpack Low Data -SMPTypeCategory[NN_shufpd] = 15; // Shuffle Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_pmuludq] = 14; // Multiply Packed Unsigned Doubleword Integers +SMPTypeCategory[NN_pshufd] = 14; // Shuffle Packed Doublewords +SMPTypeCategory[NN_pshufhw] = 14; // Shuffle Packed High Words +SMPTypeCategory[NN_pshuflw] = 14; // Shuffle Packed Low Words +SMPTypeCategory[NN_pslldq] = 14; // Shift Double Quadword Left Logical +SMPTypeCategory[NN_psrldq] = 14; // Shift Double Quadword Right Logical +SMPTypeCategory[NN_psubq] = 14; // Subtract Packed Quadword Integers +SMPTypeCategory[NN_punpckhqdq] = 14; // Unpack High Data +SMPTypeCategory[NN_punpcklqdq] = 14; // Unpack Low Data +SMPTypeCategory[NN_shufpd] = 14; // Shuffle Packed Double-Precision Floating-Point Values SMPTypeCategory[NN_sqrtpd] = 1; // Compute Square Roots of Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_sqrtsd] = 15; // Compute Square Rootof Scalar Double-Precision Floating-Point Value -SMPTypeCategory[NN_subpd] = 15; // Subtract Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_subsd] = 15; // Subtract Scalar Double-Precision Floating-Point Values -SMPTypeCategory[NN_ucomisd] = 15; // Unordered Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS -SMPTypeCategory[NN_unpckhpd] = 15; // Unpack and Interleave High Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_unpcklpd] = 15; // Unpack and Interleave Low Packed Double-Precision Floating-Point Values -SMPTypeCategory[NN_xorpd] = 15; // Bitwise Logical OR of Double-Precision Floating-Point Values +SMPTypeCategory[NN_sqrtsd] = 14; // Compute Square Rootof Scalar Double-Precision Floating-Point Value +SMPTypeCategory[NN_subpd] = 14; // Subtract Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_subsd] = 14; // Subtract Scalar Double-Precision Floating-Point Values +SMPTypeCategory[NN_ucomisd] = 14; // Unordered Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS +SMPTypeCategory[NN_unpckhpd] = 14; // Unpack and Interleave High Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_unpcklpd] = 14; // Unpack and Interleave Low Packed Double-Precision Floating-Point Values +SMPTypeCategory[NN_xorpd] = 14; // Bitwise Logical OR of Double-Precision Floating-Point Values // AMD syscall/sysret instructions NOTE: not AMD, found in Intel manual @@ -2343,9 +2344,9 @@ SMPTypeCategory[NN_swapgs] = 1; // Exchange GS base with KernelGSBa // New Pentium instructions (SSE3) -SMPTypeCategory[NN_movddup] = 15; // Move One Double-FP and Duplicate -SMPTypeCategory[NN_movshdup] = 15; // Move Packed Single-FP High and Duplicate -SMPTypeCategory[NN_movsldup] = 15; // Move Packed Single-FP Low and Duplicate +SMPTypeCategory[NN_movddup] = 14; // Move One Double-FP and Duplicate +SMPTypeCategory[NN_movshdup] = 14; // Move Packed Single-FP High and Duplicate +SMPTypeCategory[NN_movsldup] = 14; // Move Packed Single-FP Low and Duplicate // Missing AMD64 instructions NOTE: also found in Intel manual @@ -2354,12 +2355,12 @@ SMPTypeCategory[NN_cmpxchg16b] = 0; // Compare and Exchange 16 Bytes // SSE3 instructions -SMPTypeCategory[NN_addsubpd] = 15; // Add /Sub packed DP FP numbers -SMPTypeCategory[NN_addsubps] = 15; // Add /Sub packed SP FP numbers -SMPTypeCategory[NN_haddpd] = 15; // Add horizontally packed DP FP numbers -SMPTypeCategory[NN_haddps] = 15; // Add horizontally packed SP FP numbers -SMPTypeCategory[NN_hsubpd] = 15; // Sub horizontally packed DP FP numbers -SMPTypeCategory[NN_hsubps] = 15; // Sub horizontally packed SP FP numbers +SMPTypeCategory[NN_addsubpd] = 14; // Add /Sub packed DP FP numbers +SMPTypeCategory[NN_addsubps] = 14; // Add /Sub packed SP FP numbers +SMPTypeCategory[NN_haddpd] = 14; // Add horizontally packed DP FP numbers +SMPTypeCategory[NN_haddps] = 14; // Add horizontally packed SP FP numbers +SMPTypeCategory[NN_hsubpd] = 14; // Sub horizontally packed DP FP numbers +SMPTypeCategory[NN_hsubps] = 14; // Sub horizontally packed SP FP numbers SMPTypeCategory[NN_monitor] = 1; // Set up a linear address range to be monitored by hardware SMPTypeCategory[NN_mwait] = 1; // Wait until write-back store performed within the range specified by the MONITOR instruction SMPTypeCategory[NN_fisttp] = 13; // Store ST in intXX (chop) and pop @@ -2367,22 +2368,22 @@ SMPTypeCategory[NN_lddqu] = 14; // Load unaligned integer 128-bit // SSSE3 instructions -SMPTypeCategory[NN_psignb] = 15; // Packed SIGN Byte -SMPTypeCategory[NN_psignw] = 15; // Packed SIGN Word -SMPTypeCategory[NN_psignd] = 15; // Packed SIGN Doubleword -SMPTypeCategory[NN_pshufb] = 15; // Packed Shuffle Bytes -SMPTypeCategory[NN_pmulhrsw] = 15; // Packed Multiply High with Round and Scale -SMPTypeCategory[NN_pmaddubsw] = 15; // Multiply and Add Packed Signed and Unsigned Bytes -SMPTypeCategory[NN_phsubsw] = 15; // Packed Horizontal Subtract and Saturate -SMPTypeCategory[NN_phaddsw] = 15; // Packed Horizontal Add and Saturate -SMPTypeCategory[NN_phaddw] = 15; // Packed Horizontal Add Word -SMPTypeCategory[NN_phaddd] = 15; // Packed Horizontal Add Doubleword -SMPTypeCategory[NN_phsubw] = 15; // Packed Horizontal Subtract Word -SMPTypeCategory[NN_phsubd] = 15; // Packed Horizontal Subtract Doubleword -SMPTypeCategory[NN_palignr] = 15; // Packed Align Right -SMPTypeCategory[NN_pabsb] = 15; // Packed Absolute Value Byte -SMPTypeCategory[NN_pabsw] = 15; // Packed Absolute Value Word -SMPTypeCategory[NN_pabsd] = 15; // Packed Absolute Value Doubleword +SMPTypeCategory[NN_psignb] = 14; // Packed SIGN Byte +SMPTypeCategory[NN_psignw] = 14; // Packed SIGN Word +SMPTypeCategory[NN_psignd] = 14; // Packed SIGN Doubleword +SMPTypeCategory[NN_pshufb] = 14; // Packed Shuffle Bytes +SMPTypeCategory[NN_pmulhrsw] = 14; // Packed Multiply High with Round and Scale +SMPTypeCategory[NN_pmaddubsw] = 14; // Multiply and Add Packed Signed and Unsigned Bytes +SMPTypeCategory[NN_phsubsw] = 14; // Packed Horizontal Subtract and Saturate +SMPTypeCategory[NN_phaddsw] = 14; // Packed Horizontal Add and Saturate +SMPTypeCategory[NN_phaddw] = 14; // Packed Horizontal Add Word +SMPTypeCategory[NN_phaddd] = 14; // Packed Horizontal Add Doubleword +SMPTypeCategory[NN_phsubw] = 14; // Packed Horizontal Subtract Word +SMPTypeCategory[NN_phsubd] = 14; // Packed Horizontal Subtract Doubleword +SMPTypeCategory[NN_palignr] = 14; // Packed Align Right +SMPTypeCategory[NN_pabsb] = 14; // Packed Absolute Value Byte +SMPTypeCategory[NN_pabsw] = 14; // Packed Absolute Value Word +SMPTypeCategory[NN_pabsd] = 14; // Packed Absolute Value Doubleword // VMX instructions -- GitLab