BNDLDX—Load Extended Bounds Using Address TranslationInstruction Operand EncodingDescriptionBNDLDX uses the linear address constructed from the base register and displacement of the SIB-addressing form of the memory operand (mib) to perform address translation to access a bound table entry and conditionally load the bounds in the BTE to the destination. The destination register is updated with the bounds in the BTE, if the content of the index register of mib matches the pointer value stored in the BTE. If the pointer value comparison fails, the destination is updated with INIT bounds (lb = 0x0, ub = 0x0) (note: as articulated earlier, the upper bound is represented using 1's complement, therefore, the 0x0 value of upper bound allows for access to full memory). This instruction does not cause memory access to the linear address of mib nor the effective address referenced by the base, and does not read or write any flags. Segment overrides apply to the linear address computation with the base of mib, and are used during address translation to generate the address of the bound table entry. By default, the address of the BTE is assumed to be linear address. There are no segmentation checks performed on the base of mib. The base of mib will not be checked for canonical address violation as it does not access memory. Any encoding of this instruction that does not specify base or index register will treat those registers as zero (constant). The reg-reg form of this instruction will remain a NOP.The scale field of the SIB byte has no effect on these instructions and is ignored.The bound register may be partially updated on memory faults. The order in which memory operands are loaded is implementation specific.Operationbase := mib.SIB.base ? mib.SIB.base + Disp: 0;ptr_value := mib.SIB.index ? mib.SIB.index : 0;Outside 64-bit modeA_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 ThenBNDSTATUS := A_BDE | 02H; #BR; FI;A_BTE[31:0] := (Zero_extend32(base[11:2] « 4) + (A_BT[31:2] « 2 );Temp_lb[31:0] := LoadFrom(A_BTE);Temp_ub[31:0] := LoadFrom(A_BTE + 4);Temp_ptr[31:0] := LoadFrom(A_BTE + 8);IF Temp_ptr equal ptr_value ThenBND.LB := Temp_lb; BND.UB := Temp_ub; Opcode/InstructionOp/En64/32 bit Mode SupportCPUID Feature FlagDescriptionNP 0F 1A /rBNDLDX bnd, mibRMV/VMPXLoad the bounds stored in a bound table entry (BTE) into bnd with address translation using the base of mib and conditional on the index of mib matching the pointer value in the BTE.Op/EnOperand 1Operand 2Operand 3RMModRM:reg (w)SIB.base (r): Address of pointerSIB.index(r)NA
This UNOFFICIAL reference was generated from the official Intel® 64 and IA-32 Architectures Software Developer’s Manual by a dumb script. There is no guarantee that some parts aren't mangled or broken and is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.