Volume 1 Basic Architecture (794100), страница 8
Текст из файла (страница 8)
. . . . . . . . . . . . . . . 11-26xii Vol. 1CONTENTSPAGE11.5.411.5.511.611.6.111.6.211.6.311.6.411.6.511.6.611.6.711.6.811.6.9Handling SIMD Floating-Point Exceptions in Software. . . . . . . . . . . . . . . . . . . . . . . . . . .Interaction of SIMD and x87 FPU Floating-Point Exceptions. . . . . . . . . . . . . . . . . . . . .WRITING APPLICATIONS WITH SSE/SSE2 EXTENSIONS . . .
. . . . . . . . . . . . . . . . . . . . . . . . .General Guidelines for Using SSE/SSE2 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Checking for SSE/SSE2 Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .Checking for the DAZ Flag in the MXCSR Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Initialization of SSE/SE2 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Saving and Restoring the SSE/SSE2 State . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .Guidelines for Writing to the MXCSR Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Interaction of SSE/SSE2 Instructions with x87 FPU and MMX Instructions . . . . . . .Compatibility of SIMD and x87 FPU Floating-Point Data Types . . . .
. . . . . . . . . . . . . .Mixing Packed and Scalar Floating-Point and 128-Bit SIMD Integer Instructionsand Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.6.10Interfacing with SSE/SSE2 Procedures and Functions. . . . .
. . . . . . . . . . . . . . . . . . . . . .11.6.10.1Passing Parameters in XMM Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.6.10.2Saving XMM Register State on a Procedure or Function Call. . . . . . . . . . . . . . . . . .11.6.10.3Caller-Save Requirement for Procedure and Function Calls. . . . . . . . . . . . . .
. . . . .11.6.11Updating Existing MMX Technology RoutinesUsing 128-Bit SIMD Integer Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.6.12Branching on Arithmetic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .11.6.13Cacheability Hint Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.6.14Effect of Instruction Prefixes on the SSE/SSE2 Instructions. . . . . . . . . . . . . . . . . . . . .11-2611-2611-2711-2711-2811-2811-2911-3011-3011-3111-3211-3211-3411-3411-3411-3511-3511-3611-3611-37CHAPTER 12PROGRAMMING WITHSSE3 AND SUPPLEMENTAL SSE312.1SSE3/SSSE3 PROGRAMMING ENVIRONMENT AND DATA TYPES . . . . . .
. . . . . . . . . . . . . . . 12-112.1.1SSE3/SSSE3 in 64-Bit Mode and Compatibility Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-112.1.2Compatibility of SSE3/SSSE3 with MMX Technology, the x87 FPU Environment, andSSE/SSE2 Extensions . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-212.1.3Horizontal and Asymmetric Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-212.2OVERVIEW OF SSE3 INSTRUCTIONS . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-312.3SSE3 INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-312.3.1x87 FPU Instruction for Integer Conversion . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .12-412.3.2SIMD Integer Instruction for Specialized 128-bit Unaligned Data Load . . . . . . . . . . . . .12-412.3.3SIMD Floating-Point Instructions That Enhance LOAD/MOVE/DUPLICATEPerformance . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-412.3.4SIMD Floating-Point Instructions Provide Packed Addition/Subtraction. . . . . . . . . . . . .12-512.3.5SIMD Floating-Point Instructions Provide Horizontal Addition/Subtraction . . . . . . . .
.12-512.3.6Two Thread Synchronization Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-712.4WRITING APPLICATIONS WITH SSE3 EXTENSIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-712.4.1Guidelines for Using SSE3 Extensions. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-712.4.2Checking for SSE3 Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-712.4.3Enable FTZ and DAZ for SIMD Floating-Point Computation . . . . . . .
. . . . . . . . . . . . . . . . .12-812.4.4Programming SSE3 with SSE/SSE2 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-812.5OVERVIEW OF SSSE3 INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-812.6SSSE3 INSTRUCTIONS . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-9Vol. 1 xiiiCONTENTSPAGE12.6.112.6.212.6.312.6.412.6.512.6.612.6.712.712.7.112.7.212.812.8.112.8.212.8.3Horizontal Addition/Subtraction . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-9Packed Absolute Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-11Multiply and Add Packed Signed and Unsigned Bytes. . . . . . . . . . .
. . . . . . . . . . . . . . . . . 12-11Packed Multiply High with Round and Scale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-11Packed Shuffle Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 12-12Packed Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-12Packed Align Right . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-12WRITING APPLICATIONS WITH SSSE3 EXTENSIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-12Guidelines for Using SSSE3 Extensions . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-12Checking for SSSE3 Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-13SSE3/SSSE3 EXCEPTIONS . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-13Device Not Available (DNA) Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-13Numeric Error flag and IGNNE# . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 12-13Emulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-14CHAPTER 13INPUT/OUTPUT13.1I/O PORT ADDRESSING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-113.2I/O PORT HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-113.3I/O ADDRESS SPACE. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-213.3.1Memory-Mapped I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 13-213.4I/O INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-313.5PROTECTED-MODE I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 13-413.5.1I/O Privilege Level. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-413.5.2I/O Permission Bit Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 13-513.6ORDERING I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-7CHAPTER 14PROCESSOR IDENTIFICATION AND FEATURE DETERMINATION14.1USING THE CPUID INSTRUCTION . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-114.1.1Notes on Where to Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-114.1.2Identification of Earlier IA-32 Processors . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-2APPENDIX AEFLAGS CROSS-REFERENCEA.1EFLAGS AND INSTRUCTIONS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .