int jisx0201_wctomb(unsigned int *r, const unsigned int wc) {
  if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) {
    *r = wc;
    return 1;
  }
  if (wc == 0x00a5) {
    *r = 0x5c;
    return 1;
  }
  if (wc == 0x203e) {
    *r = 0x7e;
    return 1;
  }
  if (wc >= 0xff61 && wc < 0xffa0) {
    *r = wc - 0xfec0;
    return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<jisx0201_wctomb>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
cmpl   $0x80,-0x14(%rbp)
jae    1141 <jisx0201_wctomb+0x41>
cmpl   $0x5c,-0x14(%rbp)
je     1141 <jisx0201_wctomb+0x41>
cmpl   $0x7e,-0x14(%rbp)
je     1141 <jisx0201_wctomb+0x41>
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    11c3 <jisx0201_wctomb+0xc3>
cmpl   $0xa5,-0x14(%rbp)
jne    1164 <jisx0201_wctomb+0x64>
mov    -0x10(%rbp),%rax
movl   $0x5c,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    11c3 <jisx0201_wctomb+0xc3>
cmpl   $0x203e,-0x14(%rbp)
jne    1187 <jisx0201_wctomb+0x87>
mov    -0x10(%rbp),%rax
movl   $0x7e,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    11c3 <jisx0201_wctomb+0xc3>
cmpl   $0xff61,-0x14(%rbp)
jb     11bc <jisx0201_wctomb+0xbc>
cmpl   $0xffa0,-0x14(%rbp)
jae    11bc <jisx0201_wctomb+0xbc>
mov    -0x14(%rbp),%ecx
sub    $0xfec0,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    11c3 <jisx0201_wctomb+0xc3>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<jisx0201_wctomb>:
cmp    $0x7f,%esi
jbe    111c <jisx0201_wctomb+0x1c>
cmp    $0xa5,%esi
je     1129 <jisx0201_wctomb+0x29>
cmp    $0x203e,%esi
jne    1130 <jisx0201_wctomb+0x30>
mov    $0x7e,%esi
jmp    1143 <jisx0201_wctomb+0x43>
xor    %eax,%eax
cmp    $0x5c,%esi
je     1128 <jisx0201_wctomb+0x28>
cmp    $0x7e,%esi
jne    1143 <jisx0201_wctomb+0x43>
ret
mov    $0x5c,%esi
jmp    1143 <jisx0201_wctomb+0x43>
lea    -0xff61(%rsi),%ecx
xor    %eax,%eax
cmp    $0x3e,%ecx
ja     1128 <jisx0201_wctomb+0x28>
add    $0xffff0140,%esi
mov    %esi,(%rdi)
mov    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @jisx0201_wctomb(i32* %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32*
%5 = alloca i32
store i32* %0, i32** %4
store i32 %1, i32* %5
%6 = load i32, i32* %5
%7 = icmp ult i32 %6, 128
br i1 %7, label %8, label %17
8: ; preds = %2
%9 = load i32, i32* %5
%10 = icmp eq i32 %9, 92
br i1 %10, label %17, label %11
11: ; preds = %8
%12 = load i32, i32* %5
%13 = icmp eq i32 %12, 126
br i1 %13, label %17, label %14
14: ; preds = %11
%15 = load i32, i32* %5
%16 = load i32*, i32** %4
store i32 %15, i32* %16
store i32 1, i32* %3
br label %38
17: ; preds = %11, %8, %2
%18 = load i32, i32* %5
%19 = icmp eq i32 %18, 165
br i1 %19, label %20, label %22
20: ; preds = %17
%21 = load i32*, i32** %4
store i32 92, i32* %21
store i32 1, i32* %3
br label %38
22: ; preds = %17
%23 = load i32, i32* %5
%24 = icmp eq i32 %23, 8254
br i1 %24, label %25, label %27
25: ; preds = %22
%26 = load i32*, i32** %4
store i32 126, i32* %26
store i32 1, i32* %3
br label %38
27: ; preds = %22
%28 = load i32, i32* %5
%29 = icmp uge i32 %28, 65377
br i1 %29, label %30, label %37
30: ; preds = %27
%31 = load i32, i32* %5
%32 = icmp ult i32 %31, 65440
br i1 %32, label %33, label %37
33: ; preds = %30
%34 = load i32, i32* %5
%35 = sub i32 %34, 65216
%36 = load i32*, i32** %4
store i32 %35, i32* %36
store i32 1, i32* %3
br label %38
37: ; preds = %30, %27
store i32 0, i32* %3
br label %38
38: ; preds = %37, %33, %25, %20, %14
%39 = load i32, i32* %3
ret i32 %39
}

LLVM IR (-O2):
define i32 @jisx0201_wctomb(i32* nocapture writeonly %0, i32 %1) {
%3 = icmp ugt i32 %1, 127
br i1 %3, label %5, label %4
4: ; preds = %2
switch i32 %1, label %12 [
i32 92, label %14
i32 126, label %14
]
5: ; preds = %2
switch i32 %1, label %7 [
i32 165, label %12
i32 8254, label %6
]
6: ; preds = %5
br label %12
7: ; preds = %5
%8 = add i32 %1, -65377
%9 = icmp ult i32 %8, 63
br i1 %9, label %10, label %14
10: ; preds = %7
%11 = add nsw i32 %1, -65216
br label %12
12: ; preds = %5, %4, %6, %10
%13 = phi i32 [ %11, %10 ], [ 126, %6 ], [ %1, %4 ], [ 92, %5 ]
store i32 %13, i32* %0
br label %14
14: ; preds = %12, %4, %4, %7
%15 = phi i32 [ 0, %7 ], [ 0, %4 ], [ 0, %4 ], [ 1, %12 ]
ret i32 %15
}