Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libvcodex/Vcdelta/vcdhdr.h
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 2003-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Phong Vo <[email protected]> *
18
* *
19
***********************************************************************/
20
#ifndef _VCDHDR_H
21
#define _VCDHDR_H 1
22
23
#include "vchdr.h"
24
#include "vcdelta.h"
25
26
#define COPYMIN (4) /* min size for a COPY */
27
28
/* assumed max sizes for various instruction types. The current Vcdiff
29
implementation only allows add+copy and copy+add instructions.
30
*/
31
#define VCD_ADDMAX 256 /* absolute max for a single ADD */
32
#define VCD_COPYMAX 256 /* absolute max for a single COPY */
33
#define VCD_ADDCOPY 16 /* absolute max for a merged ADD */
34
#define VCD_COPYADD 16 /* absolute max for a merged COPY */
35
36
typedef struct _vcdiff_s Vcdiff_t;
37
38
typedef struct _vcdcache_s Vcdcache_t;
39
typedef struct _vcdsave_s Vcdsave_t;
40
41
typedef struct _vcdsize_s Vcdsize_t;
42
typedef struct _vcdindex_s Vcdindex_t;
43
44
/* Tables used to compute merged ADD+COPY and COPY+ADD instructions. */
45
struct _vcdsize_s
46
{ ssize_t add; /* max single ADD size */
47
ssize_t copy[VCD_ADDR]; /* max single COPY size */
48
ssize_t add1[VCD_ADDR]; /* max ADD size in A+C */
49
ssize_t copy2[VCD_ADDR]; /* max COPY size in A+C */
50
ssize_t copy1[VCD_ADDR]; /* max COPY size in C+A */
51
ssize_t add2[VCD_ADDR]; /* max ADD size in C+A */
52
};
53
struct _vcdindex_s
54
{ Vcchar_t add[VCD_ADDMAX];
55
Vcchar_t copy[VCD_ADDR][VCD_COPYMAX];
56
Vcchar_t addcopy[VCD_ADDCOPY][VCD_ADDR][VCD_COPYADD];
57
Vcchar_t copyadd[VCD_ADDR][VCD_COPYADD][VCD_ADDCOPY];
58
};
59
60
/* address caches to code COPY addresses */
61
struct _vcdcache_s
62
{ ssize_t s_near; /* size of near cache */
63
ssize_t* c_near; /* near address cache */
64
ssize_t n; /* index in near cache */
65
ssize_t s_same; /* size of same cache */
66
ssize_t* c_same; /* exact match cache */
67
};
68
69
/* to store a saved instruction */
70
struct _vcdsave_s
71
{ ssize_t dtsz; /* size of ADD or COPY */
72
ssize_t addr; /* the address to code */
73
ssize_t mode; /* address encoding mode */
74
};
75
76
/* the Vcdiff/undiff handle */
77
struct _vcdiff_s
78
{ Vclzparse_t vcpa;
79
80
Vcdcache_t* cache; /* address caches */
81
Vcdtable_t* table; /* code table for compression */
82
Vcdsave_t* save; /* saved instruction */
83
84
Vcdsize_t* size;
85
Vcdindex_t* index;
86
87
Vcio_t* data; /* unmatched data */
88
Vcio_t* inst; /* instruction data */
89
Vcio_t* addr; /* COPY address data */
90
91
unsigned int flags; /* control flags */
92
};
93
94
#define VCDINIT(vcd) \
95
( (vcd)->cache = NIL(Vcdcache_t*), \
96
(vcd)->table = NIL(Vcdtable_t*), \
97
(vcd)->save = NIL(Vcdsave_t*), \
98
(vcd)->size = NIL(Vcdsize_t*), \
99
(vcd)->index = NIL(Vcdindex_t*), \
100
(vcd)->data = NIL(Vcio_t*), \
101
(vcd)->inst = NIL(Vcio_t*), \
102
(vcd)->addr = NIL(Vcio_t*) \
103
)
104
105
_BEGIN_EXTERNS_ /* private functions */
106
extern Vcdsize_t _Vcdsize;
107
extern Vcdindex_t _Vcdindex;
108
extern Vcdtable_t* _Vcdtbl;
109
110
extern Vcdcache_t* vcdkaopen _ARG_((ssize_t, ssize_t));
111
extern void vcdkaclear _ARG_((Vcdcache_t*));
112
extern void vcdkaclose _ARG_((Vcdcache_t*));
113
extern ssize_t vcdkasetaddr _ARG_((Vcdcache_t*, ssize_t, ssize_t, ssize_t*));
114
extern ssize_t vcdkagetaddr _ARG_((Vcdcache_t*, Vcio_t*, ssize_t, ssize_t));
115
116
extern Vcdtable_t* vcdbmtable();
117
extern int vcdbmputinst _ARG_((Vclzparse_t*, ssize_t, ssize_t, ssize_t, ssize_t, int));
118
119
extern void _vcdtblinit _ARG_((void));
120
_END_EXTERNS_
121
122
#endif /*_VDELHDR_H*/
123
124