// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::varnode_optimise_sf4(exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [4])
inline expression_node_ptr varnode_optimise_sf4(const details::operator_type& operation, expression_node_ptr (&branch)[4])
         {
            typedef details::variable_node<Type>* variable_ptr;

            const Type& v0 = static_cast<variable_ptr>(branch[0])->ref();
            const Type& v1 = static_cast<variable_ptr>(branch[1])->ref();
            const Type& v2 = static_cast<variable_ptr>(branch[2])->ref();
            const Type& v3 = static_cast<variable_ptr>(branch[3])->ref();

            switch (operation)
            {
               #define case_stmt(op)                                                                 \
               case details::e_sf##op : return node_allocator_->                                     \
                             allocate_rrrr<details::sf4_var_node<Type,details::sf##op##_op<Type> > > \
                                (v0, v1, v2, v3);                                                    \

               case_stmt(48) case_stmt(49) case_stmt(50) case_stmt(51)
               case_stmt(52) case_stmt(53) case_stmt(54) case_stmt(55)
               case_stmt(56) case_stmt(57) case_stmt(58) case_stmt(59)
               case_stmt(60) case_stmt(61) case_stmt(62) case_stmt(63)
               case_stmt(64) case_stmt(65) case_stmt(66) case_stmt(67)
               case_stmt(68) case_stmt(69) case_stmt(70) case_stmt(71)
               case_stmt(72) case_stmt(73) case_stmt(74) case_stmt(75)
               case_stmt(76) case_stmt(77) case_stmt(78) case_stmt(79)
               case_stmt(80) case_stmt(81) case_stmt(82) case_stmt(83)
               case_stmt(84) case_stmt(85) case_stmt(86) case_stmt(87)
               case_stmt(88) case_stmt(89) case_stmt(90) case_stmt(91)
               case_stmt(92) case_stmt(93) case_stmt(94) case_stmt(95)
               case_stmt(96) case_stmt(97) case_stmt(98) case_stmt(99)
               #undef case_stmt
               default : return error_node();
            }
         }

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movq %rsi, 0x40(%rsp)
movq %rdx, 0x38(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x38(%rsp), %rax
movq (%rax), %rdi
callq 0x235f80
movq %rax, 0x30(%rsp)
movq 0x38(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x235f80
movq %rax, 0x28(%rsp)
movq 0x38(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x235f80
movq %rax, 0x20(%rsp)
movq 0x38(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x235f80
movq %rax, 0x18(%rsp)
movq 0x40(%rsp), %rax
movl (%rax), %eax
addl $0xfffffbe8, %eax       # imm = 0xFFFFFBE8
movl %eax, %ecx
movq %rcx, 0x10(%rsp)
subl $0x33, %eax
ja 0x4ff170
movq 0x10(%rsp), %rax
leaq 0xa19b4(%rip), %rcx     # 0x5a0234
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500850
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5008f0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500990
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500a30
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500ad0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500b70
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500c10
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500cb0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500d50
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500df0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500e90
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500f30
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x500fd0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501070
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501110
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5011b0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501250
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5012f0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501390
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501430
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5014d0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501570
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501610
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5016b0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501750
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5017f0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501890
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501930
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5019d0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501a70
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501b10
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501bb0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501c50
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501cf0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501d90
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501e30
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501ed0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x501f70
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502010
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5020b0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502150
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5021f0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502290
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502330
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5023d0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502470
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502510
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5025b0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502650
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x5026f0
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502790
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %r8
callq 0x502830
movq %rax, 0x50(%rsp)
jmp 0x4ff17a
callq 0x2821f0
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
nop