aboutsummaryrefslogtreecommitdiff
path: root/src/lib/runtime/runtime.h
blob: 65c3278e599577218b6bbe6685932ff762e31a1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.


/*
 * basic types
 */
typedef	signed char		int8;
typedef	unsigned char		uint8;
typedef	signed short		int16;
typedef	unsigned short		uint16;
typedef	signed int		int32;
typedef	unsigned int		uint32;
typedef	signed long long int	int64;
typedef	unsigned long long int	uint64;
typedef	float			float32;
typedef	double			float64;

/*
 * get rid of C types
 */
#define	unsigned		XXunsigned
#define	signed			XXsigned
#define	char			XXchar
#define	short			XXshort
#define	int			XXint
#define	long			XXlong
#define	float			XXfloat
#define	double			XXdouble

/*
 * defined types
 */
typedef	uint8			bool;
typedef	uint8			byte;
typedef	struct
{
	int32	len;
	byte	str[1];
}				*string;
typedef	struct
{
	byte*	name;
	uint32	hash;
	void	(*fun)(void);
}				Sigs;
typedef	struct
{
	byte*	name;
	uint32	hash;
	uint32	offset;
}				Sigi;
typedef	struct	Map		Map;
struct	Map
{
	Sigi*	si;
	Sigs*	ss;
	Map*	link;
	int32	bad;
	int32	unused;
	void	(*fun[])(void);
};

/*
 * defined constants
 */
enum
{
	true	= 1,
	false	= 0,
};

/*
 * defined macros
 *    you need super-goru privilege
 *    to add this list.
 */
#define	nelem(x)	(sizeof(x)/sizeof((x)[0]))
#define	nil		((void*)0)

/*
 * very low level
 */
void	FLUSH(void*);
void	prints(int8*);
void	sys_exit(int32);
void	sys_write(int32, void*, int32);
void	sys_breakpoint(void);
uint8*	sys_mmap(byte*, uint32, int32, int32, int32, uint32);
void	sys_memclr(byte*, uint32);

/*
 * runtime
 */
void	sys_printbool(bool);
void	sys_printfloat(float64);
void	sys_printint(int64);
void	sys_printstring(string);
void	sys_catstring(string, string, string);
void	sys_cmpstring(string, string, int32);
void	sys_slicestring(string, int32, int32, string);
void	sys_indexstring(string, int32, byte);
void	sys_intstring(int64, string);
void	sys_ifaces2i(Sigi*, Sigs*, Map*, void*);
void	sys_ifacei2i(Sigi*, Map*, void*);
void	sys_ifacei2s(Sigs*, Map*, void*);