Conjunto de instrucciones de manipulación de bits X86


Los conjuntos de instrucciones de manipulación de bits ( conjuntos BMI ) son extensiones de la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y AMD . El propósito de estos conjuntos de instrucciones es mejorar la velocidad de manipulación de bits . Todas las instrucciones de estos conjuntos no son SIMD y funcionan solo en registros de uso general .

Hay dos conjuntos publicados por Intel: BMI (aquí denominado BMI1) y BMI2; ambos se introdujeron con la microarquitectura Haswell . AMD publicó otros dos conjuntos: ABM ( Advanced Bit Manipulation , que también es un subconjunto de SSE4a implementado por Intel como parte de SSE4.2 y BMI1), y TBM ( Trailing Bit Manipulation , una extensión introducida con procesadores basados ​​en Piledriver como una extensión de BMI1, pero volvió a caer en los procesadores basados en Zen ). [1]

AMD solo implementa ABM como un único conjunto de instrucciones; todos los procesadores AMD admiten ambas instrucciones o ninguna. Intel lo considera POPCNTcomo parte de SSE4.2 y LZCNTcomo parte de BMI1. POPCNTtiene un indicador de CPUID separado; sin embargo, Intel usa la ABMbandera de AMD para indicar LZCNTsoporte (ya que LZCNTcompleta el ABM). [2]

LZCNTestá relacionado con la BSRinstrucción Bit Scan Reverse ( ), pero establece las banderas ZF (si el resultado es cero) y CF (si la fuente es cero) en lugar de establecer ZF (si la fuente es cero). Además, produce un resultado definido (el tamaño del operando de origen en bits) si el operando de origen es cero. Para un argumento distinto de cero, la suma de LZCNTy los BSRresultados es el ancho de bits del argumento menos 1 (por ejemplo, si el argumento de 32 bits es 0x000f0000, LZCNT da 12 y BSR da 19).

La codificación de LZCNTes tal que si no se admite ABM, en su BSRlugar se ejecuta la instrucción. [3] : 227 

Las instrucciones a continuación son aquellas habilitadas por el BMIbit en CPUID. Intel lo considera oficialmente LZCNTcomo parte de BMI, pero anuncia LZCNTsoporte mediante el ABMindicador de función CPUID. [2] BMI1 está disponible en AMD's Jaguar , [4] Piledriver [5] y procesadores más nuevos, y en Intel's Haswell [6] y procesadores más nuevos.