void upzero(int dlt, int *dlti, int *bli) {
  int i, wd2, wd3;
  if (dlt == 0) {
    for (i = 0; i < 6; i++) {
      bli[i] = (int)((255L * bli[i]) >> 8L);
    }
  } else {
    for (i = 0; i < 6; i++) {
      if ((long)dlt * dlti[i] >= 0)
        wd2 = 128;
      else
        wd2 = -128;
      wd3 = (int)((255L * bli[i]) >> 8L);
      bli[i] = wd2 + wd3;
    }
  }
  dlti[5] = dlti[4];
  dlti[4] = dlti[3];
  dlti[3] = dlti[2];
  dlti[1] = dlti[0];
  dlti[0] = dlt;
}


x86 assembly (clang, -O0):
<upzero>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
cmpl   $0x0,-0x4(%rbp)
jne    1161 <upzero+0x61>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x6,-0x1c(%rbp)
jge    115c <upzero+0x5c>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
imul   $0xff,%rax,%rax
sar    $0x8,%rax
mov    %eax,%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1120 <upzero+0x20>
jmp    11e1 <upzero+0xe1>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x6,-0x1c(%rbp)
jge    11dc <upzero+0xdc>
movslq -0x4(%rbp),%rax
mov    -0x10(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
cmp    $0x0,%rax
jl     119c <upzero+0x9c>
movl   $0x80,-0x20(%rbp)
jmp    11a3 <upzero+0xa3>
movl   $0xffffff80,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
imul   $0xff,%rax,%rax
sar    $0x8,%rax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%edx
add    -0x24(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1168 <upzero+0x68>
jmp    11e1 <upzero+0xe1>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x4(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<upzero>:
test   %edi,%edi
je     1218 <upzero+0x118>
movslq %edi,%r8
movslq (%rsi),%rcx
imul   %r8,%rcx
xor    %eax,%eax
test   %rcx,%rcx
setns  %al
shl    $0x8,%eax
movslq (%rdx),%r9
mov    %r9,%rcx
shl    $0x8,%rcx
sub    %r9,%rcx
shr    $0x8,%rcx
add    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,(%rdx)
movslq 0x4(%rsi),%rax
imul   %r8,%rax
xor    %ecx,%ecx
test   %rax,%rax
setns  %cl
shl    $0x8,%ecx
movslq 0x4(%rdx),%r9
mov    %r9,%rax
shl    $0x8,%rax
sub    %r9,%rax
shr    $0x8,%rax
add    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,0x4(%rdx)
movslq 0x8(%rsi),%rax
imul   %r8,%rax
xor    %ecx,%ecx
test   %rax,%rax
setns  %cl
shl    $0x8,%ecx
movslq 0x8(%rdx),%r9
mov    %r9,%rax
shl    $0x8,%rax
sub    %r9,%rax
shr    $0x8,%rax
add    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,0x8(%rdx)
movslq 0xc(%rsi),%rax
imul   %r8,%rax
xor    %ecx,%ecx
test   %rax,%rax
setns  %cl
shl    $0x8,%ecx
movslq 0xc(%rdx),%r9
mov    %r9,%rax
shl    $0x8,%rax
sub    %r9,%rax
shr    $0x8,%rax
add    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,0xc(%rdx)
movslq 0x10(%rsi),%rax
imul   %r8,%rax
xor    %ecx,%ecx
test   %rax,%rax
setns  %cl
shl    $0x8,%ecx
movslq 0x10(%rdx),%r9
mov    %r9,%rax
shl    $0x8,%rax
sub    %r9,%rax
shr    $0x8,%rax
add    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,0x10(%rdx)
movslq 0x14(%rsi),%rax
imul   %r8,%rax
xor    %ecx,%ecx
test   %rax,%rax
setns  %cl
shl    $0x8,%ecx
movslq 0x14(%rdx),%r8
mov    %r8,%rax
shl    $0x8,%rax
sub    %r8,%rax
shr    $0x8,%rax
add    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,0x14(%rdx)
jmp    1294 <upzero+0x194>
movslq (%rdx),%rax
mov    %rax,%rcx
shl    $0x8,%rcx
sub    %rax,%rcx
shr    $0x8,%rcx
mov    %ecx,(%rdx)
movslq 0x4(%rdx),%rax
mov    %rax,%rcx
shl    $0x8,%rcx
sub    %rax,%rcx
shr    $0x8,%rcx
mov    %ecx,0x4(%rdx)
movslq 0x8(%rdx),%rax
mov    %rax,%rcx
shl    $0x8,%rcx
sub    %rax,%rcx
shr    $0x8,%rcx
mov    %ecx,0x8(%rdx)
movslq 0xc(%rdx),%rax
mov    %rax,%rcx
shl    $0x8,%rcx
sub    %rax,%rcx
shr    $0x8,%rcx
mov    %ecx,0xc(%rdx)
movslq 0x10(%rdx),%rax
mov    %rax,%rcx
shl    $0x8,%rcx
sub    %rax,%rcx
shr    $0x8,%rcx
mov    %ecx,0x10(%rdx)
movslq 0x14(%rdx),%rax
mov    %rax,%rcx
shl    $0x8,%rcx
sub    %rax,%rcx
shr    $0x8,%rcx
mov    %ecx,0x14(%rdx)
mov    0x10(%rsi),%eax
mov    %eax,0x14(%rsi)
mov    0x8(%rsi),%rax
mov    %rax,0xc(%rsi)
mov    (%rsi),%eax
mov    %eax,0x4(%rsi)
mov    %edi,(%rsi)
ret

LLVM IR (-O0):
define void @upzero(i32 %0, i32* %1, i32* %2) {
%4 = alloca i32
%5 = alloca i32*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i32 %0, i32* %4
store i32* %1, i32** %5
store i32* %2, i32** %6
%10 = load i32, i32* %4
%11 = icmp eq i32 %10, 0
br i1 %11, label %12, label %34
12: ; preds = %3
store i32 0, i32* %7
br label %13
13: ; preds = %30, %12
%14 = load i32, i32* %7
%15 = icmp slt i32 %14, 6
br i1 %15, label %16, label %33
16: ; preds = %13
%17 = load i32*, i32** %6
%18 = load i32, i32* %7
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i32, i32* %17, i64 %19
%21 = load i32, i32* %20
%22 = sext i32 %21 to i64
%23 = mul nsw i64 255, %22
%24 = ashr i64 %23, 8
%25 = trunc i64 %24 to i32
%26 = load i32*, i32** %6
%27 = load i32, i32* %7
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i32, i32* %26, i64 %28
store i32 %25, i32* %29
br label %30
30: ; preds = %16
%31 = load i32, i32* %7
%32 = add nsw i32 %31, 1
store i32 %32, i32* %7
br label %13
33: ; preds = %13
br label %72
34: ; preds = %3
store i32 0, i32* %7
br label %35
35: ; preds = %68, %34
%36 = load i32, i32* %7
%37 = icmp slt i32 %36, 6
br i1 %37, label %38, label %71
38: ; preds = %35
%39 = load i32, i32* %4
%40 = sext i32 %39 to i64
%41 = load i32*, i32** %5
%42 = load i32, i32* %7
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i32, i32* %41, i64 %43
%45 = load i32, i32* %44
%46 = sext i32 %45 to i64
%47 = mul nsw i64 %40, %46
%48 = icmp sge i64 %47, 0
br i1 %48, label %49, label %50
49: ; preds = %38
store i32 128, i32* %8
br label %51
50: ; preds = %38
store i32 -128, i32* %8
br label %51
51: ; preds = %50, %49
%52 = load i32*, i32** %6
%53 = load i32, i32* %7
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i32, i32* %52, i64 %54
%56 = load i32, i32* %55
%57 = sext i32 %56 to i64
%58 = mul nsw i64 255, %57
%59 = ashr i64 %58, 8
%60 = trunc i64 %59 to i32
store i32 %60, i32* %9
%61 = load i32, i32* %8
%62 = load i32, i32* %9
%63 = add nsw i32 %61, %62
%64 = load i32*, i32** %6
%65 = load i32, i32* %7
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i32, i32* %64, i64 %66
store i32 %63, i32* %67
br label %68
68: ; preds = %51
%69 = load i32, i32* %7
%70 = add nsw i32 %69, 1
store i32 %70, i32* %7
br label %35
71: ; preds = %35
br label %72
72: ; preds = %71, %33
%73 = load i32*, i32** %5
%74 = getelementptr inbounds i32, i32* %73, i64 4
%75 = load i32, i32* %74
%76 = load i32*, i32** %5
%77 = getelementptr inbounds i32, i32* %76, i64 5
store i32 %75, i32* %77
%78 = load i32*, i32** %5
%79 = getelementptr inbounds i32, i32* %78, i64 3
%80 = load i32, i32* %79
%81 = load i32*, i32** %5
%82 = getelementptr inbounds i32, i32* %81, i64 4
store i32 %80, i32* %82
%83 = load i32*, i32** %5
%84 = getelementptr inbounds i32, i32* %83, i64 2
%85 = load i32, i32* %84
%86 = load i32*, i32** %5
%87 = getelementptr inbounds i32, i32* %86, i64 3
store i32 %85, i32* %87
%88 = load i32*, i32** %5
%89 = getelementptr inbounds i32, i32* %88, i64 0
%90 = load i32, i32* %89
%91 = load i32*, i32** %5
%92 = getelementptr inbounds i32, i32* %91, i64 1
store i32 %90, i32* %92
%93 = load i32, i32* %4
%94 = load i32*, i32** %5
%95 = getelementptr inbounds i32, i32* %94, i64 0
store i32 %93, i32* %95
ret void
}

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