double d2exdnsdnt_(nu, nd, ssp, tsp)
double *nu, *nd;
const int *ssp, *tsp;
{
  double ret_val, d__1;
  static double n2, pi;
  ret_val = 0.;
  if (*ssp != *tsp) {
    return ret_val;
  }
  if (*ssp == 1) {
    n2 = *nu * *nu;
  } else {
    n2 = *nd * *nd;
  }
  if (n2 == 0.) {
    return ret_val;
  }
  pi = 3.1415927;
  d__1 = 2. / (pi * 9. * n2);
  ret_val = -pow(d__1, 1. / 3.);
  return ret_val;
}


x86 assembly (clang, -O0):
<d2exdnsdnt_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
je     1151 <d2exdnsdnt_+0x41>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    122e <d2exdnsdnt_+0x11e>
mov    -0x20(%rbp),%rax
cmpl   $0x1,(%rax)
jne    117b <d2exdnsdnt_+0x6b>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,0x2eba(%rip)
jmp    1193 <d2exdnsdnt_+0x83>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,0x2e9d(%rip)
movsd  0x2e95(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11bd <d2exdnsdnt_+0xad>
jp     11bd <d2exdnsdnt_+0xad>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    122e <d2exdnsdnt_+0x11e>
movsd  0xe53(%rip),%xmm0
movsd  %xmm0,0x2e6b(%rip)
movsd  0xe3b(%rip),%xmm1
mulsd  0x2e5b(%rip),%xmm1
mulsd  0x2e4b(%rip),%xmm1
movsd  0xe1b(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xdfd(%rip),%xmm1
call   1030 <pow@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<d2exdnsdnt_>:
push   %rax
mov    (%rdx),%eax
xorpd  %xmm0,%xmm0
cmp    (%rcx),%eax
jne    113a <d2exdnsdnt_+0x2a>
cmp    $0x1,%eax
jne    1126 <d2exdnsdnt_+0x16>
movsd  (%rdi),%xmm1
jmp    112a <d2exdnsdnt_+0x1a>
movsd  (%rsi),%xmm1
mulsd  %xmm1,%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jne    113c <d2exdnsdnt_+0x2c>
jp     113c <d2exdnsdnt_+0x2c>
pop    %rax
ret
mulsd  0xebc(%rip),%xmm1
movsd  0xebc(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  0xeb8(%rip),%xmm1
call   1030 <pow@plt>
xorpd  0xebb(%rip),%xmm0
pop    %rax
ret

LLVM IR (-O0):
@d2exdnsdnt_.n2 = internal global double 0.000000e+00
@d2exdnsdnt_.pi = internal global double 0.000000e+00
define double @d2exdnsdnt_(double* %0, double* %1, i32* %2, i32* %3) {
%5 = alloca double
%6 = alloca double*
%7 = alloca double*
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca double
%11 = alloca double
store double* %0, double** %6
store double* %1, double** %7
store i32* %2, i32** %8
store i32* %3, i32** %9
store double 0.000000e+00, double* %10
%12 = load i32*, i32** %8
%13 = load i32, i32* %12
%14 = load i32*, i32** %9
%15 = load i32, i32* %14
%16 = icmp ne i32 %13, %15
br i1 %16, label %17, label %19
17: ; preds = %4
%18 = load double, double* %10
store double %18, double* %5
br label %50
19: ; preds = %4
%20 = load i32*, i32** %8
%21 = load i32, i32* %20
%22 = icmp eq i32 %21, 1
br i1 %22, label %23, label %29
23: ; preds = %19
%24 = load double*, double** %6
%25 = load double, double* %24
%26 = load double*, double** %6
%27 = load double, double* %26
%28 = fmul double %25, %27
store double %28, double* @d2exdnsdnt_.n2
br label %35
29: ; preds = %19
%30 = load double*, double** %7
%31 = load double, double* %30
%32 = load double*, double** %7
%33 = load double, double* %32
%34 = fmul double %31, %33
store double %34, double* @d2exdnsdnt_.n2
br label %35
35: ; preds = %29, %23
%36 = load double, double* @d2exdnsdnt_.n2
%37 = fcmp oeq double %36, 0.000000e+00
br i1 %37, label %38, label %40
38: ; preds = %35
%39 = load double, double* %10
store double %39, double* %5
br label %50
40: ; preds = %35
store double 0x400921FB5A7ED197, double* @d2exdnsdnt_.pi
%41 = load double, double* @d2exdnsdnt_.pi
%42 = fmul double %41, 9.000000e+00
%43 = load double, double* @d2exdnsdnt_.n2
%44 = fmul double %42, %43
%45 = fdiv double 2.000000e+00, %44
store double %45, double* %11
%46 = load double, double* %11
%47 = call double @pow(double %46, double 0x3FD5555555555555)
%48 = fneg double %47
store double %48, double* %10
%49 = load double, double* %10
store double %49, double* %5
br label %50
50: ; preds = %40, %38, %17
%51 = load double, double* %5
ret double %51
}

LLVM IR (-O2):
define double @d2exdnsdnt_(double* nocapture %0, double* nocapture %1, i32* nocapture %2, i32* nocapture %3) {
%5 = load i32, i32* %2
%6 = load i32, i32* %3
%7 = icmp eq i32 %5, %6
br i1 %7, label %8, label %24
8: ; preds = %4
%9 = icmp eq i32 %5, 1
br i1 %9, label %10, label %13
10: ; preds = %8
%11 = load double, double* %0
%12 = fmul double %11, %11
br label %16
13: ; preds = %8
%14 = load double, double* %1
%15 = fmul double %14, %14
br label %16
16: ; preds = %13, %10
%17 = phi double [ %15, %13 ], [ %12, %10 ]
%18 = fcmp oeq double %17, 0.000000e+00
br i1 %18, label %24, label %19
19: ; preds = %16
%20 = fmul double %17, 0x403C463AC5CEABCA
%21 = fdiv double 2.000000e+00, %20
%22 = tail call double @pow(double %21, double 0x3FD5555555555555)
%23 = fneg double %22
br label %24
24: ; preds = %16, %4, %19
%25 = phi double [ %23, %19 ], [ 0.000000e+00, %4 ], [ 0.000000e+00, %16 ]
ret double %25
}