#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double sqrt(double);
void jacmodhs76(double *p, double *jac, int m, int n, void *data) {
  register int j = 0;
  jac[j++] = 1.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = sqrt(0.5);
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 1.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = 0.0;
  jac[j++] = sqrt(0.5);
}


x86 assembly (clang, -O0):
<jacmodhs76>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
movsd  0xebd(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xe40(%rip),%xmm0
call   1030 <sqrt@plt>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
movsd  0xdaa(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xd2d(%rip),%xmm0
call   1030 <sqrt@plt>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<jacmodhs76>:
movabs $0x3ff0000000000000,%rax
mov    %rax,(%rsi)
xorps  %xmm0,%xmm0
movups %xmm0,0x8(%rsi)
movups %xmm0,0x18(%rsi)
movabs $0x3fe6a09e667f3bcd,%rcx
a0 e6 3f
mov    %rcx,0x28(%rsi)
movups %xmm0,0x30(%rsi)
movups %xmm0,0x40(%rsi)
mov    %rax,0x50(%rsi)
movups %xmm0,0x58(%rsi)
movups %xmm0,0x68(%rsi)
mov    %rcx,0x78(%rsi)
ret

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

LLVM IR (-O2):
define void @jacmodhs76(double* nocapture readnone %0, double* nocapture writeonly %1, i32 %2, i32 %3, i8* nocapture readnone %4) {
store double 1.000000e+00, double* %1
%6 = getelementptr inbounds double, double* %1, i64 1
%7 = getelementptr inbounds double, double* %1, i64 5
%8 = bitcast double* %6 to i8*
store double 0x3FE6A09E667F3BCD, double* %7
%9 = getelementptr inbounds double, double* %1, i64 6
%10 = getelementptr inbounds double, double* %1, i64 10
%11 = bitcast double* %9 to i8*
store double 1.000000e+00, double* %10
%12 = getelementptr inbounds double, double* %1, i64 11
%13 = getelementptr inbounds double, double* %1, i64 15
%14 = bitcast double* %12 to i8*
store double 0x3FE6A09E667F3BCD, double* %13
ret void
}