From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1530 invoked by alias); 2 Apr 2002 09:16:10 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 1482 invoked by uid 71); 2 Apr 2002 09:16:03 -0000 Date: Tue, 02 Apr 2002 01:16:00 -0000 Message-ID: <20020402091603.1479.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Scott Snyder Subject: Re: optimization/2692: excessive compile time with optimization Reply-To: Scott Snyder X-SW-Source: 2002-04/txt/msg00066.txt.bz2 List-Id: The following reply was made to PR optimization/2692; it has been noted by GNATS. From: Scott Snyder To: rth@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, snyder@fnal.gov, gcc-gnats@gcc.gnu.org Cc: Subject: Re: optimization/2692: excessive compile time with optimization Date: 02 Apr 2002 03:11:25 -0600 From: scott snyder Subject: optimization/2692: excessive compile time with optimization To: gcc-bugs@gcc.gnu.org Date: Fri, 18 May 2001 15:34:07 -0500 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: >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 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: