+
+FN_(gcdIntzh_fast)
+{
+ /* R1 = the first Int#; R2 = the second Int# */
+ mp_limb_t aa;
+ I_ r;
+ FB_
+ aa = (mp_limb_t)(R1.i);
+ r = RET_STGCALL3(StgInt, mpn_gcd_1, (mp_limb_t *)(&aa), 1, (mp_limb_t)(R2.i));
+ RET_N(r);
+ FE_
+}
+
+FN_(gcdIntegerIntzh_fast)
+{
+ /* R1 = s1; R2 = d1; R3 = the int */
+ I_ r;
+ FB_
+ MAYBE_GC(R2_PTR, gcdIntegerIntzh_fast);
+ r = RET_STGCALL3(I_,mpn_gcd_1,(mp_limb_t *)(BYTE_ARR_CTS(R2.p)), R1.i, R3.i);
+ RET_N(r);
+ FE_
+}
+
+FN_(cmpIntegerIntzh_fast)
+{
+ /* R1 = s1; R2 = d1; R3 = the int */
+ MP_INT arg;
+ I_ r;
+ FB_
+ MAYBE_GC(R2_PTR, cmpIntegerIntzh_fast);
+ arg._mp_size = R1.i;
+ arg._mp_alloc = ((StgArrWords *)R2.p)->words;
+ arg._mp_d = (mp_limb_t *) (BYTE_ARR_CTS(R2.p));
+ r = RET_STGCALL2(I_,mpz_cmp_si,&arg,R3.i);
+ RET_N(r);
+ FE_
+}
+
+FN_(cmpIntegerzh_fast)
+{
+ /* R1 = s1; R2 = d1; R3 = s2; R4 = d2 */
+ MP_INT arg1, arg2;
+ I_ r;
+ FB_
+ MAYBE_GC(R2_PTR | R4_PTR, cmpIntegerIntzh_fast);
+ arg1._mp_size = R1.i;
+ arg1._mp_alloc= ((StgArrWords *)R2.p)->words;
+ arg1._mp_d = (mp_limb_t *) (BYTE_ARR_CTS(R2.p));
+ arg2._mp_size = R3.i;
+ arg2._mp_alloc= ((StgArrWords *)R4.p)->words;
+ arg2._mp_d = (mp_limb_t *) (BYTE_ARR_CTS(R4.p));
+ r = RET_STGCALL2(I_,mpz_cmp,&arg1,&arg2);
+ RET_N(r);
+ FE_
+}
+
+FN_(integer2Intzh_fast)
+{
+ /* R1 = s; R2 = d */
+ I_ r, s;
+ FB_
+ s = R1.i;
+ if (s == 0)
+ r = 0;
+ else {
+ r = ((mp_limb_t *) (BYTE_ARR_CTS(R2.p)))[0];
+ if (s < 0) r = -r;
+ }
+ RET_N(r);
+ FE_
+}
+
+FN_(integer2Wordzh_fast)
+{
+ /* R1 = s; R2 = d */
+ I_ s;
+ W_ r;
+ FB_
+ s = R1.i;
+ if (s == 0)
+ r = 0;
+ else {
+ r = ((mp_limb_t *) (BYTE_ARR_CTS(R2.p)))[0];
+ if (s < 0) r = -r;
+ }
+ RET_N(r);
+ FE_
+}
+
+