OpenCores
URL https://opencores.org/ocsvn/tcp_socket/tcp_socket/trunk

Subversion Repositories tcp_socket

[/] [tcp_socket/] [trunk/] [chips2/] [chips/] [compiler/] [builtins.py] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jondawson
#!/usr/bin/env python
2
"""Support Library for builtin Functionality"""
3
 
4
__author__ = "Jon Dawson"
5
__copyright__ = "Copyright (C) 2013, Jonathan P Dawson"
6
__version__ = "0.1"
7
 
8
builtins="""
9
 
10
unsigned unsigned_modulo_yyyy;
11
unsigned unsigned_divide_xxxx(unsigned dividend, unsigned divisor){
12
    unsigned remainder = 0;
13
    unsigned quotient = 0;
14
    unsigned i = 0;
15
 
16
    while(1){
17
        if( dividend & (1 << 15) ){
18
            remainder |= 1;
19
        }
20
        if( remainder >= divisor ){
21
            quotient |= 1;
22
            remainder -= divisor;
23
        }
24
        if(i==15) break;
25
        i++;
26
        quotient <<= 1;
27
        remainder <<= 1;
28
        dividend <<= 1;
29
    }
30
 
31
    unsigned_modulo_yyyy = remainder;
32
    return quotient;
33
}
34
 
35
unsigned unsigned_modulo_xxxx(unsigned dividend, unsigned divisor){
36
    unsigned_divide_xxxx(dividend, divisor);
37
    return unsigned_modulo_yyyy;
38
}
39
 
40
int divide_xxxx(int dividend, int divisor){
41
    unsigned udividend, udivisor, uquotient;
42
    unsigned dividend_sign, divisor_sign, quotient_sign;
43
    dividend_sign = dividend & 0x8000u;
44
    divisor_sign = divisor & 0x8000u;
45
    quotient_sign = dividend_sign ^ divisor_sign;
46
    udividend = dividend_sign ? -dividend : dividend;
47
    udivisor = divisor_sign ? -divisor : divisor;
48
    uquotient = unsigned_divide_xxxx(udividend, udivisor);
49
    return quotient_sign ? -uquotient : uquotient;
50
}
51
 
52
int modulo_xxxx(int dividend, int divisor){
53
    unsigned udividend, udivisor, uquotient;
54
    unsigned dividend_sign, divisor_sign;
55
    int modulo;
56
    dividend_sign = dividend & 0x8000u;
57
    divisor_sign = divisor & 0x8000u;
58
    udividend = dividend_sign ? -dividend : dividend;
59
    udivisor = divisor_sign ? -divisor : divisor;
60
    modulo = unsigned_modulo_xxxx(udividend, udivisor);
61
    modulo = dividend_sign ? -modulo : modulo;
62
    return modulo;
63
}
64
 
65
long unsigned long_unsigned_modulo_yyyy;
66
long unsigned long_unsigned_divide_xxxx(long unsigned dividend, long unsigned divisor){
67
    long unsigned remainder = 0;
68
    long unsigned quotient = 0;
69
    unsigned i = 0;
70
 
71
    while(1){
72
        if( dividend & (1 << 31) ){
73
            remainder |= 1;
74
        }
75
        if( remainder >= divisor ){
76
            quotient |= 1;
77
            remainder -= divisor;
78
        }
79
        if(i==31) break;
80
        i++;
81
        quotient <<= 1;
82
        remainder <<= 1;
83
        dividend <<= 1;
84
    }
85
    long_unsigned_modulo_yyyy = remainder;
86
    return quotient;
87
}
88
 
89
long int long_divide_xxxx(long int dividend, long int divisor){
90
    long unsigned udividend, udivisor, uquotient;
91
    long unsigned dividend_sign, divisor_sign, quotient_sign;
92
    dividend_sign = dividend & 0x80000000ul;
93
    divisor_sign = divisor & 0x80000000ul;
94
    quotient_sign = dividend_sign ^ divisor_sign;
95
    udividend = dividend_sign ? -dividend : dividend;
96
    udivisor = divisor_sign ? -divisor : divisor;
97
    uquotient = long_unsigned_divide_xxxx(udividend, udivisor);
98
    return quotient_sign ? -uquotient : uquotient;
99
}
100
 
101
 
102
long unsigned long_unsigned_modulo_xxxx(long unsigned dividend, long unsigned divisor){
103
    long_unsigned_divide_xxxx(dividend, divisor);
104 4 jondawson
    return long_unsigned_modulo_yyyy;
105 2 jondawson
}
106
 
107
long int long_modulo_xxxx(long int dividend, long int divisor){
108
    long unsigned udividend, udivisor;
109
    long unsigned dividend_sign, divisor_sign, quotient_sign;
110
    long int modulo;
111
    dividend_sign = dividend & 0x80000000ul;
112
    divisor_sign = divisor & 0x80000000ul;
113
    udividend = dividend_sign ? -dividend : dividend;
114
    udivisor = divisor_sign ? -divisor : divisor;
115
    modulo = long_unsigned_modulo_xxxx(udividend, udivisor);
116
    modulo = dividend_sign ? -modulo : modulo;
117
    return modulo;
118
}
119
 
120 4 jondawson
int float_equal_xxxx(long int a, long int b){
121
    if (a < 0) {
122
        a = 0x80000000ul - a;
123
    }
124
    if (b < 0) {
125
        b = 0x80000000ul - b;
126
    }
127
    return  a == b;
128
}
129
 
130
int float_ne_xxxx(long int a, long int b){
131
    if (a < 0) {
132
        a = 0x80000000ul - a;
133
    }
134
    if (b < 0) {
135
        b = 0x80000000ul - b;
136
    }
137
    return  a != b;
138
}
139
 
140
int float_lt_xxxx(long int a, long int b){
141
    if (a < 0) {
142
        a = 0x80000000ul - a;
143
    }
144
    if (b < 0) {
145
        b = 0x80000000ul - b;
146
    }
147
    return  a < b;
148
}
149
 
150
int float_gt_xxxx(long int a, long int b){
151
    if (a < 0) {
152
        a = 0x80000000ul - a;
153
    }
154
    if (b < 0) {
155
        b = 0x80000000ul - b;
156
    }
157
    return  a > b;
158
}
159
 
160
int float_le_xxxx(long int a, long int b){
161
    if (a < 0) {
162
        a = 0x80000000ul - a;
163
    }
164
    if (b < 0) {
165
        b = 0x80000000ul - b;
166
    }
167
    return  a <= b;
168
}
169
 
170
int float_ge_xxxx(long int a, long int b){
171
    if (a < 0) {
172
        a = 0x80000000ul - a;
173
    }
174
    if (b < 0) {
175
        b = 0x80000000ul - b;
176
    }
177
    return  a >= b;
178
}
179
 
180 2 jondawson
"""

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.