Subversion Repositories planix.SVN

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 33
Line 11... Line 11...
11
 
11
 
12
	if(b == nil){
12
	if(b == nil){
13
		b = mpnew(0);
13
		b = mpnew(0);
14
		setmalloctag(b, getcallerpc(&p));
14
		setmalloctag(b, getcallerpc(&p));
15
	}
15
	}
-
 
16
	mpbits(b, n*8);
16
 
17
 
17
	// dump leading zeros
-
 
18
	while(*p == 0 && n > 1){
-
 
19
		p++;
-
 
20
		n--;
-
 
21
	}
-
 
22
 
-
 
23
	// get the space
-
 
24
	mpbits(b, n*8);
18
	m = DIGITS(n*8);
25
	b->top = DIGITS(n*8);
19
	b->top = m--;
26
	m = b->top-1;
20
	b->sign = 1;
27
 
21
 
28
	// first digit might not be Dbytes long
-
 
29
	s = ((n-1)*8)%Dbits;
22
	s = ((n-1)*8)%Dbits;
30
	x = 0;
23
	x = 0;
31
	for(; n > 0; n--){
24
	for(; n > 0; n--){
32
		x |= ((mpdigit)(*p++)) << s;
25
		x |= ((mpdigit)(*p++)) << s;
33
		s -= 8;
26
		s -= 8;
Line 35... Line 28...
35
			b->p[m--] = x;
28
			b->p[m--] = x;
36
			s = Dbits-8;
29
			s = Dbits-8;
37
			x = 0;
30
			x = 0;
38
		}
31
		}
39
	}
32
	}
40
 
-
 
41
	return b;
33
	return mpnorm(b);
42
}
34
}