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 POPCNT
como parte de SSE4.2 y LZCNT
como parte de BMI1. POPCNT
tiene un indicador de CPUID separado; sin embargo, Intel usa la ABM
bandera de AMD para indicar LZCNT
soporte (ya que LZCNT
completa el ABM). [2]
LZCNT
está relacionado con la BSR
instrucció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 LZCNT
y los BSR
resultados 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 LZCNT
es tal que si no se admite ABM, en su BSR
lugar se ejecuta la instrucción. [3] : 227
Las instrucciones a continuación son aquellas habilitadas por el BMI
bit en CPUID. Intel lo considera oficialmente LZCNT
como parte de BMI, pero anuncia LZCNT
soporte mediante el ABM
indicador 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.