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

```asm
<SensorSetMode_GC306>:
  endbr64
  sub    $0x8,%rsp
  cmp    $0x3,%dil
  je     L33
  ja     L11
  cmp    $0x1,%dil
  je     L44
  cmp    $0x2,%dil
  jne    L43
  mov    $0xf1,%esi
  mov    $0x59,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x61,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x48,%esi
  mov    $0x63,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x46,%esi
  mov    $0x65,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x67,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x68,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5c,%esi
  mov    $0x40,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x2,%esi
  mov    $0x19,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x20,%esi
  mov    $0x1a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0xa1,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa,%esi
  mov    $0x90,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x14,%esi
  mov    $0x91,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x1e,%esi
  mov    $0x92,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x34,%esi
  mov    $0x93,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x4a,%esi
  mov    $0x94,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5f,%esi
  mov    $0x95,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x74,%esi
  mov    $0x96,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x86,%esi
  mov    $0x97,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa6,%esi
  mov    $0x98,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xc0,%esi
  mov    $0x99,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xd7,%esi
  mov    $0x9a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xed,%esi
  mov    $0x9b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xfe,%esi
  mov    $0x9c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x78,%esi
  mov    $0xd6,%edi
  add    $0x8,%rsp
  jmp    1050 <VIM_SIF_I2cWriteByte@plt>
  nopl   (%rax)
L11:
  cmp    $0x4,%dil
  jne    L43
  mov    $0xf1,%esi
  mov    $0x59,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x61,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x48,%esi
  mov    $0x63,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x46,%esi
  mov    $0x65,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x67,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x68,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5c,%esi
  mov    $0x40,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x9d,%esi
  mov    $0x41,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x34,%esi
  mov    $0x19,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x43,%esi
  mov    $0x1a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0xa1,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf,%esi
  mov    $0xd8,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa,%esi
  mov    $0x90,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x14,%esi
  mov    $0x91,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x1e,%esi
  mov    $0x92,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x34,%esi
  mov    $0x93,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x4a,%esi
  mov    $0x94,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5f,%esi
  mov    $0x95,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x74,%esi
  mov    $0x96,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x86,%esi
  mov    $0x97,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa6,%esi
  mov    $0x98,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xc0,%esi
  mov    $0x99,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xd7,%esi
  mov    $0x9a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xed,%esi
  mov    $0x9b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xfe,%esi
  mov    $0x9c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  xor    %esi,%esi
  mov    $0x82,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x90,%esi
  mov    $0x87,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x10,%esi
  mov    $0x88,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x8,%esi
  mov    $0x89,%edi
  add    $0x8,%rsp
  jmp    1050 <VIM_SIF_I2cWriteByte@plt>
  nopl   0x0(%rax,%rax,1)
L33:
  mov    $0xf1,%esi
  mov    $0x59,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x61,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x48,%esi
  mov    $0x63,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x46,%esi
  mov    $0x65,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x67,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x68,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5c,%esi
  mov    $0x40,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x2,%esi
  mov    $0x19,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x20,%esi
  mov    $0x1a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0xa1,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa,%esi
  mov    $0x90,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x14,%esi
  mov    $0x91,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x1e,%esi
  mov    $0x92,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x34,%esi
  mov    $0x93,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x4a,%esi
  mov    $0x94,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5f,%esi
  mov    $0x95,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x74,%esi
  mov    $0x96,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x86,%esi
  mov    $0x97,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa6,%esi
  mov    $0x98,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xc0,%esi
  mov    $0x99,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xd7,%esi
  mov    $0x9a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xed,%esi
  mov    $0x9b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xfe,%esi
  mov    $0x9c,%edi
  add    $0x8,%rsp
  jmp    1050 <VIM_SIF_I2cWriteByte@plt>
  nopw   0x0(%rax,%rax,1)
L43:
  add    $0x8,%rsp
  ret
  nopl   (%rax)
L44:
  mov    $0xf1,%esi
  mov    $0x59,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xf1,%esi
  mov    $0x5c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x61,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x48,%esi
  mov    $0x63,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x46,%esi
  mov    $0x65,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x67,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0x68,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5c,%esi
  mov    $0x40,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x2,%esi
  mov    $0x19,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x20,%esi
  mov    $0x1a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x40,%esi
  mov    $0xa1,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa,%esi
  mov    $0x90,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x14,%esi
  mov    $0x91,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x1e,%esi
  mov    $0x92,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x34,%esi
  mov    $0x93,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x4a,%esi
  mov    $0x94,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x5f,%esi
  mov    $0x95,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x74,%esi
  mov    $0x96,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x86,%esi
  mov    $0x97,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xa6,%esi
  mov    $0x98,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xc0,%esi
  mov    $0x99,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xd7,%esi
  mov    $0x9a,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xed,%esi
  mov    $0x9b,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0xfe,%esi
  mov    $0x9c,%edi
  call   <VIM_SIF_I2cWriteByte@plt>
  mov    $0x90,%esi
  mov    $0xd6,%edi
  add    $0x8,%rsp
  jmp    1050 <VIM_SIF_I2cWriteByte@plt>
```

assistant: ```c
void SensorSetMode_GC306(unsigned char val) {
  switch (val) {
  case 1:
    VIM_SIF_I2cWriteByte(0x59, 0xf1);
    VIM_SIF_I2cWriteByte(0x5a, 0xf1);
    VIM_SIF_I2cWriteByte(0x5b, 0xf1);
    VIM_SIF_I2cWriteByte(0x5c, 0xf1);
    VIM_SIF_I2cWriteByte(0x61, 0x40);
    VIM_SIF_I2cWriteByte(0x63, 0x48);
    VIM_SIF_I2cWriteByte(0x65, 0x46);
    VIM_SIF_I2cWriteByte(0x67, 0x40);
    VIM_SIF_I2cWriteByte(0x68, 0x40);
    VIM_SIF_I2cWriteByte(0x40, 0x5c);
    VIM_SIF_I2cWriteByte(0x19, 0x02);
    VIM_SIF_I2cWriteByte(0x1a, 0x20);
    VIM_SIF_I2cWriteByte(0xa1, 0x40);
    VIM_SIF_I2cWriteByte(0x90, 0x0a);
    VIM_SIF_I2cWriteByte(0x91, 0x14);
    VIM_SIF_I2cWriteByte(0x92, 0x1e);
    VIM_SIF_I2cWriteByte(0x93, 0x34);
    VIM_SIF_I2cWriteByte(0x94, 0x4a);
    VIM_SIF_I2cWriteByte(0x95, 0x5f);
    VIM_SIF_I2cWriteByte(0x96, 0x74);
    VIM_SIF_I2cWriteByte(0x97, 0x86);
    VIM_SIF_I2cWriteByte(0x98, 0xa6);
    VIM_SIF_I2cWriteByte(0x99, 0xc0);
    VIM_SIF_I2cWriteByte(0x9a, 0xd7);
    VIM_SIF_I2cWriteByte(0x9b, 0xed);
    VIM_SIF_I2cWriteByte(0x9c, 0xfe);
    VIM_SIF_I2cWriteByte(0xd6, 0x90);
    break;
  case 2:
    VIM_SIF_I2cWriteByte(0x59, 0xf1);
    VIM_SIF_I2cWriteByte(0x5a, 0xf1);
    VIM_SIF_I2cWriteByte(0x5b, 0xf1);
    VIM_SIF_I2cWriteByte(0x5c, 0xf1);
    VIM_SIF_I2cWriteByte(0x61, 0x40);
    VIM_SIF_I2cWriteByte(0x63, 0x48);
    VIM_SIF_I2cWriteByte(0x65, 0x46);
    VIM_SIF_I2cWriteByte(0x67, 0x40);
    VIM_SIF_I2cWriteByte(0x68, 0x40);
    VIM_SIF_I2cWriteByte(0x40, 0x5c);
    VIM_SIF_I2cWriteByte(0x19, 0x02);
    VIM_SIF_I2cWriteByte(0x1a, 0x20);
    VIM_SIF_I2cWriteByte(0xa1, 0x40);
    VIM_SIF_I2cWriteByte(0x90, 0x0a);
    VIM_SIF_I2cWriteByte(0x91, 0x14);
    VIM_SIF_I2cWriteByte(0x92, 0x1e);
    VIM_SIF_I2cWriteByte(0x93, 0x34);
    VIM_SIF_I2cWriteByte(0x94, 0x4a);
    VIM_SIF_I2cWriteByte(0x95, 0x5f);
    VIM_SIF_I2cWriteByte(0x96, 0x74);
    VIM_SIF_I2cWriteByte(0x97, 0x86);
    VIM_SIF_I2cWriteByte(0x98, 0xa6);
    VIM_SIF_I2cWriteByte(0x99, 0xc0);
    VIM_SIF_I2cWriteByte(0x9a, 0xd7);
    VIM_SIF_I2cWriteByte(0x9b, 0xed);
    VIM_SIF_I2cWriteByte(0x9c, 0xfe);
    VIM_SIF_I2cWriteByte(0xd6, 0x78);
    break;
  case 4:
    VIM_SIF_I2cWriteByte(0x59, 0xf1);
    VIM_SIF_I2cWriteByte(0x5a, 0xf1);
    VIM_SIF_I2cWriteByte(0x5b, 0xf1);
    VIM_SIF_I2cWriteByte(0x5c, 0xf1);
    VIM_SIF_I2cWriteByte(0x61, 0x40);
    VIM_SIF_I2cWriteByte(0x63, 0x48);
    VIM_SIF_I2cWriteByte(0x65, 0x46);
    VIM_SIF_I2cWriteByte(0x67, 0x40);
    VIM_SIF_I2cWriteByte(0x68, 0x40);
    VIM_SIF_I2cWriteByte(0x40, 0x5c);
    VIM_SIF_I2cWriteByte(0x41, 0x9d);
    VIM_SIF_I2cWriteByte(0x19, 0x34);
    VIM_SIF_I2cWriteByte(0x1a, 0x43);
    VIM_SIF_I2cWriteByte(0xa1, 0x40);
    VIM_SIF_I2cWriteByte(0xd8, 0x0f);
    VIM_SIF_I2cWriteByte(0x90, 0x0a);
    VIM_SIF_I2cWriteByte(0x91, 0x14);
    VIM_SIF_I2cWriteByte(0x92, 0x1e);
    VIM_SIF_I2cWriteByte(0x93, 0x34);
    VIM_SIF_I2cWriteByte(0x94, 0x4a);
    VIM_SIF_I2cWriteByte(0x95, 0x5f);
    VIM_SIF_I2cWriteByte(0x96, 0x74);
    VIM_SIF_I2cWriteByte(0x97, 0x86);
    VIM_SIF_I2cWriteByte(0x98, 0xa6);
    VIM_SIF_I2cWriteByte(0x99, 0xc0);
    VIM_SIF_I2cWriteByte(0x9a, 0xd7);
    VIM_SIF_I2cWriteByte(0x9b, 0xed);
    VIM_SIF_I2cWriteByte(0x9c, 0xfe);
    VIM_SIF_I2cWriteByte(0x82, 0x00);
    VIM_SIF_I2cWriteByte(0x87, 0x90);
    VIM_SIF_I2cWriteByte(0x88, 0x10);
    VIM_SIF_I2cWriteByte(0x89, 0x08);
    break;
  case 3:
    VIM_SIF_I2cWriteByte(0x59, 0xf1);
    VIM_SIF_I2cWriteByte(0x5a, 0xf1);
    VIM_SIF_I2cWriteByte(0x5b, 0xf1);
    VIM_SIF_I2cWriteByte(0x5c, 0xf1);
    VIM_SIF_I2cWriteByte(0x61, 0x40);
    VIM_SIF_I2cWriteByte(0x63, 0x48);
    VIM_SIF_I2cWriteByte(0x65, 0x46);
    VIM_SIF_I2cWriteByte(0x67, 0x40);
    VIM_SIF_I2cWriteByte(0x68, 0x40);
    VIM_SIF_I2cWriteByte(0x40, 0x5c);
    VIM_SIF_I2cWriteByte(0x19, 0x02);
    VIM_SIF_I2cWriteByte(0x1a, 0x20);
    VIM_SIF_I2cWriteByte(0xa1, 0x40);
    VIM_SIF_I2cWriteByte(0x90, 0x0a);
    VIM_SIF_I2cWriteByte(0x91, 0x14);
    VIM_SIF_I2cWriteByte(0x92, 0x1e);
    VIM_SIF_I2cWriteByte(0x93, 0x34);
    VIM_SIF_I2cWriteByte(0x94, 0x4a);
    VIM_SIF_I2cWriteByte(0x95, 0x5f);
    VIM_SIF_I2cWriteByte(0x96, 0x74);
    VIM_SIF_I2cWriteByte(0x97, 0x86);
    VIM_SIF_I2cWriteByte(0x98, 0xa6);
    VIM_SIF_I2cWriteByte(0x99, 0xc0);
    VIM_SIF_I2cWriteByte(0x9a, 0xd7);
    VIM_SIF_I2cWriteByte(0x9b, 0xed);
    VIM_SIF_I2cWriteByte(0x9c, 0xfe);
    break;
  default:
    break;
  }
}
```