Control flow for convolution

Could someone help me understand the control flow for calling the convolution functions conv, conv2 and convn? This is what I found out so far:

  • conv.m calls conv2 in libinterp/corefcn/conv2.cc
  • conv2 calls convn. Is this the convn that is defined with a DEFUN in conv2.cc or is it one of the many in liboctave/numeric/oct-convn.cc? (Is it possible to call one DEFUN from another?)
  • The convn that is a DEFUN in conv2.cc calls one of the many convn definitions in liboctave/numeric/oct-convn.cc.
  • There are many deprecated functions in liboctave/numeric/oct-convn.h, not sure if anything is calling them at all. Is it purely a namespace-related deprecation?
  • oct-convn.cc defines several templated functions that seem to be wrappers to Fortran functions in liboctave/external/blas-extra named Xconv2.f where X is c, s, d, z, cs or zd.
  • Those Fortran functions in turn call other Fortran functions named Xaxpy where X is c, d, s or z. Where are those functions defined? Inside the BLAS / LAPACK libraries?