summaryrefslogtreecommitdiffstats
path: root/asmrun/mlvalues.h
blob: b05a134ac6dfb080fb5e076fa84068b2d8247c1d (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
typedef long value;

#define Long_val(v) ((v) >> 1)
#define Val_long(n) (((long)(n) << 1) + 1)
#define Int_val(v) ((v) >> 1)
#define Val_int(n) (((n) << 1) + 1)

#define Is_int(v) ((v) & 1)
#define Is_block(v) (((v) & 1) == 0)

typedef unsigned long header_t;

#define Header_val(v) *((header_t *)(v) - 1)
#define Tag_header(h) ((h) & 0xFF)
#define Size_header(h) ((h) >> 11)
#define Tag_val(v) Tag_header(Header_val(v))
#define Size_val(v) Size_header(Header_val(v))

#define Field(v, n) (((value *)(v))[n])

#define Double_val(v) *((double *)(v))

#define No_scan_tag 0xFB

#define Closure_tag 0xFA
#define Double_tag 0xFB
#define String_tag 0xFC
#define Abstract_tag 0xFD
#define Finalized_tag 0xFE
#define Infix_tag 0xFF

#define Modified_mask 0x400

#define Val_false 1
#define Val_true 3
#define Val_unit 1