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

Subversion Repositories igor

[/] [igor/] [trunk/] [simulator/] [object.c] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 atypic
#include <stdio.h>
2
#include <err.h>
3
 
4
#include "object.h"
5
#include "debug.h"
6
#include "bits.h"
7
 
8
void
9
object_dump(reg_t object)
10
{
11
        struct di_const *c;
12
        char *type;
13
 
14
        c = debug_get1_filter(OBJECT_TYPE(object), "type");
15
        if (c == NULL)
16
                type = "unknown";
17
        else
18
                type = c->name;
19
 
20
        printf("Object %s: 0x%x, gc bit: %d\n", type, OBJECT_DATUM(object), OBJECT_GC(object));
21
        puts("datum");
22
        debug_show(OBJECT_DATUM(object));
23
}
24
 
25
reg_t
26
object_set_field(reg_t object, uint32_t value, uint32_t offset, uint32_t mask)
27
{
28
        object &= ~(mask<<offset);
29
        object |= (value&mask)<<offset;
30
        return object;
31
}
32
 
33
reg_t
34
object_get_type(reg_t object)
35
{
36
        return OBJECT_TYPE(object);
37
}
38
 
39
reg_t
40
object_set_type(reg_t object, uint8_t type)
41
{
42
        return object_set_field(object, type,
43
                                OBJECT_TYPE_OFFSET,
44
                                OBJECT_TYPE_MASK);
45
}
46
 
47
reg_t
48
object_get_datum(reg_t object)
49
{
50
        return OBJECT_DATUM(object);
51
}
52
 
53
reg_t
54
object_get_datum_signed(reg_t object)
55
{
56
        return sign_extend(OBJECT_DATUM(object), 26);
57
}
58
 
59
reg_t
60
object_set_datum(reg_t object, uint32_t datum)
61
{
62
        return object_set_field(object, datum,
63
                                OBJECT_DATUM_OFFSET,
64
                                OBJECT_DATUM_MASK);
65
}
66
 
67
reg_t
68
object_get_gc(reg_t object)
69
{
70
        return OBJECT_GC(object);
71
}
72
 
73
reg_t
74
object_set_gc(reg_t object, uint32_t gc)
75
{
76
        return object_set_field(object, gc,
77
                                OBJECT_GC_OFFSET,
78
                                OBJECT_GC_MASK);
79
}
80
 
81
 
82
reg_t
83
object_make(uint8_t type, uint32_t datum)
84
{
85
        reg_t obj = 0;
86
        obj = object_set_type(obj, type);
87
        obj = object_set_datum(obj, datum);
88
        return obj;
89
}
90
 
91
 
92
void
93
object_serialize(reg_t obj, uint8_t *buf)
94
{
95
        buf[0] = (obj>>24) & 0xFF;
96
        buf[1] = (obj>>16) & 0xFF;
97
        buf[2] = (obj>>8)  & 0xFF;
98
        buf[3] =  obj      & 0xFF;
99
}
100
 
101
reg_t
102
object_deserialize(uint8_t *buf)
103
{
104
        return (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
105
}
106
 
107
int
108
object_read(reg_t *objects, int length, FILE *f)
109
{
110
        uint8_t buf[4];
111
        int i;
112
        for (i = 0; i < length; i++) {
113
                if (fread(buf, 4, 1, f) != 1) {
114
                        warn("Read failed");
115
                        return i;
116
                }
117
                objects[i] = object_deserialize(buf);
118
        }
119
        return length;
120
}
121
 
122
int
123
object_write(reg_t *objects, int length, FILE *f)
124
{
125
        uint8_t buf[4];
126
        int i;
127
        for (i = 0; i < length; i++) {
128
                object_serialize(objects[i], buf);
129
                if (fwrite(buf, 4, 1, f) != 1)
130
                        return i;
131
        }
132
        return length;
133
}

powered by: WebSVN 2.1.0

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