projects
/
vvhitespace
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
fe5f81e
)
Fixed bugs in `rshift` subroutine.
author
Aaron Taylor
<ataylor@subgeniuskitty.com>
Thu, 1 Aug 2019 01:16:23 +0000
(18:16 -0700)
committer
Aaron Taylor
<ataylor@subgeniuskitty.com>
Thu, 1 Aug 2019 01:16:23 +0000
(18:16 -0700)
stdlib/logic.pvvs
patch
|
blob
|
blame
|
history
diff --git
a/stdlib/logic.pvvs
b/stdlib/logic.pvvs
index
e8f63cb
..
8ac7a39
100644
(file)
--- a/
stdlib/logic.pvvs
+++ b/
stdlib/logic.pvvs
@@
-138,13
+138,17
@@
NTN | RTS
@ X >> shiftcount
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NSSVTSTTSSN | Mark: 101100 (rshift)
@ X >> shiftcount
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NSSVTSTTSSN | Mark: 101100 (rshift)
-
@ Test for loop completion first since it is allowable to shift by zero.
@ Test for loop completion first since it is allowable to shift by zero.
-NSSVSSTSTTSSSSSSSSSTN | Mark: 00101100 00000001
SNS | DUP
NTSSSTSTTSSSSSSSSSSN | BRZ > 00101100 00000000
SNS | DUP
NTSSSTSTTSSSSSSSSSSN | BRZ > 00101100 00000000
-@ Shift by one bit on each pass.
+
+@ Negative numbers need special handling.
SNT | SWAP
SNT | SWAP
+SNS | DUP
+NTTSSTSTTSSSSSSSTSTN | BMI > 00101100 00000101
+
+@ Shift by one bit on each pass.
+NSSVSSTSTTSSSSSSSTSSN | Mark: 00101100 00000100
SSSTSN | PUSH 2
TSTS | DIVIDE
@ Decrement the counter.
SSSTSN | PUSH 2
TSTS | DIVIDE
@ Decrement the counter.
@@
-152,13
+156,23
@@
SNT | SWAP
SSSTN | PUSH 1
TSST | SUBTRACT
@ Loop again.
SSSTN | PUSH 1
TSST | SUBTRACT
@ Loop again.
-NSN
SSTSTTSSSSSSSSSTN | JMP > 00101100 00000001
+NSN
TSTTSSN | JMP > 101100 (rshift)
-@ Clean up
and return.
+@ Clean up
NSSVSSTSTTSSSSSSSSSSN | Mark: 00101100 00000000
SNN | DROP
NTN | RTS
NSSVSSTSTTSSSSSSSSSSN | Mark: 00101100 00000000
SNN | DROP
NTN | RTS
+@ Found a negative number. Subtract one before proceeding if odd.
+NSSVSSTSTTSSSSSSSTSTN | Mark: 00101100 00000101
+SNS | DUP
+SSSTSN | PUSH 2
+TSTT | MODULO
+NTSSSTSTTSSSSSSSTSSN | BRZ > 00101100 00000100
+SSSTN | PUSH 1
+TSST | SUBTRACT
+NSNSSTSTTSSSSSSSTSSN | JMP > 00101100 00000100
+
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Name:
@ lshift (101101)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Name:
@ lshift (101101)