projects
/
vvhitespace
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added stdlib_tests for memset and memcpy subroutines.
[vvhitespace]
/
stdlib
/
heap.pvvs
diff --git
a/stdlib/heap.pvvs
b/stdlib/heap.pvvs
index
d753363
..
4626995
100644
(file)
--- a/
stdlib/heap.pvvs
+++ b/
stdlib/heap.pvvs
@@
-13,36
+13,32
@@
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#include <stack.pvvs>
NSSVTTSSSN | Mark: 11000 (memset)
NSSVTTSSSN | Mark: 11000 (memset)
-SSSTTN | PUSH 3
-NSTTTTTTN | JSR > 11111 (spew)
@ Store 'pattern' into one memory location on each pass through this loop.
NSSVSSSTTSSSSSSSSSSSN | Mark: 00011000 00000000
@ Store 'pattern' into one memory location on each pass through this loop.
NSSVSSSTTSSSSSSSSSSSN | Mark: 00011000 00000000
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
-SSSTSN | PUSH 2 (ptr)
-TTT | LOAD
+SNS | DUP
+SSSTTN | PUSH 3
+NSTTTSSN | JSR > 1100 (deepdup)
TSSS | ADD
TSSS | ADD
-SSST
TN | PUSH 3 (ptr)
-TTT | LOAD
+SSST
SSN | PUSH 4
+NSTTTSSN | JSR > 1100 (deepdup)
TTS | STORE
TTS | STORE
-@ Decrement and check for loop end condition 'count == 0'.
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
+@ Check for loop end condition 'count == 0'.
SNS | DUP
NTSSSSTTSSSSSSSSSSTN | BRZ > 00011000 00000001
SNS | DUP
NTSSSSTTSSSSSSSSSSTN | BRZ > 00011000 00000001
+@ Decrement and loop again.
SSSTN | PUSH 1
TSST | SUBTRACT
SSSTN | PUSH 1
TSST | SUBTRACT
-SSSTN | PUSH 1 (ptr)
-SNT | SWAP
-TTS | STORE
NSNSSSTTSSSSSSSSSSSN | JMP > 00011000 00000000
@ Clean up and return
NSSVSSSTTSSSSSSSSSSTN | Mark: 00011000 00000001
SNN | DROP
NSNSSSTTSSSSSSSSSSSN | JMP > 00011000 00000000
@ Clean up and return
NSSVSSSTTSSSSSSSSSSTN | Mark: 00011000 00000001
SNN | DROP
+SNN | DROP
+SNN | DROP
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
-57,40
+53,35
@@
NTN | RTS
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#include <stack.pvvs>
NSSVTTSSTN | Mark: 11001 (memcpy)
NSSVTTSSTN | Mark: 11001 (memcpy)
-SSSTTN | PUSH 3
-NSTTTTTTN | JSR > 11111 (spew)
@ Copy one word on each pass through this loop.
NSSVSSSTTSSTSSSSSSSSN | Mark: 00011001 00000000
@ Copy one word on each pass through this loop.
NSSVSSSTTSSTSSSSSSSSN | Mark: 00011001 00000000
-SSSTSN | PUSH 2 (ptr)
-TTT | LOAD
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
+SNS | DUP
+SSSTTN | PUSH 3
+NSTTTSSN | JSR > 1100 (deepdup)
TSSS | ADD
TSSS | ADD
-SSST
TN | PUSH 3 (ptr)
-TTT | LOAD
-SSST
N | PUSH 1 (ptr)
-TTT | LOAD
+SSST
SN | PUSH 2
+NSTTTSSN | JSR > 1100 (deepdup)
+SSST
STN | PUSH 5
+NSTTTSSN | JSR > 1100 (deepdup)
TSSS | ADD
TTT | LOAD
TTS | STORE
TSSS | ADD
TTT | LOAD
TTS | STORE
-@ Decrement and check for loop end conditions.
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
+@ Check for loop end conditions and decrement.
SNS | DUP
NTSSSSTTSSTSSSSSSSTN | BRZ > 00011001 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
SNS | DUP
NTSSSSTTSSTSSSSSSSTN | BRZ > 00011001 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
-SSSTN | PUSH 1 (ptr)
-SNT | SWAP
-TTS | STORE
NSNSSSTTSSTSSSSSSSSN | JMP > 00011001 00000000
@ Clean up and return
NSSVSSSTTSSTSSSSSSSTN | Mark: 00011001 00000001
SNN | DROP
NSNSSSTTSSTSSSSSSSSN | JMP > 00011001 00000000
@ Clean up and return
NSSVSSSTTSSTSSSSSSSTN | Mark: 00011001 00000001
SNN | DROP
+SNN | DROP
+SNN | DROP
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
-105,29
+96,31
@@
NTN | RTS
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#include <math.pvvs>
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#include <math.pvvs>
+#include <stack.pvvs>
NSSVTTSTSN | Mark: 11010 (memrand)
NSSVTTSTSN | Mark: 11010 (memrand)
-SSSTN | PUSH 1
-NSTTTTTTN | JSR > 11111 (spew)
@ Store random word into one memory location on each pass through this loop.
NSSVSSSTTSTSSSSSSSSSN | Mark: 00011010 00000000
SNS | DUP
@ Store random word into one memory location on each pass through this loop.
NSSVSSSTTSTSSSSSSSSSN | Mark: 00011010 00000000
SNS | DUP
-SSST
N | PUSH 1 (ptr)
-TTT | LOAD
+SSST
TN | PUSH 3
+NSTTTSSN | JSR > 1100 (deepdup)
TSSS | ADD
NSTTSSSSN | JSR > 10000 (random)
TTS | STORE
@ Decrement and check loop end conditions
TSSS | ADD
NSTTSSSSN | JSR > 10000 (random)
TTS | STORE
@ Decrement and check loop end conditions
+SNT | SWAP
SNS | DUP
NTSSSSTTSTSSSSSSSSTN | BRZ > 00011010 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
SNS | DUP
NTSSSSTTSTSSSSSSSSTN | BRZ > 00011010 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
+SNT | SWAP
NSNSSSTTSTSSSSSSSSSN | JMP > 00011010 00000000
@ Clean up and return
NSSVSSSTTSTSSSSSSSSTN | Mark: 00011010 00000001
SNN | DROP
NSNSSSTTSTSSSSSSSSSN | JMP > 00011010 00000000
@ Clean up and return
NSSVSSSTTSTSSSSSSSSTN | Mark: 00011010 00000001
SNN | DROP
+SNN | DROP
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
-146,42
+139,56
@@
NTN | RTS
@ Return Stack:
@ retvalue <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Return Stack:
@ retvalue <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#include <stack.pvvs>
NSSVTTSTTN | Mark: 11011 (memcmp)
NSSVTTSTTN | Mark: 11011 (memcmp)
-SSSTSN | PUSH 2
-NSTTTTTTN | JSR > 11111 (spew)
@ Compare one word on each pass through this loop.
@ Compare one word on each pass through this loop.
+@ TOS> blk2ptr, blk1ptr, count
NSSVSSSTTSTTSSSSSSSSN | Mark: 00011011 00000000
NSSVSSSTTSTTSSSSSSSSN | Mark: 00011011 00000000
+@ Retrieve *blk2ptr
SNS | DUP
SNS | DUP
-SNS | DUP
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
+SSSTSSN | PUSH 4
+NSTTTSSN | JSR > 1100 (deepdup)
TSSS | ADD
TTT | LOAD
TSSS | ADD
TTT | LOAD
-SNT | SWAP
-SSTSN | PUSH 2 (ptr)
-TTT | LOAD
+@ Retrieve *blk1ptr
+SSSTTN | PUSH 3
+NSTTTSSN | JSR > 1100 (deepdup)
+SSSTSTN | PUSH 5
+NSTTTSSN | JSR > 1100 (deepdup)
TSSS | ADD
TTT | LOAD
TSSS | ADD
TTT | LOAD
+@ Compare
TSST | SUBTRACT
TSST | SUBTRACT
+@ TOS> *blk2ptr-*blk1ptr, blk2ptr, blk1ptr, count
NTSSSSTTSTTSSSSSSTSN | BRZ > 00011011 00000010 (jump if words match)
@ Return 'match? = false'
SNN | DROP
NTSSSSTTSTTSSSSSSTSN | BRZ > 00011011 00000010 (jump if words match)
@ Return 'match? = false'
SNN | DROP
+SNN | DROP
+SNN | DROP
SSSTN | PUSH 1
NTN | RTS
@ Decrement and loop again if loop is not complete.
NSSVSSSTTSTTSSSSSSTSN | Mark: 00011011 00000010
SSSTN | PUSH 1
NTN | RTS
@ Decrement and loop again if loop is not complete.
NSSVSSSTTSTTSSSSSSTSN | Mark: 00011011 00000010
-SNS | DUP
+SSSTTN | PUSH 3
+NSTTTSSN | JSR > 1100 (deepdup)
+@ TOS> count, blk2ptr, blk1ptr, count
NTSSSSTTSTTSSSSSSSTN | BRZ > 00011011 00000001 (jump if loop is complete)
NTSSSSTTSTTSSSSSSSTN | BRZ > 00011011 00000001 (jump if loop is complete)
+SSSTTN | PUSH 3
+NSTTSTTN | JSR > 1011 (stackrotatereverse)
SSSTN | PUSH 1
SSSTN | PUSH 1
-TSST | SUBTRACT
+TSSS | ADD
+SSSTTN | PUSH 3
+NSTTSTSN | JSR > 1010 (stackrotate)
NSNSSSTTSTTSSSSSSSSN | JMP > 00011011 00000000
@ Return 'match? = true'
NSSVSSSTTSTTSSSSSSSTN | Mark: 00011011 00000001
SNN | DROP
NSNSSSTTSTTSSSSSSSSN | JMP > 00011011 00000000
@ Return 'match? = true'
NSSVSSSTTSTTSSSSSSSTN | Mark: 00011011 00000001
SNN | DROP
+SNN | DROP
+SNN | DROP
SSSSN | PUSH 0
NTN | RTS
SSSSN | PUSH 0
NTN | RTS
@@
-199,40
+206,58
@@
NTN | RTS
@ Return Stack:
@ pointer <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Return Stack:
@ pointer <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#include <stack.pvvs>
NSSVTTTSSN | Mark: 11100 (memsrch)
NSSVTTTSSN | Mark: 11100 (memsrch)
-SSSTTN | PUSH 3
-NSTTTTTTN | JSR > 11111 (spew)
+
+@ Setup an 'offset counter' on the stack.
+SSSSN | PUSH 0
@ Compare one word on each pass through this loop.
@ Compare one word on each pass through this loop.
+@ TOS> counter, address, count, pattern
NSSVSSSTTTSSSSSSSSSSN | Mark: 00011100 00000000
NSSVSSSTTTSSSSSSSSSSN | Mark: 00011100 00000000
+SNT | SWAP
SNS | DUP
SNS | DUP
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
+SSSTTN | PUSH 3
+NSTTSTTN | JSR > 1011 (stackrotatereverse)
+SNS | DUP
+SSSTTN | PUSH 3
+NSTTSTTN | JSR > 1011 (stackrotatereverse)
TSSS | ADD
TTT | LOAD
TSSS | ADD
TTT | LOAD
-SSST
TN | PUSH 3 (ptr)
-TTT | LOAD
+SSST
STN | PUSH 5
+NSTTTSSN | JSR > 1100 (deepdup)
TSST | SUBTRACT
TSST | SUBTRACT
+@ TOS> pattern-(address+counter), counter, address, count, pattern
NTSSSSTTTSSSSSSSSSTN | BRZ > 00011100 00000001
NTSSSSTTTSSSSSSSSSTN | BRZ > 00011100 00000001
+
+@ Test for end of loop by comparing 'counter' and 'count'.
SNS | DUP
SNS | DUP
-SSSTS
N | PUSH 2 (ptr)
-TTT | LOAD
+SSSTS
SN | PUSH 4
+NSTTTSSN | JSR > 1100 (deepdup)
TSST | SUBTRACT
TSST | SUBTRACT
+@ TOS> counter-count, counter, address, count, pattern
NTSSSSTTTSSSSSSSSTSN | BRZ > 00011100 00000010
NTSSSSTTTSSSSSSSSTSN | BRZ > 00011100 00000010
+
+@ Increment 'counter' and loop again.
SSSTN | PUSH 1
TSSS | ADD
NSNSSSTTTSSSSSSSSSSN | JMP > 00011100 00000000
@ Found a match. Clean up and return.
NSSVSSSTTTSSSSSSSSSTN | Mark: 00011100 00000001
SSSTN | PUSH 1
TSSS | ADD
NSNSSSTTTSSSSSSSSSSN | JMP > 00011100 00000000
@ Found a match. Clean up and return.
NSSVSSSTTTSSSSSSSSSTN | Mark: 00011100 00000001
-SSSTN | PUSH 1 (ptr)
-TTT | LOAD
TSSS | ADD
TSSS | ADD
+SNT | SWAP
+SNN | DROP
+SNT | SWAP
+SNN | DROP
NTN | RTS
@ No match found. Clean up and return.
NSSVSSSTTTSSSSSSSSTSN | Mark: 00011100 00000010
SNN | DROP
NTN | RTS
@ No match found. Clean up and return.
NSSVSSSTTTSSSSSSSSTSN | Mark: 00011100 00000010
SNN | DROP
+SNN | DROP
+SNN | DROP
+SNN | DROP
SSSSN | PUSH 0
NTN | RTS
SSSSN | PUSH 0
NTN | RTS
@@
-240,31
+265,43
@@
NTN | RTS
@ Name:
@ slurp (11110)
@ Description:
@ Name:
@ slurp (11110)
@ Description:
-@ Reads
'count'
values from heap to stack in complementary order to 'spew'.
+@ Reads values from heap to stack in complementary order to 'spew'.
@ Call Stack:
@ Call Stack:
-@ count
+@ address
+@ count <-- TOS
@ Return Stack:
@ Return Stack:
-@ heap[count]
+@ heap[
address+
count]
@ ...
@ ...
-@ heap[
2
]
-@ heap[
1]
<-- TOS
+@ heap[
address+1
]
+@ heap[
address]
<-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#include <stack.pvvs>
NSSVTTTTSN | Mark: 11110 (slurp)
@ Load one word from heap on each pass.
NSSVTTTTSN | Mark: 11110 (slurp)
@ Load one word from heap on each pass.
-NSSVSSSTTTTSSSSSSSSSN | Mark: 00011110 00000000
SNS | DUP
SNS | DUP
+SSSTTN | PUSH 3
+NSTTSTSN | JSR > 1010 (stackrotate)
+SNT | SWAP
+SNS | DUP
+SSSTTN | PUSH 3
+NSTTSTSN | JSR > 1010 (stackrotate)
+TSSS | ADD
TTT | LOAD
TTT | LOAD
+SSSTTN | PUSH 3
+NSTTSTSN | JSR > 1010 (stackrotate)
SNT | SWAP
@ Check for loop completion.
SNT | SWAP
@ Check for loop completion.
-@ As a side effect, prepare the next address.
+SNS | DUP
+NTSSSSTTTTSSSSSSSSSN | BRZ > 00011110 00000000
SSSTN | PUSH 1
TSST | SUBTRACT
SSSTN | PUSH 1
TSST | SUBTRACT
-SNS | DUP
-NTSSSSTTTTSSSSSSSSTN | BRZ > 00011110 00000001
-NSNSSSTTTTSSSSSSSSSN | JMP > 00011110 00000000
-NSSVSSSTTTTSSSSSSSSTN | Mark: 00011110 00000001
+NSNTTTTSN | JMP > 11110 (slurp)
+
+@ Clean up and return.
+NSSVSSSTTTTSSSSSSSSSN | Mark: 00011110 00000000
+SNN | DROP
SNN | DROP
NTN | RTS
SNN | DROP
NTN | RTS
@@
-272,54
+309,57
@@
NTN | RTS
@ Name:
@ spew (11111)
@ Description:
@ Name:
@ spew (11111)
@ Description:
-@ Writes
'count'
values from stack to heap in this order:
-@ TOS -> heap[
1
]
-@ TOS+1 -> heap[
2
]
+@ Writes values from stack to heap in this order:
+@ TOS -> heap[
address
]
+@ TOS+1 -> heap[
address+1
]
@ ...
@ ...
-@ TOS+n -> heap[count]
-@ This is the only stdlib function which uses heap[0] for storage.
+@ TOS+n -> heap[address+count]
@ Call Stack:
@ data-words
@ ...
@ data-words
@ Call Stack:
@ data-words
@ ...
@ data-words
+@ address
@ count <-- TOS
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ count <-- TOS
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#include <stack.pvvs>
NSSVTTTTTN | Mark: 11111 (spew)
NSSVTTTTTN | Mark: 11111 (spew)
-@ Create a counter in heap[0] that doubles as a destination pointer generator.
-SSSSN | PUSH 0 (ptr)
-SSSTN | PUSH 1
-TTS | STORE
+@ Create a counter that doubles as a dest. pointer offset generator.
+SSSSN | PUSH 0
@ Store one word to heap on each pass.
NSSVSSSTTTTTSSSSSSSSN | Mark: 00011111 00000000
@ Store one word to heap on each pass.
NSSVSSSTTTTTSSSSSSSSN | Mark: 00011111 00000000
-SNT | SWAP
-SSSSN | PUSH 0 (ptr)
-TTT | LOAD
-SNT | SWAP
+SNS | DUP
+SSSTSSN | PUSH 4
+NSTTTSSN | JSR > 1100 (deepdup)
+TSSS | ADD
+SSSTSTN | PUSH 5
+NSTTSTTN | JSR > 1011 (stackrotatereverse)
TTS | STORE
@ Check for loop completion.
TTS | STORE
@ Check for loop completion.
+SNT | SWAP
SNS | DUP
SNS | DUP
-SSSSN | PUSH 0 (ptr)
-TTT | LOAD
+SSSTTN | PUSH 3
+NSTTSTTN | JSR > 1011 (stackrotatereverse)
+SNS | DUP
+SSSTTN | PUSH 3
+NSTTSTTN | JSR > 1011 (stackrotatereverse)
TSST | SUBTRACT
NTSSSSTTTTTSSSSSSSTN | BRZ > 00011111 00000001
TSST | SUBTRACT
NTSSSSTTTTTSSSSSSSTN | BRZ > 00011111 00000001
-@ Increment heap[0] if continuing.
-SSSSN | PUSH 0 (ptr)
-SNS | DUP
-TTT | LOAD
-SSSTN | PUSH 1
+@ Increment counter.
+SSSTN | PUSH 1
TSSS | ADD
TSSS | ADD
-TTS | STORE
NSNSSSTTTTTSSSSSSSSN | JMP > 00011111 00000000
@ Clean up and return.
NSSVSSSTTTTTSSSSSSSTN | Mark: 00011111 00000001
SNN | DROP
NSNSSSTTTTTSSSSSSSSN | JMP > 00011111 00000000
@ Clean up and return.
NSSVSSSTTTTTSSSSSSSTN | Mark: 00011111 00000001
SNN | DROP
+SNN | DROP
+SNN | DROP
NTN | RTS
#endif
NTN | RTS
#endif