aboutsummaryrefslogtreecommitdiff
path: root/projects/12/MathTest
diff options
context:
space:
mode:
Diffstat (limited to 'projects/12/MathTest')
-rw-r--r--projects/12/MathTest/Math.jack12
-rw-r--r--projects/12/MathTest/Math.vm26
2 files changed, 38 insertions, 0 deletions
diff --git a/projects/12/MathTest/Math.jack b/projects/12/MathTest/Math.jack
index 6bac42e..01bce8f 100644
--- a/projects/12/MathTest/Math.jack
+++ b/projects/12/MathTest/Math.jack
@@ -28,6 +28,18 @@ class Math {
return ~(x & twoToThe[i] = 0);
}
+ function int sign(int x) {
+ if (x > 0) {
+ return 1;
+ } else {
+ if (x < 0) {
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+ }
+
/** Returns the absolute value of x. */
function int abs(int x) {
if (x > 0){
diff --git a/projects/12/MathTest/Math.vm b/projects/12/MathTest/Math.vm
index dad8ff5..513fc1a 100644
--- a/projects/12/MathTest/Math.vm
+++ b/projects/12/MathTest/Math.vm
@@ -44,6 +44,32 @@ push constant 0
eq
not
return
+function Math.sign 0
+push argument 0
+push constant 0
+gt
+if-goto IF_TRUE0
+goto IF_FALSE0
+label IF_TRUE0
+push constant 1
+return
+goto IF_END0
+label IF_FALSE0
+push argument 0
+push constant 0
+lt
+if-goto IF_TRUE1
+goto IF_FALSE1
+label IF_TRUE1
+push constant 1
+neg
+return
+goto IF_END1
+label IF_FALSE1
+push constant 0
+return
+label IF_END1
+label IF_END0
function Math.abs 0
push argument 0
push constant 0