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

 

 

 

 

INSTRUCTION SET REFERENCE

PSRLDQ - Byte Shift Right

 

 

 

 

 

 

 

 

 

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

66 0F 73 /3 ib

A

V/V

SSE2

Shift xmm1 right by imm8

PSRLDQ xmm1, imm8

 

 

 

bytes while shifting in 0s.

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

B

V/V

AVX

Shift xmm1 right by imm8

VPSRLDQ xmm1, xmm2, imm8

 

 

 

bytes while shifting in 0s.

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

B

V/V

AVX2

Shift ymm1 right by imm8

VPSRLDQ ymm1, ymm2, imm8

 

 

 

bytes 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

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 right by the number of bytes specified in the count operand. The empty high-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

VPSRLDQ (VEX.256 encoded version)

TEMP COUNT

IF (TEMP > 15) THEN TEMP 16; FI

Ref. # 319433-011

5-183

INSTRUCTION SET REFERENCE

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

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

VPSRLDQ (VEX.128 encoded version)

TEMP COUNT

IF (TEMP > 15) THEN TEMP 16; FI

DEST SRC >> (TEMP * 8)

DEST[VLMAX:128] 0

PSRLDQ(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)PSRLDQ __m128i _mm_srli_si128 ( __m128i a, int imm) VPSRLDQ __m256i _mm256_srli_si256 ( __m256i a, const int imm)

SIMD Floating-Point Exceptions

None

Other Exceptions

See Exceptions Type 4

5-184

Ref. # 319433-011

INSTRUCTION SET REFERENCE

PSRLW/PSRLD/PSRLQ - Shift Packed Data Right Logical

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

66 0F D1 /r

B

V/V

SSE2

Shift words in xmm1 right by

PSRLW xmm1, xmm2/m128

 

 

 

amount specified in

 

 

 

 

xmm2/m128 while shifting in

 

 

 

 

0s.

66 0F 71 /2 ib

A

V/V

SSE2

Shift words in xmm1 right by

PSRLW xmm1, imm8

 

 

 

imm8 while shifting in 0s.

66 0F D2 /r

B

V/V

SSE2

Shift doublewords in xmm1 right

PSRLD xmm1, xmm2/m128

 

 

 

by amount specified in

 

 

 

 

xmm2/m128 while shifting in

 

 

 

 

0s.

66 0F 72 /2 ib

A

V/V

SSE2

Shift doublewords in xmm1 right

PSRLD xmm1, imm8

 

 

 

by imm8 while shifting in 0s.

66 0F D3 /r

B

V/V

SSE2

Shift quadwords in xmm1 right

PSRLQ xmm1, xmm2/m128

 

 

 

by amount specified in

 

 

 

 

xmm2/m128 while shifting in

 

 

 

 

0s.

66 0F 73 /2 ib

A

V/V

SSE2

Shift quadwords in xmm1 right

PSRLQ xmm1, imm8

 

 

 

by imm8 while shifting in 0s.

VEX.NDS.128.66.0F.WIG D1 /r

D

V/V

AVX

Shift words in xmm2 right by

VPSRLW xmm1, xmm2,

 

 

 

amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

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

C

V/V

AVX

Shift words in xmm2 right by

VPSRLW xmm1, xmm2, imm8

 

 

 

imm8 while shifting in 0s.

VEX.NDS.128.66.0F.WIG D2 /r

D

V/V

AVX

Shift doublewords in xmm2 right

VPSRLD xmm1, xmm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

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

C

V/V

AVX

Shift doublewords in xmm2 right

VPSRLD xmm1, xmm2, imm8

 

 

 

by imm8 while shifting in 0s.

 

 

 

 

 

Ref. # 319433-011

5-185

INSTRUCTION SET REFERENCE

 

 

 

 

 

 

 

 

 

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

VEX.NDS.128.66.0F.WIG D3 /r

D

V/V

AVX

Shift quadwords in xmm2 right

VPSRLQ xmm1, xmm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

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

C

V/V

AVX

Shift quadwords in xmm2 right

VPSRLQ xmm1, xmm2, imm8

 

 

 

by imm8 while shifting in 0s.

VEX.NDS.256.66.0F.WIG D1 /r

D

V/V

AVX2

Shift words in ymm2 right by

VPSRLW ymm1, ymm2,

 

 

 

amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

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

C

V/V

AVX2

Shift words in ymm2 right by

VPSRLW ymm1, ymm2, imm8

 

 

 

imm8 while shifting in 0s.

VEX.NDS.256.66.0F.WIG D2 /r

D

V/V

AVX2

Shift doublewords in ymm2 right

VPSRLD ymm1, ymm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

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

C

V/V

AVX2

Shift doublewords in ymm2 right

VPSRLD ymm1, ymm2, imm8

 

 

 

by imm8 while shifting in 0s.

VEX.NDS.256.66.0F.WIG D3 /r

D

V/V

AVX2

Shift quadwords in ymm2 right

VPSRLQ ymm1, ymm2,

 

 

 

by amount specified in

xmm3/m128

 

 

 

xmm3/m128 while shifting in

 

 

 

 

0s.

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

C

V/V

AVX2

Shift quadwords in ymm2 right

VPSRLQ 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-186

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 right by the number of bits specified in the count operand. As the bits in the data elements are shifted right, the empty high-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.

The destination and first source operands are XMM registers. The count operand can be either an XMM register or a 128-bit memory location or an 8-bit immediate. If the second source operand is a memory address, 128 bits are loaded. Note that only the first 64-bits of a 128-bit count operand are checked to compute the count.

The PSRLW instruction shifts each of the words in the first source operand to the right by the number of bits specified in the count operand; the PSRLD instruction shifts each of the doublewords in the first source operand; and the PSRLQ 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: 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 destination and first source operands are YMM registers. The count operand can be either an YMM 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 /2), VEX.vvvv encodes the destination register, and VEX.B + ModRM.r/m encodes the source register.

Operation

LOGICAL_RIGHT_SHIFT_WORDS_256b(SRC, COUNT_SRC)

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

THEN

DEST[255:0] 0 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_RIGHT_SHIFT_WORDS(SRC, COUNT_SRC)

COUNT COUNT_SRC[63:0];

Ref. # 319433-011

5-187

INSTRUCTION SET REFERENCE

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;

LOGICAL_RIGHT_SHIFT_DWORDS_256b(SRC, COUNT_SRC)

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

THEN

DEST[255:0] 0 ELSE

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

(* Repeat shift operation for 2nd through 3rd words *) DEST[255:224] ZeroExtend(SRC[255:224] >> COUNT);

FI;

LOGICAL_RIGHT_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_RIGHT_SHIFT_QWORDS_256b(SRC, COUNT_SRC)

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

THEN

DEST[255:0] 0 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;

5-188

Ref. # 319433-011

INSTRUCTION SET REFERENCE

LOGICAL_RIGHT_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;

VPSRLW (ymm, ymm, ymm/m256)

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

VPSRLW (ymm, imm8)

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

VPSRLW (xmm, xmm, xmm/m128)

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

DEST[VLMAX:128] 0

VPSRLW (xmm, imm8)

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

DEST[VLMAX:128] 0

PSRLW (xmm, xmm, xmm/m128)

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

DEST[VLMAX:128] (Unmodified)

PSRLW (xmm, imm8)

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

DEST[VLMAX:128] (Unmodified)

VPSRLD (ymm, ymm, ymm/m256)

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

VPSRLD (ymm, imm8)

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

VPSRLD (xmm, xmm, xmm/m128)

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

DEST[VLMAX:128] 0

VPSRLD (xmm, imm8)

Ref. # 319433-011

5-189

INSTRUCTION SET REFERENCE

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

PSRLD (xmm, xmm, xmm/m128)

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

PSRLD (xmm, imm8)

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

VPSRLQ (ymm, ymm, ymm/m256)

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

VPSRLQ (ymm, imm8)

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

VPSRLQ (xmm, xmm, xmm/m128)

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

VPSRLQ (xmm, imm8)

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

PSRLQ (xmm, xmm, xmm/m128)

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

PSRLQ (xmm, imm8)

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

Intel C/C++ Compiler Intrinsic Equivalent

(V)PSRLW __m128i _mm_srli_epi16 (__m128i m, int count) VPSRLW __m256i _mm_srli_epi16 (__m256i m, int count) (V)PSRLW __m128i _mm_srl_epi16 (__m128i m, __m128i count) VPSRLW __m256i _mm256_srl_epi16 (__m256i m, __m128i count) (V)PSRLD __m128i _mm_srli_epi32 (__m128i m, int count)

5-190

Ref. # 319433-011

INSTRUCTION SET REFERENCE

VPSRLD __m256i _mm_srli_epi32 (__m256i m, int count) (V)PSRLD __m128i _mm_srl_epi32 (__m128i m, __m128i count) VPSRLD __m256i _mm256_srl_epi32 (__m256i m, __m128i count) (V)PSRLQ __m128i _mm_srli_epi64 (__m128i m, int count) VPSRLQ __m256i _mm_srli_epi64 (__m256i m, int count) (V)PSRLQ __m128i _mm_srl_epi64 (__m128i m, __m128i count) VPSRLQ __m256i _mm256_srl_epi64 (__m256i m, __m128i count)

SIMD Floating-Point Exceptions

None

Other Exceptions

Same as Exceptions Type 4

Ref. # 319433-011

5-191

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