X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/769749143b0ad46735cd1dd4cf388455c73eeba7..0750ec764cbea33d0b4646558619a0b5e365cc15:/stdlib/logic.pvvs diff --git a/stdlib/logic.pvvs b/stdlib/logic.pvvs index 0003380..8ac7a39 100644 --- a/stdlib/logic.pvvs +++ b/stdlib/logic.pvvs @@ -35,6 +35,7 @@ NTN | RTS @ Return Stack: @ X ^ Y @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#include NSSVTSTSSTN | Mark: 101001 (and) @ Prepare the stack for computation. @@ -111,6 +112,7 @@ NTN | RTS @ Return Stack: @ X xor Y @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#include NSSVTSTSTTN | Mark: 101011 (xor) SNS | DUP SSSTTN | PUSH 3 @@ -136,13 +138,17 @@ NTN | RTS @ X >> shiftcount @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTSTTSSN | Mark: 101100 (rshift) - @ Test for loop completion first since it is allowable to shift by zero. -NSSVSSTSTTSSSSSSSSSTN | Mark: 00101100 00000001 SNS | DUP NTSSSTSTTSSSSSSSSSSN | BRZ > 00101100 00000000 -@ Shift by one bit on each pass. + +@ Negative numbers need special handling. 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. @@ -150,13 +156,23 @@ SNT | SWAP SSSTN | PUSH 1 TSST | SUBTRACT @ Loop again. -NSNSSTSTTSSSSSSSSSTN | JMP > 00101100 00000001 +NSNTSTTSSN | JMP > 101100 (rshift) -@ Clean up and return. +@ Clean up 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)