void jac(int *neq, float *t, float *y, int *ml, int *mu, float *pd, int *nrpd) {
  pd[0] = -.04f;
  pd[1] = .04f;
  pd[2] = 0.0f;
  pd[3] = 1e4f * y[2];
  pd[5] = 6e7f * y[1];
  pd[4] = -pd[3] - pd[5];
  pd[6] = 1e4f * y[1];
  pd[7] = -pd[6];
  pd[8] = 0.0f;
}


x86 assembly (clang, -O0):
<jac>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movss  0xee0(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movss  0xecc(%rip),%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x30(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movss  0xea7(%rip),%xmm0
mulss  0x8(%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,0xc(%rax)
mov    -0x18(%rbp),%rax
movss  0xe91(%rip),%xmm0
mulss  0x4(%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,0x14(%rax)
mov    -0x30(%rbp),%rax
movss  0xc(%rax),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x30(%rbp),%rax
subss  0x14(%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movss  0xe4b(%rip),%xmm0
mulss  0x4(%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,0x18(%rax)
mov    -0x30(%rbp),%rax
movss  0x18(%rax),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,0x1c(%rax)
mov    -0x30(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x20(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<jac>:
movabs $0x3d23d70abd23d70a,%rax
d7 23 3d
mov    %rax,(%r9)
movl   $0x0,0x8(%r9)
movss  0xee3(%rip),%xmm0
movss  0x8(%rdx),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0xc(%r9)
movss  0x4(%rdx),%xmm2
mulss  0xecb(%rip),%xmm2
movss  %xmm2,0x14(%r9)
movaps 0xeca(%rip),%xmm3
xorps  %xmm3,%xmm1
subss  %xmm2,%xmm1
movss  %xmm1,0x10(%r9)
mulss  0x4(%rdx),%xmm0
movss  %xmm0,0x18(%r9)
xorps  %xmm3,%xmm0
movss  %xmm0,0x1c(%r9)
movl   $0x0,0x20(%r9)
ret

LLVM IR (-O0):
define void @jac(i32* %0, float* %1, float* %2, i32* %3, i32* %4, float* %5, i32* %6) {
%8 = alloca i32*
%9 = alloca float*
%10 = alloca float*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca float*
%14 = alloca i32*
store i32* %0, i32** %8
store float* %1, float** %9
store float* %2, float** %10
store i32* %3, i32** %11
store i32* %4, i32** %12
store float* %5, float** %13
store i32* %6, i32** %14
%15 = load float*, float** %13
%16 = getelementptr inbounds float, float* %15, i64 0
store float 0xBFA47AE140000000, float* %16
%17 = load float*, float** %13
%18 = getelementptr inbounds float, float* %17, i64 1
store float 0x3FA47AE140000000, float* %18
%19 = load float*, float** %13
%20 = getelementptr inbounds float, float* %19, i64 2
store float 0.000000e+00, float* %20
%21 = load float*, float** %10
%22 = getelementptr inbounds float, float* %21, i64 2
%23 = load float, float* %22
%24 = fmul float 1.000000e+04, %23
%25 = load float*, float** %13
%26 = getelementptr inbounds float, float* %25, i64 3
store float %24, float* %26
%27 = load float*, float** %10
%28 = getelementptr inbounds float, float* %27, i64 1
%29 = load float, float* %28
%30 = fmul float 6.000000e+07, %29
%31 = load float*, float** %13
%32 = getelementptr inbounds float, float* %31, i64 5
store float %30, float* %32
%33 = load float*, float** %13
%34 = getelementptr inbounds float, float* %33, i64 3
%35 = load float, float* %34
%36 = fneg float %35
%37 = load float*, float** %13
%38 = getelementptr inbounds float, float* %37, i64 5
%39 = load float, float* %38
%40 = fsub float %36, %39
%41 = load float*, float** %13
%42 = getelementptr inbounds float, float* %41, i64 4
store float %40, float* %42
%43 = load float*, float** %10
%44 = getelementptr inbounds float, float* %43, i64 1
%45 = load float, float* %44
%46 = fmul float 1.000000e+04, %45
%47 = load float*, float** %13
%48 = getelementptr inbounds float, float* %47, i64 6
store float %46, float* %48
%49 = load float*, float** %13
%50 = getelementptr inbounds float, float* %49, i64 6
%51 = load float, float* %50
%52 = fneg float %51
%53 = load float*, float** %13
%54 = getelementptr inbounds float, float* %53, i64 7
store float %52, float* %54
%55 = load float*, float** %13
%56 = getelementptr inbounds float, float* %55, i64 8
store float 0.000000e+00, float* %56
ret void
}

LLVM IR (-O2):
define void @jac(i32* nocapture readnone %0, float* nocapture readnone %1, float* nocapture %2, i32* nocapture readnone %3, i32* nocapture readnone %4, float* nocapture writeonly %5, i32* nocapture readnone %6) {
store float 0xBFA47AE140000000, float* %5
%8 = getelementptr inbounds float, float* %5, i64 1
store float 0x3FA47AE140000000, float* %8
%9 = getelementptr inbounds float, float* %5, i64 2
store float 0.000000e+00, float* %9
%10 = getelementptr inbounds float, float* %2, i64 2
%11 = load float, float* %10
%12 = fmul float %11, 1.000000e+04
%13 = getelementptr inbounds float, float* %5, i64 3
store float %12, float* %13
%14 = getelementptr inbounds float, float* %2, i64 1
%15 = load float, float* %14
%16 = fmul float %15, 6.000000e+07
%17 = getelementptr inbounds float, float* %5, i64 5
store float %16, float* %17
%18 = fneg float %12
%19 = fsub float %18, %16
%20 = getelementptr inbounds float, float* %5, i64 4
store float %19, float* %20
%21 = load float, float* %14
%22 = fmul float %21, 1.000000e+04
%23 = getelementptr inbounds float, float* %5, i64 6
store float %22, float* %23
%24 = fneg float %22
%25 = getelementptr inbounds float, float* %5, i64 7
store float %24, float* %25
%26 = getelementptr inbounds float, float* %5, i64 8
store float 0.000000e+00, float* %26
ret void
}