Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2012 / 319433-011.pdf
Скачиваний:
27
Добавлен:
02.02.2015
Размер:
2.31 Mб
Скачать

 

 

 

 

INSTRUCTION SET REFERENCE

PSLLDQ - Byte Shift Left

 

 

 

 

 

 

 

 

 

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

66 0F 73 /7 ib

A

V/V

SSE2

Shift xmm1 left by imm8 bytes

PSLLDQ xmm1, imm8

 

 

 

while shifting in 0s.

VEX.NDD.128.66.0F.WIG 73 /7 ib

B

V/V

AVX

Shift xmm2 left by imm8 bytes

VPSLLDQ xmm1, xmm2, imm8

 

 

 

while shifting in 0s and store

 

 

 

 

result in xmm1.

VEX.NDD.256.66.0F.WIG 73 /7 ib

B

V/V

AVX2

Shift ymm2 left by imm8 bytes

VPSLLDQ ymm1, ymm2, imm8

 

 

 

while shifting in 0s and store

 

 

 

 

result in ymm1.

Instruction Operand Encoding

Op/En

Operand 1

Operand 2

Operand 3

Operand 4

A

ModRM:r/m (r, w)

NA

NA

NA

B

VEX.vvvv (w)

ModRM:r/m (R)

NA

NA

 

 

 

 

 

Description

Shifts the byte elements within a 128-bit lane of the source operand to the left by the number of bytes specified in the count operand . The empty low-order bytes are cleared (set to all 0s). If the value specified by the count operand is greater than 15, the destination operand is set to all 0s.

The source and destination operands are XMM registers. The count operand is an 8- bit immediate.

128-bit Legacy SSE version: The source and destination operands are the same. Bits (255:128) of the corresponding YMM destination register remain unchanged.

VEX.128 encoded version: Bits (255:128) of the corresponding YMM register are zeroed.

VEX.256 encoded version: The source operand is YMM register or a 256-bit memory location. The destination operand is an YMM register. The count operand applies to both the low and high 128-bit lanes.

Note: In VEX encoded versions VEX.vvvv encodes the destination register, and VEX.B + ModRM.r/m encodes the source register.

Operation

VPSLLDQ (VEX.256 encoded version)

TEMP COUNT

Ref. # 319433-011

5-169

INSTRUCTION SET REFERENCE

IF (TEMP > 15) THEN TEMP ? 16; FI

DEST[127:0] SRC[127:0] << (TEMP * 8)

DEST[255:128] SRC[255:128] << (TEMP * 8)

VPSLLDQ (VEX.128 encoded version)

TEMP COUNT

IF (TEMP > 15) THEN TEMP 16; FI

DEST SRC << (TEMP * 8)

DEST[VLMAX:128] 0

PSLLDQ(128-bit Legacy SSE version)

TEMP COUNT

IF (TEMP > 15) THEN TEMP 16; FI

DEST DEST << (TEMP * 8)

DEST[VLMAX:128] (Unmodified)

Intel C/C++ Compiler Intrinsic Equivalent

(V)PSLLDQ __m128i _mm_slli_si128 ( __m128i a, const int imm)

VPSLLDQ __m256i _mm256_slli_si256 ( __m256i a, const int imm)

SIMD Floating-Point Exceptions

None

Other Exceptions

See Exceptions Type 4

5-170

Ref. # 319433-011

 

 

 

 

INSTRUCTION SET REFERENCE

PSLLW/PSLLD/PSLLQ - Bit Shift Left

 

 

 

 

 

 

 

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

66 0F F1/r

B

V/V

SSE2

Shift words in xmm1 left by

PSLLW xmm1, xmm2/m128

 

 

 

amount specified in

 

 

 

 

xmm2/m128 while shifting in

 

 

 

 

0s.

66 0F 71 /6 ib

A

V/V

SSE2

Shift words in xmm1 left by

PSLLW xmm1, imm8

 

 

 

imm8 while shifting in 0s.

66 0F F2 /r

B

V/V

SSE2

Shift doublewords in xmm1 left

PSLLD xmm1, xmm2/m128

 

 

 

by amount specified in

 

 

 

 

xmm2/m128 while shifting in

 

 

 

 

0s.

66 0F 72 /6 ib

A

V/V

SSE2

Shift doublewords in xmm1 left

PSLLD xmm1, imm8

 

 

 

by imm8 while shifting in 0s.

66 0F F3 /r

B

V/V

SSE2

Shift quadwords in xmm1 left

PSLLQ xmm1, xmm2/m128

 

 

 

by amount specified in

 

 

 

 

xmm2/m128 while shifting in

 

 

 

 

0s.

66 0F 73 /6 ib

A

V/V

SSE2

Shift quadwords in xmm1 left

PSLLQ xmm1, imm8

 

 

 

by imm8 while shifting in 0s.

VEX.NDS.128.66.0F.WIG F1 /r

D

V/V

AVX

Shift words in xmm2 left by

VPSLLW xmm1, xmm2,

 

 

 

amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

VEX.NDD.128.66.0F.WIG 71 /6 ib

C

V/V

AVX

Shift words in xmm2 left by

VPSLLW xmm1, xmm2, imm8

 

 

 

imm8 while shifting in 0s.

VEX.NDS.128.66.0F.WIG F2 /r

D

V/V

AVX

Shift doublewords in xmm2 left

VPSLLD xmm1, xmm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

VEX.NDD.128.66.0F.WIG 72 /6 ib

C

V/V

AVX

Shift doublewords in xmm2 left

VPSLLD xmm1, xmm2, imm8

 

 

 

by imm8 while shifting in 0s.

 

 

 

 

 

Ref. # 319433-011

5-171

INSTRUCTION SET REFERENCE

 

 

 

 

 

 

 

 

 

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

VEX.NDS.128.66.0F.WIG F3 /r

D

V/V

AVX

Shift quadwords in xmm2 left

VPSLLQ xmm1, xmm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

VEX.NDD.128.66.0F.WIG 73 /6 ib

C

V/V

AVX

Shift quadwords in xmm2 left

VPSLLQ xmm1, xmm2, imm8

 

 

 

by imm8 while shifting in 0s.

VEX.NDS.256.66.0F.WIG F1 /r

D

V/V

AVX2

Shift words in ymm2 left by

VPSLLW ymm1, ymm2,

 

 

 

amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

VEX.NDD.256.66.0F.WIG 71 /6 ib

C

V/V

AVX2

Shift words in ymm2 left by

VPSLLW ymm1, ymm2, imm8

 

 

 

imm8 while shifting in 0s.

VEX.NDS.256.66.0F.WIG F2 /r

D

V/V

AVX2

Shift doublewords in ymm2 left

VPSLLD ymm1, ymm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

VEX.NDD.256.66.0F.WIG 72 /6 ib

C

V/V

AVX2

Shift doublewords in ymm2 left

VPSLLD ymm1, ymm2, imm8

 

 

 

by imm8 while shifting in 0s.

VEX.NDS.256.66.0F.WIG F3 /r

D

V/V

AVX2

Shift quadwords in ymm2 left

VPSLLQ ymm1, ymm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

VEX.NDD.256.66.0F.WIG 73 /6 ib

C

V/V

AVX2

Shift quadwords in ymm2 left

VPSLLQ ymm1, ymm2, imm8

 

 

 

by imm8 while shifting in 0s.

 

 

 

 

 

Instruction Operand Encoding

Op/En

Operand 1

Operand 2

Operand 3

Operand 4

A

ModRM:r/m (r, w)

NA

NA

NA

B

ModRM:reg (w)

ModRM:r/m (r)

NA

NA

C

VEX.vvvv (w)

ModRM:r/m (R)

NA

NA

D

ModRM:reg (w)

VEX.vvvv (r)

ModRM:r/m (r)

NA

 

 

 

 

 

5-172

Ref. # 319433-011

INSTRUCTION SET REFERENCE

Description

Shifts the bits in the individual data elements (words, doublewords, or quadword) in the first source operand to the left by the number of bits specified in the count operand. As the bits in the data elements are shifted left, the empty low-order bits are cleared (set to 0). If the value specified by the count operand is greater than 15 (for words), 31 (for doublewords), or 63 (for a quadword), then the destination operand is set to all 0s.

Note that only the first 64-bits of a 128-bit count operand are checked to compute the count. If the second source operand is a memory address, 128 bits are loaded.

The PSLLW instruction shifts each of the words in the first source operand to the left by the number of bits specified in the count operand, the PSLLD instruction shifts each of the doublewords in the first source operand, and the PSLLQ instruction shifts the quadword (or quadwords) in the first source operand.

Legacy SSE instructions: In 64-bit mode using a REX prefix in the form of REX.R permits this instruction to access additional registers (XMM8-XMM15).

128-bit Legacy SSE version: The destination and first source operands are XMM registers. Bits (255:128) of the corresponding YMM destination register remain unchanged. The count operand can be either an XMM register or a 128-bit memory location or an 8-bit immediate.

VEX.128 encoded version: The destination and first source operands are XMM registers. Bits (255:128) of the corresponding YMM destination register are zeroed. The count operand can be either an XMM register or a 128-bit memory location or an 8- bit immediate.

VEX.256 encoded version: The destination and first source operands are YMM registers. The count operand can be either an XMM register or a 128-bit memory location or an 8-bit immediate.

Note: In VEX encoded versions of shifts with an immediate count (VEX.128.66.0F 7173 /6), VEX.vvvv encodes the destination register, and VEX.B + ModRM.r/m encodes the source register.

Operation

LOGICAL_LEFT_SHIFT_WORDS(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0]; IF (COUNT > 15)

THEN

DEST[127:0] 00000000000000000000000000000000H ELSE

DEST[15:0] ZeroExtend(SRC[15:0] << COUNT);

(* Repeat shift operation for 2nd through 7th words *) DEST[127:112] ZeroExtend(SRC[127:112] << COUNT);

FI;

Ref. # 319433-011

5-173

INSTRUCTION SET REFERENCE

LOGICAL_LEFT_SHIFT_DWORDS(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0]; IF (COUNT > 31)

THEN

DEST[127:0] 00000000000000000000000000000000H ELSE

DEST[31:0] ZeroExtend(SRC[31:0] << COUNT);

(* Repeat shift operation for 2nd through 3rd words *) DEST[127:96] ZeroExtend(SRC[127:96] << COUNT);

FI;

LOGICAL_LEFT_SHIFT_QWORDS(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0]; IF (COUNT > 63)

THEN

DEST[127:0] 00000000000000000000000000000000H ELSE

DEST[63:0] ZeroExtend(SRC[63:0] << COUNT); DEST[127:64] ZeroExtend(SRC[127:64] << COUNT);

FI;

LOGICAL_LEFT_SHIFT_WORDS_256b(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0]; IF (COUNT > 15)

THEN

DEST[127:0] 00000000000000000000000000000000H DEST[255:128] 00000000000000000000000000000000H

ELSE

DEST[15:0] ZeroExtend(SRC[15:0] << COUNT);

(* Repeat shift operation for 2nd through 15th words *) DEST[255:240] ZeroExtend(SRC[255:240] << COUNT);

FI;

LOGICAL_LEFT_SHIFT_DWORDS_256b(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0]; IF (COUNT > 31)

THEN

DEST[127:0] 00000000000000000000000000000000H DEST[255:128] 00000000000000000000000000000000H

ELSE

DEST[31:0] ZeroExtend(SRC[31:0] << COUNT);

(* Repeat shift operation for 2nd through 7th words *) DEST[255:224] ZeroExtend(SRC[255:224] << COUNT);

5-174

Ref. # 319433-011

INSTRUCTION SET REFERENCE

FI;

LOGICAL_LEFT_SHIFT_QWORDS_256b(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0];

IF (COUNT > 63)

THEN

DEST[127:0] 00000000000000000000000000000000H

DEST[255:128] 00000000000000000000000000000000H

ELSE

DEST[63:0] ZeroExtend(SRC[63:0] << COUNT);

DEST[127:64] ZeroExtend(SRC[127:64] << COUNT)

DEST[191:128] ZeroExtend(SRC[191:128] << COUNT);

DEST[255:192] ZeroExtend(SRC[255:192] << COUNT);

FI;

VPSLLW (ymm, ymm, ymm/m256)

DEST[255:0] LOGICAL_LEFT_SHIFT_WORDS_256b(SRC1, SRC2)

VPSLLW (ymm, imm8)

DEST[255:0] LOGICAL_LEFT_SHIFT_WORD_256bS(SRC1, imm8)

VPSLLW (xmm, xmm, xmm/m128)

DEST[127:0] LOGICAL_LEFT_SHIFT_WORDS(SRC1, SRC2)

DEST[VLMAX:128] 0

VPSLLW (xmm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_WORDS(SRC1, imm8)

DEST[VLMAX:128] 0

PSLLW (xmm, xmm, xmm/m128)

DEST[127:0] LOGICAL_LEFT_SHIFT_WORDS(DEST, SRC)

DEST[VLMAX:128] (Unmodified)

PSLLW (xmm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_WORDS(DEST, imm8)

DEST[VLMAX:128] (Unmodified)

VPSLLD (ymm, ymm, ymm/m256)

DEST[255:0] LOGICAL_LEFT_SHIFT_DWORDS_256b(SRC1, SRC2)

VPSLLD (ymm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_DWORDS_256b(SRC1, imm8)

Ref. # 319433-011

5-175

INSTRUCTION SET REFERENCE

VPSLLD (xmm, xmm, xmm/m128)

DEST[127:0] LOGICAL_LEFT_SHIFT_DWORDS(SRC1, SRC2) DEST[VLMAX:128] 0

VPSLLD (xmm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_DWORDS(SRC1, imm8) DEST[VLMAX:128] 0

PSLLD (xmm, xmm, xmm/m128)

DEST[127:0] LOGICAL_LEFT_SHIFT_DWORDS(DEST, SRC) DEST[VLMAX:128] (Unmodified)

PSLLD (xmm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_DWORDS(DEST, imm8) DEST[VLMAX:128] (Unmodified)

VPSLLQ (ymm, ymm, ymm/m256)

DEST[255:0] LOGICAL_LEFT_SHIFT_QWORDS_256b(SRC1, SRC2)

VPSLLQ (ymm, imm8)

DEST[255:0] LOGICAL_LEFT_SHIFT_QWORDS_256b(SRC1, imm8)

VPSLLQ (xmm, xmm, xmm/m128)

DEST[127:0] LOGICAL_LEFT_SHIFT_QWORDS(SRC1, SRC2) DEST[VLMAX:128] 0

VPSLLQ (xmm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_QWORDS(SRC1, imm8) DEST[VLMAX:128] 0

PSLLQ (xmm, xmm, xmm/m128)

DEST[127:0] LOGICAL_LEFT_SHIFT_QWORDS(DEST, SRC) DEST[VLMAX:128] (Unmodified)

PSLLQ (xmm, imm8)

DEST[127:0] LOGICAL_LEFT_SHIFT_QWORDS(DEST, imm8) DEST[VLMAX:128] (Unmodified)

Intel C/C++ Compiler Intrinsic Equivalent

(V)PSLLW __m128i _mm_slli_epi16 (__m128i m, int count) (V)PSLLW __m128i _mm_sll_epi16 (__m128i m, __m128i count)

5-176

Ref. # 319433-011

INSTRUCTION SET REFERENCE

(V)PSLLD __m128i _mm_slli_epi32 (__m128i m, int count) (V)PSLLD __m128i _mm_sll_epi32 (__m128i m, __m128i count) (V)PSLLQ __m128i _mm_slli_epi64 (__m128i m, int count) (V)PSLLQ __m128i _mm_sll_epi64 (__m128i m, __m128i count) VPSLLW __m256i _mm256_slli_epi16 (__m256i m, int count) VPSLLW __m256i _mm256_sll_epi16 (__m256i m, __m128i count) VPSLLD __m256i _mm256_slli_epi32 (__m256i m, int count) VPSLLD __m256i _mm256_sll_epi32 (__m256i m, __m128i count) VPSLLQ __m256i _mm256_slli_epi64 (__m256i m, int count) VPSLLQ __m256i _mm256_sll_epi64 (__m256i m, __m128i count)

SIMD Floating-Point Exceptions

None

Other Exceptions

Same as Exceptions Type 4

Ref. # 319433-011

5-177

Соседние файлы в папке Лаб2012