데이터를 레지스터에 저장한다고 할 때 register 키워드를 사용하게 된다.

C언어로 레지스터 사용을 요청하는데, 실제로 그 명령이 레지스터로 갈 지, 스택 메모리로 갈 지는 컴파일러의 마음이다.

register <자료형> <변수명 >

👉 가능하면 이 변수는 레지스터로 넣어줘

register uint64_t *num asm ("rax") = (uint64_t *) num_;`

__attribute__((always_inline))
static __inline int64_t syscall (uint64_t num_, uint64_t a1_, uint64_t a2_,
		uint64_t a3_, uint64_t a4_, uint64_t a5_, uint64_t a6_) {
	int64_t ret;
	register uint64_t *num asm ("rax") = (uint64_t *) num_;
	register uint64_t *a1 asm ("rdi") = (uint64_t *) a1_;
	register uint64_t *a2 asm ("rsi") = (uint64_t *) a2_;
	register uint64_t *a3 asm ("rdx") = (uint64_t *) a3_;
	register uint64_t *a4 asm ("r10") = (uint64_t *) a4_;
	register uint64_t *a5 asm ("r8") = (uint64_t *) a5_;
	register uint64_t *a6 asm ("r9") = (uint64_t *) a6_;

	// 실제 넣는 과정
	__asm __volatile(
			"mov %1, %%rax\\n"
			"mov %2, %%rdi\\n"
			"mov %3, %%rsi\\n"
			"mov %4, %%rdx\\n"
			"mov %5, %%r10\\n"
			"mov %6, %%r8\\n"
			"mov %7, %%r9\\n"
			"syscall\\n"
			: "=a" (ret)
			: "g" (num), "g" (a1), "g" (a2), "g" (a3), "g" (a4), "g" (a5), "g" (a6)
			: "cc", "memory");
	return ret;
}

num을 rax 레지스터에, a1을 rdi 레지스터에... 넣는 과정