// File: /workspace/github_c_makefile_star2_O0/radforddc[P]icpc_siggen/detector_geometry.c
// Function: outside_detector
int outside_detector(point pt, MJD_Siggen_Setup *setup){
  float r, z, r1, z1, br, a, b;

  z = pt.z;
  if (z > setup->zmax || z < 0) return 1;

  r = sqrt(SQ(pt.x)+SQ(pt.y));
  if (r > setup->rmax) return 1;
  r1 = setup->rmax - r;  // distance from outer radius
  z1 = setup->zmax - z;  // distance from top of crystal

  /* check point contact */
  if (z < setup->pc_length && r < setup->pc_radius) {
    if (!setup->bulletize_PC) return 1;
    if (setup->pc_length > setup->pc_radius) {
      a = setup->pc_length - setup->pc_radius;
      if (z < a || SQ(z-a) + SQ(r) < SQ(setup->pc_radius)) return 1;
    } else {
      a = setup->pc_radius - setup->pc_length;
      if (r < a || SQ(z) + SQ(r-a) < SQ(setup->pc_length)) return 1;
    }
    return 0;
  }

  /* check ditch */
  if (z < setup->ditch_depth  &&
      setup->ditch_thickness > 0 && setup->wrap_around_radius > 0 &&
      r < setup->wrap_around_radius &&
      r > setup->wrap_around_radius - setup->ditch_thickness) return 1;

  /* check hole */
  if ( r < setup->hole_radius &&
      z1 < setup->hole_length) {
    b = setup->zmax - setup->hole_length + setup->hole_bullet_radius;
    if (z > b) return 1;
    a = setup->hole_radius - setup->hole_bullet_radius;
    if (r < a || SQ(b-z) + SQ(r-a) < SQ(setup->hole_bullet_radius)) return 1;
  }

  /* check inner taper of hole */
  if (z1 < setup->inner_taper_length &&
      r  < setup->hole_radius +
            ((setup->inner_taper_length - z1) *
              setup->inner_taper_width / setup->inner_taper_length)) return 1;      
  /* check outer taper of crystal */
  if (z1 < setup->outer_taper_length &&
      r1 < ((setup->outer_taper_length - z1) *
              setup->outer_taper_width / setup->outer_taper_length)) return 1;
  /* check 45-degree bottom outer taper of crystal */
  if ( z < setup->bottom_taper_length &&
      r1 < setup->bottom_taper_length - z) return 1;

  /* check bulletizations */
  br = setup->top_bullet_radius;
  // adjust top bulletization position for top outer taper
  a = 0;
  if (setup->outer_taper_length > br)
    a = ((setup->outer_taper_length - br) *
         setup->outer_taper_width / setup->outer_taper_length);
  if (z1 < br &&
      r1 < br + a &&
      SQ(br - r1 + a) + SQ(br - z1) > br*br) return 1;
  br = setup->bottom_bullet_radius;
  if ( z < br &&
      r1 < br &&
      SQ(br - r1) + SQ(br - z ) > br*br) return 1;

  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movlpd %xmm0, -0x20(%rbp)
movss %xmm1, -0x18(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x8(%rbp)
movq %rdi, -0x28(%rbp)
movss -0x8(%rbp), %xmm0
movss %xmm0, -0x30(%rbp)
movss -0x30(%rbp), %xmm0
movq -0x28(%rbp), %rax
ucomiss 0x3c0(%rax), %xmm0
ja 0xb7a9
xorps %xmm0, %xmm0
ucomiss -0x30(%rbp), %xmm0
jbe 0xb7b5
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movss -0x10(%rbp), %xmm0
movss -0x10(%rbp), %xmm2
movss -0xc(%rbp), %xmm1
mulss -0xc(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x11b0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x2c(%rbp)
movss -0x2c(%rbp), %xmm0
movq -0x28(%rbp), %rax
ucomiss 0x3b4(%rax), %xmm0
jbe 0xb801
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movq -0x28(%rbp), %rax
movss 0x3b4(%rax), %xmm0
subss -0x2c(%rbp), %xmm0
movss %xmm0, -0x34(%rbp)
movq -0x28(%rbp), %rax
movss 0x3c0(%rax), %xmm0
subss -0x30(%rbp), %xmm0
movss %xmm0, -0x38(%rbp)
movss -0x30(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xb979
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x10(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xb979
movq -0x28(%rbp), %rax
cmpl $0x0, 0x84(%rax)
jne 0xb874
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
ucomiss 0x10(%rax), %xmm0
jbe 0xb8f8
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0x10(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x30(%rbp), %xmm1
movss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
ja 0xb8ea
movss -0x30(%rbp), %xmm1
subss -0x40(%rbp), %xmm1
movss -0x30(%rbp), %xmm2
subss -0x40(%rbp), %xmm2
movss -0x2c(%rbp), %xmm0
mulss -0x2c(%rbp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x28(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x10(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xb8f6
movl $0x1, -0x4(%rbp)
jmp 0xbce8
jmp 0xb96d
movq -0x28(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0xc(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x2c(%rbp), %xmm1
movss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
ja 0xb95f
movss -0x30(%rbp), %xmm1
movss -0x30(%rbp), %xmm2
movss -0x2c(%rbp), %xmm0
subss -0x40(%rbp), %xmm0
movss -0x2c(%rbp), %xmm3
subss -0x40(%rbp), %xmm3
mulss %xmm3, %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0xc(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xb96b
movl $0x1, -0x4(%rbp)
jmp 0xbce8
jmp 0xb96d
movl $0x0, -0x4(%rbp)
jmp 0xbce8
movss -0x30(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x18(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xb9e9
movq -0x28(%rbp), %rax
movss 0x1c(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xb9e9
movq -0x28(%rbp), %rax
movss 0x14(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xb9e9
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x14(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xb9e9
movss -0x2c(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss 0x14(%rax), %xmm1
movq -0x28(%rbp), %rax
subss 0x1c(%rax), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xb9e9
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x28(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbad0
movss -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x24(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbad0
movq -0x28(%rbp), %rax
movss 0x3c0(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0x24(%rax), %xmm0
movq -0x28(%rbp), %rax
addss 0x48(%rax), %xmm0
movss %xmm0, -0x44(%rbp)
movss -0x30(%rbp), %xmm0
ucomiss -0x44(%rbp), %xmm0
jbe 0xba51
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movq -0x28(%rbp), %rax
movss 0x28(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0x48(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x2c(%rbp), %xmm1
movss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
ja 0xbac2
movss -0x44(%rbp), %xmm1
subss -0x30(%rbp), %xmm1
movss -0x44(%rbp), %xmm2
subss -0x30(%rbp), %xmm2
movss -0x2c(%rbp), %xmm0
subss -0x40(%rbp), %xmm0
movss -0x2c(%rbp), %xmm3
subss -0x40(%rbp), %xmm3
mulss %xmm3, %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x28(%rbp), %rax
movss 0x48(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x48(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbace
movl $0x1, -0x4(%rbp)
jmp 0xbce8
jmp 0xbad0
movss -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x34(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbb26
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x28(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x34(%rax), %xmm2
subss -0x38(%rbp), %xmm2
movq -0x28(%rbp), %rax
mulss 0x3c(%rax), %xmm2
movq -0x28(%rbp), %rax
divss 0x34(%rax), %xmm2
addss %xmm2, %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbb26
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movss -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbb6f
movss -0x34(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
subss -0x38(%rbp), %xmm0
movq -0x28(%rbp), %rax
mulss 0x38(%rax), %xmm0
movq -0x28(%rbp), %rax
divss 0x2c(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbb6f
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movss -0x30(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x20(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbba6
movss -0x34(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x20(%rax), %xmm0
subss -0x30(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbba6
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movq -0x28(%rbp), %rax
movss 0x40(%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
ucomiss -0x3c(%rbp), %xmm0
jbe 0xbbf0
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
subss -0x3c(%rbp), %xmm0
movq -0x28(%rbp), %rax
mulss 0x38(%rax), %xmm0
movq -0x28(%rbp), %rax
divss 0x2c(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x38(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbc69
movss -0x34(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbc69
movss -0x3c(%rbp), %xmm0
subss -0x34(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
movss -0x3c(%rbp), %xmm2
subss -0x34(%rbp), %xmm2
addss -0x40(%rbp), %xmm2
movss -0x3c(%rbp), %xmm1
subss -0x38(%rbp), %xmm1
movss -0x3c(%rbp), %xmm3
subss -0x38(%rbp), %xmm3
mulss %xmm3, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss -0x3c(%rbp), %xmm1
mulss -0x3c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xbc69
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movq -0x28(%rbp), %rax
movss 0x44(%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
movss -0x30(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbce1
movss -0x34(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbce1
movss -0x3c(%rbp), %xmm0
subss -0x34(%rbp), %xmm0
movss -0x3c(%rbp), %xmm2
subss -0x34(%rbp), %xmm2
movss -0x3c(%rbp), %xmm1
subss -0x30(%rbp), %xmm1
movss -0x3c(%rbp), %xmm3
subss -0x30(%rbp), %xmm3
mulss %xmm3, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss -0x3c(%rbp), %xmm1
mulss -0x3c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xbce1
movl $0x1, -0x4(%rbp)
jmp 0xbce8
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)