void _memcpy40(void *d, void *s, unsigned long c) {
  unsigned long *dd = d, *ss = s;
  int i;
  for (i = 0; i < 5; i++) {
    dd[0] = ss[0];
    dd[1] = ss[1];
    dd[2] = ss[2];
    dd[3] = ss[3];
    dd[4] = ss[4];
    dd[5] = ss[5];
    dd[6] = ss[6];
    dd[7] = ss[7];
    dd += 8;
    ss += 8;
  }
}


x86 assembly (clang, -O0):
<_memcpy40>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x5,-0x2c(%rbp)
jge    11d5 <_memcpy40+0xd5>
mov    -0x28(%rbp),%rax
mov    (%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x10(%rax)
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x18(%rax)
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x28(%rax)
mov    -0x28(%rbp),%rax
mov    0x30(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x30(%rax)
mov    -0x28(%rbp),%rax
mov    0x38(%rax),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,0x38(%rax)
mov    -0x20(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1127 <_memcpy40+0x27>
pop    %rbp
ret

x86 assembly (clang, -O2):
<_memcpy40>:
mov    (%rsi),%rax
mov    %rax,(%rdi)
mov    0x8(%rsi),%rax
mov    %rax,0x8(%rdi)
mov    0x10(%rsi),%rax
mov    %rax,0x10(%rdi)
mov    0x18(%rsi),%rax
mov    %rax,0x18(%rdi)
mov    0x20(%rsi),%rax
mov    %rax,0x20(%rdi)
mov    0x28(%rsi),%rax
mov    %rax,0x28(%rdi)
mov    0x30(%rsi),%rax
mov    %rax,0x30(%rdi)
mov    0x38(%rsi),%rax
mov    %rax,0x38(%rdi)
mov    0x40(%rsi),%rax
mov    %rax,0x40(%rdi)
mov    0x48(%rsi),%rax
mov    %rax,0x48(%rdi)
mov    0x50(%rsi),%rax
mov    %rax,0x50(%rdi)
mov    0x58(%rsi),%rax
mov    %rax,0x58(%rdi)
mov    0x60(%rsi),%rax
mov    %rax,0x60(%rdi)
mov    0x68(%rsi),%rax
mov    %rax,0x68(%rdi)
mov    0x70(%rsi),%rax
mov    %rax,0x70(%rdi)
mov    0x78(%rsi),%rax
mov    %rax,0x78(%rdi)
mov    0x80(%rsi),%rax
mov    %rax,0x80(%rdi)
mov    0x88(%rsi),%rax
mov    %rax,0x88(%rdi)
mov    0x90(%rsi),%rax
mov    %rax,0x90(%rdi)
mov    0x98(%rsi),%rax
mov    %rax,0x98(%rdi)
mov    0xa0(%rsi),%rax
mov    %rax,0xa0(%rdi)
mov    0xa8(%rsi),%rax
mov    %rax,0xa8(%rdi)
mov    0xb0(%rsi),%rax
mov    %rax,0xb0(%rdi)
mov    0xb8(%rsi),%rax
mov    %rax,0xb8(%rdi)
mov    0xc0(%rsi),%rax
mov    %rax,0xc0(%rdi)
mov    0xc8(%rsi),%rax
mov    %rax,0xc8(%rdi)
mov    0xd0(%rsi),%rax
mov    %rax,0xd0(%rdi)
mov    0xd8(%rsi),%rax
mov    %rax,0xd8(%rdi)
mov    0xe0(%rsi),%rax
mov    %rax,0xe0(%rdi)
mov    0xe8(%rsi),%rax
mov    %rax,0xe8(%rdi)
mov    0xf0(%rsi),%rax
mov    %rax,0xf0(%rdi)
mov    0xf8(%rsi),%rax
mov    %rax,0xf8(%rdi)
mov    0x100(%rsi),%rax
mov    %rax,0x100(%rdi)
mov    0x108(%rsi),%rax
mov    %rax,0x108(%rdi)
mov    0x110(%rsi),%rax
mov    %rax,0x110(%rdi)
mov    0x118(%rsi),%rax
mov    %rax,0x118(%rdi)
mov    0x120(%rsi),%rax
mov    %rax,0x120(%rdi)
mov    0x128(%rsi),%rax
mov    %rax,0x128(%rdi)
mov    0x130(%rsi),%rax
mov    %rax,0x130(%rdi)
mov    0x138(%rsi),%rax
mov    %rax,0x138(%rdi)
ret

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

LLVM IR (-O2):
define void @_memcpy40(i8* nocapture writeonly %0, i8* nocapture %1, i64 %2) {
%4 = bitcast i8* %0 to i64*
%5 = bitcast i8* %1 to i64*
%6 = load i64, i64* %5
store i64 %6, i64* %4
%7 = getelementptr inbounds i8, i8* %1, i64 8
%8 = bitcast i8* %7 to i64*
%9 = load i64, i64* %8
%10 = getelementptr inbounds i8, i8* %0, i64 8
%11 = bitcast i8* %10 to i64*
store i64 %9, i64* %11
%12 = getelementptr inbounds i8, i8* %1, i64 16
%13 = bitcast i8* %12 to i64*
%14 = load i64, i64* %13
%15 = getelementptr inbounds i8, i8* %0, i64 16
%16 = bitcast i8* %15 to i64*
store i64 %14, i64* %16
%17 = getelementptr inbounds i8, i8* %1, i64 24
%18 = bitcast i8* %17 to i64*
%19 = load i64, i64* %18
%20 = getelementptr inbounds i8, i8* %0, i64 24
%21 = bitcast i8* %20 to i64*
store i64 %19, i64* %21
%22 = getelementptr inbounds i8, i8* %1, i64 32
%23 = bitcast i8* %22 to i64*
%24 = load i64, i64* %23
%25 = getelementptr inbounds i8, i8* %0, i64 32
%26 = bitcast i8* %25 to i64*
store i64 %24, i64* %26
%27 = getelementptr inbounds i8, i8* %1, i64 40
%28 = bitcast i8* %27 to i64*
%29 = load i64, i64* %28
%30 = getelementptr inbounds i8, i8* %0, i64 40
%31 = bitcast i8* %30 to i64*
store i64 %29, i64* %31
%32 = getelementptr inbounds i8, i8* %1, i64 48
%33 = bitcast i8* %32 to i64*
%34 = load i64, i64* %33
%35 = getelementptr inbounds i8, i8* %0, i64 48
%36 = bitcast i8* %35 to i64*
store i64 %34, i64* %36
%37 = getelementptr inbounds i8, i8* %1, i64 56
%38 = bitcast i8* %37 to i64*
%39 = load i64, i64* %38
%40 = getelementptr inbounds i8, i8* %0, i64 56
%41 = bitcast i8* %40 to i64*
store i64 %39, i64* %41
%42 = getelementptr inbounds i8, i8* %0, i64 64
%43 = bitcast i8* %42 to i64*
%44 = getelementptr inbounds i8, i8* %1, i64 64
%45 = bitcast i8* %44 to i64*
%46 = load i64, i64* %45
store i64 %46, i64* %43
%47 = getelementptr inbounds i8, i8* %1, i64 72
%48 = bitcast i8* %47 to i64*
%49 = load i64, i64* %48
%50 = getelementptr inbounds i8, i8* %0, i64 72
%51 = bitcast i8* %50 to i64*
store i64 %49, i64* %51
%52 = getelementptr inbounds i8, i8* %1, i64 80
%53 = bitcast i8* %52 to i64*
%54 = load i64, i64* %53
%55 = getelementptr inbounds i8, i8* %0, i64 80
%56 = bitcast i8* %55 to i64*
store i64 %54, i64* %56
%57 = getelementptr inbounds i8, i8* %1, i64 88
%58 = bitcast i8* %57 to i64*
%59 = load i64, i64* %58
%60 = getelementptr inbounds i8, i8* %0, i64 88
%61 = bitcast i8* %60 to i64*
store i64 %59, i64* %61
%62 = getelementptr inbounds i8, i8* %1, i64 96
%63 = bitcast i8* %62 to i64*
%64 = load i64, i64* %63
%65 = getelementptr inbounds i8, i8* %0, i64 96
%66 = bitcast i8* %65 to i64*
store i64 %64, i64* %66
%67 = getelementptr inbounds i8, i8* %1, i64 104
%68 = bitcast i8* %67 to i64*
%69 = load i64, i64* %68
%70 = getelementptr inbounds i8, i8* %0, i64 104
%71 = bitcast i8* %70 to i64*
store i64 %69, i64* %71
%72 = getelementptr inbounds i8, i8* %1, i64 112
%73 = bitcast i8* %72 to i64*
%74 = load i64, i64* %73
%75 = getelementptr inbounds i8, i8* %0, i64 112
%76 = bitcast i8* %75 to i64*
store i64 %74, i64* %76
%77 = getelementptr inbounds i8, i8* %1, i64 120
%78 = bitcast i8* %77 to i64*
%79 = load i64, i64* %78
%80 = getelementptr inbounds i8, i8* %0, i64 120
%81 = bitcast i8* %80 to i64*
store i64 %79, i64* %81
%82 = getelementptr inbounds i8, i8* %0, i64 128
%83 = bitcast i8* %82 to i64*
%84 = getelementptr inbounds i8, i8* %1, i64 128
%85 = bitcast i8* %84 to i64*
%86 = load i64, i64* %85
store i64 %86, i64* %83
%87 = getelementptr inbounds i8, i8* %1, i64 136
%88 = bitcast i8* %87 to i64*
%89 = load i64, i64* %88
%90 = getelementptr inbounds i8, i8* %0, i64 136
%91 = bitcast i8* %90 to i64*
store i64 %89, i64* %91
%92 = getelementptr inbounds i8, i8* %1, i64 144
%93 = bitcast i8* %92 to i64*
%94 = load i64, i64* %93
%95 = getelementptr inbounds i8, i8* %0, i64 144
%96 = bitcast i8* %95 to i64*
store i64 %94, i64* %96
%97 = getelementptr inbounds i8, i8* %1, i64 152
%98 = bitcast i8* %97 to i64*
%99 = load i64, i64* %98
%100 = getelementptr inbounds i8, i8* %0, i64 152
%101 = bitcast i8* %100 to i64*
store i64 %99, i64* %101
%102 = getelementptr inbounds i8, i8* %1, i64 160
%103 = bitcast i8* %102 to i64*
%104 = load i64, i64* %103
%105 = getelementptr inbounds i8, i8* %0, i64 160
%106 = bitcast i8* %105 to i64*
store i64 %104, i64* %106
%107 = getelementptr inbounds i8, i8* %1, i64 168
%108 = bitcast i8* %107 to i64*
%109 = load i64, i64* %108
%110 = getelementptr inbounds i8, i8* %0, i64 168
%111 = bitcast i8* %110 to i64*
store i64 %109, i64* %111
%112 = getelementptr inbounds i8, i8* %1, i64 176
%113 = bitcast i8* %112 to i64*
%114 = load i64, i64* %113
%115 = getelementptr inbounds i8, i8* %0, i64 176
%116 = bitcast i8* %115 to i64*
store i64 %114, i64* %116
%117 = getelementptr inbounds i8, i8* %1, i64 184
%118 = bitcast i8* %117 to i64*
%119 = load i64, i64* %118
%120 = getelementptr inbounds i8, i8* %0, i64 184
%121 = bitcast i8* %120 to i64*
store i64 %119, i64* %121
%122 = getelementptr inbounds i8, i8* %0, i64 192
%123 = bitcast i8* %122 to i64*
%124 = getelementptr inbounds i8, i8* %1, i64 192
%125 = bitcast i8* %124 to i64*
%126 = load i64, i64* %125
store i64 %126, i64* %123
%127 = getelementptr inbounds i8, i8* %1, i64 200
%128 = bitcast i8* %127 to i64*
%129 = load i64, i64* %128
%130 = getelementptr inbounds i8, i8* %0, i64 200
%131 = bitcast i8* %130 to i64*
store i64 %129, i64* %131
%132 = getelementptr inbounds i8, i8* %1, i64 208
%133 = bitcast i8* %132 to i64*
%134 = load i64, i64* %133
%135 = getelementptr inbounds i8, i8* %0, i64 208
%136 = bitcast i8* %135 to i64*
store i64 %134, i64* %136
%137 = getelementptr inbounds i8, i8* %1, i64 216
%138 = bitcast i8* %137 to i64*
%139 = load i64, i64* %138
%140 = getelementptr inbounds i8, i8* %0, i64 216
%141 = bitcast i8* %140 to i64*
store i64 %139, i64* %141
%142 = getelementptr inbounds i8, i8* %1, i64 224
%143 = bitcast i8* %142 to i64*
%144 = load i64, i64* %143
%145 = getelementptr inbounds i8, i8* %0, i64 224
%146 = bitcast i8* %145 to i64*
store i64 %144, i64* %146
%147 = getelementptr inbounds i8, i8* %1, i64 232
%148 = bitcast i8* %147 to i64*
%149 = load i64, i64* %148
%150 = getelementptr inbounds i8, i8* %0, i64 232
%151 = bitcast i8* %150 to i64*
store i64 %149, i64* %151
%152 = getelementptr inbounds i8, i8* %1, i64 240
%153 = bitcast i8* %152 to i64*
%154 = load i64, i64* %153
%155 = getelementptr inbounds i8, i8* %0, i64 240
%156 = bitcast i8* %155 to i64*
store i64 %154, i64* %156
%157 = getelementptr inbounds i8, i8* %1, i64 248
%158 = bitcast i8* %157 to i64*
%159 = load i64, i64* %158
%160 = getelementptr inbounds i8, i8* %0, i64 248
%161 = bitcast i8* %160 to i64*
store i64 %159, i64* %161
%162 = getelementptr inbounds i8, i8* %0, i64 256
%163 = bitcast i8* %162 to i64*
%164 = getelementptr inbounds i8, i8* %1, i64 256
%165 = bitcast i8* %164 to i64*
%166 = load i64, i64* %165
store i64 %166, i64* %163
%167 = getelementptr inbounds i8, i8* %1, i64 264
%168 = bitcast i8* %167 to i64*
%169 = load i64, i64* %168
%170 = getelementptr inbounds i8, i8* %0, i64 264
%171 = bitcast i8* %170 to i64*
store i64 %169, i64* %171
%172 = getelementptr inbounds i8, i8* %1, i64 272
%173 = bitcast i8* %172 to i64*
%174 = load i64, i64* %173
%175 = getelementptr inbounds i8, i8* %0, i64 272
%176 = bitcast i8* %175 to i64*
store i64 %174, i64* %176
%177 = getelementptr inbounds i8, i8* %1, i64 280
%178 = bitcast i8* %177 to i64*
%179 = load i64, i64* %178
%180 = getelementptr inbounds i8, i8* %0, i64 280
%181 = bitcast i8* %180 to i64*
store i64 %179, i64* %181
%182 = getelementptr inbounds i8, i8* %1, i64 288
%183 = bitcast i8* %182 to i64*
%184 = load i64, i64* %183
%185 = getelementptr inbounds i8, i8* %0, i64 288
%186 = bitcast i8* %185 to i64*
store i64 %184, i64* %186
%187 = getelementptr inbounds i8, i8* %1, i64 296
%188 = bitcast i8* %187 to i64*
%189 = load i64, i64* %188
%190 = getelementptr inbounds i8, i8* %0, i64 296
%191 = bitcast i8* %190 to i64*
store i64 %189, i64* %191
%192 = getelementptr inbounds i8, i8* %1, i64 304
%193 = bitcast i8* %192 to i64*
%194 = load i64, i64* %193
%195 = getelementptr inbounds i8, i8* %0, i64 304
%196 = bitcast i8* %195 to i64*
store i64 %194, i64* %196
%197 = getelementptr inbounds i8, i8* %1, i64 312
%198 = bitcast i8* %197 to i64*
%199 = load i64, i64* %198
%200 = getelementptr inbounds i8, i8* %0, i64 312
%201 = bitcast i8* %200 to i64*
store i64 %199, i64* %201
ret void
}