void cmsfsdmp(char *p, int l) {
  int i;
  for (i = 0; i < l; i += 32) {
    (void)printf("%02X%02X%02X%02X ", p[i] & 0xFF, p[i + 1] & 0xFF,
                 p[i + 2] & 0xFF, p[i + 3] & 0xFF);
    (void)printf("%02X%02X%02X%02X ", p[i + 4] & 0xFF, p[i + 5] & 0xFF,
                 p[i + 6] & 0xFF, p[i + 7] & 0xFF);
    (void)printf("%02X%02X%02X%02X ", p[i + 8] & 0xFF, p[i + 9] & 0xFF,
                 p[i + 10] & 0xFF, p[i + 11] & 0xFF);
    (void)printf("%02X%02X%02X%02X  ", p[i + 12] & 0xFF, p[i + 13] & 0xFF,
                 p[i + 14] & 0xFF, p[i + 15] & 0xFF);
    (void)printf("%02X%02X%02X%02X ", p[i + 16] & 0xFF, p[i + 17] & 0xFF,
                 p[i + 18] & 0xFF, p[i + 19] & 0xFF);
    (void)printf("%02X%02X%02X%02X ", p[i + 20] & 0xFF, p[i + 21] & 0xFF,
                 p[i + 22] & 0xFF, p[i + 23] & 0xFF);
    (void)printf("%02X%02X%02X%02X ", p[i + 24] & 0xFF, p[i + 27] & 0xFF,
                 p[i + 26] & 0xFF, p[i + 27] & 0xFF);
    (void)printf("%02X%02X%02X%02X\n", p[i + 28] & 0xFF, p[i + 29] & 0xFF,
                 p[i + 30] & 0xFF, p[i + 31] & 0xFF);
  }
}


x86 assembly (clang, -O0):
<cmsfsdmp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    149b <cmsfsdmp+0x38b>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0x3,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xe6e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0x7,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xe02(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x9,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0xa,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0xb,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xd96(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0xc,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0xd,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0xe,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0xf,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xd3c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x10,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x11,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x12,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0x13,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xcbe(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x14,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x15,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x16,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0x17,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xc52(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x18,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1b,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1a,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0x1b,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xbe6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1c,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
and    $0xff,%esi
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1d,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
and    $0xff,%edx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1e,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
and    $0xff,%ecx
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%edi
add    $0x1f,%edi
movslq %edi,%rdi
movsbl (%rax,%rdi,1),%r8d
and    $0xff,%r8d
lea    0xb9f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x10(%rbp)
jmp    1126 <cmsfsdmp+0x16>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cmsfsdmp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %esi,%esi
jle    1251 <cmsfsdmp+0x141>
mov    %esi,%r14d
mov    %rdi,%rbx
add    $0x1f,%rbx
lea    0xecc(%rip),%r13
lea    0xed7(%rip),%r15
lea    0xee3(%rip),%r12
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl -0x1f(%rbx,%rbp,1),%esi
movzbl -0x1e(%rbx,%rbp,1),%edx
movzbl -0x1d(%rbx,%rbp,1),%ecx
movzbl -0x1c(%rbx,%rbp,1),%r8d
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0x1b(%rbx,%rbp,1),%esi
movzbl -0x1a(%rbx,%rbp,1),%edx
movzbl -0x19(%rbx,%rbp,1),%ecx
movzbl -0x18(%rbx,%rbp,1),%r8d
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0x17(%rbx,%rbp,1),%esi
movzbl -0x16(%rbx,%rbp,1),%edx
movzbl -0x15(%rbx,%rbp,1),%ecx
movzbl -0x14(%rbx,%rbp,1),%r8d
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0x13(%rbx,%rbp,1),%esi
movzbl -0x12(%rbx,%rbp,1),%edx
movzbl -0x11(%rbx,%rbp,1),%ecx
movzbl -0x10(%rbx,%rbp,1),%r8d
mov    %r15,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0xf(%rbx,%rbp,1),%esi
movzbl -0xe(%rbx,%rbp,1),%edx
movzbl -0xd(%rbx,%rbp,1),%ecx
movzbl -0xc(%rbx,%rbp,1),%r8d
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0xb(%rbx,%rbp,1),%esi
movzbl -0xa(%rbx,%rbp,1),%edx
movzbl -0x9(%rbx,%rbp,1),%ecx
movzbl -0x8(%rbx,%rbp,1),%r8d
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0x7(%rbx,%rbp,1),%esi
movzbl -0x4(%rbx,%rbp,1),%edx
movzbl -0x5(%rbx,%rbp,1),%ecx
mov    %r13,%rdi
mov    %edx,%r8d
xor    %eax,%eax
call   1030 <printf@plt>
movzbl -0x3(%rbx,%rbp,1),%esi
movzbl -0x2(%rbx,%rbp,1),%edx
movzbl -0x1(%rbx,%rbp,1),%ecx
movzbl (%rbx,%rbp,1),%r8d
mov    %r12,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
add    $0x20,%rbp
cmp    %r14d,%ebp
jl     1150 <cmsfsdmp+0x40>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [18 x i8] c"%02X%02X%02X%02X \00"
@.str.1 = [19 x i8] c"%02X%02X%02X%02X \00"
@.str.2 = [18 x i8] c"%02X%02X%02X%02X\0A\00"
define void @cmsfsdmp(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
store i8* %0, i8** %3
store i32 %1, i32* %4
store i32 0, i32* %5
br label %6
6: ; preds = %274, %2
%7 = load i32, i32* %5
%8 = load i32, i32* %4
%9 = icmp slt i32 %7, %8
br i1 %9, label %10, label %277
10: ; preds = %6
%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 = sext i8 %15 to i32
%17 = and i32 %16, 255
%18 = load i8*, i8** %3
%19 = load i32, i32* %5
%20 = add nsw i32 %19, 1
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %18, i64 %21
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
%25 = and i32 %24, 255
%26 = load i8*, i8** %3
%27 = load i32, i32* %5
%28 = add nsw i32 %27, 2
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %26, i64 %29
%31 = load i8, i8* %30
%32 = sext i8 %31 to i32
%33 = and i32 %32, 255
%34 = load i8*, i8** %3
%35 = load i32, i32* %5
%36 = add nsw i32 %35, 3
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %34, i64 %37
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = and i32 %40, 255
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %17, i32 %25, i32 %33, i32 %41)
%43 = load i8*, i8** %3
%44 = load i32, i32* %5
%45 = add nsw i32 %44, 4
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i8, i8* %43, i64 %46
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = and i32 %49, 255
%51 = load i8*, i8** %3
%52 = load i32, i32* %5
%53 = add nsw i32 %52, 5
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %51, i64 %54
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = and i32 %57, 255
%59 = load i8*, i8** %3
%60 = load i32, i32* %5
%61 = add nsw i32 %60, 6
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %59, i64 %62
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = and i32 %65, 255
%67 = load i8*, i8** %3
%68 = load i32, i32* %5
%69 = add nsw i32 %68, 7
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %67, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = and i32 %73, 255
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %50, i32 %58, i32 %66, i32 %74)
%76 = load i8*, i8** %3
%77 = load i32, i32* %5
%78 = add nsw i32 %77, 8
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i8, i8* %76, i64 %79
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = and i32 %82, 255
%84 = load i8*, i8** %3
%85 = load i32, i32* %5
%86 = add nsw i32 %85, 9
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i8, i8* %84, i64 %87
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = and i32 %90, 255
%92 = load i8*, i8** %3
%93 = load i32, i32* %5
%94 = add nsw i32 %93, 10
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i8, i8* %92, i64 %95
%97 = load i8, i8* %96
%98 = sext i8 %97 to i32
%99 = and i32 %98, 255
%100 = load i8*, i8** %3
%101 = load i32, i32* %5
%102 = add nsw i32 %101, 11
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %100, i64 %103
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = and i32 %106, 255
%108 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %83, i32 %91, i32 %99, i32 %107)
%109 = load i8*, i8** %3
%110 = load i32, i32* %5
%111 = add nsw i32 %110, 12
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i8, i8* %109, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = and i32 %115, 255
%117 = load i8*, i8** %3
%118 = load i32, i32* %5
%119 = add nsw i32 %118, 13
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %117, i64 %120
%122 = load i8, i8* %121
%123 = sext i8 %122 to i32
%124 = and i32 %123, 255
%125 = load i8*, i8** %3
%126 = load i32, i32* %5
%127 = add nsw i32 %126, 14
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i8, i8* %125, i64 %128
%130 = load i8, i8* %129
%131 = sext i8 %130 to i32
%132 = and i32 %131, 255
%133 = load i8*, i8** %3
%134 = load i32, i32* %5
%135 = add nsw i32 %134, 15
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds i8, i8* %133, i64 %136
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
%140 = and i32 %139, 255
%141 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.1, i64 0, i64 0), i32 %116, i32 %124, i32 %132, i32 %140)
%142 = load i8*, i8** %3
%143 = load i32, i32* %5
%144 = add nsw i32 %143, 16
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i8, i8* %142, i64 %145
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
%149 = and i32 %148, 255
%150 = load i8*, i8** %3
%151 = load i32, i32* %5
%152 = add nsw i32 %151, 17
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds i8, i8* %150, i64 %153
%155 = load i8, i8* %154
%156 = sext i8 %155 to i32
%157 = and i32 %156, 255
%158 = load i8*, i8** %3
%159 = load i32, i32* %5
%160 = add nsw i32 %159, 18
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds i8, i8* %158, i64 %161
%163 = load i8, i8* %162
%164 = sext i8 %163 to i32
%165 = and i32 %164, 255
%166 = load i8*, i8** %3
%167 = load i32, i32* %5
%168 = add nsw i32 %167, 19
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %166, i64 %169
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = and i32 %172, 255
%174 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %149, i32 %157, i32 %165, i32 %173)
%175 = load i8*, i8** %3
%176 = load i32, i32* %5
%177 = add nsw i32 %176, 20
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i8, i8* %175, i64 %178
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = and i32 %181, 255
%183 = load i8*, i8** %3
%184 = load i32, i32* %5
%185 = add nsw i32 %184, 21
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds i8, i8* %183, i64 %186
%188 = load i8, i8* %187
%189 = sext i8 %188 to i32
%190 = and i32 %189, 255
%191 = load i8*, i8** %3
%192 = load i32, i32* %5
%193 = add nsw i32 %192, 22
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i8, i8* %191, i64 %194
%196 = load i8, i8* %195
%197 = sext i8 %196 to i32
%198 = and i32 %197, 255
%199 = load i8*, i8** %3
%200 = load i32, i32* %5
%201 = add nsw i32 %200, 23
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds i8, i8* %199, i64 %202
%204 = load i8, i8* %203
%205 = sext i8 %204 to i32
%206 = and i32 %205, 255
%207 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %182, i32 %190, i32 %198, i32 %206)
%208 = load i8*, i8** %3
%209 = load i32, i32* %5
%210 = add nsw i32 %209, 24
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds i8, i8* %208, i64 %211
%213 = load i8, i8* %212
%214 = sext i8 %213 to i32
%215 = and i32 %214, 255
%216 = load i8*, i8** %3
%217 = load i32, i32* %5
%218 = add nsw i32 %217, 27
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds i8, i8* %216, i64 %219
%221 = load i8, i8* %220
%222 = sext i8 %221 to i32
%223 = and i32 %222, 255
%224 = load i8*, i8** %3
%225 = load i32, i32* %5
%226 = add nsw i32 %225, 26
%227 = sext i32 %226 to i64
%228 = getelementptr inbounds i8, i8* %224, i64 %227
%229 = load i8, i8* %228
%230 = sext i8 %229 to i32
%231 = and i32 %230, 255
%232 = load i8*, i8** %3
%233 = load i32, i32* %5
%234 = add nsw i32 %233, 27
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds i8, i8* %232, i64 %235
%237 = load i8, i8* %236
%238 = sext i8 %237 to i32
%239 = and i32 %238, 255
%240 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %215, i32 %223, i32 %231, i32 %239)
%241 = load i8*, i8** %3
%242 = load i32, i32* %5
%243 = add nsw i32 %242, 28
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i8, i8* %241, i64 %244
%246 = load i8, i8* %245
%247 = sext i8 %246 to i32
%248 = and i32 %247, 255
%249 = load i8*, i8** %3
%250 = load i32, i32* %5
%251 = add nsw i32 %250, 29
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds i8, i8* %249, i64 %252
%254 = load i8, i8* %253
%255 = sext i8 %254 to i32
%256 = and i32 %255, 255
%257 = load i8*, i8** %3
%258 = load i32, i32* %5
%259 = add nsw i32 %258, 30
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds i8, i8* %257, i64 %260
%262 = load i8, i8* %261
%263 = sext i8 %262 to i32
%264 = and i32 %263, 255
%265 = load i8*, i8** %3
%266 = load i32, i32* %5
%267 = add nsw i32 %266, 31
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds i8, i8* %265, i64 %268
%270 = load i8, i8* %269
%271 = sext i8 %270 to i32
%272 = and i32 %271, 255
%273 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), i32 %248, i32 %256, i32 %264, i32 %272)
br label %274
274: ; preds = %10
%275 = load i32, i32* %5
%276 = add nsw i32 %275, 32
store i32 %276, i32* %5
br label %6
277: ; preds = %6
ret void
}

LLVM IR (-O2):
@.str = [18 x i8] c"%02X%02X%02X%02X \00"
@.str.1 = [19 x i8] c"%02X%02X%02X%02X \00"
@.str.2 = [18 x i8] c"%02X%02X%02X%02X\0A\00"
define void @cmsfsdmp(i8* %0, i32 %1) {
%3 = icmp sgt i32 %1, 0
br i1 %3, label %4, label %140
4: ; preds = %2, %4
%5 = phi i64 [ %137, %4 ], [ 0, %2 ]
%6 = getelementptr inbounds i8, i8* %0, i64 %5
%7 = load i8, i8* %6
%8 = zext i8 %7 to i32
%9 = or i64 %5, 1
%10 = getelementptr inbounds i8, i8* %0, i64 %9
%11 = load i8, i8* %10
%12 = zext i8 %11 to i32
%13 = or i64 %5, 2
%14 = getelementptr inbounds i8, i8* %0, i64 %13
%15 = load i8, i8* %14
%16 = zext i8 %15 to i32
%17 = or i64 %5, 3
%18 = getelementptr inbounds i8, i8* %0, i64 %17
%19 = load i8, i8* %18
%20 = zext i8 %19 to i32
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %8, i32 %12, i32 %16, i32 %20)
%22 = or i64 %5, 4
%23 = getelementptr inbounds i8, i8* %0, i64 %22
%24 = load i8, i8* %23
%25 = zext i8 %24 to i32
%26 = or i64 %5, 5
%27 = getelementptr inbounds i8, i8* %0, i64 %26
%28 = load i8, i8* %27
%29 = zext i8 %28 to i32
%30 = or i64 %5, 6
%31 = getelementptr inbounds i8, i8* %0, i64 %30
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
%34 = or i64 %5, 7
%35 = getelementptr inbounds i8, i8* %0, i64 %34
%36 = load i8, i8* %35
%37 = zext i8 %36 to i32
%38 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %25, i32 %29, i32 %33, i32 %37)
%39 = or i64 %5, 8
%40 = getelementptr inbounds i8, i8* %0, i64 %39
%41 = load i8, i8* %40
%42 = zext i8 %41 to i32
%43 = or i64 %5, 9
%44 = getelementptr inbounds i8, i8* %0, i64 %43
%45 = load i8, i8* %44
%46 = zext i8 %45 to i32
%47 = or i64 %5, 10
%48 = getelementptr inbounds i8, i8* %0, i64 %47
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = or i64 %5, 11
%52 = getelementptr inbounds i8, i8* %0, i64 %51
%53 = load i8, i8* %52
%54 = zext i8 %53 to i32
%55 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %42, i32 %46, i32 %50, i32 %54)
%56 = or i64 %5, 12
%57 = getelementptr inbounds i8, i8* %0, i64 %56
%58 = load i8, i8* %57
%59 = zext i8 %58 to i32
%60 = or i64 %5, 13
%61 = getelementptr inbounds i8, i8* %0, i64 %60
%62 = load i8, i8* %61
%63 = zext i8 %62 to i32
%64 = or i64 %5, 14
%65 = getelementptr inbounds i8, i8* %0, i64 %64
%66 = load i8, i8* %65
%67 = zext i8 %66 to i32
%68 = or i64 %5, 15
%69 = getelementptr inbounds i8, i8* %0, i64 %68
%70 = load i8, i8* %69
%71 = zext i8 %70 to i32
%72 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.1, i64 0, i64 0), i32 %59, i32 %63, i32 %67, i32 %71)
%73 = or i64 %5, 16
%74 = getelementptr inbounds i8, i8* %0, i64 %73
%75 = load i8, i8* %74
%76 = zext i8 %75 to i32
%77 = or i64 %5, 17
%78 = getelementptr inbounds i8, i8* %0, i64 %77
%79 = load i8, i8* %78
%80 = zext i8 %79 to i32
%81 = or i64 %5, 18
%82 = getelementptr inbounds i8, i8* %0, i64 %81
%83 = load i8, i8* %82
%84 = zext i8 %83 to i32
%85 = or i64 %5, 19
%86 = getelementptr inbounds i8, i8* %0, i64 %85
%87 = load i8, i8* %86
%88 = zext i8 %87 to i32
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %76, i32 %80, i32 %84, i32 %88)
%90 = or i64 %5, 20
%91 = getelementptr inbounds i8, i8* %0, i64 %90
%92 = load i8, i8* %91
%93 = zext i8 %92 to i32
%94 = or i64 %5, 21
%95 = getelementptr inbounds i8, i8* %0, i64 %94
%96 = load i8, i8* %95
%97 = zext i8 %96 to i32
%98 = or i64 %5, 22
%99 = getelementptr inbounds i8, i8* %0, i64 %98
%100 = load i8, i8* %99
%101 = zext i8 %100 to i32
%102 = or i64 %5, 23
%103 = getelementptr inbounds i8, i8* %0, i64 %102
%104 = load i8, i8* %103
%105 = zext i8 %104 to i32
%106 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %93, i32 %97, i32 %101, i32 %105)
%107 = or i64 %5, 24
%108 = getelementptr inbounds i8, i8* %0, i64 %107
%109 = load i8, i8* %108
%110 = zext i8 %109 to i32
%111 = or i64 %5, 27
%112 = getelementptr inbounds i8, i8* %0, i64 %111
%113 = load i8, i8* %112
%114 = zext i8 %113 to i32
%115 = or i64 %5, 26
%116 = getelementptr inbounds i8, i8* %0, i64 %115
%117 = load i8, i8* %116
%118 = zext i8 %117 to i32
%119 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i32 %110, i32 %114, i32 %118, i32 %114)
%120 = or i64 %5, 28
%121 = getelementptr inbounds i8, i8* %0, i64 %120
%122 = load i8, i8* %121
%123 = zext i8 %122 to i32
%124 = or i64 %5, 29
%125 = getelementptr inbounds i8, i8* %0, i64 %124
%126 = load i8, i8* %125
%127 = zext i8 %126 to i32
%128 = or i64 %5, 30
%129 = getelementptr inbounds i8, i8* %0, i64 %128
%130 = load i8, i8* %129
%131 = zext i8 %130 to i32
%132 = or i64 %5, 31
%133 = getelementptr inbounds i8, i8* %0, i64 %132
%134 = load i8, i8* %133
%135 = zext i8 %134 to i32
%136 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), i32 %123, i32 %127, i32 %131, i32 %135)
%137 = add nuw i64 %5, 32
%138 = trunc i64 %137 to i32
%139 = icmp slt i32 %138, %1
br i1 %139, label %4, label %140
140: ; preds = %4, %2
ret void
}