insertq

Insert Field to Register

INSERTQ xmm1, xmm2

Inserts bit field into register (AMD SSE4a).

Pseudocode Operation

field_length = xmm2[13:8]
field_pos = xmm2[5:0]
if (field_length == 0) then
  field_length = 64
end if
mask = ((1 << field_length) - 1)
insert_value = xmm2 & mask
xmm1 = (xmm1 & ~(mask << field_pos)) | (insert_value << field_pos)

Encoding

Binary Layout
66
+0
0F
+1
79
+2
ModRM
+3
 
Format SSE4a
Opcode F2 0F 79 /r
Extension SSE4a

Operands

  • dest
    128-bit XMM SIMD register
  • src
    128-bit XMM SIMD register

Related

More in SSE4a

Instruction Forms

Opcode Instruction Op/En 64/32-bit Mode CPUID Description
F2 0F 78 /r ib ib INSERTQ xmm1, xmm2, imm8, imm8 Insert a field from the low quadword of xmm2 into xmm1, using immediate length and index.
F2 0F 79 /r INSERTQ xmm1, xmm2 Insert a field from xmm2 into xmm1; length and index come from xmm2.

Description

Inserts bits from the lower 64 bits of the source operand into the lower 64 bits of the destination operand. No other bits in the lower 64 bits of the destination are modified. The upper 64 bits of the destination are undefined. The least-significant l bits of the source operand are inserted into the destination, with the least-significant bit of the source operand inserted at bit position n, where l and n are defined as the field length and bit index, respectively. Bits (field length - 1):0 of the source operand are inserted into bits (bit index + field length - 1):(bit index) of the destination. If the sum of the bit index + length field is greater than 64, the results are undefined. For example, if the bit index is 32 (20h) and the field length is 16 (10h), then the result in the destination register will be source operand[15:0] in bits 47:32. Bits 63:48 and bits 31:0 are not modified. A value of zero in the field length is defined as a length of 64. If the length field is 0 and the bit index is 0, bits 63:0 of the source operand are inserted. For any other value of the bit index, the results are undefined. The bits to insert are located in the XMM2 source operand. The bit index and field length can be specified as immediate values or can be specified in the XMM source operand. In the immediate form, the bit index and the field length are specified by the fourth (second immediate byte) and third operands (first immediate byte), respectively. In the register form, the bit index and field length are specified in bits [77:72] and bits [69:64] of the source XMM register, respectively. The bit index and field length are each six bits in length; other bits in the field are ignored. The diagram below illustrates the operation of this instruction. first second

XMM2               imm8   imm8
127             64 63               0 7 5  0 7 5   0

XMM1

127 64 63 0 select number of bits to insert select bit position for insert

XMM1 XMM2 77 69

127             64 63               0   127        72   64 63               0 select number of bits to insert select bit position for insert
154                [AMDINSERTQPublic Use]             Instruction Reference