/* 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_java_math_BigInteger
#include "jcgobchk.h"
#endif

JCGO_NOSEP_INLINE void CFASTCALL
java_math_BigInteger__void( java_math_BigInteger This )
{
}

JCGO_NOSEP_STATIC java_math_BigInteger CFASTCALL
java_math_BigInteger__this__LsI( java_math_BigInteger This, java_lang_String
 val, jint radix )
{
 {
  java_math_BigInteger result;
  (java_lang_Number__this__((java_lang_Number)This));
  result= (java_math_BigInteger__valueOf__LsI(
   val, radix));
  JCGO_FIELD_NZACCESS(This, ival)= JCGO_FIELD_ACCESS(java_math_BigInteger,
   result, ival);
  JCGO_FIELD_NZACCESS(This, words)= JCGO_FIELD_NZACCESS(result, words);
 }
 return This;
}

JCGO_NOSEP_STATIC java_math_BigInteger CFASTCALL
java_math_BigInteger__this__I( java_math_BigInteger This, jint value
 )
{
 {
  (java_lang_Number__this__((java_lang_Number)This));
  JCGO_FIELD_NZACCESS(This, ival)= value;
 }
 return This;
}

JCGO_NOSEP_INLINE java_math_BigInteger CFASTCALL
java_math_BigInteger__new__I( jint value )
{
 return java_math_BigInteger__this__I(
  (java_math_BigInteger)jcgo_newObject((jvtable)&java_math_BigInteger_methods),
  value);
}

JCGO_NOSEP_STATIC java_math_BigInteger CFASTCALL
java_math_BigInteger__this__( java_math_BigInteger This )
{
 {
  (java_lang_Number__this__((java_lang_Number)This));
 }
 return This;
}

JCGO_NOSEP_INLINE java_math_BigInteger CFASTCALL
java_math_BigInteger__new__( void )
{
 return java_math_BigInteger__this__(
  (java_math_BigInteger)jcgo_newObject((jvtable)&java_math_BigInteger_methods));
}

JCGO_NOSEP_INLINE java_math_BigInteger CFASTCALL
java_math_BigInteger__alloc__I( jint nwords )
{
 {
  java_math_BigInteger result;
  result= java_math_BigInteger__new__();
  if (nwords > (jint)1)
  {
   JCGO_FIELD_NZACCESS(result, words)= (jintArr)jcgo_newArray(JCGO_CORECLASS_FOR(OBJT_jint),
    0, nwords);
  }
  return result;
 }
}

JCGO_NOSEP_INLINE jint CFASTCALL
java_math_BigInteger__wordsNeeded__IAI( jintArr words, jint len )
{
 {
  jint i;
  i= len;
  if (i > 0)
  {
   jint word;
   word= JCGO_ARRAY_IACCESS(words, --i);
   if (word == (-(jint)1))
   {
    while (i > 0 && (word= JCGO_ARRAY_NZIACCESS(words, i - (jint)1)) <
     0)
    {
     i--;
     if (word != (-(jint)1))
     {
      break;
     }
    }
   }
   else
   {
    while (word == 0 && i > 0 && (word= JCGO_ARRAY_NZIACCESS(words,
     i - (jint)1)) >= 0)
    {
     i--;
    }
   }
  }
  return i + (jint)1;
 }
}

JCGO_NOSEP_INLINE java_math_BigInteger CFASTCALL
java_math_BigInteger__make__IAI( jintArr words, jint len )
{
 {
  java_math_BigInteger num;
  if (words == jnull)
  {
   return (java_math_BigInteger__valueOf__J(
    (jlong)len));
  }
  len= (java_math_BigInteger__wordsNeeded__IAI(
   words, len));
  if (len <= (jint)1)
  {
   return len == 0? java_math_BigInteger__ZERO : (java_math_BigInteger__valueOf__J(
    (jlong)(JCGO_ARRAY_NZIACCESS(words, 0))));
  }
  num= java_math_BigInteger__new__();
  JCGO_FIELD_NZACCESS(num, words)= words;
  JCGO_FIELD_NZACCESS(num, ival)= len;
  return num;
 }
}

JCGO_NOSEP_INLINE java_math_BigInteger CFASTCALL
java_math_BigInteger__valueOf__BAIZI( jbyteArr digits, jint byte_len,
 jint radix, jboolean negative )
{
 {
  jintArr words;
  jint chars_per_word;
  jint size;
  chars_per_word= (gnu_java_math_MPN__chars_per_word__I(
   radix));
  words= (jintArr)jcgo_newArray(JCGO_CORECLASS_FOR(OBJT_jint), 0, jcgo_div(byte_len,
   chars_per_word) + (jint)1);
  size= (gnu_java_math_MPN__set_str__IABAII(
   words, digits, byte_len, radix));
  if (size == 0)
  {
   return java_math_BigInteger__ZERO;
  }
  if (JCGO_ARRAY_NZIACCESS(words, size - (jint)1) < 0)
  {
   JCGO_ARRAY_NZIACCESS(words, size++)= 0;
  }
  if (negative)
  {
   (java_math_BigInteger__negate__IAIAI(
    words, words, size));
  }
  return (java_math_BigInteger__make__IAI(
   words, size));
 }
}

JCGO_NOSEP_FRWINL java_math_BigInteger CFASTCALL
java_math_BigInteger__valueOf__LsI( java_lang_String s, jint radix
 )
{
 {
  jbyteArr bytes;
  jint len;
  jint i;
  jint digit;
  jint byte_len;
  jchar ch;
  jboolean negative;
  len= (JCGO_CALL_FINALF(s) java_lang_String__length__(
   s));
  if (len <= (jint)15 && radix <= (jint)16)
  {
   return (java_math_BigInteger__valueOf__J(
    (java_lang_Long__parseLong__LsI(
    s, radix))));
  }
  ;
  ch= (java_lang_String__charAt__I(
   s, 0));
  if (ch == (jchar)45/*'-'*/)
  {
   negative= (jboolean)jtrue;
   i= (jint)1;
   bytes= (jbyteArr)jcgo_newArray(JCGO_CORECLASS_FOR(OBJT_jbyte), 0,
    len - (jint)1);
  }
  else
  {
   negative= (jboolean)jfalse;
   i= 0;
   bytes= (jbyteArr)jcgo_newArray(JCGO_CORECLASS_FOR(OBJT_jbyte), 0,
    len);
  }
  byte_len= 0;
  for (; i < len; i++)
  {
   ch= (java_lang_String__charAt__I(
    s, i));
   digit= (java_lang_Character__digit__CI(
    radix, ch));
   if (digit < 0)
   {
    JCGO_THROW_EXC(java_lang_NumberFormatException__new__());
   }
   JCGO_ARRAY_NZBACCESS(bytes, byte_len++)= ((jbyte)digit);
  }
  return (java_math_BigInteger__valueOf__BAIZI(
   bytes, byte_len, radix, (jboolean)negative));
 }
}

JCGO_NOSEP_INLINE jboolean CFASTCALL
java_math_BigInteger__equals__L03o76L03o76( java_math_BigInteger x,
 java_math_BigInteger y )
{
 {
  if (JCGO_FIELD_ACCESS(java_math_BigInteger, x, words) == jnull &&
   JCGO_FIELD_ACCESS(java_math_BigInteger, y, words) == jnull)
  {
   return (jboolean)(JCGO_FIELD_NZACCESS(x, ival) == JCGO_FIELD_ACCESS(java_math_BigInteger,
    y, ival));
  }
  if (JCGO_FIELD_NZACCESS(x, words) == jnull || JCGO_FIELD_ACCESS(java_math_BigInteger,
   y, words) == jnull || JCGO_FIELD_NZACCESS(x, ival) != JCGO_FIELD_ACCESS(java_math_BigInteger,
   y, ival))
  {
   return (jboolean)jfalse;
  }
  {
   jint i;
   i= JCGO_FIELD_NZACCESS(x, ival);
   for (; --i >= 0;)
   {
    jint jcgo_rcvrI1;
    if ((jcgo_rcvrI1= JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(x, words),
     i), jcgo_rcvrI1 != JCGO_ARRAY_IACCESS(JCGO_FIELD_ACCESS(java_math_BigInteger,
     y, words), i)))
    {
     return (jboolean)jfalse;
    }
   }
  }
  return (jboolean)jtrue;
 }
}

JCGO_NOSEP_INLINE jboolean CFASTCALL
java_math_BigInteger__isNegative__( java_math_BigInteger This )
{
 {
  return (jboolean)((JCGO_FIELD_NZACCESS(This, words) == jnull? JCGO_FIELD_NZACCESS(This,
   ival) : JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This, words), JCGO_FIELD_NZACCESS(This,
   ival) - (jint)1)) < 0);
 }
}

JCGO_NOSEP_INLINE void CFASTCALL
java_math_BigInteger__getAbsolute__IA( java_math_BigInteger This,
 jintArr words )
{
 {
  jint len;
  if (JCGO_FIELD_NZACCESS(This, words) == jnull)
  {
   len= (jint)1;
   JCGO_ARRAY_IACCESS(words, 0)= (JCGO_FIELD_NZACCESS(This, ival));
  }
  else
  {
   len= JCGO_FIELD_NZACCESS(This, ival);
   {
    jint i;
    i= len;
    for (; --i >= 0;)
    {
     jint jcgo_rcvrI1;
     (jcgo_rcvrI1= JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This, words),
      i), JCGO_ARRAY_IACCESS(words, i)= jcgo_rcvrI1);
    }
   }
  }
  if (JCGO_ARRAY_IACCESS(words, len - (jint)1) < 0)
  {
   (java_math_BigInteger__negate__IAIAI(
    words, words, len));
  }
  {
   jint i;
   i= JCGO_ARRAY_NZLENGTH(words);
   for (; --i > len;)
   {
    JCGO_ARRAY_NZIACCESS(words, i)= 0;
   }
  }
 }
}

JCGO_NOSEP_INLINE void CFASTCALL
java_math_BigInteger__format__IL8whtv( java_math_BigInteger This,
 java_lang_StringBuffer buffer, jint radix )
{
 {
  if (JCGO_FIELD_NZACCESS(This, words) == jnull)
  {
   struct java_lang_String_s jcgo_stackobj1;
   (JCGO_CALL_FINALF(buffer) java_lang_StringBuffer__append__Ls(
    buffer, (java_lang_Integer__toString__IIX(
    JCGO_FIELD_NZACCESS(This, ival), radix, JCGO_STACKOBJ_NEW(jcgo_stackobj1,
    java_lang_String_methods)))));
  }
  else
  {
   if (JCGO_FIELD_NZACCESS(This, ival) <= (jint)2)
   {
    (JCGO_CALL_FINALF(buffer) java_lang_StringBuffer__append__Ls(
     buffer, (java_lang_Long__toString__JI(
     (java_math_BigInteger__longValue__(
     This)), radix))));
   }
   else
   {
    jintArr work;
    jint len;
    jboolean neg;
    neg= (java_math_BigInteger__isNegative__(
     This));
    if (neg || radix != (jint)16)
    {
     work= (jintArr)jcgo_newArray(JCGO_CORECLASS_FOR(OBJT_jint), 0,
      JCGO_FIELD_NZACCESS(This, ival));
     (java_math_BigInteger__getAbsolute__IA(
      This, work));
    }
    else
    {
     work= JCGO_FIELD_NZACCESS(This, words);
    }
    len= JCGO_FIELD_NZACCESS(This, ival);
    if (radix == (jint)16)
    {
     jint buf_start;
     if (neg)
     {
      (JCGO_CALL_FINALF(buffer) java_lang_StringBuffer__append__C(
       buffer, (jchar)45/*'-'*/));
     }
     buf_start= (JCGO_CALL_FINALF(buffer) java_lang_StringBuffer__length__(
      buffer));
     {
      jint i;
      i= len;
      for (; --i >= 0;)
      {
       jint word;
       word= JCGO_ARRAY_IACCESS(work, i);
       {
        jint j;
        j= (jint)8;
        for (; --j >= 0;)
        {
         jint hex_digit;
         hex_digit= JCGO_SHR_F(word, (j * (jint)4)) & (jint)15;
         if (hex_digit > 0 || (java_lang_StringBuffer__length__(
          buffer)) > buf_start)
         {
          (java_lang_StringBuffer__append__C(
           buffer, (java_lang_Character__forDigit__II(
           hex_digit, (jint)16))));
         }
        }
       }
      }
     }
    }
    else
    {
     jint i;
     jint j;
     i= (JCGO_CALL_FINALF(buffer) java_lang_StringBuffer__length__(
      buffer));
     for (;;)
     {
      jint digit;
      digit= (gnu_java_math_MPN__divmod_1__IAIAII(
       work, work, len, radix));
      (java_lang_StringBuffer__append__C(
       buffer, (java_lang_Character__forDigit__II(
       digit, radix))));
      while (len > 0 && JCGO_ARRAY_NZIACCESS(work, len - (jint)1) ==
       0)
      {
       len--;
      }
      if (len == 0)
      {
       break;
      }
     }
     if (neg)
     {
      (java_lang_StringBuffer__append__C(
       buffer, (jchar)45/*'-'*/));
     }
     j= (java_lang_StringBuffer__length__(
      buffer)) - (jint)1;
     while (i < j)
     {
      jchar tmp;
      tmp= (java_lang_StringBuffer__charAt__I(
       buffer, i));
      (java_lang_StringBuffer__setCharAt__IC(
       buffer, i, (java_lang_StringBuffer__charAt__I(
       buffer, j))));
      (java_lang_StringBuffer__setCharAt__IC(
       buffer, j, tmp));
      i++;
      j--;
     }
    }
   }
  }
 }
}

JCGO_NOSEP_INLINE java_math_BigInteger CFASTCALL
java_math_BigInteger__this__Ls( java_math_BigInteger This, java_lang_String
 val )
{
 {
  (java_math_BigInteger__this__LsI((java_math_BigInteger)This, val,
   (jint)10));
 }
 return This;
}

JCGO_NOSEP_FRWINL java_math_BigInteger CFASTCALL
java_math_BigInteger__new__Ls( java_lang_String val )
{
 JCGO_CLINIT_TRIG(java_math_BigInteger__class);
 return java_math_BigInteger__this__Ls(
  (java_math_BigInteger)jcgo_newObject((jvtable)&java_math_BigInteger_methods),
  val);
}

JCGO_NOSEP_STATIC java_math_BigInteger CFASTCALL
java_math_BigInteger__valueOf__J( jlong val )
{
 {
  java_math_BigInteger result;
  jint i;
  if (val >= java_math_BigInteger__minFixNum && val <= java_math_BigInteger__maxFixNum)
  {
   return ((java_math_BigInteger)JCGO_ARRAY_NZLACCESS(java_math_BigInteger__smallFixNums,
    (jint)val - java_math_BigInteger__minFixNum));
  }
  i= (jint)val;
  if ((jlong)i == val)
  {
   return (java_math_BigInteger__new__I(
    i));
  }
  result= (java_math_BigInteger__alloc__I(
   (jint)2));
  JCGO_FIELD_NZACCESS(result, ival)= (jint)2;
  JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(result, words), 0)= i;
  JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(result, words), (jint)1)=
   ((jint)JCGO_LSHR_F(val, (jint)32));
  return result;
 }
}

JCGO_NOSEP_INLINE java_lang_String CFASTCALL
java_math_BigInteger__toString__( java_math_BigInteger This )
{
 {
  return (java_math_BigInteger__toString__I(
   This, (jint)10));
 }
}

JCGO_NOSEP_STATIC java_lang_String CFASTCALL
java_math_BigInteger__toString__I( java_math_BigInteger This, jint
 radix )
{
 {
  java_lang_StringBuffer buffer;
  jint buf_size;
  jint jcgo_rcvrI1;
  struct java_lang_StringBuffer_s jcgo_stackobj1;
  if (JCGO_FIELD_NZACCESS(This, words) == jnull)
  {
   return (java_lang_Integer__toString__II(
    JCGO_FIELD_NZACCESS(This, ival), radix));
  }
  if (JCGO_FIELD_NZACCESS(This, ival) <= (jint)2)
  {
   return (java_lang_Long__toString__JI(
    (java_math_BigInteger__longValue__(
    This)), radix));
  }
  buf_size= (jcgo_rcvrI1= JCGO_FIELD_NZACCESS(This, ival), jcgo_rcvrI1 *
   ((gnu_java_math_MPN__chars_per_word__I(
   radix)) + (jint)1));
  buffer= (java_lang_StringBuffer__this__I(
   JCGO_STACKOBJ_NEW(jcgo_stackobj1, java_lang_StringBuffer_methods),
   buf_size));
  (java_math_BigInteger__format__IL8whtv(
   This, buffer, radix));
  return (java_lang_StringBuffer__toString__(
   buffer));
 }
}

JCGO_NOSEP_STATIC jlong CFASTCALL
java_math_BigInteger__longValue__( java_math_BigInteger This )
{
 {
  jlong jcgo_rcvrJ1;
  if (JCGO_FIELD_NZACCESS(This, words) == jnull)
  {
   return (jlong)JCGO_FIELD_NZACCESS(This, ival);
  }
  if (JCGO_FIELD_NZACCESS(This, ival) == (jint)1)
  {
   return (jlong)(JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This, words),
    0));
  }
  return (jcgo_rcvrJ1= JCGO_LSHL_F((jlong)JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This,
   words), (jint)1), (jint)32), jcgo_rcvrJ1 + ((jlong)JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This,
   words), 0) & JLONG_C(0xffffffff)));
 }
}

JCGO_NOSEP_STATIC jint CFASTCALL
java_math_BigInteger__hashCode__( java_math_BigInteger This )
{
 {
  jint jcgo_rcvrI1;
  return JCGO_FIELD_NZACCESS(This, words) == jnull? JCGO_FIELD_NZACCESS(This,
   ival) : (jcgo_rcvrI1= JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This,
   words), 0), jcgo_rcvrI1 + JCGO_ARRAY_IACCESS(JCGO_FIELD_NZACCESS(This,
   words), JCGO_FIELD_NZACCESS(This, ival) - (jint)1));
 }
}

JCGO_NOSEP_STATIC jboolean CFASTCALL
java_math_BigInteger__equals__Lo( java_math_BigInteger This, java_lang_Object
 obj )
{
 {
  if (!jcgo_instanceOf0(OBJT_java_math_BigInteger, MAXT_java_math_BigInteger,
   (jObject)obj))
  {
   return (jboolean)jfalse;
  }
  return (jboolean)(java_math_BigInteger__equals__L03o76L03o76(
   This, (java_math_BigInteger)obj));
 }
}

JCGO_NOSEP_STATIC jboolean CFASTCALL
java_math_BigInteger__negate__IAIAI( jintArr dest, jintArr src, jint
 len )
{
 {
  jlong carry;
  jboolean negative;
  carry= (jlong)(jint)1;
  negative= JCGO_ARRAY_IACCESS(src, len - (jint)1) < 0;
  {
   jint i;
   i= 0;
   for (; i < len; i++)
   {
    carry+= ((jlong)(~(JCGO_ARRAY_NZIACCESS(src, i))) & JLONG_C(0xffffffff));
    JCGO_ARRAY_IACCESS(dest, i)= ((jint)carry);
    carry= JCGO_LSHR_F(carry, (jint)32);
   }
  }
  return (jboolean)(negative && JCGO_ARRAY_IACCESS(dest, len - (jint)1) <
   0);
 }
}

JCGO_NOSEP_STATIC void CFASTCALL
java_math_BigInteger__class__0( void )
{
 JCGO_CLINIT_BEGIN(java_math_BigInteger__class);
 java_math_BigInteger__smallFixNums= (jObjectArr)jcgo_newArray(JCGO_CLASSREF_OF(java_math_BigInteger__class),
  0, java_math_BigInteger__numFixNum);
 {
  {
   jint i;
   i= java_math_BigInteger__numFixNum;
   for (; --i >= 0;)
   {
    jObject jcgo_rcvrL1;
    jint jcgo_rcvrI1;
    (jcgo_rcvrI1= i, jcgo_rcvrL1= (jObject)(java_math_BigInteger__new__I(
     i + java_math_BigInteger__minFixNum)), *(java_math_BigInteger*)&JCGO_ARRAY_NZLACCESS(java_math_BigInteger__smallFixNums,
     jcgo_rcvrI1)= (java_math_BigInteger)jcgo_rcvrL1);
   }
  }
 }
 java_math_BigInteger__ZERO= ((java_math_BigInteger)JCGO_ARRAY_NZLACCESS(java_math_BigInteger__smallFixNums,
  (-java_math_BigInteger__minFixNum)));
 JCGO_CLINIT_DONE(java_math_BigInteger__class);
}

JCGO_NOSEP_DATA CONST struct java_math_BigInteger_methods_s java_math_BigInteger_methods=
{
 JCGO_CLASSREF_OF(java_math_BigInteger__class),
 JCGO_GCJDESCR_INIT(java_math_BigInteger_s, words)
 OBJT_java_math_BigInteger,
 (JCGO_OBJSIZE_T)sizeof(struct java_math_BigInteger_s),
 NULL,
 JCGO_CLINIT_INIT(java_math_BigInteger__class__0)
 0,
 java_math_BigInteger__equals__Lo,
 java_math_BigInteger__hashCode__,
 java_math_BigInteger__toString__,
 java_lang_Object__finalize__
};

JCGO_NOSEP_DATA struct java_math_BigInteger_class_s java_math_BigInteger__class
 ATTRIBNONGC=
{
 {
  &java_lang_Class_methods,
  JCGO_MON_INIT
  JCGO_OBJREF_OF(*(java_lang_Object)&java_math_BigInteger_methods),
  JCGO_STRREF_OF(jcgo_string1_BigIntgr),
  JCGO_CLASSREF_OF(java_lang_Number__class),
  ((jObjectArr)JCGO_OBJREF_OF(jcgo_array3_Object)),
  0x1c1
 }
};

JCGO_NOSEP_GCDATA jObjectArr java_math_BigInteger__smallFixNums ATTRIBGCBSS=
 jnull;

JCGO_NOSEP_GCDATA java_math_BigInteger java_math_BigInteger__ZERO
 ATTRIBGCBSS= jnull;

JCGO_NOSEP_DATA CONST jcgo_arrtype23_Object jcgo_array2_BigIntgr=
{
 (jvtable)&jbyteArr_methods,
 JCGO_MON_INIT
 20,
 {
  (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)66/*'B'*/, (jbyte)(jchar)105/*'i'*/,
   (jbyte)(jchar)103/*'g'*/, (jbyte)(jchar)73/*'I'*/, (jbyte)(jchar)110/*'n'*/,
   (jbyte)(jchar)116/*'t'*/, (jbyte)(jchar)101/*'e'*/, (jbyte)(jchar)103/*'g'*/,
   (jbyte)(jchar)101/*'e'*/, (jbyte)(jchar)114/*'r'*/
 }
};

JCGO_NOSEP_DATA JCGO_NOTHR_CONST struct java_lang_String_s jcgo_string1_BigIntgr
 JCGO_THRD_ATTRNONGC=
{
 &java_lang_String_methods,
 JCGO_MON_INIT
 (java_lang_Object)JCGO_OBJREF_OF(jcgo_array2_BigIntgr),
 0, 20, (jint)0xc502bf18L
};

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

#endif
