BNDSTX

Tienda Extended Bounds Usando la Traducción de Dirección

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NP 0F 1B /rBNDSTX mib, bndMRValidoValidoAlmacene los límites en bnd y el valor de puntero en el registro índice de mib a una entrada de tabla fija (BTE) con la traducción de dirección utilizando la base de mib.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

MR

  1. SIB.base (r): Address of pointer
  2. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)

Coste medido

Cargando las mediciones de arch-data...

Descripción

BNDSTX utiliza la dirección lineal construida a partir del desplazamiento y registro base de la forma de dirección SIB del operando de memoria (mib) para realizar la traducción de la dirección para almacenar a la entrada de la tabla. Los límites en el operando de origen bnd están escritos a los límites inferiores y superiores en el BTE. El contenido del registro índice de mib está escrito al campo de valor puntero en el BTE.

Esta instrucción no causa el acceso a la memoria a la dirección lineal de mib ni la dirección efectiva a la que se refiere la base, y no lee ni escribe ninguna bandera.

Segment overrides se aplican a la computación de la dirección lineal con la base de mib, y se utilizan durante la traducción de la dirección para generar la dirección de la entrada de la tabla. Por defecto, se supone que la dirección del BTE es la dirección lineal. No hay controles de segmentación realizados en la base de mib.

La base de mib no se comprobará por violación de direcciones canónicas ya que no accede a la memoria.

Cualquier codificación de esta instrucción que no especifique el registro base o índice tratará esos registros como cero (constant). La forma reg-reg de esta instrucción seguirá siendo un NOP.

El campo de escala del byte SIB no tiene ningún efecto en estas instrucciones y es ignorado.

El registro consolidado puede ser parcialmente actualizado en fallos de memoria. El orden en el que se cargan operandos de memoria es específico de la implementación.

Operación

base := mib.SIB.base ? mib.SIB.base + Disp: 0;
ptr_value := mib.SIB.index ? mib.SIB.index : 0;

Outside 64-bit Mode
A_BDE[31:0] := (Zero_extend32(base[31:12] << 2) + (BNDCFG[31:12] <<12 );
A_BT[31:0] := LoadFrom(A_BDE);
IF A_BT[0] equal 0 Then

    BNDSTATUS := A_BDE | 02H;
    #BR;
FI;
A_DEST[31:0] := (Zero_extend32(base[11:2] << 4) + (A_BT[31:2] << 2 ); // address of Bound table entry
A_DEST[8][31:0] := ptr_value;
A_DEST[0][31:0] := BND.LB;
A_DEST[4][31:0] := BND.UB;


In 64-bit Mode
A_BDE[63:0] := (Zero_extend64(base[47+MAWA:20] << 3) + (BNDCFG[63:12] <<12 );1
A_BT[63:0] := LoadFrom(A_BDE);
IF A_BT[0] equal 0 Then

    BNDSTATUS := A_BDE | 02H;
    #BR;
FI;
A_DEST[63:0] := (Zero_extend64(base[19:3] << 5) + (A_BT[63:3] << 3 ); // address of Bound table entry
A_DEST[16][63:0] := ptr_value;
A_DEST[0][63:0] := BND.LB;
A_DEST[8][63:0] := BND.UB;

Intel C/C++ compilador intrínseco

BNDSTX: _bnd_store_ptr_bounds(const void **ptr_addr, const void *ptr_val);

Banderas afectadas

None.

Excepciones

Modo protegido
#BRSi la entrada del directorio delimitado es inválida.
#UDSi el prefijo LOCK es utilizado. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si el prefijo 67H no se usa y CS.D=0. Si el prefijo 67H es usado y CS.D=1.
#GP(0)Si una dirección efectiva de destino de la entrada de la tabla de resultados está fuera del límite de segmento DS. Si el registro DS contiene un NULL selector de segmento. Si el operando de destino apunta a un segmento no escrito #PF(fault code) Si un fallo de pagina ocurre.
Modo real
#UDSi el prefijo LOCK es utilizado. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si se utiliza la dirección de 16 bits.
#GP(0)Si una dirección efectiva de destino de la entrada de la tabla de límites está fuera del límite de segmento DS.
Modo virtual-8086
#UDSi el prefijo LOCK es utilizado. Si ModRM.r/m codifica BND4-BND7 cuando Intel MPX está habilitado. Si se utiliza la dirección de 16 bits.
#GP(0)Si una dirección efectiva de destino de la entrada de la tabla de límites está fuera del límite de segmento DS. #PF(fault code) Si un fallo de pagina ocurre.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#BRSi la entrada del directorio delimitado es inválida.
#UDSi ModRM es RIP relativo. Si el prefijo LOCK es usado. Si ModRM.r/m y REX codifica BND4-BND15 cuando Intel MPX está habilitado.
#GP(0)Si la dirección de memoria (A BDE o A BTE) está en forma no canónica. Si el operando de destino apunta a un segmento no escrito #PF(fault code) Si ocurre un fallo de pagina.

Fuentes