_start( _unknown_ __l7, // r23 _unknown_ __i7, // r31 _unknown_ __flags // r33 ) {// addr = 0x000104F4 _unknown_ _t10; // _t10 _unknown_ _t11; // _t11 _unknown_ _t12; // _t12 _unknown_ _t13; // _t13 _unknown_ _t20; // _t20 _unknown_ _t21; // _t21 _unknown_ _t23; // _t23 _unknown_ _t26; // _t26 _unknown_ _t27; // _t27 _unknown_ _t28; // _t28 void _t31; // _t31 _unknown_ _t35; // _t35 _unknown_ _t36; // _t36 _unknown_ _t37; // _t37 _unknown_ _t40; // _t40 _unknown_ _t41; // _t41 _unknown_ _t44; // _t44 _unknown_ _t46; // _t46 _unknown_ _t47; // _t47 _unknown_ _t48; // _t48 _unknown_ _t49; // _t49 char* _t50; // _t50 _unknown_ _t51; // _t51 _unknown_ _t53; // _t53 _unknown_ _t54; // _t54 _unknown_ _t56; // _t56 _unknown_ _t57; // _t57 _unknown_ _t58; // _t58 _unknown_ _t61; // _t61 __i7 = __i7; asm("orcc %g0, %g1, %g0"); if(__flags) { atexit(); } atexit(); _init(__i7); "/usr/lib/ld.so.1" = "/usr/lib/ld.so.1"; main(__i7); exit(); "/usr/lib/ld.so.1" = "/usr/lib/ld.so.1"; _exit(); goto (__o7 + 8); L3(); _t56 = &_START_ + 744; if( *((void*)( *((void*)(_t56 + ("/usr/lib/ld.so.1" | 12))))) - "/usr/lib/ld.so.1") { _t31 = *((void*)( *((void*)( *((void*)(_t56 + ("/usr/lib/ld.so.1" | 16))))))); asm("be,a 0x00000034"); _t50 = "/usr/lib/ld.so.1"; while(1) { goto (_t31 + "/usr/lib/ld.so.1"); if( *( *_t50) - "/usr/lib/ld.so.1") { break; } } if( *((void*)(_t56 + ("/usr/lib/ld.so.1" | 36))) - "/usr/lib/ld.so.1") { L000208E0(); } }
#define L5(b) (B4(b) << 0xC) /* f3x5[] each symbol is 3x5 => 15 bits a-z offset 0 length 26 0-9 offset 26 length 10 # offset 36 length 1 */ unsigned short f3x5[] = { // A L1(011) | L2(101) | L3(101) | L4(111) | L5(101) , // B L1(110) | L2(101) | L3(110) | L4(101) | L5(110) , // C L1(011) | L2(101) | L3(100) | L4(100) |
void GPTableGenerator::generate_constants_table() { int i; bind("gp_constants"); static const GPTemplate gp_templates[] = { GP_SYMBOLS_DO(DEFINE_GP_POINTER, DEFINE_GP_VALUE) {NULL, 0, 0, 0} }; for (const GPTemplate* tmpl = gp_templates; tmpl->name; tmpl++) { if (tmpl->is_pointer) { char buff[120]; jvm_sprintf(buff, "gp_%s_ptr", tmpl->name); bind(buff); Label L(tmpl->name); if (!tmpl->is_asm) { import(L); } define_long(L); } else { if (jvm_strcmp(tmpl->name, "current_thread") == 0) { bind("jvm_fast_globals"); } char buff[120]; jvm_sprintf(buff, "_%s", tmpl->name); bind(buff); if (jvm_strcmp(tmpl->name, "bit_selector") == 0) { // IMPL_NOTE: create a common framework to define initial values define_long(0x80808080); } else { define_zeros(tmpl->size); } } } if (!GenerateGPTableOnly) { // Some constants to check we've linked with the right ROM Label L1(XSTR(_ROM_LINKCHECK_HLE)); import(L1); define_long(L1); Label L2(XSTR(_ROM_LINKCHECK_MFFD)); import(L2); define_long(L2); Label L3(XSTR(_ROM_LINKCHECK_MFFL)); import(L3); define_long(L3); } if (ENABLE_THUMB_GP_TABLE && GenerateGPTableOnly) { // These symbols are necessary to link romgen. // We define a long for each entry, since they // should be bound to different addresses. bind("jvm_ladd"); define_long(0); bind("jvm_lsub"); define_long(0); bind("jvm_land"); define_long(0); bind("jvm_lor"); define_long(0); bind("jvm_lxor"); define_long(0); bind("jvm_lcmp"); define_long(0); bind("jvm_lmin"); define_long(0); bind("jvm_lmax"); define_long(0); bind("jvm_lmul"); define_long(0); bind("jvm_lshl"); define_long(0); bind("jvm_lshr"); define_long(0); bind("jvm_lushr"); define_long(0); } bind("gp_constants_end"); }
MatrixXd der_logarithm_map(Matrix4d T) { MatrixXd dlogT_dT = MatrixXd::Zero(6,12); // Approximate derivative of the logarithm_map wrt the transformation matrix Matrix3d L1 = Matrix3d::Zero(); Matrix3d L2 = Matrix3d::Zero(); Matrix3d L3 = Matrix3d::Zero(); Matrix3d Vinv = Matrix3d::Identity(); Vector6d x = logmap_se3(T); // estimates the cosine, sine, and theta double b; double cos_ = 0.5 * (T.block(0,0,3,3).trace() - 1.0 ); if(cos_ > 1.f) cos_ = 1.f; else if (cos_ < -1.f) cos_ = -1.f; double theta = acos(cos_); double theta2 = theta*theta; double sin_ = sin(theta); double cot_ = 1.0 / tan( 0.5*theta ); double csc2_ = pow( 1.0/sin(0.5*theta) ,2); // if the angle is small... if( cos_ > 0.9999 ) { b = 0.5; L1(1,2) = -b; L1(2,1) = b; L2(0,2) = b; L2(2,0) = -b; L3(0,1) = -b; L3(1,0) = b; // form the full derivative dlogT_dT.block(3,0,3,3) = L1; dlogT_dT.block(3,3,3,3) = L2; dlogT_dT.block(3,6,3,3) = L3; dlogT_dT.block(0,9,3,3) = Vinv; } // if not... else { // rotation part double k; Vector3d a; a(0) = T(2,1) - T(1,2); a(1) = T(0,2) - T(2,0); a(2) = T(1,0) - T(0,1); k = ( theta * cos_ - sin_ ) / ( 4 * pow(sin_,3) ); a = k * a; L1.block(0,0,3,1) = a; L2.block(0,1,3,1) = a; L3.block(0,2,3,1) = a; // translation part Matrix3d w_skew = skew( x.tail(3) ); Vinv += w_skew * (1.f-cos_) / theta2 + w_skew * w_skew * (theta - sin_) / pow(theta,3); Vinv = Vinv.inverse().eval(); // dVinv_dR Vector3d t; Matrix3d B, skew_t; MatrixXd dVinv_dR(3,9); t = T.block(0,3,3,1); skew_t = skew( t ); // - form a a = (theta*cos_-sin_)/(8.0*pow(sin_,3)) * w_skew * t + ( (theta*sin_-theta2*cos_)*(0.5*theta*cot_-1.0) - theta*sin_*(0.25*theta*cot_+0.125*theta2*csc2_-1.0))/(4.0*theta2*pow(sin_,4)) * w_skew * w_skew * t; // - form B Vector3d w; Matrix3d dw_dR; w = x.tail(3); dw_dR.row(0) << -w(1)*t(1)-w(2)*t(2), 2.0*w(1)*t(0)-w(0)*t(1), 2.0*w(2)*t(0)-w(0)*t(2); dw_dR.row(1) << -w(1)*t(0)+2.0*w(0)*t(1), -w(0)*t(0)-w(2)*t(2), 2.0*w(2)*t(1)-w(1)*t(2); dw_dR.row(2) << -w(2)*t(0)+2.0*w(0)*t(2), -w(2)*t(1)+2.0*w(1)*t(2), -w(0)*t(0)-w(1)*t(1); B = -0.5*theta*skew_t/sin_ - (theta*cot_-2.0)*dw_dR/(8.0*pow(sin_,2)); // - form dVinv_dR dVinv_dR.col(0) = a; dVinv_dR.col(1) = -B.col(2); dVinv_dR.col(2) = B.col(1); dVinv_dR.col(3) = B.col(2); dVinv_dR.col(4) = a; dVinv_dR.col(5) = -B.col(0); dVinv_dR.col(6) = -B.col(1); dVinv_dR.col(7) = B.col(0); dVinv_dR.col(8) = a; // form the full derivative dlogT_dT.block(3,0,3,3) = L1; dlogT_dT.block(3,3,3,3) = L2; dlogT_dT.block(3,6,3,3) = L3; dlogT_dT.block(0,9,3,3) = Vinv; dlogT_dT.block(0,0,3,9) = dVinv_dR; } return dlogT_dT; }