Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B, Instruction Set Reference, N-Z
Vol. 2B 4-165
INSTRUCTION SET REFERENCE, N-Z
DEST[15...0] <- Neg(DEST[15...0])
else if(SRC[15..0] == 0 )
DEST[15...0] <- 0
else if(SRC[15..0] > 0 )
DEST[15...0] <- DEST[15...0]
Repeat operation for 2nd through 7th words
if (SRC[127..112] < 0 )
DEST[127...112] <- Neg(DEST[127...112])
else if(SRC[127.. 112] == 0 )
DEST[127...112] <- 0
else if(SRC[127.. 112] > 0 )
DEST[127...112] <- DEST[127...112]
PSIGND with 64 bit operands:
if (SRC[31..0] < 0 )
DEST[31...0] <- Neg(DEST[31...0])
else if(SRC[31..0] == 0 )
DEST[31...0] <- 0
else if(SRC[31..0] > 0 )
DEST[31...0] <- DEST[31...0]
if (SRC[63..32] < 0 )
DEST[63...32] <- Neg(DEST[63...32])
else if(SRC[63.. 32] == 0 )
DEST[63...32] <- 0
else if(SRC[63.. 32] > 0 )
DEST[63...32] <- DEST[63...32]
PSIGND with 128 bit operands:
if (SRC[31..0] < 0 )
DEST[31...0] <- Neg(DEST[31...0])
else if(SRC[31..0] == 0 )
DEST[31...0] <- 0
else if(SRC[31..0] > 0 )
DEST[31...0] <- DEST[31...0]
Repeat operation for 2nd through 3rd double words
if (SRC[127..96] < 0 )
DEST[127...96] <- Neg(DEST[127...96])
else if(SRC[127.. 96] == 0 )
DEST[127...96] <- 0
else if(SRC[127.. 96] > 0 )
DEST[127...96] <- DEST[127...96]
Intel C/C++ Compiler Intrinsic Equivalent
PSIGNB __m64 _mm_sign_pi8 (__m64 a, __m64 b)