GEN addir_sign(GEN x, long sx, GEN y, long sy) { long e, l, ly; GEN z; if (!sx) return rcopy_sign(y, sy); e = expo(y) - expi(x); if (!sy) { if (e >= 0) return rcopy_sign(y, sy); z = itor(x, nbits2prec(-e)); setsigne(z, sx); return z; } ly = lg(y); if (e > 0) { l = ly - divsBIL(e); if (l < 3) return rcopy_sign(y, sy); } else l = ly + nbits2extraprec(-e); z = (GEN)avma; y = addrr_sign(itor(x,l), sx, y, sy); ly = lg(y); while (ly--) *--z = y[ly]; avma = (pari_sp)z; return z; }
int tbir_read_nbits( ptbir_image_data tid, int bitcount, int *value ) { int data; int bitsleft; if ( tid == NULL ) { return 0; } if ( tbir_read_check( tid, bitcount ) == 0 ) { return 0; } bitsleft = 8 - tid->cbit; if ( bitsleft > bitcount ) { data = tid->buffer[tid->cbyte]; data = data >> (bitsleft - bitcount); data = data & (expi(2, bitcount)-1); tid->cbit += bitcount; *value = data; return 1; }
static GEN _lift_iter(void *E, GEN x2, GEN q) { struct _frob_lift *F = (struct _frob_lift*) E; long N = expi(q); GEN TN = ZXT_remi2n(F->T, N); GEN y2 = Z2XQ_frob(x2, TN, q); GEN x2y2 = FpX_rem(ZX_remi2n(ZX_mul(x2, y2), N), TN, q); GEN s = ZX_add(ZX_add(x2, ZX_shifti(y2, 1)), ZX_shifti(x2y2, 3)); GEN V = ZX_add(ZX_add(ZX_sqr(s), y2), ZX_shifti(x2y2, 2)); return mkvec4(FpX_rem(ZX_remi2n(V, N), TN, q),x2,y2,s); }