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 2

Go to most recent revision | 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
    return long_unsigned_modulo_yyyy;
105
}
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
"""

powered by: WebSVN 2.1.0

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