void Mask_mask1(int width, const unsigned char *s, unsigned char *d) {
  int x, y;
  for (y = 0; y < width; y++) {
    for (x = 0; x < width; x++) {
      if (*s & 0x80) {
        *d = *s;
      } else {
        *d = *s ^ ((((y / 2) + (x / 3)) & 1) == 0);
      }
      s++;
      d++;
    }
  }
}


x86 assembly (clang, -O0):
<Mask_mask1>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11d6 <Mask_mask1+0xd6>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11c3 <Mask_mask1+0xc3>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     115b <Mask_mask1+0x5b>
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
jmp    119d <Mask_mask1+0x9d>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x1c(%rbp),%eax
mov    $0x3,%esi
cltd
idiv   %esi
mov    %eax,%edx
mov    -0x24(%rbp),%eax
add    %edx,%ecx
and    $0x1,%ecx
cmp    $0x0,%ecx
sete   %cl
and    $0x1,%cl
movzbl %cl,%ecx
xor    %ecx,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1129 <Mask_mask1+0x29>
jmp    11c8 <Mask_mask1+0xc8>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1116 <Mask_mask1+0x16>
pop    %rbp
ret

x86 assembly (clang, -O2):
<Mask_mask1>:
push   %rbp
push   %r14
push   %rbx
test   %edi,%edi
jle    1347 <Mask_mask1+0x247>
lea    -0x1(%rdi),%r8d
lea    0x1(%r8),%r9
mov    %r9,%r14
and    $0xfffffffffffffff0,%r14
xor    %r10d,%r10d
mov    $0xaaaaaaab,%r11d
movdqa 0xf13(%rip),%xmm10
movdqa 0xf1a(%rip),%xmm14
movdqa 0xf21(%rip),%xmm13
jmp    1163 <Mask_mask1+0x63>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r10d
mov    %rbx,%rdx
mov    %rcx,%rsi
cmp    %edi,%r10d
je     1347 <Mask_mask1+0x247>
mov    %r10d,%ebp
shr    %ebp
cmp    $0xf,%r8d
jb     1180 <Mask_mask1+0x80>
lea    (%rsi,%r9,1),%rax
cmp    %rax,%rdx
jae    1190 <Mask_mask1+0x90>
lea    (%rdx,%r9,1),%rax
cmp    %rax,%rsi
jae    1190 <Mask_mask1+0x90>
xor    %eax,%eax
mov    %rdx,%rbx
mov    %rsi,%rcx
jmp    1325 <Mask_mask1+0x225>
nopl   (%rax)
lea    (%rdx,%r14,1),%rbx
lea    (%rsi,%r14,1),%rcx
movd   %ebp,%xmm0
pshufd $0x0,%xmm0,%xmm15
xor    %eax,%eax
movdqa 0xe84(%rip),%xmm3
movdqa 0xe6c(%rip),%xmm2
movdqa 0xe54(%rip),%xmm1
movdqa 0xe3c(%rip),%xmm6
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqu (%rsi,%rax,1),%xmm12
pxor   %xmm5,%xmm5
pcmpgtb %xmm12,%xmm5
movdqa %xmm3,%xmm4
pmuludq %xmm10,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm3,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xed,%xmm0,%xmm0
punpckldq %xmm0,%xmm4
psrld  $0x1,%xmm4
movdqa %xmm2,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xed,%xmm0,%xmm8
pshufd $0xf5,%xmm2,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xed,%xmm0,%xmm0
punpckldq %xmm0,%xmm8
psrld  $0x1,%xmm8
movdqa %xmm1,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xed,%xmm0,%xmm9
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xed,%xmm0,%xmm0
punpckldq %xmm0,%xmm9
psrld  $0x1,%xmm9
movdqa %xmm6,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xed,%xmm0,%xmm0
pshufd $0xf5,%xmm6,%xmm11
pmuludq %xmm10,%xmm11
pshufd $0xed,%xmm11,%xmm7
punpckldq %xmm7,%xmm0
psrld  $0x1,%xmm0
paddd  %xmm15,%xmm0
paddd  %xmm15,%xmm9
paddd  %xmm15,%xmm8
paddd  %xmm15,%xmm4
pand   %xmm14,%xmm4
pand   %xmm14,%xmm8
packuswb %xmm8,%xmm4
pand   %xmm14,%xmm9
pand   %xmm14,%xmm0
packuswb %xmm0,%xmm9
packuswb %xmm9,%xmm4
pand   %xmm13,%xmm4
movdqa %xmm12,%xmm0
pxor   %xmm13,%xmm0
pxor   %xmm4,%xmm0
movdqa 0xd9f(%rip),%xmm4
pand   %xmm5,%xmm12
pandn  %xmm0,%xmm5
por    %xmm12,%xmm5
movdqu %xmm5,(%rdx,%rax,1)
add    $0x10,%rax
paddd  %xmm4,%xmm3
paddd  %xmm4,%xmm2
paddd  %xmm4,%xmm1
paddd  %xmm4,%xmm6
cmp    %rax,%r14
jne    11d0 <Mask_mask1+0xd0>
mov    %r14d,%eax
cmp    %r14,%r9
jne    1325 <Mask_mask1+0x225>
jmp    1150 <Mask_mask1+0x50>
xchg   %ax,%ax
mov    %dl,(%rbx)
add    $0x1,%rcx
add    $0x1,%rbx
add    $0x1,%eax
cmp    %eax,%edi
je     1150 <Mask_mask1+0x50>
movzbl (%rcx),%edx
test   %dl,%dl
js     1310 <Mask_mask1+0x210>
mov    %eax,%esi
imul   %r11,%rsi
shr    $0x21,%rsi
add    %ebp,%esi
and    $0x1,%sil
xor    %dl,%sil
xor    $0x1,%sil
mov    %esi,%edx
jmp    1310 <Mask_mask1+0x210>
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define void @Mask_mask1(i32 %0, i8* %1, i8* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
store i32 %0, i32* %4
store i8* %1, i8** %5
store i8* %2, i8** %6
store i32 0, i32* %8
br label %9
9: ; preds = %52, %3
%10 = load i32, i32* %8
%11 = load i32, i32* %4
%12 = icmp slt i32 %10, %11
br i1 %12, label %13, label %55
13: ; preds = %9
store i32 0, i32* %7
br label %14
14: ; preds = %48, %13
%15 = load i32, i32* %7
%16 = load i32, i32* %4
%17 = icmp slt i32 %15, %16
br i1 %17, label %18, label %51
18: ; preds = %14
%19 = load i8*, i8** %5
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = and i32 %21, 128
%23 = icmp ne i32 %22, 0
br i1 %23, label %24, label %28
24: ; preds = %18
%25 = load i8*, i8** %5
%26 = load i8, i8* %25
%27 = load i8*, i8** %6
store i8 %26, i8* %27
br label %43
28: ; preds = %18
%29 = load i8*, i8** %5
%30 = load i8, i8* %29
%31 = zext i8 %30 to i32
%32 = load i32, i32* %8
%33 = sdiv i32 %32, 2
%34 = load i32, i32* %7
%35 = sdiv i32 %34, 3
%36 = add nsw i32 %33, %35
%37 = and i32 %36, 1
%38 = icmp eq i32 %37, 0
%39 = zext i1 %38 to i32
%40 = xor i32 %31, %39
%41 = trunc i32 %40 to i8
%42 = load i8*, i8** %6
store i8 %41, i8* %42
br label %43
43: ; preds = %28, %24
%44 = load i8*, i8** %5
%45 = getelementptr inbounds i8, i8* %44, i32 1
store i8* %45, i8** %5
%46 = load i8*, i8** %6
%47 = getelementptr inbounds i8, i8* %46, i32 1
store i8* %47, i8** %6
br label %48
48: ; preds = %43
%49 = load i32, i32* %7
%50 = add nsw i32 %49, 1
store i32 %50, i32* %7
br label %14
51: ; preds = %14
br label %52
52: ; preds = %51
%53 = load i32, i32* %8
%54 = add nsw i32 %53, 1
store i32 %54, i32* %8
br label %9
55: ; preds = %9
ret void
}

LLVM IR (-O2):
define void @Mask_mask1(i32 %0, i8* nocapture %1, i8* nocapture writeonly %2) {
%4 = icmp sgt i32 %0, 0
br i1 %4, label %5, label %79
5: ; preds = %3
%6 = add i32 %0, -1
%7 = zext i32 %6 to i64
%8 = add nuw nsw i64 %7, 1
%9 = zext i32 %6 to i64
%10 = add nuw nsw i64 %9, 1
%11 = icmp ult i32 %6, 15
%12 = and i64 %10, 8589934576
%13 = trunc i64 %12 to i32
%14 = icmp eq i64 %10, %12
br label %15
15: ; preds = %5, %74
%16 = phi i32 [ %77, %74 ], [ 0, %5 ]
%17 = phi i8* [ %76, %74 ], [ %2, %5 ]
%18 = phi i8* [ %75, %74 ], [ %1, %5 ]
%19 = lshr i32 %16, 1
br i1 %11, label %51, label %20
20: ; preds = %15
%21 = getelementptr i8, i8* %17, i64 %8
%22 = getelementptr i8, i8* %18, i64 %8
%23 = icmp ult i8* %17, %22
%24 = icmp ult i8* %18, %21
%25 = and i1 %23, %24
br i1 %25, label %51, label %26
26: ; preds = %20
%27 = getelementptr i8, i8* %17, i64 %12
%28 = getelementptr i8, i8* %18, i64 %12
%29 = insertelement <16 x i32> poison, i32 %19, i64 0
%30 = shufflevector <16 x i32> %29, <16 x i32> poison, <16 x i32> zeroinitializer
br label %31
31: ; preds = %31, %26
%32 = phi i64 [ 0, %26 ], [ %47, %31 ]
%33 = phi <16 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>, %26 ], [ %48, %31 ]
%34 = getelementptr i8, i8* %17, i64 %32
%35 = getelementptr i8, i8* %18, i64 %32
%36 = bitcast i8* %35 to <16 x i8>*
%37 = load <16 x i8>, <16 x i8>* %36
%38 = icmp slt <16 x i8> %37, zeroinitializer
%39 = udiv <16 x i32> %33, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
%40 = add nuw nsw <16 x i32> %39, %30
%41 = trunc <16 x i32> %40 to <16 x i8>
%42 = and <16 x i8> %41, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
%43 = xor <16 x i8> %42, %37
%44 = xor <16 x i8> %43, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
%45 = select <16 x i1> %38, <16 x i8> %37, <16 x i8> %44
%46 = bitcast i8* %34 to <16 x i8>*
store <16 x i8> %45, <16 x i8>* %46
%47 = add nuw i64 %32, 16
%48 = add <16 x i32> %33, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
%49 = icmp eq i64 %47, %12
br i1 %49, label %50, label %31
50: ; preds = %31
br i1 %14, label %74, label %51
51: ; preds = %20, %15, %50
%52 = phi i32 [ 0, %20 ], [ 0, %15 ], [ %13, %50 ]
%53 = phi i8* [ %17, %20 ], [ %17, %15 ], [ %27, %50 ]
%54 = phi i8* [ %18, %20 ], [ %18, %15 ], [ %28, %50 ]
br label %55
55: ; preds = %51, %68
%56 = phi i32 [ %72, %68 ], [ %52, %51 ]
%57 = phi i8* [ %71, %68 ], [ %53, %51 ]
%58 = phi i8* [ %70, %68 ], [ %54, %51 ]
%59 = load i8, i8* %58
%60 = icmp sgt i8 %59, -1
br i1 %60, label %61, label %68
61: ; preds = %55
%62 = udiv i32 %56, 3
%63 = add nuw nsw i32 %62, %19
%64 = trunc i32 %63 to i8
%65 = and i8 %64, 1
%66 = xor i8 %65, %59
%67 = xor i8 %66, 1
br label %68
68: ; preds = %55, %61
%69 = phi i8 [ %67, %61 ], [ %59, %55 ]
store i8 %69, i8* %57
%70 = getelementptr inbounds i8, i8* %58, i64 1
%71 = getelementptr inbounds i8, i8* %57, i64 1
%72 = add nuw nsw i32 %56, 1
%73 = icmp eq i32 %72, %0
br i1 %73, label %74, label %55
74: ; preds = %68, %50
%75 = phi i8* [ %28, %50 ], [ %70, %68 ]
%76 = phi i8* [ %27, %50 ], [ %71, %68 ]
%77 = add nuw nsw i32 %16, 1
%78 = icmp eq i32 %77, %0
br i1 %78, label %79, label %15
79: ; preds = %74, %3
ret void
}