X86-64 Reference Sheet

X86-64 Reference Sheet I

https://www.cs.cmu.edu/afs/cs/academic/class/15213-s20/www/recitations/x86-cheat-sheet.pdf


X86-64 Reference Sheet II

Registers

Register

Purpose

Saved across calls

%rax

temp register; return value

No

%rbx

callee-saved

Yes

%rcx

used to pass 4th argument to functions

No

%rdx

used to pass 3rd argument to functions

No

%rsp

stack pointer

Yes

%rbp

callee-saved; base pointer

Yes

%rsi

used to pass 2nd argument to functions

No

%rdi

used to pass 1st argument to functions

No

%r8

used to pass 5th argument to functions

No

%r9

used to pass 6th argument to functions

No

%r10-r11

temporary

No

%r12-r15

callee-saved registers

Yes



Stack Organization

Position

Contents

Frame

8n+16(%rbp)

argument n

Previous

...

...

16(%rbp)

argument 7

8(%rbp)

return address

Current

0(%rbp)

previous %rbp value

-8(%rbp)

locals and temps

...

0(%rsp)


Prologue: 

// call -> pushs %rip onto stack
push %ebp
mov %esp, %ebp

Epilogue:

mov %ebp, %esp
pop %ebp
// ret -> pops %rip from stack

 

SIMD: MMX, SSE, AVX

512-bit

256-bit

128-bit

Preserved

Usage

zmm0

ymm0

xmm0

 

arg1, return

zmm1

ymm1

xmm1

 

arg2

zmm7

ymm7

xmm7

 

arg8

zmm8

ymm8

xmm8

   

zmm15

ymm15

xmm15

   

Example:

double foo(double x, int y) {
  return x + (double) y;
}

_Z3foodi:
	cvtsi2sd	%edi, %xmm1
	addsd	%xmm1, %xmm0
	ret

 

posted @ 2024-08-18 17:56  william-cheung  阅读(2)  评论(0编辑  收藏  举报