user: 请将以下的汇编代码转换成C语言代码：

```asm
<tty_open>:
  endbr64
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  mov    D29(%rip),%rax
  mov    (%rax),%esi
  call   <access@plt>
  test   %rax,%rax
  jne    L27
  mov    D281(%rip),%rax
  mov    %r12,%rdi
  mov    (%rax),%esi
  mov    D150(%rip),%rax
  or     (%rax),%esi
  call   <open@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  js     L27
  mov    %rsp,%r13
  mov    %eax,%edi
  mov    %r13,%rsi
  call   <tcgetattr@plt>
  test   %eax,%eax
  js     L37
  mov    D151(%rip),%rcx
  mov    D100(%rip),%rax
  mov    D285(%rip),%rsi
  mov    0x10(%rsp),%rdx
  mov    (%rax),%eax
  or     (%rcx),%eax
  mov    D263(%rip),%rcx
  movdqa (%rsp),%xmm2
  mov    %rdx,0x10(%rbx)
  or     (%rcx),%eax
  mov    D90(%rip),%rcx
  movups %xmm2,(%rbx)
  or     (%rcx),%eax
  mov    D187(%rip),%rcx
  not    %eax
  and    (%rsp),%eax
  movd   %eax,%xmm0
  mov    D307(%rip),%rax
  mov    (%rax),%eax
  or     (%rcx),%eax
  mov    D45(%rip),%rcx
  or     (%rcx),%eax
  mov    D290(%rip),%rcx
  not    %eax
  and    0x4(%rsp),%eax
  or     (%rcx),%eax
  mov    %eax,%ecx
  mov    D142(%rip),%rax
  movd   %ecx,%xmm4
  mov    (%rax),%eax
  or     (%rsi),%eax
  punpckldq %xmm4,%xmm0
  mov    D135(%rip),%rsi
  or     (%rsi),%eax
  mov    D36(%rip),%rsi
  or     (%rsi),%eax
  mov    D148(%rip),%rsi
  not    %eax
  and    0x8(%rsp),%eax
  mov    (%rsi),%esi
  mov    D83(%rip),%rdi
  or     (%rdi),%esi
  mov    D213(%rip),%rdi
  or     (%rdi),%esi
  mov    D84(%rip),%rdi
  or     (%rdi),%esi
  mov    %r12d,%edi
  or     %esi,%eax
  mov    D239(%rip),%rsi
  movd   %eax,%xmm1
  mov    D232(%rip),%rax
  mov    (%rax),%eax
  or     (%rsi),%eax
  mov    D308(%rip),%rsi
  or     (%rsi),%eax
  mov    D287(%rip),%rsi
  or     (%rsi),%eax
  mov    D75(%rip),%rsi
  or     (%rsi),%eax
  mov    D7(%rip),%rsi
  or     (%rsi),%eax
  mov    D144(%rip),%rsi
  or     (%rsi),%eax
  mov    D185(%rip),%rsi
  or     (%rsi),%eax
  mov    D40(%rip),%rsi
  or     (%rsi),%eax
  not    %eax
  and    0xc(%rsp),%eax
  movd   %eax,%xmm3
  mov    D21(%rip),%rax
  punpckldq %xmm3,%xmm1
  mov    (%rax),%rax
  punpcklqdq %xmm1,%xmm0
  movaps %xmm0,(%rsp)
  movl   $0x0,(%rdx,%rax,4)
  mov    D252(%rip),%rax
  mov    (%rax),%rax
  movl   $0xa,(%rdx,%rax,4)
  mov    D295(%rip),%rax
  mov    %r13,%rdx
  mov    (%rax),%esi
  call   <tcsetattr@plt>
  test   %eax,%eax
  js     L27
L48:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L33
  add    $0x20,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %r12
  pop    %r13
  ret
  cs nopw 0x0(%rax,%rax,1)
L27:
  mov    $0xffffffff,%r12d
  jmp    L48
L37:
  mov    %r12d,%edi
  mov    $0xffffffff,%r12d
  call   <close@plt>
  jmp    L48
L33:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int tty_open(char *name, struct termios *sv_tios) {
  int ret;
  int fd;
  struct termios tios;
  if (access(name, F_OK) || (fd = open(name, O_RDWR | O_NONBLOCK)) < 0) {
    return -1;
  }
  if ((ret = tcgetattr(fd, &tios)) < 0) {
    close(fd);
    return -1;
  }
  *sv_tios = tios;
  tios.c_iflag &= ~(IXON | IXOFF | INLCR | ICRNL);
  tios.c_oflag &= ~(OPOST | ONLCR | OCRNL);
  tios.c_oflag |= ONLRET;
  tios.c_cflag &= ~(CBAUD | CSIZE | CSTOPB | PARENB);
  tios.c_cflag |= CLOCAL | CREAD | B9600 | CS8;
  tios.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOCTL | ISIG | IEXTEN);
  tios.c_cc[VMIN] = 0;
  tios.c_cc[VTIME] = 10;
  if ((ret = tcsetattr(fd, TCSAFLUSH, &tios)) < 0) {
    return -1;
  }
  return fd;
}
```