int coincide(start1, start2)
unsigned char *start1, *start2;
{
  int i, count;
  count = 1;
  for (i = 0; i < 64; i++) {
    if (start1[i] != start2[i]) {
      count = 0;
    }
  }
  return (count);
}


x86 assembly (clang, -O0):
<coincide>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x1,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x40,-0x14(%rbp)
jge    115e <coincide+0x5e>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
je     114b <coincide+0x4b>
movl   $0x0,-0x18(%rbp)
jmp    1150 <coincide+0x50>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    111a <coincide+0x1a>
mov    -0x18(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<coincide>:
movd   (%rdi),%xmm0
movd   (%rsi),%xmm2
pcmpeqb %xmm0,%xmm2
pcmpeqd %xmm0,%xmm0
pxor   %xmm0,%xmm2
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
movd   0x4(%rdi),%xmm1
movd   0x4(%rsi),%xmm3
pcmpeqb %xmm1,%xmm3
pxor   %xmm0,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
movd   0x8(%rdi),%xmm1
movd   0x8(%rsi),%xmm4
pcmpeqb %xmm1,%xmm4
pxor   %xmm0,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
movd   0xc(%rdi),%xmm5
movd   0xc(%rsi),%xmm1
pcmpeqb %xmm5,%xmm1
pxor   %xmm0,%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
por    %xmm4,%xmm1
por    %xmm3,%xmm1
por    %xmm2,%xmm1
movd   0x10(%rdi),%xmm2
movd   0x10(%rsi),%xmm3
pcmpeqb %xmm2,%xmm3
pxor   %xmm0,%xmm3
punpcklbw %xmm3,%xmm2
punpcklwd %xmm2,%xmm8
movd   0x14(%rdi),%xmm3
movd   0x14(%rsi),%xmm4
pcmpeqb %xmm3,%xmm4
pxor   %xmm0,%xmm4
punpcklbw %xmm4,%xmm3
punpcklwd %xmm3,%xmm4
movd   0x18(%rdi),%xmm3
movd   0x18(%rsi),%xmm5
pcmpeqb %xmm3,%xmm5
pxor   %xmm0,%xmm5
punpcklbw %xmm5,%xmm3
punpcklwd %xmm3,%xmm5
movd   0x1c(%rdi),%xmm3
movd   0x1c(%rsi),%xmm6
pcmpeqb %xmm3,%xmm6
pxor   %xmm0,%xmm6
punpcklbw %xmm6,%xmm3
punpcklwd %xmm3,%xmm6
movd   0x20(%rdi),%xmm3
movd   0x20(%rsi),%xmm7
pcmpeqb %xmm3,%xmm7
pxor   %xmm0,%xmm7
punpcklbw %xmm7,%xmm3
punpcklwd %xmm3,%xmm3
por    %xmm6,%xmm3
por    %xmm5,%xmm3
por    %xmm4,%xmm3
movd   0x24(%rdi),%xmm4
movd   0x24(%rsi),%xmm5
pcmpeqb %xmm4,%xmm5
pxor   %xmm0,%xmm5
punpcklbw %xmm5,%xmm4
punpcklwd %xmm4,%xmm5
movd   0x28(%rdi),%xmm4
movd   0x28(%rsi),%xmm6
pcmpeqb %xmm4,%xmm6
pxor   %xmm0,%xmm6
punpcklbw %xmm6,%xmm4
punpcklwd %xmm4,%xmm6
movd   0x2c(%rdi),%xmm4
movd   0x2c(%rsi),%xmm7
pcmpeqb %xmm4,%xmm7
pxor   %xmm0,%xmm7
punpcklbw %xmm7,%xmm4
punpcklwd %xmm4,%xmm4
por    %xmm6,%xmm4
por    %xmm5,%xmm4
movd   0x30(%rdi),%xmm5
movd   0x30(%rsi),%xmm6
pcmpeqb %xmm5,%xmm6
pxor   %xmm0,%xmm6
punpcklbw %xmm6,%xmm5
punpcklwd %xmm5,%xmm5
movd   0x34(%rdi),%xmm6
movd   0x34(%rsi),%xmm7
pcmpeqb %xmm6,%xmm7
pxor   %xmm0,%xmm7
punpcklbw %xmm7,%xmm6
punpcklwd %xmm6,%xmm6
por    %xmm5,%xmm6
movd   0x38(%rdi),%xmm5
movd   0x38(%rsi),%xmm7
pcmpeqb %xmm5,%xmm7
pxor   %xmm0,%xmm7
punpcklbw %xmm7,%xmm5
punpcklwd %xmm5,%xmm5
movd   0x3c(%rdi),%xmm7
movd   0x3c(%rsi),%xmm2
pcmpeqb %xmm7,%xmm2
pxor   %xmm0,%xmm2
punpcklbw %xmm2,%xmm0
punpcklwd %xmm0,%xmm0
por    %xmm5,%xmm0
por    %xmm6,%xmm0
por    %xmm4,%xmm0
por    %xmm3,%xmm0
por    %xmm8,%xmm0
psrld  $0x18,%xmm0
por    %xmm1,%xmm0
pslld  $0x1f,%xmm0
movmskps %xmm0,%ecx
xor    %eax,%eax
test   %ecx,%ecx
sete   %al
ret

LLVM IR (-O0):
define i32 @coincide(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
store i8* %0, i8** %3
store i8* %1, i8** %4
store i32 1, i32* %6
store i32 0, i32* %5
br label %7
7: ; preds = %26, %2
%8 = load i32, i32* %5
%9 = icmp slt i32 %8, 64
br i1 %9, label %10, label %29
10: ; preds = %7
%11 = load i8*, i8** %3
%12 = load i32, i32* %5
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds i8, i8* %11, i64 %13
%15 = load i8, i8* %14
%16 = zext i8 %15 to i32
%17 = load i8*, i8** %4
%18 = load i32, i32* %5
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i8, i8* %17, i64 %19
%21 = load i8, i8* %20
%22 = zext i8 %21 to i32
%23 = icmp ne i32 %16, %22
br i1 %23, label %24, label %25
24: ; preds = %10
store i32 0, i32* %6
br label %25
25: ; preds = %24, %10
br label %26
26: ; preds = %25
%27 = load i32, i32* %5
%28 = add nsw i32 %27, 1
store i32 %28, i32* %5
br label %7
29: ; preds = %7
%30 = load i32, i32* %6
ret i32 %30
}

LLVM IR (-O2):
define i32 @coincide(i8* nocapture %0, i8* nocapture %1) {
%3 = bitcast i8* %0 to <4 x i8>*
%4 = load <4 x i8>, <4 x i8>* %3
%5 = bitcast i8* %1 to <4 x i8>*
%6 = load <4 x i8>, <4 x i8>* %5
%7 = icmp ne <4 x i8> %4, %6
%8 = getelementptr inbounds i8, i8* %0, i64 4
%9 = bitcast i8* %8 to <4 x i8>*
%10 = load <4 x i8>, <4 x i8>* %9
%11 = getelementptr inbounds i8, i8* %1, i64 4
%12 = bitcast i8* %11 to <4 x i8>*
%13 = load <4 x i8>, <4 x i8>* %12
%14 = icmp ne <4 x i8> %10, %13
%15 = getelementptr inbounds i8, i8* %0, i64 8
%16 = bitcast i8* %15 to <4 x i8>*
%17 = load <4 x i8>, <4 x i8>* %16
%18 = getelementptr inbounds i8, i8* %1, i64 8
%19 = bitcast i8* %18 to <4 x i8>*
%20 = load <4 x i8>, <4 x i8>* %19
%21 = icmp ne <4 x i8> %17, %20
%22 = getelementptr inbounds i8, i8* %0, i64 12
%23 = bitcast i8* %22 to <4 x i8>*
%24 = load <4 x i8>, <4 x i8>* %23
%25 = getelementptr inbounds i8, i8* %1, i64 12
%26 = bitcast i8* %25 to <4 x i8>*
%27 = load <4 x i8>, <4 x i8>* %26
%28 = icmp ne <4 x i8> %24, %27
%29 = getelementptr inbounds i8, i8* %0, i64 16
%30 = bitcast i8* %29 to <4 x i8>*
%31 = load <4 x i8>, <4 x i8>* %30
%32 = getelementptr inbounds i8, i8* %1, i64 16
%33 = bitcast i8* %32 to <4 x i8>*
%34 = load <4 x i8>, <4 x i8>* %33
%35 = icmp ne <4 x i8> %31, %34
%36 = getelementptr inbounds i8, i8* %0, i64 20
%37 = bitcast i8* %36 to <4 x i8>*
%38 = load <4 x i8>, <4 x i8>* %37
%39 = getelementptr inbounds i8, i8* %1, i64 20
%40 = bitcast i8* %39 to <4 x i8>*
%41 = load <4 x i8>, <4 x i8>* %40
%42 = icmp ne <4 x i8> %38, %41
%43 = getelementptr inbounds i8, i8* %0, i64 24
%44 = bitcast i8* %43 to <4 x i8>*
%45 = load <4 x i8>, <4 x i8>* %44
%46 = getelementptr inbounds i8, i8* %1, i64 24
%47 = bitcast i8* %46 to <4 x i8>*
%48 = load <4 x i8>, <4 x i8>* %47
%49 = icmp ne <4 x i8> %45, %48
%50 = getelementptr inbounds i8, i8* %0, i64 28
%51 = bitcast i8* %50 to <4 x i8>*
%52 = load <4 x i8>, <4 x i8>* %51
%53 = getelementptr inbounds i8, i8* %1, i64 28
%54 = bitcast i8* %53 to <4 x i8>*
%55 = load <4 x i8>, <4 x i8>* %54
%56 = icmp ne <4 x i8> %52, %55
%57 = getelementptr inbounds i8, i8* %0, i64 32
%58 = bitcast i8* %57 to <4 x i8>*
%59 = load <4 x i8>, <4 x i8>* %58
%60 = getelementptr inbounds i8, i8* %1, i64 32
%61 = bitcast i8* %60 to <4 x i8>*
%62 = load <4 x i8>, <4 x i8>* %61
%63 = icmp ne <4 x i8> %59, %62
%64 = getelementptr inbounds i8, i8* %0, i64 36
%65 = bitcast i8* %64 to <4 x i8>*
%66 = load <4 x i8>, <4 x i8>* %65
%67 = getelementptr inbounds i8, i8* %1, i64 36
%68 = bitcast i8* %67 to <4 x i8>*
%69 = load <4 x i8>, <4 x i8>* %68
%70 = icmp ne <4 x i8> %66, %69
%71 = getelementptr inbounds i8, i8* %0, i64 40
%72 = bitcast i8* %71 to <4 x i8>*
%73 = load <4 x i8>, <4 x i8>* %72
%74 = getelementptr inbounds i8, i8* %1, i64 40
%75 = bitcast i8* %74 to <4 x i8>*
%76 = load <4 x i8>, <4 x i8>* %75
%77 = icmp ne <4 x i8> %73, %76
%78 = getelementptr inbounds i8, i8* %0, i64 44
%79 = bitcast i8* %78 to <4 x i8>*
%80 = load <4 x i8>, <4 x i8>* %79
%81 = getelementptr inbounds i8, i8* %1, i64 44
%82 = bitcast i8* %81 to <4 x i8>*
%83 = load <4 x i8>, <4 x i8>* %82
%84 = icmp ne <4 x i8> %80, %83
%85 = getelementptr inbounds i8, i8* %0, i64 48
%86 = bitcast i8* %85 to <4 x i8>*
%87 = load <4 x i8>, <4 x i8>* %86
%88 = getelementptr inbounds i8, i8* %1, i64 48
%89 = bitcast i8* %88 to <4 x i8>*
%90 = load <4 x i8>, <4 x i8>* %89
%91 = icmp ne <4 x i8> %87, %90
%92 = getelementptr inbounds i8, i8* %0, i64 52
%93 = bitcast i8* %92 to <4 x i8>*
%94 = load <4 x i8>, <4 x i8>* %93
%95 = getelementptr inbounds i8, i8* %1, i64 52
%96 = bitcast i8* %95 to <4 x i8>*
%97 = load <4 x i8>, <4 x i8>* %96
%98 = icmp ne <4 x i8> %94, %97
%99 = getelementptr inbounds i8, i8* %0, i64 56
%100 = bitcast i8* %99 to <4 x i8>*
%101 = load <4 x i8>, <4 x i8>* %100
%102 = getelementptr inbounds i8, i8* %1, i64 56
%103 = bitcast i8* %102 to <4 x i8>*
%104 = load <4 x i8>, <4 x i8>* %103
%105 = icmp ne <4 x i8> %101, %104
%106 = getelementptr inbounds i8, i8* %0, i64 60
%107 = bitcast i8* %106 to <4 x i8>*
%108 = load <4 x i8>, <4 x i8>* %107
%109 = getelementptr inbounds i8, i8* %1, i64 60
%110 = bitcast i8* %109 to <4 x i8>*
%111 = load <4 x i8>, <4 x i8>* %110
%112 = icmp ne <4 x i8> %108, %111
%113 = select <4 x i1> %112, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %105
%114 = select <4 x i1> %113, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %98
%115 = select <4 x i1> %114, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %91
%116 = select <4 x i1> %115, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %84
%117 = select <4 x i1> %116, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %77
%118 = select <4 x i1> %117, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %70
%119 = select <4 x i1> %118, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %63
%120 = select <4 x i1> %119, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %56
%121 = select <4 x i1> %120, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %49
%122 = select <4 x i1> %121, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %42
%123 = select <4 x i1> %122, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %35
%124 = select <4 x i1> %123, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %28
%125 = select <4 x i1> %124, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %21
%126 = select <4 x i1> %125, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %14
%127 = select <4 x i1> %126, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %7
%128 = bitcast <4 x i1> %127 to i4
%129 = icmp eq i4 %128, 0
%130 = zext i1 %129 to i32
ret i32 %130
}