/* DO NOT EDIT THIS FILE - it is machine generated (JCGO_116) */

#ifdef JCGO_SEPARATED
#define JCGO_116
#include "jcgortl.h"
#include "Main.h"
#endif

#ifdef JCGO_116

#ifdef CHKALL_gnu_java_math_MPN
#include "jcgobchk.h"
#endif

JCGO_NOSEP_INLINE jint CFASTCALL
gnu_java_math_MPN__mul_1__IAIAII( jintArr dest, jintArr x, jint len,
 jint y )
{
 {
  jlong yword;
  jlong carry;
  yword= (jlong)y & JLONG_C(0xffffffff);
  carry= (jlong)0;
  {
   jint j;
   j= 0;
   for (; j < len; j++)
   {
    carry+= ((jlong)JCGO_ARRAY_IACCESS(x, j) & JLONG_C(0xffffffff)) *
     yword;
    JCGO_ARRAY_IACCESS(dest, j)= ((jint)carry);
    carry= JCGO_LUSHR_F(carry, (jint)32);
   }
  }
  return (jint)carry;
 }
}

JCGO_NOSEP_INLINE jint CFASTCALL
gnu_java_math_MPN__add_1__IAIAII( jintArr dest, jintArr x, jint size,
 jint y )
{
 {
  jlong carry;
  carry= (jlong)y & JLONG_C(0xffffffff);
  {
   jint i;
   i= 0;
   for (; i < size; i++)
   {
    carry+= ((jlong)JCGO_ARRAY_IACCESS(x, i) & JLONG_C(0xffffffff));
    JCGO_ARRAY_IACCESS(dest, i)= ((jint)carry);
    carry= JCGO_LSHR_F(carry, (jint)32);
   }
  }
  return (jint)carry;
 }
}

JCGO_NOSEP_INLINE jlong CFASTCALL
gnu_java_math_MPN__udiv_qrnnd__JI( jlong N, jint D )
{
 {
  jlong q;
  jlong r;
  jlong a1;
  jlong a0;
  a1= JCGO_LUSHR_F(N, (jint)32);
  a0= N & JLONG_C(0xffffffff);
  if (D >= 0)
  {
   if (a1 < (((jlong)D - a1 - JCGO_LUSHR_F(a0, (jint)31)) & JLONG_C(0xffffffff)))
   {
    q= jcgo_ldiv(N, (jlong)D);
    r= jcgo_lmod(N, (jlong)D);
   }
   else
   {
    jlong c;
    c= N - JCGO_LSHL_F((jlong)D, (jint)31);
    q= jcgo_ldiv(c, (jlong)D);
    r= jcgo_lmod(c, (jlong)D);
    q+= (jlong)JCGO_SHL_F((jint)1, (jint)31);
   }
  }
  else
  {
   jlong b1;
   jlong c;
   b1= (jlong)JCGO_USHR_F(D, (jint)1);
   c= JCGO_LUSHR_F(N, (jint)1);
   if (a1 < b1 || JCGO_LSHR_F(a1, (jint)1) < b1)
   {
    if (a1 < b1)
    {
     q= jcgo_ldiv(c, b1);
     r= jcgo_lmod(c, b1);
    }
    else
    {
     c= ~(c - JCGO_LSHL_F(b1, (jint)32));
     q= jcgo_ldiv(c, b1);
     r= jcgo_lmod(c, b1);
     q= (~q) & JLONG_C(0xffffffff);
     r= (b1 - (jlong)(jint)1) - r;
    }
    r= r * (jlong)(jint)2 + (a0 & (jlong)(jint)1);
    if ((D & (jint)1) != 0)
    {
     if (r >= q)
     {
      r= r - q;
     }
     else
     {
      if (q - r <= ((jlong)D & JLONG_C(0xffffffff)))
      {
       r= r - q + (jlong)D;
       q-= (jlong)(jint)1;
      }
      else
      {
       r= r - q + (jlong)D + (jlong)D;
       q-= (jlong)(jint)2;
      }
     }
    }
   }
   else
   {
    if (a0 >= ((jlong)(-D) & JLONG_C(0xffffffff)))
    {
     q= (jlong)(-(jint)1);
     r= a0 + (jlong)D;
    }
    else
    {
     q= (jlong)(-(jint)2);
     r= a0 + (jlong)D + (jlong)D;
    }
   }
  }
  return JCGO_LSHL_F(r, (jint)32) | (q & JLONG_C(0xffffffff));
 }
}

JCGO_NOSEP_FRWINL jint CFASTCALL
gnu_java_math_MPN__divmod_1__IAIAII( jintArr quotient, jintArr dividend,
 jint len, jint divisor )
{
 {
  jlong r;
  jint i;
  i= len - (jint)1;
  r= (jlong)(JCGO_ARRAY_IACCESS(dividend, i));
  if ((r & JLONG_C(0xffffffff)) >= ((jlong)divisor & JLONG_C(0xffffffff)))
  {
   r= (jlong)0;
  }
  else
  {
   JCGO_ARRAY_IACCESS(quotient, i--)= 0;
   r= JCGO_LSHL_F(r, (jint)32);
  }
  for (; i >= 0; i--)
  {
   jint n0;
   n0= JCGO_ARRAY_NZIACCESS(dividend, i);
   r= (r & JLONG_C(0xffffffff00000000)) | ((jlong)n0 & JLONG_C(0xffffffff));
   r= (gnu_java_math_MPN__udiv_qrnnd__JI(
    r, divisor));
   JCGO_ARRAY_IACCESS(quotient, i)= ((jint)r);
  }
  return (jint)JCGO_LSHR_F(r, (jint)32);
 }
}

JCGO_NOSEP_STATIC jint CFASTCALL
gnu_java_math_MPN__chars_per_word__I( jint radix )
{
 {
  if (radix < (jint)10)
  {
   if (radix < (jint)8)
   {
    if (radix <= (jint)2)
    {
     return (jint)32;
    }
    else
    {
     if (radix == (jint)3)
     {
      return (jint)20;
     }
     else
     {
      if (radix == (jint)4)
      {
       return (jint)16;
      }
      else
      {
       return (jint)18 - radix;
      }
     }
    }
   }
   else
   {
    return (jint)10;
   }
  }
  else
  {
   if (radix < (jint)12)
   {
    return (jint)9;
   }
   else
   {
    if (radix <= (jint)16)
    {
     return (jint)8;
    }
    else
    {
     if (radix <= (jint)23)
     {
      return (jint)7;
     }
     else
     {
      if (radix <= (jint)40)
      {
       return (jint)6;
      }
      else
      {
       if (radix <= (jint)256)
       {
        return (jint)4;
       }
       else
       {
        return (jint)1;
       }
      }
     }
    }
   }
  }
 }
}

JCGO_NOSEP_FRWINL jint CFASTCALL
gnu_java_math_MPN__set_str__IABAII( jintArr dest, jbyteArr str, jint
 str_len, jint base )
{
 {
  jint size;
  size= 0;
  if ((base & (base - (jint)1)) == 0)
  {
   jint next_bitpos;
   jint bits_per_indigit;
   jint res_digit;
   next_bitpos= 0;
   bits_per_indigit= 0;
   {
    jint i;
    i= base;
    for (; (i= JCGO_SHR_F(i, (jint)1)) != 0;)
    {
     bits_per_indigit++;
    }
   }
   res_digit= 0;
   {
    jint i;
    i= str_len;
    for (; --i >= 0;)
    {
     jint inp_digit;
     inp_digit= (jint)(JCGO_ARRAY_BACCESS(str, i));
     res_digit|= JCGO_SHL_F(inp_digit, next_bitpos);
     next_bitpos+= bits_per_indigit;
     if (next_bitpos >= (jint)32)
     {
      JCGO_ARRAY_IACCESS(dest, size++)= res_digit;
      next_bitpos-= (jint)32;
      res_digit= JCGO_SHR_F(inp_digit, (bits_per_indigit - next_bitpos));
     }
    }
   }
   if (res_digit != 0)
   {
    JCGO_ARRAY_IACCESS(dest, size++)= res_digit;
   }
  }
  else
  {
   jint indigits_per_limb;
   jint str_pos;
   indigits_per_limb= (gnu_java_math_MPN__chars_per_word__I(
    base));
   str_pos= 0;
   while (str_pos < str_len)
   {
    jint chunk;
    jint res_digit;
    jint big_base;
    jint cy_limb;
    chunk= str_len - str_pos;
    if (chunk > indigits_per_limb)
    {
     chunk= indigits_per_limb;
    }
    res_digit= (jint)(JCGO_ARRAY_BACCESS(str, str_pos++));
    big_base= base;
    while (--chunk > 0)
    {
     res_digit= res_digit * base + JCGO_ARRAY_NZBACCESS(str, str_pos++);
     big_base*= base;
    }
    ;
    if (size == 0)
    {
     cy_limb= res_digit;
    }
    else
    {
     cy_limb= (gnu_java_math_MPN__mul_1__IAIAII(
      dest, dest, size, big_base));
     cy_limb+= (gnu_java_math_MPN__add_1__IAIAII(
      dest, dest, size, res_digit));
    }
    if (cy_limb != 0)
    {
     JCGO_ARRAY_IACCESS(dest, size++)= cy_limb;
    }
   }
  }
  return size;
 }
}

JCGO_NOSEP_STATIC gnu_java_math_MPN CFASTCALL
gnu_java_math_MPN__this__( gnu_java_math_MPN This )
{
 {
  ;
 }
 return This;
}

JCGO_NOSEP_DATA CONST struct gnu_java_math_MPN_methods_s gnu_java_math_MPN_methods=
{
 JCGO_CLASSREF_OF(gnu_java_math_MPN__class),
 JCGO_GCJDESCR_ZEROINIT
 OBJT_gnu_java_math_MPN,
 -(JCGO_OBJSIZE_T)sizeof(struct gnu_java_math_MPN_s),
 NULL,
 JCGO_CLINIT_INIT(0)
 gnu_java_math_MPN__this__,
 java_lang_Object__equals__Lo,
 java_lang_Object__hashCode__,
 java_lang_Object__toString__,
 java_lang_Object__finalize__
};

JCGO_NOSEP_DATA JCGO_NOTHR_CONST struct gnu_java_math_MPN_class_s
 gnu_java_math_MPN__class JCGO_THRD_ATTRNONGC=
{
 {
  &java_lang_Class_methods,
  JCGO_MON_INIT
  JCGO_OBJREF_OF(*(java_lang_Object)&gnu_java_math_MPN_methods),
  JCGO_STRREF_OF(jcgo_string1_Mpn),
  JCGO_CLASSREF_OF(java_lang_Object__class),
  ((jObjectArr)JCGO_OBJREF_OF(jcgo_array3_Object)),
  0x1
 }
};

JCGO_NOSEP_DATA CONST jcgo_arrtype492_Mdclnt jcgo_array2_Mpn=
{
 (jvtable)&jbyteArr_methods,
 JCGO_MON_INIT
 17,
 {
  (jbyte)(jchar)103/*'g'*/, (jbyte)(jchar)110/*'n'*/, (jbyte)(jchar)117/*'u'*/,
   (jbyte)(jchar)46/*'.'*/, (jbyte)(jchar)106/*'j'*/, (jbyte)(jchar)97/*'a'*/,
   (jbyte)(jchar)118/*'v'*/, (jbyte)(jchar)97/*'a'*/, (jbyte)(jchar)46/*'.'*/,
   (jbyte)(jchar)109/*'m'*/, (jbyte)(jchar)97/*'a'*/, (jbyte)(jchar)116/*'t'*/,
   (jbyte)(jchar)104/*'h'*/, (jbyte)(jchar)46/*'.'*/, (jbyte)(jchar)77/*'M'*/,
   (jbyte)(jchar)80/*'P'*/, (jbyte)(jchar)78/*'N'*/
 }
};

JCGO_NOSEP_DATA JCGO_NOTHR_CONST struct java_lang_String_s jcgo_string1_Mpn
 JCGO_THRD_ATTRNONGC=
{
 &java_lang_String_methods,
 JCGO_MON_INIT
 (java_lang_Object)JCGO_OBJREF_OF(jcgo_array2_Mpn),
 0, 17, (jint)0x9c2057f1L
};

#ifdef CHKALL_gnu_java_math_MPN
#include "jcgochke.h"
#endif

#endif
