@salang/sa 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/sa.js +19 -1
- package/package.json +8 -7
- package/sa_std/alloc/layout.sal +12 -0
- package/sa_std/alloc/prelude.sa +1 -0
- package/sa_std/alloc/prelude.sal +1 -0
- package/sa_std/alloc/string.sa +3 -0
- package/sa_std/alloc/vec.sa +684 -0
- package/sa_std/alloc/vec.sal +4 -0
- package/sa_std/any.sa +130 -0
- package/sa_std/any.sal +23 -0
- package/sa_std/array.sa +1876 -0
- package/sa_std/ascii.sa +2 -0
- package/sa_std/ascii.sal +1 -0
- package/sa_std/async.sla +116 -0
- package/sa_std/binary_heap.sa +3003 -0
- package/sa_std/binary_heap.sal +7 -0
- package/sa_std/borrow.sa +171 -0
- package/sa_std/borrow.sal +13 -0
- package/sa_std/btree_map.sa +2210 -0
- package/sa_std/btree_map.sal +11 -0
- package/sa_std/btree_set.sa +1072 -0
- package/sa_std/btree_set.sal +6 -0
- package/sa_std/char.sa +1309 -0
- package/sa_std/char.sal +50 -0
- package/sa_std/cmp.sa +554 -0
- package/sa_std/cmp.sal +14 -0
- package/sa_std/collections/binary_heap.sa +1 -0
- package/sa_std/collections/btree_map.sa +1 -0
- package/sa_std/collections/btree_set.sa +1 -0
- package/sa_std/collections/hashmap.sa +1 -0
- package/sa_std/collections/hashset.sa +1 -0
- package/sa_std/collections/linked_list.sa +1120 -0
- package/sa_std/collections/linked_list.sal +10 -0
- package/sa_std/collections/prelude.sa +7 -0
- package/sa_std/collections/prelude.sal +1 -0
- package/sa_std/collections/vec_deque.sa +1 -0
- package/sa_std/collections.sal +13 -0
- package/sa_std/convert.sa +1115 -0
- package/sa_std/convert.sal +24 -0
- package/sa_std/core/arc.sa +233 -0
- package/sa_std/core/arc.sal +4 -0
- package/sa_std/core/ascii.sa +784 -0
- package/sa_std/core/ascii.sal +34 -0
- package/sa_std/core/bit.sa +41 -0
- package/sa_std/core/box.sa +1 -0
- package/sa_std/core/box.sal +2 -0
- package/sa_std/core/cell.sa +108 -0
- package/sa_std/core/cell.sal +5 -0
- package/sa_std/core/cleanup.sa +26 -0
- package/sa_std/core/control.sa +20 -0
- package/sa_std/core/derive.sa +60 -0
- package/sa_std/core/derive.sal +1 -0
- package/sa_std/core/dispatch.sa +7 -0
- package/sa_std/core/dispatch.sal +5 -0
- package/sa_std/core/future.sa +777 -0
- package/sa_std/core/future.sal +73 -0
- package/sa_std/core/hash.sa +48 -0
- package/sa_std/core/iter.sa +2805 -0
- package/sa_std/core/iter.sal +4 -0
- package/sa_std/core/loop.sa +60 -0
- package/sa_std/core/mem.sa +220 -0
- package/sa_std/core/option.sa +825 -0
- package/sa_std/core/option.sal +11 -0
- package/sa_std/core/panic.sa +23 -0
- package/sa_std/core/panic.sal +12 -0
- package/sa_std/core/prelude.sa +18 -0
- package/sa_std/core/prelude.sal +18 -0
- package/sa_std/core/rc.sa +225 -0
- package/sa_std/core/rc.sal +4 -0
- package/sa_std/core/refcell.sa +283 -0
- package/sa_std/core/refcell.sal +13 -0
- package/sa_std/core/result.sa +708 -0
- package/sa_std/core/result.sal +6 -0
- package/sa_std/core/rust_patterns.sal +295 -0
- package/sa_std/core/sa_core.sa +84 -0
- package/sa_std/core/slice.sa +4021 -0
- package/sa_std/core/slice.sal +7 -0
- package/sa_std/core/task.sa +112 -0
- package/sa_std/core/task.sal +15 -0
- package/sa_std/core/trait_object.sa +26 -0
- package/sa_std/core/trait_object.sal +4 -0
- package/sa_std/core/waker.sa +289 -0
- package/sa_std/core/waker.sal +31 -0
- package/sa_std/core/weak.sa +2 -0
- package/sa_std/core/weak.sal +4 -0
- package/sa_std/cow.sa +3 -0
- package/sa_std/cow.sal +2 -0
- package/sa_std/cstring.sa +3 -0
- package/sa_std/cstring.sal +2 -0
- package/sa_std/default.sa +99 -0
- package/sa_std/duration.sa +3 -0
- package/sa_std/duration.sal +2 -0
- package/sa_std/encoding/json.sa +259 -0
- package/sa_std/encoding/json.sai +54 -0
- package/sa_std/encoding/json.sal +35 -0
- package/sa_std/encoding/prelude.sa +1 -0
- package/sa_std/encoding/prelude.sal +0 -0
- package/sa_std/env.sa +390 -0
- package/sa_std/env.sai +25 -0
- package/sa_std/error.sa +253 -0
- package/sa_std/error.sal +44 -0
- package/sa_std/ffi/cstring.sa +3 -0
- package/sa_std/ffi/cstring.sal +1 -0
- package/sa_std/ffi/prelude.sa +2 -0
- package/sa_std/ffi/prelude.sal +2 -0
- package/sa_std/ffi.sa +635 -0
- package/sa_std/ffi.sal +51 -0
- package/sa_std/fmt.sa +2 -0
- package/sa_std/fmt.sai +18 -0
- package/sa_std/fmt.sal +35 -0
- package/sa_std/fs.sa +1023 -0
- package/sa_std/fs.sai +127 -0
- package/sa_std/fs.sal +51 -0
- package/sa_std/future.sa +2 -0
- package/sa_std/future.sal +1 -0
- package/sa_std/hash.sa +1486 -0
- package/sa_std/hash.sal +13 -0
- package/sa_std/hashmap.sa +1962 -0
- package/sa_std/hashmap.sal +20 -0
- package/sa_std/hashset.sa +1004 -0
- package/sa_std/hashset.sal +18 -0
- package/sa_std/http2.sa +78 -0
- package/sa_std/http2.sai +26 -0
- package/sa_std/http2.sal +36 -0
- package/sa_std/instant.sa +3 -0
- package/sa_std/instant.sal +2 -0
- package/sa_std/io/buf_reader.sa +43 -0
- package/sa_std/io/buf_writer.sa +35 -0
- package/sa_std/io/bufio.sa +4 -0
- package/sa_std/io/bufio.sal +4 -0
- package/sa_std/io/prelude.sa +1 -0
- package/sa_std/io/prelude.sal +1 -0
- package/sa_std/io/print.sa +2 -0
- package/sa_std/io/print.sai +3 -0
- package/sa_std/io.sa +925 -0
- package/sa_std/io.sai +25 -0
- package/sa_std/io.sal +84 -0
- package/sa_std/iter.sa +2 -0
- package/sa_std/iter.sal +1 -0
- package/sa_std/join_handle.sa +3 -0
- package/sa_std/join_handle.sal +2 -0
- package/sa_std/libsa_async.sa +80 -0
- package/sa_std/m_async.sa +137 -0
- package/sa_std/m_async.sal +30 -0
- package/sa_std/m_async.sla +2 -0
- package/sa_std/manually_drop.sa +3 -0
- package/sa_std/manually_drop.sal +2 -0
- package/sa_std/marker/phantom_data.sa +3 -0
- package/sa_std/marker/phantom_data.sal +1 -0
- package/sa_std/marker/prelude.sa +4 -0
- package/sa_std/marker/prelude.sal +4 -0
- package/sa_std/marker.sa +220 -0
- package/sa_std/marker.sal +15 -0
- package/sa_std/math.sa +84 -0
- package/sa_std/math.sai +10 -0
- package/sa_std/mem/manually_drop.sa +3 -0
- package/sa_std/mem/manually_drop.sal +1 -0
- package/sa_std/mem/prelude.sa +2 -0
- package/sa_std/mem/prelude.sal +2 -0
- package/sa_std/mem.sa +564 -0
- package/sa_std/mem.sal +40 -0
- package/sa_std/modstate.sai +19 -0
- package/sa_std/net.sa +4227 -0
- package/sa_std/net.sai +239 -0
- package/sa_std/net.sal +159 -0
- package/sa_std/netx.sa +85 -0
- package/sa_std/netx.sai +11 -0
- package/sa_std/netx.sal +39 -0
- package/sa_std/nonzero.sa +3 -0
- package/sa_std/nonzero.sal +2 -0
- package/sa_std/num/nonzero.sa +3 -0
- package/sa_std/num/nonzero.sal +1 -0
- package/sa_std/num/prelude.sa +3 -0
- package/sa_std/num/prelude.sal +3 -0
- package/sa_std/num.sa +17302 -0
- package/sa_std/num.sai +11 -0
- package/sa_std/num.sal +341 -0
- package/sa_std/ops.sa +1884 -0
- package/sa_std/ops.sal +68 -0
- package/sa_std/option.sa +2 -0
- package/sa_std/option.sal +1 -0
- package/sa_std/os/fd.sa +96 -0
- package/sa_std/os/fd.sai +7 -0
- package/sa_std/os/fd.sal +11 -0
- package/sa_std/os/prelude.sa +2 -0
- package/sa_std/os/prelude.sal +1 -0
- package/sa_std/os/unix_ffi.sa +271 -0
- package/sa_std/panic.sa +1 -0
- package/sa_std/panic.sal +1 -0
- package/sa_std/path.sa +3170 -0
- package/sa_std/path.sal +12 -0
- package/sa_std/phantom_data.sa +3 -0
- package/sa_std/phantom_data.sal +2 -0
- package/sa_std/pin.sa +79 -0
- package/sa_std/pin.sal +5 -0
- package/sa_std/plugin_async.sa +90 -0
- package/sa_std/plugin_async.sal +29 -0
- package/sa_std/plugin_async.sla +4 -0
- package/sa_std/plugin_http_async.sa +46 -0
- package/sa_std/plugin_http_server.sa +61 -0
- package/sa_std/plugin_http_server.sla +2 -0
- package/sa_std/plugin_sqlite.sa +106 -0
- package/sa_std/plugin_sqlite.sla +2 -0
- package/sa_std/prelude.sa +60 -0
- package/sa_std/prelude.sal +55 -0
- package/sa_std/process.sa +916 -0
- package/sa_std/process.sai +57 -0
- package/sa_std/process.sal +27 -0
- package/sa_std/ptr.sa +503 -0
- package/sa_std/ptr.sal +2 -0
- package/sa_std/result.sa +2 -0
- package/sa_std/result.sal +1 -0
- package/sa_std/rust_core.sa +51 -0
- package/sa_std/rust_core.sal +26 -0
- package/sa_std/sa.mod +7 -0
- package/sa_std/sort.sa +156 -0
- package/sa_std/str.sla +13 -0
- package/sa_std/string.sa +12240 -0
- package/sa_std/string.sai +25 -0
- package/sa_std/string.sal +17 -0
- package/sa_std/string_format.sa +269 -0
- package/sa_std/sync/atomic.sa +1500 -0
- package/sa_std/sync/atomic.sal +45 -0
- package/sa_std/sync/barrier.sa +105 -0
- package/sa_std/sync/barrier.sal +7 -0
- package/sa_std/sync/condvar.sa +240 -0
- package/sa_std/sync/condvar.sal +4 -0
- package/sa_std/sync/mpsc.sa +758 -0
- package/sa_std/sync/mpsc.sal +42 -0
- package/sa_std/sync/mpsc_list.sa +255 -0
- package/sa_std/sync/mpsc_list.sal +3 -0
- package/sa_std/sync/mutex.sa +182 -0
- package/sa_std/sync/mutex.sal +7 -0
- package/sa_std/sync/once.sa +371 -0
- package/sa_std/sync/once.sal +31 -0
- package/sa_std/sync/poison.sa +36 -0
- package/sa_std/sync/poison.sal +11 -0
- package/sa_std/sync/prelude.sa +8 -0
- package/sa_std/sync/prelude.sal +7 -0
- package/sa_std/sync/rwlock.sa +369 -0
- package/sa_std/sync/rwlock.sal +13 -0
- package/sa_std/task.sa +2 -0
- package/sa_std/task.sal +1 -0
- package/sa_std/term.sa +2 -0
- package/sa_std/term.sai +10 -0
- package/sa_std/term.sal +33 -0
- package/sa_std/testing/assert.sai +4 -0
- package/sa_std/testing/mock_io.sa +174 -0
- package/sa_std/testing/mock_io.sal +5 -0
- package/sa_std/testing/prelude.sa +2 -0
- package/sa_std/testing/prelude.sal +1 -0
- package/sa_std/text/prelude.sa +1 -0
- package/sa_std/text/prelude.sal +1 -0
- package/sa_std/text/regex.sa +2 -0
- package/sa_std/text/regex.sai +9 -0
- package/sa_std/text/regex.sal +33 -0
- package/sa_std/thread/join_handle.sa +3 -0
- package/sa_std/thread/join_handle.sal +1 -0
- package/sa_std/thread/prelude.sa +4 -0
- package/sa_std/thread/prelude.sal +3 -0
- package/sa_std/thread.sa +160 -0
- package/sa_std/thread.sai +11 -0
- package/sa_std/thread.sal +4 -0
- package/sa_std/thread_local.sa +45 -0
- package/sa_std/thread_local.sai +9 -0
- package/sa_std/time/duration.sa +3 -0
- package/sa_std/time/duration.sal +1 -0
- package/sa_std/time/instant.sa +3 -0
- package/sa_std/time/instant.sal +1 -0
- package/sa_std/time/prelude.sa +4 -0
- package/sa_std/time/prelude.sal +4 -0
- package/sa_std/time.sa +850 -0
- package/sa_std/time.sai +37 -0
- package/sa_std/time.sal +35 -0
- package/sa_std/time.sla +67 -0
- package/sa_std/tls_client.sai +39 -0
- package/sa_std/vec.sa +5754 -0
- package/sa_std/vec.sal +1 -0
- package/sa_std/vec_deque.sa +4925 -0
- package/sa_std/vec_deque.sal +8 -0
- package/sa_std/vec_runtime_macros.sa +11 -0
- package/sa_std/ws_client.sai +57 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
@import "task.sal"
|
|
2
|
+
@import "future.sal"
|
|
3
|
+
@import "future.sa"
|
|
4
|
+
|
|
5
|
+
[MACRO] TASK_NEW %out_task, %future_reg, %ctx_reg
|
|
6
|
+
%out_task = alloc Task_SIZE
|
|
7
|
+
store %out_task+Task_future, %future_reg as ptr
|
|
8
|
+
store %out_task+Task_context, %ctx_reg as ptr
|
|
9
|
+
store %out_task+Task_result, 0 as u64
|
|
10
|
+
store %out_task+Task_state, Task_PENDING as u64
|
|
11
|
+
[END_MACRO]
|
|
12
|
+
|
|
13
|
+
[MACRO] TASK_STATE %out_state, %task_reg
|
|
14
|
+
%out_state = load %task_reg+Task_state as u64
|
|
15
|
+
[END_MACRO]
|
|
16
|
+
|
|
17
|
+
[MACRO] TASK_RESULT %out_value, %task_reg
|
|
18
|
+
%out_value = load %task_reg+Task_result as u64
|
|
19
|
+
[END_MACRO]
|
|
20
|
+
|
|
21
|
+
[MACRO] TASK_IS_READY %out_bool, %task_reg
|
|
22
|
+
__task_state_%out_bool = load %task_reg+Task_state as u64
|
|
23
|
+
%out_bool = eq __task_state_%out_bool, Task_READY
|
|
24
|
+
!__task_state_%out_bool
|
|
25
|
+
[END_MACRO]
|
|
26
|
+
|
|
27
|
+
[MACRO] TASK_POLL %out_poll, %task_reg
|
|
28
|
+
__task_future_%out_poll = load %task_reg+Task_future as ptr
|
|
29
|
+
__task_context_%out_poll = load %task_reg+Task_context as ptr
|
|
30
|
+
EXPAND FUTURE_POLL %out_poll, __task_future_%out_poll, __task_context_%out_poll
|
|
31
|
+
__task_poll_tag_%out_poll = load %out_poll+Poll_tag as u64
|
|
32
|
+
__task_poll_ready_%out_poll = eq __task_poll_tag_%out_poll, Poll_READY
|
|
33
|
+
br __task_poll_ready_%out_poll -> L_TASK_POLL_READY_%out_poll, L_TASK_POLL_PENDING_%out_poll
|
|
34
|
+
L_TASK_POLL_READY_%out_poll:
|
|
35
|
+
__task_poll_value_%out_poll = load %out_poll+Poll_value as u64
|
|
36
|
+
store %task_reg+Task_result, __task_poll_value_%out_poll as u64
|
|
37
|
+
store %task_reg+Task_state, Task_READY as u64
|
|
38
|
+
!__task_poll_value_%out_poll
|
|
39
|
+
jmp L_TASK_POLL_DONE_%out_poll
|
|
40
|
+
L_TASK_POLL_PENDING_%out_poll:
|
|
41
|
+
store %task_reg+Task_state, Task_PENDING as u64
|
|
42
|
+
L_TASK_POLL_DONE_%out_poll:
|
|
43
|
+
!__task_poll_ready_%out_poll
|
|
44
|
+
!__task_poll_tag_%out_poll
|
|
45
|
+
!__task_context_%out_poll
|
|
46
|
+
!__task_future_%out_poll
|
|
47
|
+
[END_MACRO]
|
|
48
|
+
|
|
49
|
+
[MACRO] EXECUTOR_NEW %out_executor, %tasks_ptr, %len
|
|
50
|
+
%out_executor = alloc Executor_SIZE
|
|
51
|
+
store %out_executor+Executor_tasks, %tasks_ptr as ptr
|
|
52
|
+
store %out_executor+Executor_len, %len as u64
|
|
53
|
+
[END_MACRO]
|
|
54
|
+
|
|
55
|
+
[MACRO] EXECUTOR_POLL_ONE %out_poll, %executor_reg, %index
|
|
56
|
+
__executor_tasks_%out_poll = load %executor_reg+Executor_tasks as ptr
|
|
57
|
+
__executor_off_%out_poll = mul %index, 8
|
|
58
|
+
__executor_slot_%out_poll = ptr_add __executor_tasks_%out_poll, __executor_off_%out_poll
|
|
59
|
+
__executor_task_%out_poll = load __executor_slot_%out_poll+0 as ptr
|
|
60
|
+
EXPAND TASK_POLL %out_poll, __executor_task_%out_poll
|
|
61
|
+
!__executor_task_%out_poll
|
|
62
|
+
!__executor_slot_%out_poll
|
|
63
|
+
!__executor_off_%out_poll
|
|
64
|
+
!__executor_tasks_%out_poll
|
|
65
|
+
[END_MACRO]
|
|
66
|
+
|
|
67
|
+
[MACRO] EXECUTOR_POLL_READY_COUNT %out_count, %executor_reg
|
|
68
|
+
__executor_tasks_%out_count = load %executor_reg+Executor_tasks as ptr
|
|
69
|
+
__executor_len_%out_count = load %executor_reg+Executor_len as u64
|
|
70
|
+
__executor_index_slot_%out_count = stack_alloc 8
|
|
71
|
+
store __executor_index_slot_%out_count+0, 0 as u64
|
|
72
|
+
__executor_count_slot_%out_count = stack_alloc 8
|
|
73
|
+
store __executor_count_slot_%out_count+0, 0 as u64
|
|
74
|
+
jmp L_EXECUTOR_POLL_ALL_COND_%out_count
|
|
75
|
+
L_EXECUTOR_POLL_ALL_COND_%out_count:
|
|
76
|
+
__executor_index_%out_count = load __executor_index_slot_%out_count+0 as u64
|
|
77
|
+
__executor_done_%out_count = eq __executor_index_%out_count, __executor_len_%out_count
|
|
78
|
+
br __executor_done_%out_count -> L_EXECUTOR_POLL_ALL_DONE_%out_count, L_EXECUTOR_POLL_ALL_BODY_%out_count
|
|
79
|
+
L_EXECUTOR_POLL_ALL_BODY_%out_count:
|
|
80
|
+
__executor_off_%out_count = mul __executor_index_%out_count, 8
|
|
81
|
+
__executor_slot_%out_count = ptr_add __executor_tasks_%out_count, __executor_off_%out_count
|
|
82
|
+
__executor_task_%out_count = load __executor_slot_%out_count+0 as ptr
|
|
83
|
+
EXPAND TASK_POLL __executor_poll_%out_count, __executor_task_%out_count
|
|
84
|
+
__executor_poll_tag_%out_count = load __executor_poll_%out_count+Poll_tag as u64
|
|
85
|
+
__executor_poll_ready_%out_count = eq __executor_poll_tag_%out_count, Poll_READY
|
|
86
|
+
br __executor_poll_ready_%out_count -> L_EXECUTOR_POLL_ALL_READY_%out_count, L_EXECUTOR_POLL_ALL_NEXT_%out_count
|
|
87
|
+
L_EXECUTOR_POLL_ALL_READY_%out_count:
|
|
88
|
+
__executor_count_%out_count = load __executor_count_slot_%out_count+0 as u64
|
|
89
|
+
__executor_next_count_%out_count = add __executor_count_%out_count, 1
|
|
90
|
+
store __executor_count_slot_%out_count+0, __executor_next_count_%out_count as u64
|
|
91
|
+
!__executor_next_count_%out_count
|
|
92
|
+
!__executor_count_%out_count
|
|
93
|
+
L_EXECUTOR_POLL_ALL_NEXT_%out_count:
|
|
94
|
+
__executor_next_index_%out_count = add __executor_index_%out_count, 1
|
|
95
|
+
store __executor_index_slot_%out_count+0, __executor_next_index_%out_count as u64
|
|
96
|
+
!__executor_next_index_%out_count
|
|
97
|
+
!__executor_poll_ready_%out_count
|
|
98
|
+
!__executor_poll_tag_%out_count
|
|
99
|
+
!__executor_poll_%out_count
|
|
100
|
+
!__executor_task_%out_count
|
|
101
|
+
!__executor_slot_%out_count
|
|
102
|
+
!__executor_off_%out_count
|
|
103
|
+
!__executor_done_%out_count
|
|
104
|
+
!__executor_index_%out_count
|
|
105
|
+
jmp L_EXECUTOR_POLL_ALL_COND_%out_count
|
|
106
|
+
L_EXECUTOR_POLL_ALL_DONE_%out_count:
|
|
107
|
+
%out_count = load __executor_count_slot_%out_count+0 as u64
|
|
108
|
+
!__executor_done_%out_count
|
|
109
|
+
!__executor_index_%out_count
|
|
110
|
+
!__executor_len_%out_count
|
|
111
|
+
!__executor_tasks_%out_count
|
|
112
|
+
[END_MACRO]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#def Task_SIZE = 32
|
|
2
|
+
#def Task_future = +0
|
|
3
|
+
#def Task_context = +8
|
|
4
|
+
#def Task_result = +16
|
|
5
|
+
#def Task_state = +24
|
|
6
|
+
|
|
7
|
+
#def Task_PENDING = 0
|
|
8
|
+
#def Task_READY = 1
|
|
9
|
+
|
|
10
|
+
#def Executor_SIZE = 16
|
|
11
|
+
#def Executor_tasks = +0
|
|
12
|
+
#def Executor_len = +8
|
|
13
|
+
|
|
14
|
+
#def ExecutorPoll_PENDING = 0
|
|
15
|
+
#def ExecutorPoll_READY = 1
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@import "trait_object.sal"
|
|
2
|
+
|
|
3
|
+
[MACRO] DYN_NEW %out_dyn, %data_ptr, %vtable_ptr
|
|
4
|
+
%out_dyn = alloc Dyn_SIZE
|
|
5
|
+
store %out_dyn+Dyn_data, %data_ptr as ptr
|
|
6
|
+
store %out_dyn+Dyn_vtable, %vtable_ptr as ptr
|
|
7
|
+
[END_MACRO]
|
|
8
|
+
|
|
9
|
+
[MACRO] DYN_GET_DATA %out_data, %dyn_reg
|
|
10
|
+
%out_data = load %dyn_reg+Dyn_data as ptr
|
|
11
|
+
[END_MACRO]
|
|
12
|
+
|
|
13
|
+
[MACRO] DYN_GET_VTABLE %out_vtable, %dyn_reg
|
|
14
|
+
%out_vtable = load %dyn_reg+Dyn_vtable as ptr
|
|
15
|
+
[END_MACRO]
|
|
16
|
+
|
|
17
|
+
[MACRO] DYN_CALL %out_value, %dyn_reg, %slot_off
|
|
18
|
+
__dyn_data_%out_value = load %dyn_reg+Dyn_data as ptr
|
|
19
|
+
__dyn_vtable_%out_value = load %dyn_reg+Dyn_vtable as ptr
|
|
20
|
+
__dyn_fn_%out_value = load __dyn_vtable_%out_value+%slot_off as ptr
|
|
21
|
+
%out_value = call_indirect __dyn_fn_%out_value(&__dyn_data_%out_value)
|
|
22
|
+
!__dyn_fn_%out_value
|
|
23
|
+
!__dyn_vtable_%out_value
|
|
24
|
+
!__dyn_data_%out_value
|
|
25
|
+
[END_MACRO]
|
|
26
|
+
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
@import "waker.sal"
|
|
2
|
+
|
|
3
|
+
[MACRO] RAW_WAKER_VTABLE_NEW %out_vtable, %clone_fn, %wake_fn, %wake_by_ref_fn, %drop_fn
|
|
4
|
+
__raw_waker_clone_obj_%out_vtable = %clone_fn
|
|
5
|
+
__raw_waker_clone_vt_%out_vtable = load __raw_waker_clone_obj_%out_vtable+8 as ptr
|
|
6
|
+
__raw_waker_clone_call_%out_vtable = load __raw_waker_clone_vt_%out_vtable+0 as ptr
|
|
7
|
+
|
|
8
|
+
__raw_waker_wake_obj_%out_vtable = %wake_fn
|
|
9
|
+
__raw_waker_wake_vt_%out_vtable = load __raw_waker_wake_obj_%out_vtable+8 as ptr
|
|
10
|
+
__raw_waker_wake_call_%out_vtable = load __raw_waker_wake_vt_%out_vtable+0 as ptr
|
|
11
|
+
|
|
12
|
+
__raw_waker_ref_obj_%out_vtable = %wake_by_ref_fn
|
|
13
|
+
__raw_waker_ref_vt_%out_vtable = load __raw_waker_ref_obj_%out_vtable+8 as ptr
|
|
14
|
+
__raw_waker_ref_call_%out_vtable = load __raw_waker_ref_vt_%out_vtable+0 as ptr
|
|
15
|
+
|
|
16
|
+
__raw_waker_drop_obj_%out_vtable = %drop_fn
|
|
17
|
+
__raw_waker_drop_vt_%out_vtable = load __raw_waker_drop_obj_%out_vtable+8 as ptr
|
|
18
|
+
__raw_waker_drop_call_%out_vtable = load __raw_waker_drop_vt_%out_vtable+0 as ptr
|
|
19
|
+
|
|
20
|
+
%out_vtable = alloc RawWakerVTable_SIZE
|
|
21
|
+
store %out_vtable+RawWakerVTable_clone, __raw_waker_clone_call_%out_vtable as ptr
|
|
22
|
+
store %out_vtable+RawWakerVTable_wake, __raw_waker_wake_call_%out_vtable as ptr
|
|
23
|
+
store %out_vtable+RawWakerVTable_wake_by_ref, __raw_waker_ref_call_%out_vtable as ptr
|
|
24
|
+
store %out_vtable+RawWakerVTable_drop, __raw_waker_drop_call_%out_vtable as ptr
|
|
25
|
+
|
|
26
|
+
!__raw_waker_drop_call_%out_vtable
|
|
27
|
+
!__raw_waker_drop_vt_%out_vtable
|
|
28
|
+
!__raw_waker_drop_obj_%out_vtable
|
|
29
|
+
!__raw_waker_ref_call_%out_vtable
|
|
30
|
+
!__raw_waker_ref_vt_%out_vtable
|
|
31
|
+
!__raw_waker_ref_obj_%out_vtable
|
|
32
|
+
!__raw_waker_wake_call_%out_vtable
|
|
33
|
+
!__raw_waker_wake_vt_%out_vtable
|
|
34
|
+
!__raw_waker_wake_obj_%out_vtable
|
|
35
|
+
!__raw_waker_clone_call_%out_vtable
|
|
36
|
+
!__raw_waker_clone_vt_%out_vtable
|
|
37
|
+
!__raw_waker_clone_obj_%out_vtable
|
|
38
|
+
[END_MACRO]
|
|
39
|
+
|
|
40
|
+
[MACRO] RAW_WAKER_NEW %out_raw, %data_ptr, %vtable_ptr
|
|
41
|
+
%out_raw = alloc RawWaker_SIZE
|
|
42
|
+
store %out_raw+RawWaker_data, %data_ptr as ptr
|
|
43
|
+
store %out_raw+RawWaker_vtable, %vtable_ptr as ptr
|
|
44
|
+
[END_MACRO]
|
|
45
|
+
|
|
46
|
+
[MACRO] RAW_WAKER_GET_DATA %out_data, %raw_reg
|
|
47
|
+
%out_data = load %raw_reg+RawWaker_data as ptr
|
|
48
|
+
[END_MACRO]
|
|
49
|
+
|
|
50
|
+
[MACRO] RAW_WAKER_GET_VTABLE %out_vtable, %raw_reg
|
|
51
|
+
%out_vtable = load %raw_reg+RawWaker_vtable as ptr
|
|
52
|
+
[END_MACRO]
|
|
53
|
+
|
|
54
|
+
[MACRO] RAW_WAKER_CLONE %out_raw, %raw_reg
|
|
55
|
+
__raw_waker_clone_vt_%out_raw = load %raw_reg+RawWaker_vtable as ptr
|
|
56
|
+
__raw_waker_clone_fn_%out_raw = load __raw_waker_clone_vt_%out_raw+RawWakerVTable_clone as ptr
|
|
57
|
+
__raw_waker_clone_data_%out_raw = load %raw_reg+RawWaker_data as ptr
|
|
58
|
+
__raw_waker_clone_slot_%out_raw = alloc RawWaker_SIZE
|
|
59
|
+
call_indirect __raw_waker_clone_fn_%out_raw(__raw_waker_clone_data_%out_raw, __raw_waker_clone_slot_%out_raw)
|
|
60
|
+
%out_raw = __raw_waker_clone_slot_%out_raw
|
|
61
|
+
!__raw_waker_clone_data_%out_raw
|
|
62
|
+
!__raw_waker_clone_fn_%out_raw
|
|
63
|
+
!__raw_waker_clone_vt_%out_raw
|
|
64
|
+
[END_MACRO]
|
|
65
|
+
|
|
66
|
+
[MACRO] RAW_WAKER_WAKE %out_value, %raw_reg
|
|
67
|
+
__raw_waker_vt_%out_value = load %raw_reg+RawWaker_vtable as ptr
|
|
68
|
+
__raw_waker_fn_%out_value = load __raw_waker_vt_%out_value+RawWakerVTable_wake as ptr
|
|
69
|
+
__raw_waker_data_%out_value = load %raw_reg+RawWaker_data as ptr
|
|
70
|
+
%out_value = call_indirect __raw_waker_fn_%out_value(__raw_waker_data_%out_value)
|
|
71
|
+
!__raw_waker_data_%out_value
|
|
72
|
+
!__raw_waker_fn_%out_value
|
|
73
|
+
!__raw_waker_vt_%out_value
|
|
74
|
+
[END_MACRO]
|
|
75
|
+
|
|
76
|
+
[MACRO] RAW_WAKER_WAKE_BY_REF %out_value, %raw_reg
|
|
77
|
+
__raw_waker_ref_vt_%out_value = load %raw_reg+RawWaker_vtable as ptr
|
|
78
|
+
__raw_waker_ref_fn_%out_value = load __raw_waker_ref_vt_%out_value+RawWakerVTable_wake_by_ref as ptr
|
|
79
|
+
__raw_waker_ref_data_%out_value = load %raw_reg+RawWaker_data as ptr
|
|
80
|
+
%out_value = call_indirect __raw_waker_ref_fn_%out_value(__raw_waker_ref_data_%out_value)
|
|
81
|
+
!__raw_waker_ref_data_%out_value
|
|
82
|
+
!__raw_waker_ref_fn_%out_value
|
|
83
|
+
!__raw_waker_ref_vt_%out_value
|
|
84
|
+
[END_MACRO]
|
|
85
|
+
|
|
86
|
+
[MACRO] RAW_WAKER_DROP %raw_reg, %free_label
|
|
87
|
+
__raw_waker_drop_vt_%raw_reg = load %raw_reg+RawWaker_vtable as ptr
|
|
88
|
+
__raw_waker_drop_fn_%raw_reg = load __raw_waker_drop_vt_%raw_reg+RawWakerVTable_drop as ptr
|
|
89
|
+
__raw_waker_drop_data_%raw_reg = load %raw_reg+RawWaker_data as ptr
|
|
90
|
+
call_indirect __raw_waker_drop_fn_%raw_reg(__raw_waker_drop_data_%raw_reg)
|
|
91
|
+
!__raw_waker_drop_data_%raw_reg
|
|
92
|
+
!__raw_waker_drop_fn_%raw_reg
|
|
93
|
+
!__raw_waker_drop_vt_%raw_reg
|
|
94
|
+
jmp %free_label
|
|
95
|
+
[END_MACRO]
|
|
96
|
+
|
|
97
|
+
[MACRO] WAKER_NEW %out_waker, %data_ptr, %vtable_ptr
|
|
98
|
+
%out_waker = alloc Waker_SIZE
|
|
99
|
+
store %out_waker+Waker_data, %data_ptr as ptr
|
|
100
|
+
store %out_waker+Waker_vtable, %vtable_ptr as ptr
|
|
101
|
+
[END_MACRO]
|
|
102
|
+
|
|
103
|
+
[MACRO] WAKER_FROM_RAW %out_waker, %raw_reg
|
|
104
|
+
__raw_waker_data_%out_waker = load %raw_reg+RawWaker_data as ptr
|
|
105
|
+
__raw_waker_vtable_%out_waker = load %raw_reg+RawWaker_vtable as ptr
|
|
106
|
+
%out_waker = alloc Waker_SIZE
|
|
107
|
+
store %out_waker+Waker_raw_data, __raw_waker_data_%out_waker as ptr
|
|
108
|
+
store %out_waker+Waker_raw_vtable, __raw_waker_vtable_%out_waker as ptr
|
|
109
|
+
!__raw_waker_vtable_%out_waker
|
|
110
|
+
!__raw_waker_data_%out_waker
|
|
111
|
+
[END_MACRO]
|
|
112
|
+
|
|
113
|
+
[MACRO] LOCAL_WAKER_NEW %out_waker, %data_ptr, %vtable_ptr
|
|
114
|
+
%out_waker = alloc LocalWaker_SIZE
|
|
115
|
+
store %out_waker+LocalWaker_raw_data, %data_ptr as ptr
|
|
116
|
+
store %out_waker+LocalWaker_raw_vtable, %vtable_ptr as ptr
|
|
117
|
+
[END_MACRO]
|
|
118
|
+
|
|
119
|
+
[MACRO] LOCAL_WAKER_FROM_RAW %out_waker, %raw_reg
|
|
120
|
+
__raw_local_waker_data_%out_waker = load %raw_reg+RawWaker_data as ptr
|
|
121
|
+
__raw_local_waker_vtable_%out_waker = load %raw_reg+RawWaker_vtable as ptr
|
|
122
|
+
%out_waker = alloc LocalWaker_SIZE
|
|
123
|
+
store %out_waker+LocalWaker_raw_data, __raw_local_waker_data_%out_waker as ptr
|
|
124
|
+
store %out_waker+LocalWaker_raw_vtable, __raw_local_waker_vtable_%out_waker as ptr
|
|
125
|
+
!__raw_local_waker_vtable_%out_waker
|
|
126
|
+
!__raw_local_waker_data_%out_waker
|
|
127
|
+
[END_MACRO]
|
|
128
|
+
|
|
129
|
+
[MACRO] WAKER_CLONE %out_waker, %waker_reg
|
|
130
|
+
__waker_clone_vt_%out_waker = load %waker_reg+Waker_vtable as ptr
|
|
131
|
+
__waker_clone_fn_%out_waker = load __waker_clone_vt_%out_waker+WakerCloneSlot as ptr
|
|
132
|
+
__waker_clone_data_%out_waker = load %waker_reg+Waker_data as ptr
|
|
133
|
+
__waker_clone_slot_%out_waker = alloc RawWaker_SIZE
|
|
134
|
+
call_indirect __waker_clone_fn_%out_waker(__waker_clone_data_%out_waker, __waker_clone_slot_%out_waker)
|
|
135
|
+
EXPAND WAKER_FROM_RAW %out_waker, __waker_clone_slot_%out_waker
|
|
136
|
+
!__waker_clone_slot_%out_waker
|
|
137
|
+
!__waker_clone_data_%out_waker
|
|
138
|
+
!__waker_clone_fn_%out_waker
|
|
139
|
+
!__waker_clone_vt_%out_waker
|
|
140
|
+
[END_MACRO]
|
|
141
|
+
|
|
142
|
+
[MACRO] LOCAL_WAKER_CLONE %out_waker, %waker_reg
|
|
143
|
+
__local_waker_clone_vt_%out_waker = load %waker_reg+LocalWaker_vtable as ptr
|
|
144
|
+
__local_waker_clone_fn_%out_waker = load __local_waker_clone_vt_%out_waker+RawWakerVTable_clone as ptr
|
|
145
|
+
__local_waker_clone_data_%out_waker = load %waker_reg+LocalWaker_data as ptr
|
|
146
|
+
__local_waker_clone_slot_%out_waker = alloc RawWaker_SIZE
|
|
147
|
+
call_indirect __local_waker_clone_fn_%out_waker(__local_waker_clone_data_%out_waker, __local_waker_clone_slot_%out_waker)
|
|
148
|
+
EXPAND LOCAL_WAKER_FROM_RAW %out_waker, __local_waker_clone_slot_%out_waker
|
|
149
|
+
!__local_waker_clone_slot_%out_waker
|
|
150
|
+
!__local_waker_clone_data_%out_waker
|
|
151
|
+
!__local_waker_clone_fn_%out_waker
|
|
152
|
+
!__local_waker_clone_vt_%out_waker
|
|
153
|
+
[END_MACRO]
|
|
154
|
+
|
|
155
|
+
[MACRO] WAKER_WILL_WAKE %out_bool, %left_waker, %right_waker
|
|
156
|
+
__waker_will_left_data_%out_bool = load %left_waker+Waker_data as ptr
|
|
157
|
+
__waker_will_right_data_%out_bool = load %right_waker+Waker_data as ptr
|
|
158
|
+
__waker_will_left_vt_%out_bool = load %left_waker+Waker_vtable as ptr
|
|
159
|
+
__waker_will_right_vt_%out_bool = load %right_waker+Waker_vtable as ptr
|
|
160
|
+
__waker_will_same_data_%out_bool = eq __waker_will_left_data_%out_bool, __waker_will_right_data_%out_bool
|
|
161
|
+
__waker_will_same_vt_%out_bool = eq __waker_will_left_vt_%out_bool, __waker_will_right_vt_%out_bool
|
|
162
|
+
%out_bool = and __waker_will_same_data_%out_bool, __waker_will_same_vt_%out_bool
|
|
163
|
+
!__waker_will_same_vt_%out_bool
|
|
164
|
+
!__waker_will_same_data_%out_bool
|
|
165
|
+
!__waker_will_right_vt_%out_bool
|
|
166
|
+
!__waker_will_left_vt_%out_bool
|
|
167
|
+
!__waker_will_right_data_%out_bool
|
|
168
|
+
!__waker_will_left_data_%out_bool
|
|
169
|
+
[END_MACRO]
|
|
170
|
+
|
|
171
|
+
[MACRO] LOCAL_WAKER_WILL_WAKE %out_bool, %left_waker, %right_waker
|
|
172
|
+
__local_waker_will_left_data_%out_bool = load %left_waker+LocalWaker_data as ptr
|
|
173
|
+
__local_waker_will_right_data_%out_bool = load %right_waker+LocalWaker_data as ptr
|
|
174
|
+
__local_waker_will_left_vt_%out_bool = load %left_waker+LocalWaker_vtable as ptr
|
|
175
|
+
__local_waker_will_right_vt_%out_bool = load %right_waker+LocalWaker_vtable as ptr
|
|
176
|
+
__local_waker_will_same_data_%out_bool = eq __local_waker_will_left_data_%out_bool, __local_waker_will_right_data_%out_bool
|
|
177
|
+
__local_waker_will_same_vt_%out_bool = eq __local_waker_will_left_vt_%out_bool, __local_waker_will_right_vt_%out_bool
|
|
178
|
+
%out_bool = and __local_waker_will_same_data_%out_bool, __local_waker_will_same_vt_%out_bool
|
|
179
|
+
!__local_waker_will_same_vt_%out_bool
|
|
180
|
+
!__local_waker_will_same_data_%out_bool
|
|
181
|
+
!__local_waker_will_right_vt_%out_bool
|
|
182
|
+
!__local_waker_will_left_vt_%out_bool
|
|
183
|
+
!__local_waker_will_right_data_%out_bool
|
|
184
|
+
!__local_waker_will_left_data_%out_bool
|
|
185
|
+
[END_MACRO]
|
|
186
|
+
|
|
187
|
+
[MACRO] WAKER_GET_VTABLE %out_vtable, %waker_reg
|
|
188
|
+
%out_vtable = load %waker_reg+Waker_vtable as ptr
|
|
189
|
+
[END_MACRO]
|
|
190
|
+
|
|
191
|
+
[MACRO] WAKER_GET_DATA %out_data, %waker_reg
|
|
192
|
+
%out_data = load %waker_reg+Waker_data as ptr
|
|
193
|
+
[END_MACRO]
|
|
194
|
+
|
|
195
|
+
[MACRO] LOCAL_WAKER_GET_VTABLE %out_vtable, %waker_reg
|
|
196
|
+
%out_vtable = load %waker_reg+LocalWaker_vtable as ptr
|
|
197
|
+
[END_MACRO]
|
|
198
|
+
|
|
199
|
+
[MACRO] LOCAL_WAKER_GET_DATA %out_data, %waker_reg
|
|
200
|
+
%out_data = load %waker_reg+LocalWaker_data as ptr
|
|
201
|
+
[END_MACRO]
|
|
202
|
+
|
|
203
|
+
[MACRO] WAKER_WAKE %out_value, %waker_reg
|
|
204
|
+
__waker_vt_%out_value = load %waker_reg+Waker_vtable as ptr
|
|
205
|
+
__waker_fn_%out_value = load __waker_vt_%out_value+WakerWakeSlot as ptr
|
|
206
|
+
__waker_data_%out_value = load %waker_reg+Waker_data as ptr
|
|
207
|
+
%out_value = call_indirect __waker_fn_%out_value(__waker_data_%out_value)
|
|
208
|
+
!__waker_data_%out_value
|
|
209
|
+
!__waker_fn_%out_value
|
|
210
|
+
!__waker_vt_%out_value
|
|
211
|
+
[END_MACRO]
|
|
212
|
+
|
|
213
|
+
[MACRO] WAKER_WAKE_BY_REF %out_value, %waker_reg
|
|
214
|
+
__waker_vt_ref_%out_value = load %waker_reg+Waker_vtable as ptr
|
|
215
|
+
__waker_fn_ref_%out_value = load __waker_vt_ref_%out_value+WakerWakeByRefSlot as ptr
|
|
216
|
+
__waker_data_ref_%out_value = load %waker_reg+Waker_data as ptr
|
|
217
|
+
%out_value = call_indirect __waker_fn_ref_%out_value(__waker_data_ref_%out_value)
|
|
218
|
+
!__waker_data_ref_%out_value
|
|
219
|
+
!__waker_fn_ref_%out_value
|
|
220
|
+
!__waker_vt_ref_%out_value
|
|
221
|
+
[END_MACRO]
|
|
222
|
+
|
|
223
|
+
[MACRO] WAKER_DROP %waker_reg, %free_label
|
|
224
|
+
__waker_vt_drop_%waker_reg = load %waker_reg+Waker_vtable as ptr
|
|
225
|
+
__waker_drop_fn_%waker_reg = load __waker_vt_drop_%waker_reg+WakerDropSlot as ptr
|
|
226
|
+
__waker_drop_data_%waker_reg = load %waker_reg+Waker_data as ptr
|
|
227
|
+
call_indirect __waker_drop_fn_%waker_reg(__waker_drop_data_%waker_reg)
|
|
228
|
+
!__waker_drop_data_%waker_reg
|
|
229
|
+
!__waker_drop_fn_%waker_reg
|
|
230
|
+
!__waker_vt_drop_%waker_reg
|
|
231
|
+
jmp %free_label
|
|
232
|
+
[END_MACRO]
|
|
233
|
+
|
|
234
|
+
[MACRO] LOCAL_WAKER_WAKE %out_value, %waker_reg
|
|
235
|
+
__local_waker_vt_%out_value = load %waker_reg+LocalWaker_vtable as ptr
|
|
236
|
+
__local_waker_fn_%out_value = load __local_waker_vt_%out_value+RawWakerVTable_wake as ptr
|
|
237
|
+
__local_waker_data_%out_value = load %waker_reg+LocalWaker_data as ptr
|
|
238
|
+
%out_value = call_indirect __local_waker_fn_%out_value(__local_waker_data_%out_value)
|
|
239
|
+
!__local_waker_data_%out_value
|
|
240
|
+
!__local_waker_fn_%out_value
|
|
241
|
+
!__local_waker_vt_%out_value
|
|
242
|
+
[END_MACRO]
|
|
243
|
+
|
|
244
|
+
[MACRO] LOCAL_WAKER_WAKE_BY_REF %out_value, %waker_reg
|
|
245
|
+
__local_waker_vt_ref_%out_value = load %waker_reg+LocalWaker_vtable as ptr
|
|
246
|
+
__local_waker_fn_ref_%out_value = load __local_waker_vt_ref_%out_value+RawWakerVTable_wake_by_ref as ptr
|
|
247
|
+
__local_waker_data_ref_%out_value = load %waker_reg+LocalWaker_data as ptr
|
|
248
|
+
%out_value = call_indirect __local_waker_fn_ref_%out_value(__local_waker_data_ref_%out_value)
|
|
249
|
+
!__local_waker_data_ref_%out_value
|
|
250
|
+
!__local_waker_fn_ref_%out_value
|
|
251
|
+
!__local_waker_vt_ref_%out_value
|
|
252
|
+
[END_MACRO]
|
|
253
|
+
|
|
254
|
+
[MACRO] LOCAL_WAKER_DROP %waker_reg, %free_label
|
|
255
|
+
__local_waker_vt_drop_%waker_reg = load %waker_reg+LocalWaker_vtable as ptr
|
|
256
|
+
__local_waker_drop_fn_%waker_reg = load __local_waker_vt_drop_%waker_reg+RawWakerVTable_drop as ptr
|
|
257
|
+
__local_waker_drop_data_%waker_reg = load %waker_reg+LocalWaker_data as ptr
|
|
258
|
+
call_indirect __local_waker_drop_fn_%waker_reg(__local_waker_drop_data_%waker_reg)
|
|
259
|
+
!__local_waker_drop_data_%waker_reg
|
|
260
|
+
!__local_waker_drop_fn_%waker_reg
|
|
261
|
+
!__local_waker_vt_drop_%waker_reg
|
|
262
|
+
jmp %free_label
|
|
263
|
+
[END_MACRO]
|
|
264
|
+
|
|
265
|
+
[MACRO] WAKE_NEW %out_wake, %data_ptr, %vtable_ptr
|
|
266
|
+
%out_wake = alloc Wake_SIZE
|
|
267
|
+
store %out_wake+Wake_data, %data_ptr as ptr
|
|
268
|
+
store %out_wake+Wake_vtable, %vtable_ptr as ptr
|
|
269
|
+
[END_MACRO]
|
|
270
|
+
|
|
271
|
+
[MACRO] WAKE_WAKE %out_value, %wake_reg
|
|
272
|
+
__wake_vt_%out_value = load %wake_reg+Wake_vtable as ptr
|
|
273
|
+
__wake_fn_%out_value = load __wake_vt_%out_value+WakeWakeSlot as ptr
|
|
274
|
+
__wake_data_%out_value = load %wake_reg+Wake_data as ptr
|
|
275
|
+
%out_value = call_indirect __wake_fn_%out_value(&__wake_data_%out_value)
|
|
276
|
+
!__wake_data_%out_value
|
|
277
|
+
!__wake_fn_%out_value
|
|
278
|
+
!__wake_vt_%out_value
|
|
279
|
+
[END_MACRO]
|
|
280
|
+
|
|
281
|
+
[MACRO] WAKE_WAKE_BY_REF %out_value, %wake_reg
|
|
282
|
+
__wake_ref_vt_%out_value = load %wake_reg+Wake_vtable as ptr
|
|
283
|
+
__wake_ref_fn_%out_value = load __wake_ref_vt_%out_value+WakeWakeByRefSlot as ptr
|
|
284
|
+
__wake_ref_data_%out_value = load %wake_reg+Wake_data as ptr
|
|
285
|
+
%out_value = call_indirect __wake_ref_fn_%out_value(&__wake_ref_data_%out_value)
|
|
286
|
+
!__wake_ref_data_%out_value
|
|
287
|
+
!__wake_ref_fn_%out_value
|
|
288
|
+
!__wake_ref_vt_%out_value
|
|
289
|
+
[END_MACRO]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#def RawWaker_SIZE = 16
|
|
2
|
+
#def RawWaker_data = +0
|
|
3
|
+
#def RawWaker_vtable = +8
|
|
4
|
+
|
|
5
|
+
#def RawWakerVTable_SIZE = 32
|
|
6
|
+
#def RawWakerVTable_clone = +0
|
|
7
|
+
#def RawWakerVTable_wake = +8
|
|
8
|
+
#def RawWakerVTable_wake_by_ref = +16
|
|
9
|
+
#def RawWakerVTable_drop = +24
|
|
10
|
+
|
|
11
|
+
#def Waker_SIZE = 16
|
|
12
|
+
#def Waker_raw_data = +0
|
|
13
|
+
#def Waker_raw_vtable = +8
|
|
14
|
+
#def Waker_data = +0
|
|
15
|
+
#def Waker_vtable = +8
|
|
16
|
+
#def WakerCloneSlot = +0
|
|
17
|
+
#def WakerWakeSlot = +8
|
|
18
|
+
#def WakerWakeByRefSlot = +16
|
|
19
|
+
#def WakerDropSlot = +24
|
|
20
|
+
|
|
21
|
+
#def LocalWaker_SIZE = 16
|
|
22
|
+
#def LocalWaker_raw_data = +0
|
|
23
|
+
#def LocalWaker_raw_vtable = +8
|
|
24
|
+
#def LocalWaker_data = +0
|
|
25
|
+
#def LocalWaker_vtable = +8
|
|
26
|
+
|
|
27
|
+
#def Wake_SIZE = 16
|
|
28
|
+
#def Wake_data = +0
|
|
29
|
+
#def Wake_vtable = +8
|
|
30
|
+
#def WakeWakeSlot = +0
|
|
31
|
+
#def WakeWakeByRefSlot = +8
|
package/sa_std/cow.sa
ADDED
package/sa_std/cow.sal
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
[MACRO] DEFAULT_BOOL %out_value
|
|
2
|
+
%out_value = add 0, 0
|
|
3
|
+
[END_MACRO]
|
|
4
|
+
|
|
5
|
+
[MACRO] DEFAULT_U8 %out_value
|
|
6
|
+
%out_value = add 0, 0
|
|
7
|
+
[END_MACRO]
|
|
8
|
+
|
|
9
|
+
[MACRO] DEFAULT_U16 %out_value
|
|
10
|
+
%out_value = add 0, 0
|
|
11
|
+
[END_MACRO]
|
|
12
|
+
|
|
13
|
+
[MACRO] DEFAULT_U32 %out_value
|
|
14
|
+
%out_value = add 0, 0
|
|
15
|
+
[END_MACRO]
|
|
16
|
+
|
|
17
|
+
[MACRO] DEFAULT_U64 %out_value
|
|
18
|
+
%out_value = add 0, 0
|
|
19
|
+
[END_MACRO]
|
|
20
|
+
|
|
21
|
+
// Rust method-name alias over DEFAULT_U64.
|
|
22
|
+
[MACRO] DEFAULT %out_value
|
|
23
|
+
EXPAND DEFAULT_U64 %out_value
|
|
24
|
+
[END_MACRO]
|
|
25
|
+
|
|
26
|
+
[MACRO] DEFAULT_I8 %out_value
|
|
27
|
+
%out_value = add 0, 0
|
|
28
|
+
[END_MACRO]
|
|
29
|
+
|
|
30
|
+
[MACRO] DEFAULT_I16 %out_value
|
|
31
|
+
%out_value = add 0, 0
|
|
32
|
+
[END_MACRO]
|
|
33
|
+
|
|
34
|
+
[MACRO] DEFAULT_I32 %out_value
|
|
35
|
+
%out_value = add 0, 0
|
|
36
|
+
[END_MACRO]
|
|
37
|
+
|
|
38
|
+
[MACRO] DEFAULT_I64 %out_value
|
|
39
|
+
%out_value = add 0, 0
|
|
40
|
+
[END_MACRO]
|
|
41
|
+
|
|
42
|
+
[MACRO] DEFAULT_USIZE %out_value
|
|
43
|
+
%out_value = add 0, 0
|
|
44
|
+
[END_MACRO]
|
|
45
|
+
|
|
46
|
+
[MACRO] DEFAULT_ISIZE %out_value
|
|
47
|
+
%out_value = add 0, 0
|
|
48
|
+
[END_MACRO]
|
|
49
|
+
|
|
50
|
+
[MACRO] DEFAULT_F32 %out_value
|
|
51
|
+
%out_value = add 0, 0
|
|
52
|
+
[END_MACRO]
|
|
53
|
+
|
|
54
|
+
[MACRO] DEFAULT_F64 %out_value
|
|
55
|
+
%out_value = add 0, 0
|
|
56
|
+
[END_MACRO]
|
|
57
|
+
|
|
58
|
+
[MACRO] DEFAULT_CHAR %out_value
|
|
59
|
+
%out_value = add 0, 0
|
|
60
|
+
[END_MACRO]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
[MACRO] DEFAULT_PHANTOM_DATA %out_value
|
|
64
|
+
%out_value = add 0, 0
|
|
65
|
+
[END_MACRO]
|
|
66
|
+
|
|
67
|
+
[MACRO] DEFAULT_PHANTOM_PINNED %out_value
|
|
68
|
+
%out_value = add 0, 0
|
|
69
|
+
[END_MACRO]
|
|
70
|
+
|
|
71
|
+
[MACRO] DEFAULT_WRAPPING_U64 %out_value
|
|
72
|
+
%out_value = add 0, 0
|
|
73
|
+
[END_MACRO]
|
|
74
|
+
|
|
75
|
+
// Rust method-name alias over DEFAULT_WRAPPING_U64.
|
|
76
|
+
[MACRO] DEFAULT_WRAPPING %out_value
|
|
77
|
+
EXPAND DEFAULT_WRAPPING_U64 %out_value
|
|
78
|
+
[END_MACRO]
|
|
79
|
+
|
|
80
|
+
[MACRO] DEFAULT_WRAPPING_U32 %out_value
|
|
81
|
+
%out_value = add 0, 0
|
|
82
|
+
[END_MACRO]
|
|
83
|
+
|
|
84
|
+
[MACRO] DEFAULT_WRAPPING_I64 %out_value
|
|
85
|
+
%out_value = add 0, 0
|
|
86
|
+
[END_MACRO]
|
|
87
|
+
|
|
88
|
+
[MACRO] DEFAULT_SATURATING_U64 %out_value
|
|
89
|
+
%out_value = add 0, 0
|
|
90
|
+
[END_MACRO]
|
|
91
|
+
|
|
92
|
+
// Rust method-name alias over DEFAULT_SATURATING_U64.
|
|
93
|
+
[MACRO] DEFAULT_SATURATING %out_value
|
|
94
|
+
EXPAND DEFAULT_SATURATING_U64 %out_value
|
|
95
|
+
[END_MACRO]
|
|
96
|
+
|
|
97
|
+
[MACRO] DEFAULT_SATURATING_I64 %out_value
|
|
98
|
+
%out_value = add 0, 0
|
|
99
|
+
[END_MACRO]
|