Modern Arm Assembly Language Programming : Covers Armv8-A 32-bit, 64-bit, and SIMD
معرفی کتاب «Modern Arm Assembly Language Programming : Covers Armv8-A 32-bit, 64-bit, and SIMD» نوشتهٔ Daniel Kusswurm و an O'Reilly Media Company Safari، منتشرشده توسط نشر Apress : Imprint: Apress در سال 2020. این کتاب در 9 صفحه، فرمت pdf، زبان انگلیسی ارائه شده است. «Modern Arm Assembly Language Programming : Covers Armv8-A 32-bit, 64-bit, and SIMD» در دستهٔ برنامهنویسی قرار دارد.
Gain the fundamentals of Armv8-A 32-bit and 64-bit assembly language programming. This book emphasizes Armv8-A assembly language topics that are relevant to modern software development. It is designed to help you quickly understand Armv8-A assembly language programming and the computational resources of Arm’s SIMD platform. It also contains an abundance of source code that is structured to accelerate learning and comprehension of essential Armv8-A assembly language constructs and SIMD programming concepts. After reading this book, you will be able to code performance-optimized functions and algorithms using Armv8- A 32-bit and 64-bit assembly language. __Modern Arm Assembly Language Programming__ accentuates the coding of Armv8-A 32-bit and 64-bit assembly language functions that are callable from C++. Multiple chapters are also devoted to Armv8-A SIMD assembly language programming. These chapters discuss how to code functions that are used in computationally intense applications such as machine learning, image processing, audio and video encoding, and computer graphics. The source code examples were developed using the GNU toolchain (g++, gas, and make) and tested on a Raspberry Pi 4 Model B running Raspbian (32-bit) and Ubuntu Server (64-bit). It is important to note that this is a book about Armv8-A assembly language programming and not the Raspberry Pi. What You Will Learn * See essential details about the Armv8-A 32-bit and 64-bit architectures including data types, general purpose registers, floating-point and SIMD registers, and addressing modes Use the Armv8-A 32-bit and 64-bit instruction sets to create performance-enhancing functions that are callable from C++ * Employ Armv8-A assembly language to efficiently manipulate common data types and programming constructs including integers, arrays, matrices, and user-defined structures * Create assembly language functions that perform scalar floating-point arithmetic using the Armv8-A 32-bit and 64-bit instruction sets * Harness the Armv8-A SIMD instruction sets to significantly accelerate the performance of computationally intense algorithms in applications such as machine learning, image processing, computer graphics, mathematics, and statistics. * Apply leading-edge coding strategies and techniques to optimally exploit the Armv8-A 32-bit and 64-bit instruction sets for maximum possible performance **Who This Book Is For** Software developers who are creating programs for Armv8-A platforms and want to learn how to code performance-enhancing algorithms and functions using the Armv8-A 32-bit and 64-bit instruction sets. Readers should have previous high-level language programming experience and a basic understanding of C++. Table of Contents 4 About the Author 12 About the Technical Reviewer 13 Acknowledgments 14 Introduction 15 Chapter 1: Armv8-32 Architecture 18 Armv8 Overview 18 Data Types 19 Fundamental Data Types 19 Numerical Data Types 22 SIMD Data Types 22 Internal Architecture 23 General-Purpose Registers 24 Application Program Status Register 24 Floating-Point and SIMD Registers 25 Instruction Set Overview 25 Instruction Operands 26 Memory Addressing Modes 26 Summary 27 Chapter 2: Armv8-32 Core Programming – Part 1 29 Integer Arithmetic 29 Addition and Subtraction 30 Multiplication 32 Division 35 Integer Operations 39 Load Instructions 39 Move Instructions 42 Bitwise Logical Operations 50 Summary 52 Chapter 3: Armv8-32 Core Programming – Part 2 53 Stack Arguments 53 Basic Stack Arguments 53 Stack Arguments Using Mixed Integers 56 Advance Stack Use 60 Stack Use with Local Storage 61 Stack Use with Frame Pointer 65 Using the APSR Condition Flags 69 Comparisons 69 Looping 74 Summary 80 Chapter 4: Armv8-32 Core Programming – Part 3 81 Integer Arrays 81 Array Arithmetic 81 Array Arithmetic Using Multiple Arrays 85 Integer Matrices 89 Accessing Matrix Elements 89 Row-Column Sums 92 Advanced Programming 97 Array Reversal 97 Structures 102 Summary 106 Chapter 5: Armv8-32 Floating-Point Architecture 107 Floating-Point Programming Concepts 107 Armv8-32 Floating-Point Architecture 111 Floating-Point Registers 111 Floating-Point Status and Control Register 112 Summary 115 Chapter 6: Armv8-32 Floating-Point Programming 116 Floating-Point Arithmetic 116 Single-Precision Arithmetic 116 Double-Precision Arithmetic 120 Floating-Point Comparisons and Conversions 125 Floating-Point Comparisons 126 Floating-Point Conversions 129 Floating-Point Arrays and Matrices 134 Floating-Point Arrays 134 Floating-Point Matrices 138 Using C++ Floating-Point Library Functions 141 Summary 145 Chapter 7: Armv8-32 SIMD Architecture 146 Armv8-32 SIMD Architecture Overview 146 SIMD Programming Concepts 146 Wraparound and Saturated Arithmetic 148 Armv8-32 SIMD Architecture 150 Register Set 150 Data Types 151 SIMD Arithmetic 153 Packed Integer Arithmetic 153 Packed Floating-Point Arithmetic 154 Summary 155 Chapter 8: Armv8-32 SIMD Integer Programming 156 Packed Integer Arithmetic 156 Addition and Subtraction 156 Shift Operations 162 Multiplication 166 Packed Integer Image Processing 169 Pixel Minimum and Maximum 169 Performance Benchmarking 175 Mean Intensity 175 Image Thresholding 181 Summary 192 Chapter 9: Armv8-32 SIMD Floating-Point Programming 193 Packed Floating-Point Arithmetic 193 Basic Arithmetic 193 Comparisons 196 Conversions 198 Packed Floating-Point Arrays 203 Minimum and Maximum 203 Least-Squares 208 Packed Floating-Point Matrices 215 Matrix Transposition 215 Matrix Multiplication 222 Summary 228 Chapter 10: Armv8-64 Architecture 229 Armv8-64 Overview 229 Data Types 229 Fundamental Data Types 230 Numerical Data Types 230 SIMD Data Types 231 Internal Architecture 231 General-Purpose Registers 231 Floating-Point and SIMD Registers 233 Instruction Set Overview 234 Operands 234 Memory Addressing Modes 235 Summary 236 Chapter 11: Armv8-64 Core Programming – Part 1 237 Integer Arithmetic 237 Addition and Subtraction 237 Multiplication 240 Division 242 Integer Operations 244 Load and Store Instructions 245 Move Instructions 248 Shift Instructions 252 Bitwise Logical Operations 255 Summary 258 Chapter 12: Armv8-64 Core Programming – Part 2 259 Stack Arguments and Local Storage 259 Stack Arguments Using Mixed Integers 259 Stack Arguments with Local Variables 265 Using Condition Flags 269 Compare Instructions 269 Looping 274 Integer Arrays and Matrices 279 Integer Arrays 279 Integer Matrices 282 Summary 287 Chapter 13: Armv8-64 Floating-Point Programming 289 Floating-Point Arithmetic 289 Single-Precision Arithmetic 289 Double-Precision Arithmetic 293 Floating-Point Comparisons and Conversions 297 Floating-Point Comparisons 297 Floating-Point Conversions 300 Floating-Point Arrays and Matrices 304 Floating-Point Arrays 305 Floating-Point Matrices 308 Using C++ Floating-Point Library Functions 311 Summary 315 Chapter 14: Armv8-64 SIMD Integer Programming 317 Packed Integer Arithmetic 317 Addition and Subtraction 317 Shift Operations 324 Multiplication 328 Packed Integer Image Processing 331 Pixel Minimum and Maximum 331 Pixel Clipping 336 Image Statistics 344 Summary 353 Chapter 15: Armv8-64 SIMD Floating-Point Programming 355 Packed Floating-Point Arithmetic 355 Basic Arithmetic 355 Comparisons 359 Conversions 363 Packed Floating-Point Arrays 370 Correlation Coefficient 370 Image Conversion – RGB to Grayscale 377 Packed Floating-Point Matrices 385 Matrix Multiplication 385 Matrix Trace and Transposition 392 Summary 402 Chapter 16: Armv8-64 Advanced SIMD Programming 403 Signal Processing 403 Convolution Essentials 403 FMA Convolution 406 Vector and Matrix Operations 417 Vector Cross Products 417 Matrix-Vector Multiplication 428 Matrix Inversion 434 Summary 446 Chapter 17: Optimization Strategies and Techniques 447 Armv8 Microarchitecture 447 Cortex Microarchitecture 447 Cortex Front-End Pipeline 449 Cortex Execution Pipelines 452 Optimizing Armv8 Assembly Language Code 454 Basic Techniques 454 Floating-Point Arithmetic 455 Branch Instructions 455 Data Alignment 456 SIMD Techniques 456 Summary 457 Appendix A: Development Tools and Source Code 458 Host Computer 458 Hardware Requirements 458 Software Requirements 459 Initial Setup 460 Additional Configuration – Required 461 Additional Configuration – Optional 462 Source Code 462 Download and Install 462 Build and Execute 463 Make Utility 464 Benchmark Timing Measurements 466 Appendix B: References and Additional Resources 467 Arm Programming 467 Arm Architecture 468 Algorithm References 469 Software Development Tools 470 C++ References 470 Index 471 Gain the fundamentals of Armv8-A 32-bit and 64-bit assembly language programming. This book emphasizes Armv8-A assembly language topics that are relevant to modern software development. It is designed to help you quickly understand Armv8-A assembly language programming and the computational resources of Arm’s SIMD platform. It also contains an abundance of source code that is structured to accelerate learning and comprehension of essential Armv8-A assembly language constructs and SIMD programming concepts. After reading this book, you will be able to code performance-optimized functions and algorithms using Armv8- A 32-bit and 64-bit assembly language. Modern Arm Assembly Language Programming accentuates the coding of Armv8-A 32-bit and 64-bit assembly language functions that are callable from C . Multiple chapters are also devoted to Armv8-A SIMD assembly language programming. These chapters discuss how to code functions that are used in computationally intense applications such as machine learning, image processing, audio and video encoding, and computer graphics. The source code examples were developed using the GNU toolchain (g , gas, and make) and tested on a Raspberry Pi 4 Model B running Raspbian (32-bit) and Ubuntu Server (64-bit). It is important to note that this is a book about Armv8-A assembly language programming and not the Raspberry Pi. What You Will Learn See essential details about the Armv8-A 32-bit and 64-bit architectures including data types, general purpose registers, floating-point and SIMD registers, and addressing modes Use the Armv8-A 32-bit and 64-bit instruction sets to create performance-enhancing functions that are callable from C Employ Armv8-A assembly language to efficiently manipulate common data types and programming constructs including integers, arrays, matrices, and user-defined structures Create assembly language functions that perform scalar floating-point arithmetic using the Armv8-A 32-bit and 64-bit instruction sets Harness the Armv8-A SIMD instruction sets to significantly accelerate the performance of computationally intense algorithms in applications such as machine learning, image processing, computer graphics, mathematics, and statistics. Apply leading-edge coding strategies and techniques to optimally exploit the Armv8-A 32-bit and 64-bit instruction sets for maximum possible performance Who This Book Is For Software developers who are creating programs for Armv8-A platforms and want to learn how to code performance-enhancing algorithms and functions using the Armv8-A 32-bit and 64-bit instruction sets. Readers should have previous high-level language programming experience and a basic understanding of C . Front Matter ....Pages i-xix Armv8-32 Architecture (Daniel Kusswurm)....Pages 1-11 Armv8-32 Core Programming – Part 1 (Daniel Kusswurm)....Pages 13-36 Armv8-32 Core Programming – Part 2 (Daniel Kusswurm)....Pages 37-64 Armv8-32 Core Programming – Part 3 (Daniel Kusswurm)....Pages 65-90 Armv8-32 Floating-Point Architecture (Daniel Kusswurm)....Pages 91-99 Armv8-32 Floating-Point Programming (Daniel Kusswurm)....Pages 101-130 Armv8-32 SIMD Architecture (Daniel Kusswurm)....Pages 131-140 Armv8-32 SIMD Integer Programming (Daniel Kusswurm)....Pages 141-177 Armv8-32 SIMD Floating-Point Programming (Daniel Kusswurm)....Pages 179-214 Armv8-64 Architecture (Daniel Kusswurm)....Pages 215-222 Armv8-64 Core Programming – Part 1 (Daniel Kusswurm)....Pages 223-244 Armv8-64 Core Programming – Part 2 (Daniel Kusswurm)....Pages 245-274 Armv8-64 Floating-Point Programming (Daniel Kusswurm)....Pages 275-302 Armv8-64 SIMD Integer Programming (Daniel Kusswurm)....Pages 303-340 Armv8-64 SIMD Floating-Point Programming (Daniel Kusswurm)....Pages 341-388 Armv8-64 Advanced SIMD Programming (Daniel Kusswurm)....Pages 389-432 Optimization Strategies and Techniques (Daniel Kusswurm)....Pages 433-443 Back Matter ....Pages 445-465
دانلود کتاب Modern Arm Assembly Language Programming : Covers Armv8-A 32-bit, 64-bit, and SIMD