user: What would the C source look like for the assembly code provided here:

```asm
<nvvm_ldg>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  call   <__nvvm_ldg_c@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_uc@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_s@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_us@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_i@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_ui@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_l@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_ul@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_f@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_d@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_c2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_uc2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_c4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_uc4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_s2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_us2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_s4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_us4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_i2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_ui2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_i4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_ui4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_ll2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_ull2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_f2@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_f4@plt>
  mov    %rbx,%rdi
  call   <__nvvm_ldg_d2@plt>
  pop    %rbx
  ret
```

assistant: ```c
__attribute__((device)) void nvvm_ldg(const void *p) {
  __nvvm_ldg_c((const char *)p);
  __nvvm_ldg_uc((const unsigned char *)p);
  __nvvm_ldg_s((const short *)p);
  __nvvm_ldg_us((const unsigned short *)p);
  __nvvm_ldg_i((const int *)p);
  __nvvm_ldg_ui((const unsigned int *)p);
  __nvvm_ldg_l((const long *)p);
  __nvvm_ldg_ul((const unsigned long *)p);
  __nvvm_ldg_f((const float *)p);
  __nvvm_ldg_d((const double *)p);
  typedef char char2 __attribute__((ext_vector_type(2)));
  typedef unsigned char uchar2 __attribute__((ext_vector_type(2)));
  __nvvm_ldg_c2((const char2 *)p);
  __nvvm_ldg_uc2((const uchar2 *)p);
  typedef char char4 __attribute__((ext_vector_type(4)));
  typedef unsigned char uchar4 __attribute__((ext_vector_type(4)));
  __nvvm_ldg_c4((const char4 *)p);
  __nvvm_ldg_uc4((const uchar4 *)p);
  typedef short short2 __attribute__((ext_vector_type(2)));
  typedef unsigned short ushort2 __attribute__((ext_vector_type(2)));
  __nvvm_ldg_s2((const short2 *)p);
  __nvvm_ldg_us2((const ushort2 *)p);
  typedef short short4 __attribute__((ext_vector_type(4)));
  typedef unsigned short ushort4 __attribute__((ext_vector_type(4)));
  __nvvm_ldg_s4((const short4 *)p);
  __nvvm_ldg_us4((const ushort4 *)p);
  typedef int int2 __attribute__((ext_vector_type(2)));
  typedef unsigned int uint2 __attribute__((ext_vector_type(2)));
  __nvvm_ldg_i2((const int2 *)p);
  __nvvm_ldg_ui2((const uint2 *)p);
  typedef int int4 __attribute__((ext_vector_type(4)));
  typedef unsigned int uint4 __attribute__((ext_vector_type(4)));
  __nvvm_ldg_i4((const int4 *)p);
  __nvvm_ldg_ui4((const uint4 *)p);
  typedef long long longlong2 __attribute__((ext_vector_type(2)));
  typedef unsigned long long ulonglong2 __attribute__((ext_vector_type(2)));
  __nvvm_ldg_ll2((const longlong2 *)p);
  __nvvm_ldg_ull2((const ulonglong2 *)p);
  typedef float float2 __attribute__((ext_vector_type(2)));
  __nvvm_ldg_f2((const float2 *)p);
  typedef float float4 __attribute__((ext_vector_type(4)));
  __nvvm_ldg_f4((const float4 *)p);
  typedef double double2 __attribute__((ext_vector_type(2)));
  __nvvm_ldg_d2((const double2 *)p);
}
```