projects
/
vvhitespace
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Removed `isnegative` subroutine from stdlib.
[vvhitespace]
/
stdlib
/
stack.pvvs
diff --git
a/stdlib/stack.pvvs
b/stdlib/stack.pvvs
index
417b3bb
..
b6ef808
100644
(file)
--- a/
stdlib/stack.pvvs
+++ b/
stdlib/stack.pvvs
@@
-5,8
+5,8
@@
@ Name:
@ stackrotate
@ Description:
@ Name:
@ stackrotate
@ Description:
-@ Maximum rotation depth is
five. Stomps on heap[9]-heap[14
].
-@ Assumes rotation depth
greater than two, otherwise use SWAP
.
+@ Maximum rotation depth is
14. Stomps on heap[1]-heap[15
].
+@ Assumes rotation depth
is at least 2
.
@ Call Stack:
@ stack word n
@ ...
@ Call Stack:
@ stack word n
@ ...
@@
-23,19
+23,20
@@
NSSVTSTSN | Mark: 1010 (stackrotate)
@ For the convenience of other functions, modulo the
@ rotation depth by the available registers.
@ For the convenience of other functions, modulo the
@ rotation depth by the available registers.
-SSST
STN | PUSH
5
+SSST
TTTN | PUSH 1
5
TSTT | MODULO
TSTT | MODULO
-@ Use heap[14] for generating register addresses.
-SSSTTTSN | PUSH 14 (ptr)
+@ Use heap[15] for generating register addresses.
+@ TODO: Switch to using heap[1] so number of registers is limited only by user.
+SSSTTTTN | PUSH 15 (ptr)
SSSSN | PUSH 0
TTS | STORE
@ Dump one word from stack to heap each pass through the loop.
NSSVSSSSTSTSSSSSSSSSN | Mark: 00001010 00000000
SNT | SWAP
SSSSN | PUSH 0
TTS | STORE
@ Dump one word from stack to heap each pass through the loop.
NSSVSSSSTSTSSSSSSSSSN | Mark: 00001010 00000000
SNT | SWAP
-SSST
SSTN | PUSH 9
(starting register)
-SSSTTT
SN | PUSH 14
(ptr)
+SSST
N | PUSH 1
(starting register)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
TSSS | ADD
SNT | SWAP
TTT | LOAD
TSSS | ADD
SNT | SWAP
@@
-43,7
+44,7
@@
TTS | STORE
@ See if the loop is complete.
SNS | DUP
@ See if the loop is complete.
SNS | DUP
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
@@
-51,11
+52,11
@@
TSST | SUBTRACT
NTSSSSSTSTSSSSSSSSTN | BRZ > 00001010 00000001
@ Increment the loop counter
NTSSSSSTSTSSSSSSSSTN | BRZ > 00001010 00000001
@ Increment the loop counter
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
SNT | SWAP
TTS | STORE
NSNSSSSTSTSSSSSSSSSN | JMP > 00001010 00000000
SNT | SWAP
TTS | STORE
NSNSSSSTSTSSSSSSSSSN | JMP > 00001010 00000000
@@
-63,40
+64,40
@@
NSNSSSSTSTSSSSSSSSSN | JMP > 00001010 00000000
@ The correct number of words have been stored to registers.
@ Time to read them back in rotated order.
@ The correct number of words have been stored to registers.
@ Time to read them back in rotated order.
-@ First, prepare the counter in heap[1
4
] again.
+@ First, prepare the counter in heap[1
5
] again.
@ This consumes 'rd' from the stack.
NSSVSSSSTSTSSSSSSSSTN | Mark: 00001010 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
@ This consumes 'rd' from the stack.
NSSVSSSSTSTSSSSSSSSTN | Mark: 00001010 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
SNT | SWAP
TTS | STORE
@ Second, read in the old TOS manually.
SNT | SWAP
TTS | STORE
@ Second, read in the old TOS manually.
-SSST
SSTN | PUSH 9
(starting register)
+SSST
N | PUSH 1
(starting register)
TTT | LOAD
@ Read one word per pass through this loop.
NSSVSSSSTSTSSSSSSSTSN | Mark: 00001010 00000010
TTT | LOAD
@ Read one word per pass through this loop.
NSSVSSSSTSTSSSSSSSTSN | Mark: 00001010 00000010
-SSST
SSTN | PUSH 9
(starting register)
-SSSTTT
SN | PUSH 14
(ptr)
+SSST
N | PUSH 1
(starting register)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
TSSS | ADD
TTT | LOAD
@ See if the loop is complete.
TTT | LOAD
TSSS | ADD
TTT | LOAD
@ See if the loop is complete.
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSST | SUBTRACT
NTSSSSSTSTSSSSSSSTTN | BRZ > 00001010 00000011
@ Decrement the loop counter and loop again.
TTT | LOAD
SSSTN | PUSH 1
TSST | SUBTRACT
NTSSSSSTSTSSSSSSSTTN | BRZ > 00001010 00000011
@ Decrement the loop counter and loop again.
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSST | SUBTRACT
TTT | LOAD
SSSTN | PUSH 1
TSST | SUBTRACT
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
SNT | SWAP
TTS | STORE
NSNSSSSTSTSSSSSSSTSN | JMP > 00001010 00000010
SNT | SWAP
TTS | STORE
NSNSSSSTSTSSSSSSSTSN | JMP > 00001010 00000010
@@
-109,8
+110,8
@@
NTN | RTS
@ Name:
@ stackrotatereverse
@ Description:
@ Name:
@ stackrotatereverse
@ Description:
-@ Maximum rotation depth is
five. Stomps on heap[9]-heap[14
].
-@ Assumes rotation depth
greater than two, otherwise use SWAP
.
+@ Maximum rotation depth is
14. Stomps on heap[1]-heap[15
].
+@ Assumes rotation depth
is at least 2
.
@ Call Stack:
@ stack word n
@ ...
@ Call Stack:
@ stack word n
@ ...
@@
-127,19
+128,20
@@
NSSVTSTTN | Mark: 1011 (stackrotatereverse)
@ For the convenience of other functions, modulo the
@ rotation depth by the available registers.
@ For the convenience of other functions, modulo the
@ rotation depth by the available registers.
-SSST
STN | PUSH
5
+SSST
TTTN | PUSH 1
5
TSTT | MODULO
TSTT | MODULO
-@ Use heap[14] for generating register addresses.
-SSSTTTSN | PUSH 14 (ptr)
+@ Use heap[15] for generating register addresses.
+@ TODO: Switch to using heap[1] so number of registers is limited only by user.
+SSSTTTTN | PUSH 15 (ptr)
SSSSN | PUSH 0
TTS | STORE
@ Dump one word from stack to heap each pass through the loop.
NSSVSSSSTSTTSSSSSSSSN | Mark: 00001011 00000000
SNT | SWAP
SSSSN | PUSH 0
TTS | STORE
@ Dump one word from stack to heap each pass through the loop.
NSSVSSSSTSTTSSSSSSSSN | Mark: 00001011 00000000
SNT | SWAP
-SSST
SSTN | PUSH 9
(starting register)
-SSSTTT
SN | PUSH 14
(ptr)
+SSST
N | PUSH 1
(starting register)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
TSSS | ADD
SNT | SWAP
TTT | LOAD
TSSS | ADD
SNT | SWAP
@@
-147,7
+149,7
@@
TTS | STORE
@ See if the loop is complete.
SNS | DUP
@ See if the loop is complete.
SNS | DUP
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
@@
-155,11
+157,11
@@
TSST | SUBTRACT
NTSSSSSTSTTSSSSSSSTN | BRZ > 00001011 00000001
@ Increment the loop counter
NTSSSSSTSTTSSSSSSSTN | BRZ > 00001011 00000001
@ Increment the loop counter
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
TTT | LOAD
SSSTN | PUSH 1
TSSS | ADD
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
SNT | SWAP
TTS | STORE
NSNSSSSTSTTSSSSSSSSN | JMP > 00001011 00000000
SNT | SWAP
TTS | STORE
NSNSSSSTSTTSSSSSSSSN | JMP > 00001011 00000000
@@
-167,45
+169,45
@@
NSNSSSSTSTTSSSSSSSSN | JMP > 00001011 00000000
@ The correct number of words have been stored to registers.
@ Time to read them back in rotated order.
@ The correct number of words have been stored to registers.
@ Time to read them back in rotated order.
-@ First, prepare the counter in heap[1
4
] again.
+@ First, prepare the counter in heap[1
5
] again.
NSSVSSSSTSTTSSSSSSSTN | Mark: 00001011 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
SNS | DUP
SSSTN | PUSH 1
TSST | SUBTRACT
NSSVSSSSTSTTSSSSSSSTN | Mark: 00001011 00000001
SSSTN | PUSH 1
TSST | SUBTRACT
SNS | DUP
SSSTN | PUSH 1
TSST | SUBTRACT
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
SNT | SWAP
TTS | STORE
@ Read one word per pass through this loop.
@ Store it behind 'rd' on the stack.
NSSVSSSSTSTTSSSSSSTSN | Mark: 00001011 00000010
SNT | SWAP
TTS | STORE
@ Read one word per pass through this loop.
@ Store it behind 'rd' on the stack.
NSSVSSSSTSTTSSSSSSTSN | Mark: 00001011 00000010
-SSST
SSTN | PUSH 9
(starting register)
-SSSTTT
SN | PUSH 14
(ptr)
+SSST
N | PUSH 1
(starting register)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
TSSS | ADD
TTT | LOAD
SNT | SWAP
@ See if the loop is complete.
TTT | LOAD
TSSS | ADD
TTT | LOAD
SNT | SWAP
@ See if the loop is complete.
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
NTSSSSSTSTTSSSSSSTTN | BRZ > 00001011 00000011
@ Decrement the loop counter and loop again.
TTT | LOAD
NTSSSSSTSTTSSSSSSTTN | BRZ > 00001011 00000011
@ Decrement the loop counter and loop again.
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
TTT | LOAD
SSSTN | PUSH 1
TSST | SUBTRACT
TTT | LOAD
SSSTN | PUSH 1
TSST | SUBTRACT
-SSSTTT
SN | PUSH 14
(ptr)
+SSSTTT
TN | PUSH 15
(ptr)
SNT | SWAP
TTS | STORE
NSNSSSSTSTTSSSSSSTSN | JMP > 00001011 00000010
@ Read in the final value manually and return.
NSSVSSSSTSTTSSSSSSTTN | Mark: 00001011 00000011
SNT | SWAP
TTS | STORE
NSNSSSSTSTTSSSSSSTSN | JMP > 00001011 00000010
@ Read in the final value manually and return.
NSSVSSSSTSTTSSSSSSTTN | Mark: 00001011 00000011
-SSST
SSTN | PUSH 9
(starting register)
+SSST
N | PUSH 1
(starting register)
TSSS | ADD
TTT | LOAD
NTN | RTS
TSSS | ADD
TTT | LOAD
NTN | RTS
@@
-215,8
+217,8
@@
NTN | RTS
@ deepdup
@ Description:
@ Duplicates an item deep on the stack, placing the duplicate on TOS.
@ deepdup
@ Description:
@ Duplicates an item deep on the stack, placing the duplicate on TOS.
-@ By default, maximum depth is 1
1
.
-@ True maximum depth is (max depth of stackrotate & stackrotatereverse)-
3
.
+@ By default, maximum depth is 1
3
.
+@ True maximum depth is (max depth of stackrotate & stackrotatereverse)-
1
.
@ Call Stack:
@ stack word n
@ ...
@ Call Stack:
@ stack word n
@ ...