initial commit
This commit is contained in:
+143
@@ -0,0 +1,143 @@
|
||||
import { S10_0, S10_1, S10_2, S10_3, S10_4, S10_5, S10_6, S10_7, S10_8, S10_9 } from "../symbol/S10.js"
|
||||
|
||||
/**
|
||||
* @param { symbol } a
|
||||
* @param { symbol } b
|
||||
* @param { boolean } carry
|
||||
* @returns { [value: symbol, carry: boolean] }
|
||||
*/
|
||||
export function add10B(a, b, carry) {
|
||||
switch (a) {
|
||||
case S10_0: switch (b) {
|
||||
case S10_0: return carry ? [S10_1, false] : [S10_0, false];
|
||||
case S10_1: return carry ? [S10_2, false] : [S10_1, false];
|
||||
case S10_2: return carry ? [S10_3, false] : [S10_2, false];
|
||||
case S10_3: return carry ? [S10_4, false] : [S10_3, false];
|
||||
case S10_4: return carry ? [S10_5, false] : [S10_4, false];
|
||||
case S10_5: return carry ? [S10_6, false] : [S10_5, false];
|
||||
case S10_6: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_7: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_8: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_9: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_1: switch (b) {
|
||||
case S10_0: return carry ? [S10_2, false] : [S10_1, false];
|
||||
case S10_1: return carry ? [S10_3, false] : [S10_2, false];
|
||||
case S10_2: return carry ? [S10_4, false] : [S10_3, false];
|
||||
case S10_3: return carry ? [S10_5, false] : [S10_4, false];
|
||||
case S10_4: return carry ? [S10_6, false] : [S10_5, false];
|
||||
case S10_5: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_6: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_7: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_8: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_9: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_2: switch (b) {
|
||||
case S10_0: return carry ? [S10_3, false] : [S10_2, false];
|
||||
case S10_1: return carry ? [S10_4, false] : [S10_3, false];
|
||||
case S10_2: return carry ? [S10_5, false] : [S10_4, false];
|
||||
case S10_3: return carry ? [S10_6, false] : [S10_5, false];
|
||||
case S10_4: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_5: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_6: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_7: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_8: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_9: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_3: switch (b) {
|
||||
case S10_0: return carry ? [S10_4, false] : [S10_3, false];
|
||||
case S10_1: return carry ? [S10_5, false] : [S10_4, false];
|
||||
case S10_2: return carry ? [S10_6, false] : [S10_5, false];
|
||||
case S10_3: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_4: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_5: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_6: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_7: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_8: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_9: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_4: switch (b) {
|
||||
case S10_0: return carry ? [S10_5, false] : [S10_4, false];
|
||||
case S10_1: return carry ? [S10_6, false] : [S10_5, false];
|
||||
case S10_2: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_3: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_4: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_5: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_6: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_7: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_8: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
case S10_9: return carry ? [S10_4, true ] : [S10_3, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_5: switch (b) {
|
||||
case S10_0: return carry ? [S10_6, false] : [S10_5, false];
|
||||
case S10_1: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_2: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_3: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_4: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_5: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_6: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_7: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
case S10_8: return carry ? [S10_4, true ] : [S10_3, true ];
|
||||
case S10_9: return carry ? [S10_5, true ] : [S10_4, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_6: switch (b) {
|
||||
case S10_0: return carry ? [S10_7, false] : [S10_6, false];
|
||||
case S10_1: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_2: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_3: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_4: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_5: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_6: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
case S10_7: return carry ? [S10_4, true ] : [S10_3, true ];
|
||||
case S10_8: return carry ? [S10_5, true ] : [S10_4, true ];
|
||||
case S10_9: return carry ? [S10_6, true ] : [S10_5, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_7: switch (b) {
|
||||
case S10_0: return carry ? [S10_8, false] : [S10_7, false];
|
||||
case S10_1: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_2: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_3: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_4: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_5: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
case S10_6: return carry ? [S10_4, true ] : [S10_3, true ];
|
||||
case S10_7: return carry ? [S10_5, true ] : [S10_4, true ];
|
||||
case S10_8: return carry ? [S10_6, true ] : [S10_5, true ];
|
||||
case S10_9: return carry ? [S10_7, true ] : [S10_6, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_8: switch (b) {
|
||||
case S10_0: return carry ? [S10_9, false] : [S10_8, false];
|
||||
case S10_1: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_2: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_3: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_4: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
case S10_5: return carry ? [S10_4, true ] : [S10_3, true ];
|
||||
case S10_6: return carry ? [S10_5, true ] : [S10_4, true ];
|
||||
case S10_7: return carry ? [S10_6, true ] : [S10_5, true ];
|
||||
case S10_8: return carry ? [S10_7, true ] : [S10_6, true ];
|
||||
case S10_9: return carry ? [S10_8, true ] : [S10_7, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S10_9: switch (b) {
|
||||
case S10_0: return carry ? [S10_0, true ] : [S10_9, false];
|
||||
case S10_1: return carry ? [S10_1, true ] : [S10_0, true ];
|
||||
case S10_2: return carry ? [S10_2, true ] : [S10_1, true ];
|
||||
case S10_3: return carry ? [S10_3, true ] : [S10_2, true ];
|
||||
case S10_4: return carry ? [S10_4, true ] : [S10_3, true ];
|
||||
case S10_5: return carry ? [S10_5, true ] : [S10_4, true ];
|
||||
case S10_6: return carry ? [S10_6, true ] : [S10_5, true ];
|
||||
case S10_7: return carry ? [S10_7, true ] : [S10_6, true ];
|
||||
case S10_8: return carry ? [S10_8, true ] : [S10_7, true ];
|
||||
case S10_9: return carry ? [S10_9, true ] : [S10_8, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
}
|
||||
+317
@@ -0,0 +1,317 @@
|
||||
import { S16_0, S16_1, S16_2, S16_3, S16_4, S16_5, S16_6, S16_7, S16_8, S16_9, S16_A, S16_B, S16_C, S16_D, S16_E, S16_F } from "../symbol/S16.js"
|
||||
|
||||
/**
|
||||
* @param { symbol } a
|
||||
* @param { symbol } b
|
||||
* @param { boolean } carry
|
||||
* @returns { [value: symbol, carry: boolean] }
|
||||
*/
|
||||
export function add16B(a, b, carry) {
|
||||
switch (a) {
|
||||
case S16_0: switch (b) {
|
||||
case S16_0: return carry ? [S16_1, false] : [S16_0, false];
|
||||
case S16_1: return carry ? [S16_2, false] : [S16_1, false];
|
||||
case S16_2: return carry ? [S16_3, false] : [S16_2, false];
|
||||
case S16_3: return carry ? [S16_4, false] : [S16_3, false];
|
||||
case S16_4: return carry ? [S16_5, false] : [S16_4, false];
|
||||
case S16_5: return carry ? [S16_6, false] : [S16_5, false];
|
||||
case S16_6: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_7: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_8: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_9: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_A: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_B: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_C: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_D: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_E: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_F: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_1: switch (b) {
|
||||
case S16_0: return carry ? [S16_2, false] : [S16_1, false];
|
||||
case S16_1: return carry ? [S16_3, false] : [S16_2, false];
|
||||
case S16_2: return carry ? [S16_4, false] : [S16_3, false];
|
||||
case S16_3: return carry ? [S16_5, false] : [S16_4, false];
|
||||
case S16_4: return carry ? [S16_6, false] : [S16_5, false];
|
||||
case S16_5: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_6: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_7: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_8: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_9: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_A: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_B: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_C: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_D: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_E: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_F: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_2: switch (b) {
|
||||
case S16_0: return carry ? [S16_3, false] : [S16_2, false];
|
||||
case S16_1: return carry ? [S16_4, false] : [S16_3, false];
|
||||
case S16_2: return carry ? [S16_5, false] : [S16_4, false];
|
||||
case S16_3: return carry ? [S16_6, false] : [S16_5, false];
|
||||
case S16_4: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_5: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_6: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_7: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_8: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_9: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_A: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_B: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_C: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_D: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_E: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_F: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_3: switch (b) {
|
||||
case S16_0: return carry ? [S16_4, false] : [S16_3, false];
|
||||
case S16_1: return carry ? [S16_5, false] : [S16_4, false];
|
||||
case S16_2: return carry ? [S16_6, false] : [S16_5, false];
|
||||
case S16_3: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_4: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_5: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_6: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_7: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_8: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_9: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_A: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_B: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_C: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_D: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_E: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_F: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_4: switch (b) {
|
||||
case S16_0: return carry ? [S16_5, false] : [S16_4, false];
|
||||
case S16_1: return carry ? [S16_6, false] : [S16_5, false];
|
||||
case S16_2: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_3: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_4: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_5: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_6: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_7: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_8: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_9: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_A: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_B: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_C: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_D: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_E: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_F: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_5: switch (b) {
|
||||
case S16_0: return carry ? [S16_6, false] : [S16_5, false];
|
||||
case S16_1: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_2: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_3: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_4: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_5: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_6: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_7: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_8: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_9: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_A: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_B: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_C: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_D: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_E: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_F: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_6: switch (b) {
|
||||
case S16_0: return carry ? [S16_7, false] : [S16_6, false];
|
||||
case S16_1: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_2: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_3: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_4: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_5: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_6: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_7: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_8: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_9: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_A: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_B: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_C: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_D: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_E: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_F: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_7: switch (b) {
|
||||
case S16_0: return carry ? [S16_8, false] : [S16_7, false];
|
||||
case S16_1: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_2: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_3: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_4: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_5: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_6: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_7: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_8: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_9: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_A: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_B: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_C: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_D: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_E: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_F: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_8: switch (b) {
|
||||
case S16_0: return carry ? [S16_9, false] : [S16_8, false];
|
||||
case S16_1: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_2: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_3: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_4: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_5: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_6: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_7: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_8: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_9: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_A: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_B: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_C: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_D: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_E: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_F: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_9: switch (b) {
|
||||
case S16_0: return carry ? [S16_A, false] : [S16_9, false];
|
||||
case S16_1: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_2: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_3: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_4: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_5: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_6: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_7: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_8: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_9: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_A: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_B: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_C: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_D: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_E: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_F: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_A: switch (b) {
|
||||
case S16_0: return carry ? [S16_B, false] : [S16_A, false];
|
||||
case S16_1: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_2: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_3: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_4: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_5: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_6: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_7: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_8: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_9: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_A: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_B: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_C: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_D: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_E: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
case S16_F: return carry ? [S16_A, true ] : [S16_9, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_B: switch (b) {
|
||||
case S16_0: return carry ? [S16_C, false] : [S16_B, false];
|
||||
case S16_1: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_2: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_3: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_4: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_5: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_6: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_7: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_8: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_9: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_A: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_B: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_C: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_D: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
case S16_E: return carry ? [S16_A, true ] : [S16_9, true ];
|
||||
case S16_F: return carry ? [S16_B, true ] : [S16_A, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_C: switch (b) {
|
||||
case S16_0: return carry ? [S16_D, false] : [S16_C, false];
|
||||
case S16_1: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_2: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_3: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_4: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_5: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_6: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_7: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_8: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_9: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_A: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_B: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_C: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
case S16_D: return carry ? [S16_A, true ] : [S16_9, true ];
|
||||
case S16_E: return carry ? [S16_B, true ] : [S16_A, true ];
|
||||
case S16_F: return carry ? [S16_C, true ] : [S16_B, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_D: switch (b) {
|
||||
case S16_0: return carry ? [S16_E, false] : [S16_D, false];
|
||||
case S16_1: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_2: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_3: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_4: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_5: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_6: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_7: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_8: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_9: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_A: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_B: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
case S16_C: return carry ? [S16_A, true ] : [S16_9, true ];
|
||||
case S16_D: return carry ? [S16_B, true ] : [S16_A, true ];
|
||||
case S16_E: return carry ? [S16_C, true ] : [S16_B, true ];
|
||||
case S16_F: return carry ? [S16_D, true ] : [S16_C, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_E: switch (b) {
|
||||
case S16_0: return carry ? [S16_F, false] : [S16_E, false];
|
||||
case S16_1: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_2: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_3: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_4: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_5: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_6: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_7: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_8: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_9: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_A: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
case S16_B: return carry ? [S16_A, true ] : [S16_9, true ];
|
||||
case S16_C: return carry ? [S16_B, true ] : [S16_A, true ];
|
||||
case S16_D: return carry ? [S16_C, true ] : [S16_B, true ];
|
||||
case S16_E: return carry ? [S16_D, true ] : [S16_C, true ];
|
||||
case S16_F: return carry ? [S16_E, true ] : [S16_D, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S16_F: switch (b) {
|
||||
case S16_0: return carry ? [S16_0, true ] : [S16_F, false];
|
||||
case S16_1: return carry ? [S16_1, true ] : [S16_0, true ];
|
||||
case S16_2: return carry ? [S16_2, true ] : [S16_1, true ];
|
||||
case S16_3: return carry ? [S16_3, true ] : [S16_2, true ];
|
||||
case S16_4: return carry ? [S16_4, true ] : [S16_3, true ];
|
||||
case S16_5: return carry ? [S16_5, true ] : [S16_4, true ];
|
||||
case S16_6: return carry ? [S16_6, true ] : [S16_5, true ];
|
||||
case S16_7: return carry ? [S16_7, true ] : [S16_6, true ];
|
||||
case S16_8: return carry ? [S16_8, true ] : [S16_7, true ];
|
||||
case S16_9: return carry ? [S16_9, true ] : [S16_8, true ];
|
||||
case S16_A: return carry ? [S16_A, true ] : [S16_9, true ];
|
||||
case S16_B: return carry ? [S16_B, true ] : [S16_A, true ];
|
||||
case S16_C: return carry ? [S16_C, true ] : [S16_B, true ];
|
||||
case S16_D: return carry ? [S16_D, true ] : [S16_C, true ];
|
||||
case S16_E: return carry ? [S16_E, true ] : [S16_D, true ];
|
||||
case S16_F: return carry ? [S16_F, true ] : [S16_E, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import { S2_0, S2_1 } from "../symbol/S2.js"
|
||||
|
||||
/**
|
||||
* @param { symbol } a
|
||||
* @param { symbol } b
|
||||
* @param { boolean } carry
|
||||
* @returns { [value: symbol, carry: boolean] }
|
||||
*/
|
||||
export function add2B(a, b, carry) {
|
||||
switch (a) {
|
||||
case S2_0: switch (b) {
|
||||
case S2_0: return carry ? [S2_1, false] : [S2_0, false];
|
||||
case S2_1: return carry ? [S2_0, true ] : [S2_1, false];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S2_1: switch (b) {
|
||||
case S2_0: return carry ? [S2_0, true] : [S2_1, false];
|
||||
case S2_1: return carry ? [S2_1, true] : [S2_0, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
import { S8_0, S8_1, S8_2, S8_3, S8_4, S8_5, S8_6, S8_7 } from "../symbol/S8.js"
|
||||
|
||||
/**
|
||||
* @param { symbol } a
|
||||
* @param { symbol } b
|
||||
* @param { boolean } carry
|
||||
* @returns { [value: symbol, carry: boolean] }
|
||||
*/
|
||||
export function add8B(a, b, carry) {
|
||||
switch (a) {
|
||||
case S8_0: switch (b) {
|
||||
case S8_0: return carry ? [S8_1, false] : [S8_0, false];
|
||||
case S8_1: return carry ? [S8_2, false] : [S8_1, false];
|
||||
case S8_2: return carry ? [S8_3, false] : [S8_2, false];
|
||||
case S8_3: return carry ? [S8_4, false] : [S8_3, false];
|
||||
case S8_4: return carry ? [S8_5, false] : [S8_4, false];
|
||||
case S8_5: return carry ? [S8_6, false] : [S8_5, false];
|
||||
case S8_6: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_7: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_1: switch (b) {
|
||||
case S8_0: return carry ? [S8_2, false] : [S8_1, false];
|
||||
case S8_1: return carry ? [S8_3, false] : [S8_2, false];
|
||||
case S8_2: return carry ? [S8_4, false] : [S8_3, false];
|
||||
case S8_3: return carry ? [S8_5, false] : [S8_4, false];
|
||||
case S8_4: return carry ? [S8_6, false] : [S8_5, false];
|
||||
case S8_5: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_6: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_7: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_2: switch (b) {
|
||||
case S8_0: return carry ? [S8_3, false] : [S8_2, false];
|
||||
case S8_1: return carry ? [S8_4, false] : [S8_3, false];
|
||||
case S8_2: return carry ? [S8_5, false] : [S8_4, false];
|
||||
case S8_3: return carry ? [S8_6, false] : [S8_5, false];
|
||||
case S8_4: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_5: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_6: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
case S8_7: return carry ? [S8_2, true ] : [S8_1, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_3: switch (b) {
|
||||
case S8_0: return carry ? [S8_4, false] : [S8_3, false];
|
||||
case S8_1: return carry ? [S8_5, false] : [S8_4, false];
|
||||
case S8_2: return carry ? [S8_6, false] : [S8_5, false];
|
||||
case S8_3: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_4: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_5: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
case S8_6: return carry ? [S8_2, true ] : [S8_1, true ];
|
||||
case S8_7: return carry ? [S8_3, true ] : [S8_2, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_4: switch (b) {
|
||||
case S8_0: return carry ? [S8_5, false] : [S8_4, false];
|
||||
case S8_1: return carry ? [S8_6, false] : [S8_5, false];
|
||||
case S8_2: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_3: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_4: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
case S8_5: return carry ? [S8_2, true ] : [S8_1, true ];
|
||||
case S8_6: return carry ? [S8_3, true ] : [S8_2, true ];
|
||||
case S8_7: return carry ? [S8_4, true ] : [S8_3, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_5: switch (b) {
|
||||
case S8_0: return carry ? [S8_6, false] : [S8_5, false];
|
||||
case S8_1: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_2: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_3: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
case S8_4: return carry ? [S8_2, true ] : [S8_1, true ];
|
||||
case S8_5: return carry ? [S8_3, true ] : [S8_2, true ];
|
||||
case S8_6: return carry ? [S8_4, true ] : [S8_3, true ];
|
||||
case S8_7: return carry ? [S8_5, true ] : [S8_4, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_6: switch (b) {
|
||||
case S8_0: return carry ? [S8_7, false] : [S8_6, false];
|
||||
case S8_1: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_2: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
case S8_3: return carry ? [S8_2, true ] : [S8_1, true ];
|
||||
case S8_4: return carry ? [S8_3, true ] : [S8_2, true ];
|
||||
case S8_5: return carry ? [S8_4, true ] : [S8_3, true ];
|
||||
case S8_6: return carry ? [S8_5, true ] : [S8_4, true ];
|
||||
case S8_7: return carry ? [S8_6, true ] : [S8_5, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
case S8_7: switch (b) {
|
||||
case S8_0: return carry ? [S8_0, true ] : [S8_7, false];
|
||||
case S8_1: return carry ? [S8_1, true ] : [S8_0, true ];
|
||||
case S8_2: return carry ? [S8_2, true ] : [S8_1, true ];
|
||||
case S8_3: return carry ? [S8_3, true ] : [S8_2, true ];
|
||||
case S8_4: return carry ? [S8_4, true ] : [S8_3, true ];
|
||||
case S8_5: return carry ? [S8_5, true ] : [S8_4, true ];
|
||||
case S8_6: return carry ? [S8_6, true ] : [S8_5, true ];
|
||||
case S8_7: return carry ? [S8_7, true ] : [S8_6, true ];
|
||||
default: throw new Error("unexpected symbol");
|
||||
}
|
||||
default: throw new Error("unexpected symbol");
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user