#include <amd64/regsasm.h>

.extern amd64_syscall_dispatch

.global amd64_syscall_entry
amd64_syscall_entry:
  cli

  movq %rsp, %gs:0
  movq %gs:8, %rsp
 
  pushq $0x23
  pushq %gs:0
  pushq %r11
  pushq $0x1b
  pushq %rcx
  pushq $0
  pushq $0

  push_regs

  cld

  movq %rsp, %rdi

  movq %rsp, %rbp

  subq $8, %rsp
  andq $~0xF, %rsp

  callq amd64_syscall_dispatch

  movq %rbp, %rsp

  pop_regs
  
  addq $56, %rsp
  movq %gs:0, %rsp
  
  sysretq
