void psycho_3_smr(double *LTmin, double *Lsb) {
  int i;
  for (i = 0; i < 32; i++) {
    LTmin[i] = Lsb[i] - LTmin[i];
  }
}


x86 assembly (clang, -O0):
<psycho_3_smr>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    1152 <psycho_3_smr+0x52>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1113 <psycho_3_smr+0x13>
pop    %rbp
ret

x86 assembly (clang, -O2):
<psycho_3_smr>:
lea    0x100(%rsi),%rax
cmp    %rdi,%rax
jbe    1170 <psycho_3_smr+0x70>
lea    0x100(%rdi),%rax
cmp    %rsi,%rax
jbe    1170 <psycho_3_smr+0x70>
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movsd  (%rsi,%rax,8),%xmm0
subsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rdi,%rax,8)
movsd  0x8(%rsi,%rax,8),%xmm0
subsd  0x8(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x8(%rdi,%rax,8)
movsd  0x10(%rsi,%rax,8),%xmm0
subsd  0x10(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x10(%rdi,%rax,8)
movsd  0x18(%rsi,%rax,8),%xmm0
subsd  0x18(%rdi,%rax,8),%xmm0
movsd  %xmm0,0x18(%rdi,%rax,8)
add    $0x4,%rax
cmp    $0x20,%rax
jne    1120 <psycho_3_smr+0x20>
ret
movupd (%rsi),%xmm0
movupd (%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd 0x10(%rdi),%xmm1
movupd 0x20(%rdi),%xmm2
movupd 0x30(%rdi),%xmm3
movupd %xmm0,(%rdi)
movupd 0x10(%rsi),%xmm0
subpd  %xmm1,%xmm0
movupd %xmm0,0x10(%rdi)
movupd 0x20(%rsi),%xmm0
subpd  %xmm2,%xmm0
movupd %xmm0,0x20(%rdi)
movupd 0x30(%rsi),%xmm0
subpd  %xmm3,%xmm0
movupd %xmm0,0x30(%rdi)
movupd 0x40(%rsi),%xmm0
movupd 0x40(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0x40(%rdi)
movupd 0x50(%rsi),%xmm0
movupd 0x50(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0x50(%rdi)
movupd 0x60(%rsi),%xmm0
movupd 0x60(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0x60(%rdi)
movupd 0x70(%rsi),%xmm0
movupd 0x70(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0x70(%rdi)
movupd 0x80(%rsi),%xmm0
movupd 0x80(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0x80(%rdi)
movupd 0x90(%rsi),%xmm0
movupd 0x90(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0x90(%rdi)
movupd 0xa0(%rsi),%xmm0
movupd 0xa0(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0xa0(%rdi)
movupd 0xb0(%rsi),%xmm0
movupd 0xb0(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0xb0(%rdi)
movupd 0xc0(%rsi),%xmm0
movupd 0xc0(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0xc0(%rdi)
movupd 0xd0(%rsi),%xmm0
movupd 0xd0(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0xd0(%rdi)
movupd 0xe0(%rsi),%xmm0
movupd 0xe0(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0xe0(%rdi)
movupd 0xf0(%rsi),%xmm0
movupd 0xf0(%rdi),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,0xf0(%rdi)
ret

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

LLVM IR (-O2):
define void @psycho_3_smr(double* nocapture %0, double* nocapture %1) {
%3 = getelementptr double, double* %0, i64 32
%4 = getelementptr double, double* %1, i64 32
%5 = icmp ugt double* %4, %0
%6 = icmp ugt double* %3, %1
%7 = and i1 %5, %6
br i1 %7, label %135, label %8
8: ; preds = %2
%9 = bitcast double* %1 to <2 x double>*
%10 = load <2 x double>, <2 x double>* %9
%11 = bitcast double* %0 to <2 x double>*
%12 = load <2 x double>, <2 x double>* %11
%13 = fsub <2 x double> %10, %12
%14 = bitcast double* %0 to <2 x double>*
store <2 x double> %13, <2 x double>* %14
%15 = getelementptr inbounds double, double* %1, i64 2
%16 = bitcast double* %15 to <2 x double>*
%17 = load <2 x double>, <2 x double>* %16
%18 = getelementptr inbounds double, double* %0, i64 2
%19 = bitcast double* %18 to <2 x double>*
%20 = load <2 x double>, <2 x double>* %19
%21 = fsub <2 x double> %17, %20
%22 = bitcast double* %18 to <2 x double>*
store <2 x double> %21, <2 x double>* %22
%23 = getelementptr inbounds double, double* %1, i64 4
%24 = bitcast double* %23 to <2 x double>*
%25 = load <2 x double>, <2 x double>* %24
%26 = getelementptr inbounds double, double* %0, i64 4
%27 = bitcast double* %26 to <2 x double>*
%28 = load <2 x double>, <2 x double>* %27
%29 = fsub <2 x double> %25, %28
%30 = bitcast double* %26 to <2 x double>*
store <2 x double> %29, <2 x double>* %30
%31 = getelementptr inbounds double, double* %1, i64 6
%32 = bitcast double* %31 to <2 x double>*
%33 = load <2 x double>, <2 x double>* %32
%34 = getelementptr inbounds double, double* %0, i64 6
%35 = bitcast double* %34 to <2 x double>*
%36 = load <2 x double>, <2 x double>* %35
%37 = fsub <2 x double> %33, %36
%38 = bitcast double* %34 to <2 x double>*
store <2 x double> %37, <2 x double>* %38
%39 = getelementptr inbounds double, double* %1, i64 8
%40 = bitcast double* %39 to <2 x double>*
%41 = load <2 x double>, <2 x double>* %40
%42 = getelementptr inbounds double, double* %0, i64 8
%43 = bitcast double* %42 to <2 x double>*
%44 = load <2 x double>, <2 x double>* %43
%45 = fsub <2 x double> %41, %44
%46 = bitcast double* %42 to <2 x double>*
store <2 x double> %45, <2 x double>* %46
%47 = getelementptr inbounds double, double* %1, i64 10
%48 = bitcast double* %47 to <2 x double>*
%49 = load <2 x double>, <2 x double>* %48
%50 = getelementptr inbounds double, double* %0, i64 10
%51 = bitcast double* %50 to <2 x double>*
%52 = load <2 x double>, <2 x double>* %51
%53 = fsub <2 x double> %49, %52
%54 = bitcast double* %50 to <2 x double>*
store <2 x double> %53, <2 x double>* %54
%55 = getelementptr inbounds double, double* %1, i64 12
%56 = bitcast double* %55 to <2 x double>*
%57 = load <2 x double>, <2 x double>* %56
%58 = getelementptr inbounds double, double* %0, i64 12
%59 = bitcast double* %58 to <2 x double>*
%60 = load <2 x double>, <2 x double>* %59
%61 = fsub <2 x double> %57, %60
%62 = bitcast double* %58 to <2 x double>*
store <2 x double> %61, <2 x double>* %62
%63 = getelementptr inbounds double, double* %1, i64 14
%64 = bitcast double* %63 to <2 x double>*
%65 = load <2 x double>, <2 x double>* %64
%66 = getelementptr inbounds double, double* %0, i64 14
%67 = bitcast double* %66 to <2 x double>*
%68 = load <2 x double>, <2 x double>* %67
%69 = fsub <2 x double> %65, %68
%70 = bitcast double* %66 to <2 x double>*
store <2 x double> %69, <2 x double>* %70
%71 = getelementptr inbounds double, double* %1, i64 16
%72 = bitcast double* %71 to <2 x double>*
%73 = load <2 x double>, <2 x double>* %72
%74 = getelementptr inbounds double, double* %0, i64 16
%75 = bitcast double* %74 to <2 x double>*
%76 = load <2 x double>, <2 x double>* %75
%77 = fsub <2 x double> %73, %76
%78 = bitcast double* %74 to <2 x double>*
store <2 x double> %77, <2 x double>* %78
%79 = getelementptr inbounds double, double* %1, i64 18
%80 = bitcast double* %79 to <2 x double>*
%81 = load <2 x double>, <2 x double>* %80
%82 = getelementptr inbounds double, double* %0, i64 18
%83 = bitcast double* %82 to <2 x double>*
%84 = load <2 x double>, <2 x double>* %83
%85 = fsub <2 x double> %81, %84
%86 = bitcast double* %82 to <2 x double>*
store <2 x double> %85, <2 x double>* %86
%87 = getelementptr inbounds double, double* %1, i64 20
%88 = bitcast double* %87 to <2 x double>*
%89 = load <2 x double>, <2 x double>* %88
%90 = getelementptr inbounds double, double* %0, i64 20
%91 = bitcast double* %90 to <2 x double>*
%92 = load <2 x double>, <2 x double>* %91
%93 = fsub <2 x double> %89, %92
%94 = bitcast double* %90 to <2 x double>*
store <2 x double> %93, <2 x double>* %94
%95 = getelementptr inbounds double, double* %1, i64 22
%96 = bitcast double* %95 to <2 x double>*
%97 = load <2 x double>, <2 x double>* %96
%98 = getelementptr inbounds double, double* %0, i64 22
%99 = bitcast double* %98 to <2 x double>*
%100 = load <2 x double>, <2 x double>* %99
%101 = fsub <2 x double> %97, %100
%102 = bitcast double* %98 to <2 x double>*
store <2 x double> %101, <2 x double>* %102
%103 = getelementptr inbounds double, double* %1, i64 24
%104 = bitcast double* %103 to <2 x double>*
%105 = load <2 x double>, <2 x double>* %104
%106 = getelementptr inbounds double, double* %0, i64 24
%107 = bitcast double* %106 to <2 x double>*
%108 = load <2 x double>, <2 x double>* %107
%109 = fsub <2 x double> %105, %108
%110 = bitcast double* %106 to <2 x double>*
store <2 x double> %109, <2 x double>* %110
%111 = getelementptr inbounds double, double* %1, i64 26
%112 = bitcast double* %111 to <2 x double>*
%113 = load <2 x double>, <2 x double>* %112
%114 = getelementptr inbounds double, double* %0, i64 26
%115 = bitcast double* %114 to <2 x double>*
%116 = load <2 x double>, <2 x double>* %115
%117 = fsub <2 x double> %113, %116
%118 = bitcast double* %114 to <2 x double>*
store <2 x double> %117, <2 x double>* %118
%119 = getelementptr inbounds double, double* %1, i64 28
%120 = bitcast double* %119 to <2 x double>*
%121 = load <2 x double>, <2 x double>* %120
%122 = getelementptr inbounds double, double* %0, i64 28
%123 = bitcast double* %122 to <2 x double>*
%124 = load <2 x double>, <2 x double>* %123
%125 = fsub <2 x double> %121, %124
%126 = bitcast double* %122 to <2 x double>*
store <2 x double> %125, <2 x double>* %126
%127 = getelementptr inbounds double, double* %1, i64 30
%128 = bitcast double* %127 to <2 x double>*
%129 = load <2 x double>, <2 x double>* %128
%130 = getelementptr inbounds double, double* %0, i64 30
%131 = bitcast double* %130 to <2 x double>*
%132 = load <2 x double>, <2 x double>* %131
%133 = fsub <2 x double> %129, %132
%134 = bitcast double* %130 to <2 x double>*
store <2 x double> %133, <2 x double>* %134
br label %162
135: ; preds = %2, %135
%136 = phi i64 [ %160, %135 ], [ 0, %2 ]
%137 = getelementptr inbounds double, double* %1, i64 %136
%138 = load double, double* %137
%139 = getelementptr inbounds double, double* %0, i64 %136
%140 = load double, double* %139
%141 = fsub double %138, %140
store double %141, double* %139
%142 = or i64 %136, 1
%143 = getelementptr inbounds double, double* %1, i64 %142
%144 = load double, double* %143
%145 = getelementptr inbounds double, double* %0, i64 %142
%146 = load double, double* %145
%147 = fsub double %144, %146
store double %147, double* %145
%148 = or i64 %136, 2
%149 = getelementptr inbounds double, double* %1, i64 %148
%150 = load double, double* %149
%151 = getelementptr inbounds double, double* %0, i64 %148
%152 = load double, double* %151
%153 = fsub double %150, %152
store double %153, double* %151
%154 = or i64 %136, 3
%155 = getelementptr inbounds double, double* %1, i64 %154
%156 = load double, double* %155
%157 = getelementptr inbounds double, double* %0, i64 %154
%158 = load double, double* %157
%159 = fsub double %156, %158
store double %159, double* %157
%160 = add nuw nsw i64 %136, 4
%161 = icmp eq i64 %160, 32
br i1 %161, label %162, label %135
162: ; preds = %135, %8
ret void
}