CMU Computer Systems: Machine-Level Programming (Data)

Data

  • Arrays
    • One-dimensional
    • Multi-dimensional
    • Multi-level
  • Structures
    • Allocation
    • Access
    • Alignment
  • Floating Point
Array Allocation
  • Basic Principle
    • T A[L]
    • Array of data type T and length L
    • Contiguously allocated region of L * sizeof (T) bytes in memory
  • Reference
    • &A[L]
    • *A
Multidimensional (Nested) Arrays
  • Declaration
    • T A[R][C]
    • 2D array of data type T
    • R rows, C columns
    • Type T element requires K bytes
  • Array Size
    • R * C * K bytes
  • Arrangement
    • Row-Major Ordering
Nested Array Row Access
  • Row Vectors
    • A[i] is array of C elements
    • Each element of type T requires K bytes
    • Starting address A + i*(C*K)
Nested Array Element Access
  • Array Elements
    • A[i][j] is element of type T, which requires L bytes
    • Address A + i * (C* K) + j * K = A + (i * C + j) * K
Element Access in Multi-Level Array
  • Computation
    • Element access Mem[Mem[univ+8index]+4digit]
    • Must do two memory reads
      • First get pointer to row array
      • Then access element within array
N x N Matrix
  • Fixed dimensions
    • Know value of N at compile time
  • Variable dimensions, explicit indexing
    • Traditional way to implement dynamic arrays
  • Variable dimensions, implicit indexing
    • Now supported by gcc
Structure Representation
  • Structure represented as block of memory
    • Big enough to hold all of the fields
  • Fields ordered according to declaration
    • Even if another ordering could yield a more compact representation
  • Compiler determines overall size + positions of fields
    • Machine-level program has no understanding of the structures in the source code
Alignment Principles
  • Aligned Data
    • Primitive data type requires K bytes
    • Address must be multiple of K
    • Required on some machines; advised on x86-64
  • Motivation for Aligning Data
    • Memory accessed by (aligned) chunks of 4 or 8 bytes (system dependent)
      • Inefficient to load or store datum that spans quad word boundaries
      • Virtual memory trickier when datum spans 2 pages
  • Compiler
    • Inserts gaps in structure to ensure correct alignment of fields
Specific Cases of Alignment (x86-64)
  • 1 byte: char, …
    • no restrictions on address
  • 2 bytes: short, …
    • lowest 1 bit of address must be 0 2 _2 2
  • 4 bytes: int, float, …
    • lowest 2 bits of address must be 00 2 _2 2
  • 8 bytes: double, long, char *, …
    • lowest 3 bits of address must be 000 2 _2 2
  • 16 bytes: long double
    • lowest 4 bits of address must be 0000 2 _2 2
Satisfying Alignment with Structures
  • Within structure:
    • Must satisfy each element’s alignment requirement
  • Overall structure placement
    • Each structure has alignment requirement K
      • K = Largest alignment of any element
    • Initial address & structure length must be multiples of K
Floating Point Basics
  • Arguments passed in %xmm0, %xmm1, …
  • Result returned in %xmm0
  • All XMM registers caller-saved
FP Memory Referencing
  • Integer (and pointer) arguments passed in regular registers
  • FP values passed in XMM registers
  • Different mov instructions to move between XMM registers, and between memory and XMM registers
Other Aspects of FP code
  • Lots of instructions
    • Different operations, different formats, …
  • Floating-point comparisons
    • Instructions ucomiss and ucomisd
    • Set condition codes CF, ZF, and PF
  • Using constant values
    • Set XMM0 register to 0 with instruction xorpd %xmm0, %xmm0
    • Others loaded from memory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值