Added memset function to VVS stdlib.
[vvhitespace] / stdlib / heap.pvvs
CommitLineData
3695b659
AT
1#ifndef VVS_STDLIB_HEAP
2#define VVS_STDLIB_HEAP
3
4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
5@ Description:
6@ This function writes pattern into the memory locations:
7@ startaddr -> startaddr+numbytes
8@ Call Stack:
9@ pattern
10@ startaddr
11@ numbytes <-- TOS
12@ Return Stack:
13@ <empty>
14@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
15NSSVTTSSSN | Mark: 11000 (memset)
16
17@ Prepare the stack for computation.
18@ Addr | Contents
19@ 0 | numbytes
20@ 1 | startaddr
21@ 2 | pattern
22
23SSSSN | PUSH 0 (ptr)
24SNT | SWAP
25TTS | STORE
26SSSTN | PUSH 1 (ptr)
27SNT | SWAP
28TTS | STORE
29SSSTSN | PUSH 2 (ptr)
30SNT | SWAP
31TTS | STORE
32
33@ Store pattern into one memory location on each pass through this loop.
34NSSVSSSTTSSSSSSSSSSSN | Mark: 00011000 00000000
35SSSSN | PUSH 0 (ptr)
36TTT | LOAD
37SSSTN | PUSH 1 (ptr)
38TTT | LOAD
39TSSS | ADD
40SSSTSN | PUSH 2 (ptr)
41TTT | LOAD
42TTS | STORE
43
44@ Decrement and check for loop end condition numbytes == 0.
45SSSSN | PUSH 0 (ptr)
46TTT | LOAD
47SNS | DUP
48NTSSSSTTSSSSSSSSSSTN | BRZ > 00011000 00000001
49SSSTN | PUSH 1
50TSST | SUBTRACT
51SSSSN | PUSH 0 (ptr)
52SNT | SWAP
53TTS | STORE
54NSNSSSTTSSSSSSSSSSSN | JMP > 00011000 00000000
55
56@ Clean up and return
57NSSVSSSTTSSSSSSSSSSTN | Mark: 00011000 00000001
58SNN | DROP
59NTN | RTS
60
61#endif