void newline(i, j, k) short i, j, k;
{
  short m;
  if ((i - 1) % j != 0 || i <= 1)
    return;
  putchar('\n');
  for (m = 1; m <= k; m++)
    putchar(' ');
}


x86 assembly (clang, -O0):
<newline>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edx,%eax
mov    %di,%dx
mov    %si,%cx
mov    %dx,-0x2(%rbp)
mov    %cx,-0x4(%rbp)
mov    %ax,-0x6(%rbp)
movswl -0x2(%rbp),%eax
sub    $0x1,%eax
movswl -0x4(%rbp),%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1150 <newline+0x40>
movswl -0x2(%rbp),%eax
cmp    $0x1,%eax
jg     1155 <newline+0x45>
jmp    1194 <newline+0x84>
mov    $0xa,%edi
mov    $0x0,%al
call   1030 <putchar@plt>
movw   $0x1,-0x8(%rbp)
movswl -0x8(%rbp),%eax
movswl -0x6(%rbp),%ecx
cmp    %ecx,%eax
jg     1194 <newline+0x84>
mov    $0x20,%edi
mov    $0x0,%al
call   1030 <putchar@plt>
mov    -0x8(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x8(%rbp)
jmp    1167 <newline+0x57>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<newline>:
push   %rbp
push   %rbx
push   %rax
mov    %edx,%ebx
movswl %di,%eax
shl    $0x10,%edi
add    $0xffffffff,%eax
movswl %si,%ecx
cltd
idiv   %ecx
cmp    $0x20000,%edi
jl     1166 <newline+0x56>
test   %edx,%edx
jne    1166 <newline+0x56>
mov    $0xa,%edi
xor    %eax,%eax
call   1030 <putchar@plt>
mov    %ebx,%eax
shl    $0x10,%eax
cmp    $0x10000,%eax
jl     1166 <newline+0x56>
movswl %bx,%ebp
mov    $0x2,%bx
nop
mov    $0x20,%edi
xor    %eax,%eax
call   1030 <putchar@plt>
movswl %bx,%eax
add    $0x1,%ebx
cmp    %eax,%ebp
jge    1150 <newline+0x40>
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define void @newline(i32 %0, i32 %1, i32 %2) {
%4 = alloca i16
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
%8 = trunc i32 %0 to i16
%9 = trunc i32 %1 to i16
%10 = trunc i32 %2 to i16
store i16 %8, i16* %4
store i16 %9, i16* %5
store i16 %10, i16* %6
%11 = load i16, i16* %4
%12 = sext i16 %11 to i32
%13 = sub nsw i32 %12, 1
%14 = load i16, i16* %5
%15 = sext i16 %14 to i32
%16 = srem i32 %13, %15
%17 = icmp ne i32 %16, 0
br i1 %17, label %22, label %18
18: ; preds = %3
%19 = load i16, i16* %4
%20 = sext i16 %19 to i32
%21 = icmp sle i32 %20, 1
br i1 %21, label %22, label %23
22: ; preds = %18, %3
br label %36
23: ; preds = %18
%24 = call i32 (i32, ...) bitcast (i32 (...)* @putchar to i32 (i32, ...)*)(i32 10)
store i16 1, i16* %7
br label %25
25: ; preds = %33, %23
%26 = load i16, i16* %7
%27 = sext i16 %26 to i32
%28 = load i16, i16* %6
%29 = sext i16 %28 to i32
%30 = icmp sle i32 %27, %29
br i1 %30, label %31, label %36
31: ; preds = %25
%32 = call i32 (i32, ...) bitcast (i32 (...)* @putchar to i32 (i32, ...)*)(i32 32)
br label %33
33: ; preds = %31
%34 = load i16, i16* %7
%35 = add i16 %34, 1
store i16 %35, i16* %7
br label %25
36: ; preds = %22, %25
ret void
}

LLVM IR (-O2):
define void @newline(i32 %0, i32 %1, i32 %2) {
%4 = shl i32 %0, 16
%5 = ashr exact i32 %4, 16
%6 = add nsw i32 %5, -1
%7 = shl i32 %1, 16
%8 = ashr exact i32 %7, 16
%9 = srem i32 %6, %8
%10 = icmp ne i32 %9, 0
%11 = icmp slt i32 %4, 131072
%12 = or i1 %11, %10
br i1 %12, label %24, label %13
13: ; preds = %3
%14 = tail call i32 (i32, ...) bitcast (i32 (...)* @putchar to i32 (i32, ...)*)(i32 10)
%15 = shl i32 %2, 16
%16 = ashr exact i32 %15, 16
%17 = icmp slt i32 %15, 65536
br i1 %17, label %24, label %18
18: ; preds = %13, %18
%19 = phi i16 [ %21, %18 ], [ 1, %13 ]
%20 = tail call i32 (i32, ...) bitcast (i32 (...)* @putchar to i32 (i32, ...)*)(i32 32)
%21 = add i16 %19, 1
%22 = sext i16 %21 to i32
%23 = icmp slt i32 %16, %22
br i1 %23, label %24, label %18
24: ; preds = %18, %13, %3
ret void
}