This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: optimization/2692: excessive compile time with optimization



hi -

I just noticed that somehow the code sample for this report didn't make
it into gnats.  I'm not sure what happened --- it's in my local copy
of the report that i saved before sending it.

Anyway, here's the complete version, including the code.

sss

SEND-PR: -*- send-pr -*-
SEND-PR: Lines starting with `SEND-PR' will be removed automatically, as
SEND-PR: will all comments (text enclosed in `<' and `>').
SEND-PR: 
SEND-PR: Please consult the GCC manual if you are not sure how to
SEND-PR: fill out a problem report.
SEND-PR: Note that the Synopsis field is mandatory.  The Subject (for
SEND-PR: the mail) will be made the same as Synopsis unless explicitly
SEND-PR: changed.
SEND-PR:
SEND-PR: Choose from the following categories:
SEND-PR:
SEND-PR: c++ c debug fortran java libf2c libgcj libobjc libstdc++ middle-end objc optimization other preprocessor target web 
SEND-PR: 
SEND-PR:
To: gcc-gnats@gcc.gnu.org
Subject: excessive compile time with optimization
From: snyder@fnal.gov
Reply-To: snyder@fnal.gov
Cc: 
X-send-pr-version: 3.113
X-GNATS-Notify: 


>Submitter-Id:	net
>Originator:	scott snyder
>Organization:	<organization of PR author (multiple lines)>
>Confidential:	no
SEND-PR: Leave "Confidential" as "no"; all GCC PRs are public.
>Synopsis:	excessive compile time with optimization
>Severity:	serious
SEND-PR: critical     GCC is completely not operational; no work-around known.
SEND-PR: serious      GCC is not working properly; a work-around is possible.
SEND-PR: non-critical Report indicates minor problem.
>Priority:	low
SEND-PR: high         A solution is necessary as soon as possible.
SEND-PR: medium       The problem should be solved in the next release.
SEND-PR: low          The problem should be solve in a future release.
>Category:	optimization
>Class:		sw-bug
SEND-PR: doc-bug          The doumentation is incorrect.
SEND-PR: accepts-illegal  GCC fails to reject erroneous code.
SEND-PR: rejects-legal    GCC gives an error message for correct code.
SEND-PR: wrong-code       The machine code generated by gcc is incorrect.
SEND-PR: ice-on-legal-code   GCC gives an Internal Compiler Error (ICE)
SEND-PR:                     for correct code
SEND-PR: ice-on-illegal-code GCC gives an ICE instead of reporting an error
SEND-PR: pessimizes-code     GCC misses an important optimization opportunity
SEND-PR: sw-bug              Software bug of some other class than above
SEND-PR: change-request      A feature in GCC is missing.
SEND-PR: support             I need help with gcc.
>Release:	3.0 20010429 (prerelease)
>Environment:
System: Linux karma 2.2.16-22 #1 Tue Aug 22 16:49:06 EDT 2000 i686 unknown
Architecture: i686

	<machine, os, target, libraries (multiple lines)>
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../egcs/configure --prefix=/usr/local/egcs --enable-threads=posix --enable-long-long
>Description:

If i try to compile the source below with -O2, gcc runs for over 45 minutes
and grows to over 300 MB.  On my machine, it exhausts the available
swap space and dies before completing.

Without optimization, it completes in a couple minutes.

gcc 2.95.2 dies immediately with an ICE on this source, regardless
of whether or not optimization is on, so i guess this isn't a regression.

>How-To-Repeat:


namespace std
{


  class dcomplex
  {
  public:
    typedef double value_type;

    dcomplex(double  =0.0, double =0.0);
        
    double real() const;
    double imag() const;
        
    dcomplex& operator=(double);
    
    dcomplex& operator=(const dcomplex&);
    dcomplex& operator+=(const dcomplex&);
    dcomplex& operator-=(const dcomplex&);
    dcomplex& operator*=(const dcomplex&);
    
  private:
    typedef __complex__ double _ComplexT;
    _ComplexT _M_value;

    dcomplex(_ComplexT __z) : _M_value(__z) { }
  };

inline dcomplex
operator*(const dcomplex& __x, const dcomplex& __y)
{ return dcomplex (__x) *= __y; }

inline dcomplex
operator-(const dcomplex& __x, const dcomplex& __y)
{ return dcomplex (__x) -= __y; }

inline dcomplex
operator+(const dcomplex& __x, const dcomplex& __y)
{ return dcomplex (__x) += __y; }

  inline double
  dcomplex::real() const
  { return __real__ _M_value; }

  inline double
  dcomplex::imag() const
  { return __imag__ _M_value; }

  inline
  dcomplex::dcomplex(double __r, double __i)
  {
    __real__ _M_value = __r;
    __imag__ _M_value = __i;
  }

  inline dcomplex&
  dcomplex::operator=(double __d)
  {
    __real__ _M_value = __d;
    __imag__ _M_value = 0.0;
    return *this;
  }



    inline dcomplex&
    dcomplex::operator=(const dcomplex& __z)
    {
      __real__ _M_value = __z.real();
      __imag__ _M_value = __z.imag();
      return *this;
    }
    
    inline dcomplex&
    dcomplex::operator+=(const dcomplex& __z)
    {
      __real__ _M_value += __z.real();
      __imag__ _M_value += __z.imag();
      return *this;
    }

    inline dcomplex&
    dcomplex::operator-=(const dcomplex& __z)
    {
      __real__ _M_value -= __z.real();
      __imag__ _M_value -= __z.imag();
      return *this;
    }

    inline dcomplex&
    dcomplex::operator*=(const dcomplex& __z)
    {
      _ComplexT __t;
      __real__ __t = __z.real();
      __imag__ __t = __z.imag();
      _M_value *= __t;
      return *this;
    }


} // namespace std





typedef std::dcomplex Complex8;

Complex8 determinant(Complex8 _m[6][6])
{
  Complex8 ret  ( 0.0, 0.0 );
  Complex8 ret5 ( 0.0, 0.0 );
  Complex8 ret4 ( 0.0, 0.0 );
  Complex8 ret3 ( 0.0, 0.0 );

  ret3 =
    ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][0]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][1];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][1]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][3];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][0]
  + ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][2];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][3]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][0];


  ret4 += _m[3][2] * ret3;

  ret5 += _m[4][4] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][1]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][3];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][4]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][1];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][1]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][3];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][2];

  ret4 += _m[3][1] * ret3;

  ret5 += _m[4][0] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][2]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][4];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][0]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][3];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][2]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][4]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][0];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][0]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][2]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][3];


  ret4 += _m[3][4] * ret3;

  ret5 += _m[4][1] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][3]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][0]
  + ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][1];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][1]
  + ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][3]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][4];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][0]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][3];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][4]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][0];


  ret4 += _m[3][3] * ret3;

  ret5 += _m[4][2] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][0]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][4];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][0]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][1];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][1]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][4];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][4]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][0]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][2];


  ret4 += _m[3][1] * ret3;

  ret5 += _m[4][3] * ret4;
  ret4 = 0.0;

  ret += _m[5][5] * ret5;
  ret5 = 0.0;


  ret3 =
    ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][2]
  + ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][4]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][5];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][1]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][4];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][5]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][1];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][1]
  + ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][4];


  ret4 += _m[3][5] * ret3;

  ret5 += _m[4][3] * ret4;
  ret4 = 0.0;


  ret3 =
    ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][1]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][2];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][2]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][5];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][5]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][1]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][3];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][5]
  + ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][1];


  ret4 += _m[3][3] * ret3;

  ret5 += _m[4][4] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][1]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][4];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][1]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][2];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][2]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][4];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][1]
  + ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][3];


  ret4 += _m[3][2] * ret3;

  ret5 += _m[4][5] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][3]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][5];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][2]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][4];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][5]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][2];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][2]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][4];


  ret4 += _m[3][5] * ret3;

  ret5 += _m[4][1] * ret4;
  ret4 = 0.0;


  ret3 =
    ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][1]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][3];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][3]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][5];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][1]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][4];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][3]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][5]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][1];

  ret4 += _m[3][4] * ret3;

  ret5 += _m[4][2] * ret4;
  ret4 = 0.0;

  ret += _m[5][0] * ret5;
  ret5 = 0.0;


  ret3 =
    ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][3]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][5];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][0]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][3];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][3]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][5];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][4];


  ret4 += _m[3][3] * ret3;

  ret5 += _m[4][2] * ret4;
  ret4 = 0.0;


  ret3 =
    ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][4]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][0];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][2]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][5];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][4]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][0]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][2];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][2]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][4]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][5];


  ret4 += _m[3][0] * ret3;

  ret5 += _m[4][3] * ret4;
  ret4 = 0.0;


  ret3 =
    ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][5]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][2]
  + ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][3];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][3]
  + ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][5]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][0];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][2]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][5];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][0]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][2];


  ret4 += _m[3][5] * ret3;

  ret5 += _m[4][4] * ret4;
  ret4 = 0.0;


  ret3 =
    ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][2]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][0];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][2]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][3];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][3]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][0];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][0]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][2]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][4];


  ret4 += _m[3][3] * ret3;

  ret5 += _m[4][5] * ret4;
  ret4 = 0.0;


  ret3 =
    ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][4]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][2];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][2]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][5];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][2]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][3];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][3]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][5];


  ret4 += _m[3][2] * ret3;

  ret5 += _m[4][0] * ret4;
  ret4 = 0.0;

  ret += _m[5][1] * ret5;
  ret5 = 0.0;

  ret3 =
    ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][3]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][4];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][4]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][1];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][1]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][3]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][5];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][4]
  + ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][1]
  + ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][3];


  ret4 += _m[3][5] * ret3;

  ret5 += _m[4][0] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][3]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][0];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][3]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][4];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][4]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][0];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][3]
  + ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][5];


  ret4 += _m[3][4] * ret3;

  ret5 += _m[4][1] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][5]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][1];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][4]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][0];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][1]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][4];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][4]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][0];


  ret4 += _m[3][1] * ret3;

  ret5 += _m[4][3] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][3]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][5];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][5]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][1];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][3]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][0];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][5]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][1]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][3];


  ret4 += _m[3][0] * ret3;

  ret5 += _m[4][4] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][3]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][4]
  + ( _m[0][3] * _m[1][4] - _m[0][4] * _m[1][3] ) * _m[2][1];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][3] - _m[0][3] * _m[1][4] ) * _m[2][0]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][3]
  + ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][4];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][4]
  + ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][0]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][1];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][3]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][0];


  ret4 += _m[3][4] * ret3;

  ret5 += _m[4][5] * ret4;
  ret4 = 0.0;

  ret += _m[5][2] * ret5;
  ret5 = 0.0;


  ret3 =
    ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][0]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][2];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][4]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][1];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][0]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][2]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][4];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][4]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][0]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][1];


  ret4 += _m[3][2] * ret3;

  ret5 += _m[4][5] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][1]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][4]
  + ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][5];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][5]
  + ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][1]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][2];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][4]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][1];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][2]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][4];


  ret4 += _m[3][1] * ret3;

  ret5 += _m[4][0] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][4]
  + ( _m[0][2] * _m[1][4] - _m[0][4] * _m[1][2] ) * _m[2][5]
  + ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][2];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][4]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][5];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][5]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][2];

  ret4 += _m[3][4] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][2]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][4]
  + ( _m[0][4] * _m[1][2] - _m[0][2] * _m[1][4] ) * _m[2][0];


  ret4 += _m[3][5] * ret3;

  ret5 += _m[4][1] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][1] * _m[1][4] - _m[0][4] * _m[1][1] ) * _m[2][0]
  + ( _m[0][4] * _m[1][0] - _m[0][0] * _m[1][4] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][4];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][4]
  + ( _m[0][4] * _m[1][1] - _m[0][1] * _m[1][4] ) * _m[2][5]
  + ( _m[0][5] * _m[1][4] - _m[0][4] * _m[1][5] ) * _m[2][1];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][4] * _m[1][5] - _m[0][5] * _m[1][4] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][4]
  + ( _m[0][0] * _m[1][4] - _m[0][4] * _m[1][0] ) * _m[2][5];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][5]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][1];


  ret4 += _m[3][4] * ret3;

  ret5 += _m[4][2] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][5]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][0];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][0]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][2];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][5]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][1];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][2]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][5];


  ret4 += _m[3][1] * ret3;

  ret5 += _m[4][4] * ret4;
  ret4 = 0.0;

  ret += _m[5][3] * ret5;
  ret5 = 0.0;

  ret3 =
    ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][5]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][2];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][5]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][0];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][0]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][2];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][5]
  + ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][1];


  ret4 += _m[3][0] * ret3;

  ret5 += _m[4][3] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][1]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][3];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][0]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][2];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][3]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][0];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][0]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][2];


  ret4 += _m[3][3] * ret3;

  ret5 += _m[4][5] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][2]
  + ( _m[0][1] * _m[1][2] - _m[0][2] * _m[1][1] ) * _m[2][5]
  + ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][1];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][1]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][2]
  + ( _m[0][2] * _m[1][1] - _m[0][1] * _m[1][2] ) * _m[2][3];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][3]
  + ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][5]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][2];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][1]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][3]
  + ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][5];


  ret4 += _m[3][2] * ret3;

  ret5 += _m[4][0] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][5]
  + ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][0]
  + ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][3];

  ret4 += _m[3][2] * ret3;

  ret3 =
    ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][2]
  + ( _m[0][2] * _m[1][0] - _m[0][0] * _m[1][2] ) * _m[2][5]
  + ( _m[0][5] * _m[1][2] - _m[0][2] * _m[1][5] ) * _m[2][0];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][3] - _m[0][3] * _m[1][2] ) * _m[2][0]
  + ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][2]
  + ( _m[0][0] * _m[1][2] - _m[0][2] * _m[1][0] ) * _m[2][3];

  ret4 += _m[3][5] * ret3;

  ret3 =
    ( _m[0][2] * _m[1][5] - _m[0][5] * _m[1][2] ) * _m[2][3]
  + ( _m[0][3] * _m[1][2] - _m[0][2] * _m[1][3] ) * _m[2][5]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][2];


  ret4 += _m[3][0] * ret3;

  ret5 += _m[4][1] * ret4;
  ret4 = 0.0;

  ret3 =
    ( _m[0][3] * _m[1][5] - _m[0][5] * _m[1][3] ) * _m[2][1]
  + ( _m[0][5] * _m[1][1] - _m[0][1] * _m[1][5] ) * _m[2][3]
  + ( _m[0][1] * _m[1][3] - _m[0][3] * _m[1][1] ) * _m[2][5];

  ret4 += _m[3][0] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][0] - _m[0][0] * _m[1][3] ) * _m[2][5]
  + ( _m[0][5] * _m[1][3] - _m[0][3] * _m[1][5] ) * _m[2][0]
  + ( _m[0][0] * _m[1][5] - _m[0][5] * _m[1][0] ) * _m[2][3];

  ret4 += _m[3][1] * ret3;

  ret3 =
    ( _m[0][5] * _m[1][0] - _m[0][0] * _m[1][5] ) * _m[2][1]
  + ( _m[0][0] * _m[1][1] - _m[0][1] * _m[1][0] ) * _m[2][5]
  + ( _m[0][1] * _m[1][5] - _m[0][5] * _m[1][1] ) * _m[2][0];

  ret4 += _m[3][3] * ret3;

  ret3 =
    ( _m[0][3] * _m[1][1] - _m[0][1] * _m[1][3] ) * _m[2][0]
  + ( _m[0][0] * _m[1][3] - _m[0][3] * _m[1][0] ) * _m[2][1]
  + ( _m[0][1] * _m[1][0] - _m[0][0] * _m[1][1] ) * _m[2][3];

  ret4 += _m[3][5] * ret3;
  ret5 += _m[4][2] * ret4;
  ret  += _m[5][4] * ret5;

  return ret;
}



>Fix:
	<how to correct or work around the problem, if known (multiple lines)>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]