coq-vsu-int63
int63.c
Go to the documentation of this file.
1 #ifndef COQ_VSU_INT63__INT63_C
2 #define COQ_VSU_INT63__INT63_C
3 
4 #include "../int63.h"
5 
6 
7 int63_t encode_int63(int64_t x)
8 {
9  return (x << 1) | 1;
10 }
11 
13 {
14  return (int64_t)x >> 1;
15 }
16 
17 
19 {
20  return encode_int63(0);
21 }
22 
24 {
25  return encode_int63(1);
26 }
27 
29 {
30  return 2 - x;
31 }
32 
34 {
35  return x < 0 ? int63_neg(x) : x;
36 }
37 
39 {
40  return (x + y) - 1;
41 }
42 
44 {
45  return (x - y) + 1;
46 }
47 
49 {
50  const int64_t _x = decode_int63(x);
51  const int64_t _y = decode_int63(y);
52  const int64_t _z = _x * _y;
53  return encode_int63(_z);
54 }
55 
57 {
58  const int64_t _x = decode_int63(x);
59  const int64_t _y = decode_int63(y);
60  const int64_t _z = _x / _y;
61  return encode_int63(_z);
62 }
63 
65 {
66  const int64_t _x = decode_int63(x);
67  const int64_t _y = decode_int63(y);
68  const int64_t _z = _x % _y;
69  return encode_int63(_z);
70 }
71 
73 {
74  const int64_t _x = decode_int63(x);
75  const int64_t _y = decode_int63(y);
76  const int64_t _z = _x << _y;
77  return encode_int63(_z);
78 }
79 
81 {
82  const int64_t _x = decode_int63(x);
83  const int64_t _y = decode_int63(y);
84  const int64_t _z = _x >> _y;
85  return encode_int63(_z);
86 }
87 
89 {
90  return x | y;
91 }
92 
94 {
95  return x & y;
96 }
97 
99 {
100  return (int63_t)1 | (x ^ y);
101 }
102 
104 {
105  return (int63_t)1 | ~ x;
106 }
107 
108 #endif /* COQ_VSU_INT63__INT63_C */
int63_xor
int63_t int63_xor(int63_t x, int63_t y)
Definition: int63.c:98
int63_zero
int63_t int63_zero()
Definition: int63.c:18
int63_one
int63_t int63_one()
Definition: int63.c:23
int63_shiftl
int63_t int63_shiftl(int63_t x, int63_t y)
Definition: int63.c:72
int63_neg
int63_t int63_neg(int63_t x)
Definition: int63.c:28
int63_or
int63_t int63_or(int63_t x, int63_t y)
Definition: int63.c:88
int63_rem
int63_t int63_rem(int63_t x, int63_t y)
Definition: int63.c:64
int63_sub
int63_t int63_sub(int63_t x, int63_t y)
Definition: int63.c:43
int63_shiftr
int63_t int63_shiftr(int63_t x, int63_t y)
Definition: int63.c:80
int63_add
int63_t int63_add(int63_t x, int63_t y)
Definition: int63.c:38
int63_abs
int63_t int63_abs(int63_t x)
Definition: int63.c:33
decode_int63
int64_t decode_int63(int63_t x)
Decode an integer.
Definition: int63.c:12
int63_and
int63_t int63_and(int63_t x, int63_t y)
Definition: int63.c:93
int63_div
int63_t int63_div(int63_t x, int63_t y)
Definition: int63.c:56
encode_int63
int63_t encode_int63(int64_t x)
Encode an integer.
Definition: int63.c:7
int63_not
int63_t int63_not(int63_t x)
Definition: int63.c:103
int63_mul
int63_t int63_mul(int63_t x, int63_t y)
Definition: int63.c:48
int63_t
int64_t int63_t
An encoded 63-bit integer.
Definition: int63.h:34