user: What is the c source code of the assembly code below?

```asm
<__func_rshift_uint>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D69(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D124(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pA@plt>
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D40
type_guessed: string
name: unpack_data
arguments: tag: D69
type_guessed: string
name: unpack_data
arguments: tag: D89
type_guessed: string
name: unpack_data
arguments: tag: D0
type_guessed: string
name: unpack_data
arguments: tag: D71
type_guessed: string
name: unpack_data
arguments: tag: D59
type_guessed: string
name: unpack_data
arguments: tag: D42
type_guessed: string
name: unpack_data
arguments: tag: D77
type_guessed: string
name: unpack_data
arguments: tag: D51
type_guessed: string
name: unpack_data
arguments: tag: D124
type_guessed: string
name: unpack_data
arguments: tag: D48
type_guessed: string

tool: D40: if (%s >= 32) {

tool: D69: %s = 0;

tool: D89: } else {

tool: D0: if ((%s < 0) & (%s >= 1)) {

tool: D71: %s &= 0x7fffffff;

tool: D59: %s >>= %s;

tool: D42: %s--;

tool: D77: %s = 0x40000000 >> %s;

tool: D51: %s |= %s;

tool: D124: %s = %s >> %s;

tool: D48: }

assistant: ```c
void __func_rshift_uint(struct Var *avar, const char *areg, const char *lreg, const char *rreg) {
  pA("if (%s >= 32) {", rreg);
  pA("%s = 0;", areg);
  pA("} else {");
  pA("if ((%s < 0) & (%s >= 1)) {", lreg, rreg);
  pA("%s &= 0x7fffffff;", lreg);
  pA("%s >>= %s;", lreg, rreg);
  pA("%s--;", rreg);
  pA("%s = 0x40000000 >> %s;", areg, rreg);
  pA("%s |= %s;", areg, lreg);
  pA("} else {");
  pA("%s = %s >> %s;", areg, lreg, rreg);
  pA("}");
  pA("}");
}
```