aboutsummaryrefslogtreecommitdiffstats
path: root/libj2_j2i_lsh.3
blob: 26c24559e66abd4cc91ff879eb7137ee0e433bb8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
.TH LIBJ2_J2I_LSH 3 LIBJ2
.SH NAME
libj2_j2i_lsh \- Left-shift bits

.SH SYNOPSIS
.nf
#include <libj2.h>

void \fBlibj2_j2i_lsh\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
void \fBlibj2_j2i_lsh_to_j2i\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_ji_lsh_to_j2i\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);

int \fBlibj2_j2i_lsh_overflow\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_j2i_lsh_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
int \fBlibj2_ji_lsh_to_j2i_overflow\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);

int \fBlibj2_j2i_lsh_overflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_ji_lsh_overflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP);

void \fBlibj2_j2u_lsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
void \fBlibj2_j2u_lsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_lsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);

int \fBlibj2_j2u_lsh_overflow\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_j2u_lsh_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
int \fBlibj2_ju_lsh_to_j2u_overflow\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);

int \fBlibj2_j2u_lsh_overflow_p\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_ju_lsh_overflow_p\fP(uintmax_t \fIa\fP, unsigned \fIb\fP);
.fi
.PP
Link with
.IR -lj2 .

.SH DESCRIPTION
The above listed functions discard the
.I b
most significant bits in
.IR a ,
shift all bits to
.I b
more significant positions, and clears the
.I b
least significant bits, effectively multiplying
.I a
by 2 to the power of
.IR b .
The functions with the parameter
.I r
store the result in
.IR r ,
the other functions store the result in
.IR a ,
except the functions
.BR libj2_j2i_lsh_overflow_p (),
.BR libj2_ji_lsh_overflow_p (),
.BR libj2_j2u_lsh_overflow_p (),
and
.BR libj2_ju_lsh_overflow_p (),
only predict overflow, and do not perform
any bit-shifting, and therefore does store
it anywhere.
.PP
For the functions where
.I a
is a
.B uintmax_t
it is convert to a
.BR "struct libj2_j2u *" ,
and for the functions where
.I a
is a
.B intmax_t
it is convert to a
.BR "struct libj2_j2i *" ,
before described operations.
.PP
The value-returning functions (that is, those
with word
.B overflow
in their name), detect overflow, that is,
if any discarded bit (any of the
.I b
most significant bits) was set.
.PP
The arguments are assumed to be
.RI non- NULL .

.SH RETURN VALUE
For functions with a return value, the functions
return +1 if any discarded bit was set and
.I a
was positive, -1 if any discarded bit was cleared and
.I a
was negative,
and 0 otherwise.

.SH ERRORS
The above listed functions cannot fail.

.SH HISTORY
The
.BR libj2_j2u_lsh (),
.BR libj2_j2u_lsh_to_j2u (),
.BR libj2_ju_lsh_to_j2u (),
.BR libj2_j2u_lsh_overflow (),
.BR libj2_j2u_lsh_to_j2u_overflow (),
.BR libj2_ju_lsh_to_j2u_overflow (),
.BR libj2_j2u_lsh_overflow_p (),
and
.BR libj2_ju_lsh_overflow_p ()
functions were added in version 1.0 of
.BR libj2 .
.PP
The
.BR libj2_j2i_lsh (),
.BR libj2_j2i_lsh_to_j2i (),
.BR libj2_ji_lsh_to_j2i (),
.BR libj2_j2i_lsh_overflow (),
.BR libj2_j2i_lsh_to_j2i_overflow (),
.BR libj2_ji_lsh_to_j2i_overflow (),
.BR libj2_j2i_lsh_overflow_p (),
and
.BR libj2_ji_lsh_overflow_p ()
functions were added in version 1.1 of
.BR libj2 .

.SH SEE ALSO
.BR libj2 (7),
.BR libj2_j2i_rsh (3),
.BR libj2_j2u_lrot (3),
.BR libj2_j2u_rrot (3)