int mod95(val)
register int val;
{
  while (val >= 9500)
    val -= 9500;
  while (val >= 950)
    val -= 950;
  while (val >= 95)
    val -= 95;
  while (val < 0)
    val += 95;
  return (val);
}


x86 assembly (clang, -O0):
<mod95>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
cmpl   $0x251c,-0x4(%rbp)
jl     1124 <mod95+0x24>
mov    -0x4(%rbp),%eax
sub    $0x251c,%eax
mov    %eax,-0x4(%rbp)
jmp    1107 <mod95+0x7>
jmp    1129 <mod95+0x29>
cmpl   $0x3b6,-0x4(%rbp)
jl     1146 <mod95+0x46>
mov    -0x4(%rbp),%eax
sub    $0x3b6,%eax
mov    %eax,-0x4(%rbp)
jmp    1129 <mod95+0x29>
jmp    114b <mod95+0x4b>
cmpl   $0x5f,-0x4(%rbp)
jl     1163 <mod95+0x63>
mov    -0x4(%rbp),%eax
sub    $0x5f,%eax
mov    %eax,-0x4(%rbp)
jmp    114b <mod95+0x4b>
jmp    1168 <mod95+0x68>
cmpl   $0x0,-0x4(%rbp)
jge    1180 <mod95+0x80>
mov    -0x4(%rbp),%eax
add    $0x5f,%eax
mov    %eax,-0x4(%rbp)
jmp    1168 <mod95+0x68>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<mod95>:
cmp    $0x251b,%edi
mov    $0x251b,%eax
cmovl  %edi,%eax
neg    %eax
add    %edi,%eax
add    $0x251b,%eax
mov    $0xdcc0ba43,%ecx
imul   %rax,%rcx
shr    $0x2d,%rcx
imul   $0x251c,%ecx,%eax
mov    %edi,%ecx
sub    %eax,%ecx
cmp    $0x3b5,%ecx
mov    $0x3b5,%edx
cmovl  %ecx,%edx
add    %eax,%edx
neg    %edx
lea    (%rdi,%rdx,1),%ecx
add    $0x3b5,%ecx
imul   $0x44fc3a35,%rcx,%rcx
shr    $0x28,%rcx
imul   $0x3b6,%ecx,%edx
mov    %edi,%esi
sub    %edx,%esi
sub    %eax,%esi
cmp    $0x5e,%esi
mov    $0x5e,%ecx
cmovl  %esi,%ecx
add    %edx,%ecx
add    %eax,%ecx
neg    %ecx
add    %edi,%ecx
add    $0x5e,%ecx
imul   $0x58ed2309,%rcx,%rsi
shr    $0x20,%rsi
sub    %esi,%ecx
shr    %ecx
add    %esi,%ecx
shr    $0x6,%ecx
imul   $0x5f,%ecx,%ecx
add    %edx,%ecx
add    %eax,%ecx
mov    %edi,%eax
sub    %ecx,%eax
xor    %edx,%edx
test   %eax,%eax
cmovg  %eax,%edx
mov    %eax,%esi
shr    $0x1f,%esi
add    %esi,%eax
sub    %eax,%edx
imul   $0x58ed2309,%rdx,%rax
shr    $0x20,%rax
sub    %eax,%edx
shr    %edx
add    %eax,%edx
shr    $0x6,%edx
add    %esi,%edx
imul   $0x5f,%edx,%eax
add    %edi,%eax
sub    %ecx,%eax
ret

LLVM IR (-O0):
define i32 @mod95(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
br label %3
3: ; preds = %6, %1
%4 = load i32, i32* %2
%5 = icmp sge i32 %4, 9500
br i1 %5, label %6, label %9
6: ; preds = %3
%7 = load i32, i32* %2
%8 = sub nsw i32 %7, 9500
store i32 %8, i32* %2
br label %3
9: ; preds = %3
br label %10
10: ; preds = %13, %9
%11 = load i32, i32* %2
%12 = icmp sge i32 %11, 950
br i1 %12, label %13, label %16
13: ; preds = %10
%14 = load i32, i32* %2
%15 = sub nsw i32 %14, 950
store i32 %15, i32* %2
br label %10
16: ; preds = %10
br label %17
17: ; preds = %20, %16
%18 = load i32, i32* %2
%19 = icmp sge i32 %18, 95
br i1 %19, label %20, label %23
20: ; preds = %17
%21 = load i32, i32* %2
%22 = sub nsw i32 %21, 95
store i32 %22, i32* %2
br label %17
23: ; preds = %17
br label %24
24: ; preds = %27, %23
%25 = load i32, i32* %2
%26 = icmp slt i32 %25, 0
br i1 %26, label %27, label %30
27: ; preds = %24
%28 = load i32, i32* %2
%29 = add nsw i32 %28, 95
store i32 %29, i32* %2
br label %24
30: ; preds = %24
%31 = load i32, i32* %2
ret i32 %31
}

LLVM IR (-O2):
define i32 @mod95(i32 %0) {
%2 = add i32 %0, 9499
%3 = call i32 @llvm.smin.i32(i32 %0, i32 9499)
%4 = sub i32 %2, %3
%5 = urem i32 %4, 9500
%6 = sub i32 %4, %5
%7 = sub i32 %0, %6
%8 = add i32 %0, 949
%9 = call i32 @llvm.smin.i32(i32 %7, i32 949)
%10 = add i32 %9, %6
%11 = sub i32 %8, %10
%12 = urem i32 %11, 950
%13 = sub i32 %11, %12
%14 = add i32 %13, %6
%15 = sub i32 %0, %14
%16 = add i32 %0, 94
%17 = call i32 @llvm.smin.i32(i32 %15, i32 94)
%18 = add i32 %17, %13
%19 = add i32 %18, %6
%20 = sub i32 %16, %19
%21 = urem i32 %20, 95
%22 = sub i32 %20, %21
%23 = add i32 %22, %13
%24 = add i32 %23, %6
%25 = sub i32 %0, %24
%26 = call i32 @llvm.smax.i32(i32 %25, i32 0)
%27 = lshr i32 %25, 31
%28 = add i32 %27, %25
%29 = sub i32 %26, %28
%30 = udiv i32 %29, 95
%31 = add nuw nsw i32 %27, %30
%32 = mul i32 %31, 95
%33 = add i32 %32, %0
%34 = add i32 %22, %13
%35 = add i32 %34, %6
%36 = sub i32 %33, %35
ret i32 %36
}