void f(char *out) {
  asm(""
      : "=@cca"(out[0]), "=@ccc"(out[1]), "=@cce"(out[2]), "=@ccg"(out[3]),
        "=@cco"(out[4]), "=@ccp"(out[5]), "=@ccs"(out[6]));
}


x86 assembly (clang, -O0):
<f>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdi,-0x30(%rbp)
mov    -0x30(%rbp),%r12
mov    -0x30(%rbp),%r14
mov    -0x30(%rbp),%r11
mov    -0x30(%rbp),%r9
mov    -0x30(%rbp),%rdi
mov    -0x30(%rbp),%rdx
mov    -0x30(%rbp),%rax
seta   %r13b
setb   %r15b
sete   %bl
setg   %r10b
seto   %r8b
setp   %sil
sets   %cl
mov    %r13b,(%r12)
mov    %r15b,0x1(%r14)
mov    %bl,0x2(%r11)
mov    %r10b,0x3(%r9)
mov    %r8b,0x4(%rdi)
mov    %sil,0x5(%rdx)
mov    %cl,0x6(%rax)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<f>:
seta   (%rdi)
setb   %al
sete   %cl
setg   %dl
seto   %sil
setp   %r8b
sets   %r9b
mov    %al,0x1(%rdi)
mov    %cl,0x2(%rdi)
mov    %dl,0x3(%rdi)
mov    %sil,0x4(%rdi)
mov    %r8b,0x5(%rdi)
mov    %r9b,0x6(%rdi)
ret

LLVM IR (-O0):
define void @f(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = getelementptr inbounds i8, i8* %3, i64 0
%5 = load i8*, i8** %2
%6 = getelementptr inbounds i8, i8* %5, i64 1
%7 = load i8*, i8** %2
%8 = getelementptr inbounds i8, i8* %7, i64 2
%9 = load i8*, i8** %2
%10 = getelementptr inbounds i8, i8* %9, i64 3
%11 = load i8*, i8** %2
%12 = getelementptr inbounds i8, i8* %11, i64 4
%13 = load i8*, i8** %2
%14 = getelementptr inbounds i8, i8* %13, i64 5
%15 = load i8*, i8** %2
%16 = getelementptr inbounds i8, i8* %15, i64 6
%17 = call { i8, i8, i8, i8, i8, i8, i8 } asm "", "={@cca},={@ccc},={@cce},={@ccg},={@cco},={@ccp},={@ccs},~{dirflag},~{fpsr},~{flags}"()
%18 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 0
%19 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 1
%20 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 2
%21 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 3
%22 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 4
%23 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 5
%24 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %17, 6
store i8 %18, i8* %4
store i8 %19, i8* %6
store i8 %20, i8* %8
store i8 %21, i8* %10
store i8 %22, i8* %12
store i8 %23, i8* %14
store i8 %24, i8* %16
ret void
}

LLVM IR (-O2):
define void @f(i8* nocapture writeonly %0) {
%2 = getelementptr inbounds i8, i8* %0, i64 1
%3 = getelementptr inbounds i8, i8* %0, i64 2
%4 = getelementptr inbounds i8, i8* %0, i64 3
%5 = getelementptr inbounds i8, i8* %0, i64 4
%6 = getelementptr inbounds i8, i8* %0, i64 5
%7 = getelementptr inbounds i8, i8* %0, i64 6
%8 = tail call { i8, i8, i8, i8, i8, i8, i8 } asm "", "={@cca},={@ccc},={@cce},={@ccg},={@cco},={@ccp},={@ccs},~{dirflag},~{fpsr},~{flags}"()
%9 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 0
%10 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 1
%11 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 2
%12 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 3
%13 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 4
%14 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 5
%15 = extractvalue { i8, i8, i8, i8, i8, i8, i8 } %8, 6
store i8 %9, i8* %0
store i8 %10, i8* %2
store i8 %11, i8* %3
store i8 %12, i8* %4
store i8 %13, i8* %5
store i8 %14, i8* %6
store i8 %15, i8* %7
ret void
}