aboutsummaryrefslogtreecommitdiff
path: root/include/data.s
blob: 82618818e0605708513f0552aed682c7b352536c (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

.ifndef _data_s_file
_data_s_file:

# Simple values and boxed machine integers
# | ptr | value |
CON_evacuate1:
	retq
CON_scavenge1:
	add $0x10, %rsi
	retq
INT_info_table:
	cell CON_evacuate1
	cell CON_scavenge1
	cell 0
INT_code:
	continue

# List
# | ptr | 0 |
# | ptr | 1 | a | b |
LIST_evacuate:
	# [] | a : b
	retq #TODO
LIST_scavenge:
	mov 0x8(%rbp), %rax
	shl $1, %rax
	add $2, %rax
	shl $3, %rax
	add %rax, %rsi
	retq
LIST_info_table:
	cell LIST_evacuate
	cell LIST_scavenge
	cell 0
LIST_code:
	continue

# FUN/PAP combo objects
# | ptr | thunkptr | args | arg[0] | arg[1] | ... | arg[args] |
FUN_evacuate:
	retq #TODO
FUN_scavenge:
	mov 0x10(%rbp), %rax
	add $3, %rax
	shl $3, %rax
	add %rax, %rsi
	retq

# Simple info for n-ary functions
# TODO continue to add as required
fun1_info_table:
	cell FUN_evacuate
	cell FUN_scavenge
	cell 1
fun1_code:
	continue

fun2_info_table:
	cell FUN_evacuate
	cell FUN_scavenge
	cell 2
fun2_code:
	continue

fun3_info_table:
	cell FUN_evacuate
	cell FUN_scavenge
	cell 3
fun3_code:
	continue

# indirection (Q: how to recognize IND and THUNK on return?)
# | ptr | indptr |
IND_evacuate:
	retq #TODO
IND_scavenge:
	add $0x10,%rsi
	retq
IND_info:
	cell IND_evacuate
	cell IND_scavenge
	cell 0
IND_code:
	enter 0x8(%rbp)

# THU objects (gc implementation only, actual THUs are defined by functions)
# | ptr | args | arg[0] | arg[1] | ... | arg[args] |
# args wouldn't need to be here but let's keep them for gc simplicity
THU_evacuate:
	retq #TODO
THU_scavenge:
	mov 0x8(%rbp), %rax
	add $2,%rax
	shl $3,%rax
	add %rax,%rsi
	retq

.endif # _data_s_file