- B9B8701B08B296B3B28D8D4300D28DB362AA620804FBBBDBC47E5A96AF9ECFC4AE164B17F38739091985CC0C0D8006A9D128A00B544013D15F2E5E3630703EC0
+ 7176998BBC09E3C197329341463BF445BA9E05D1C2FA295A8AEA710D7A4CFC60F4810134C74B92FCB71DDBAE6D60DDB5A349EA9E4E3067AC7CAF4EA7D43C7CF3
ffa/ffacalc/ffa_calc.adb
(34 . 11)(34 . 11)
5 with FZ_Shift; use FZ_Shift;
6 with FZ_Divis; use FZ_Divis;
7 with FZ_Mul; use FZ_Mul;
8 with FZ_ModEx; use FZ_ModEx;
9
10 -- For Output
11 with FFA_IO; use FFA_IO;
12
13
14 procedure FFA_Calc is
15
16 Width : Positive; -- Desired FFA Width
(357 . 13)(357 . 34)
18 -- Multiply, give bottom and top halves
19 when '*' =>
20 Want(2);
21 MustNotZero(Stack(SP));
22 -- Ch5: slow and simple 'Egyptological' method:
23 FZ_Mul_Egyptian(X => Stack(SP - 1),
24 Y => Stack(SP),
25 XY_Lo => Stack(SP - 1),
26 XY_Hi => Stack(SP));
27
28 -- Modular Multiplication
29 when 'M' =>
30 Want(3);
31 MustNotZero(Stack(SP));
32 FZ_Mod_Mul(X => Stack(SP - 2),
33 Y => Stack(SP - 1),
34 Modulus => Stack(SP),
35 Product => Stack(SP - 2));
36 Drop;
37 Drop;
38
39 -- Modular Exponentiation
40 when 'X' =>
41 Want(3);
42 MustNotZero(Stack(SP));
43 FZ_Mod_Exp(Base => Stack(SP - 2),
44 Exponent => Stack(SP - 1),
45 Modulus => Stack(SP),
46 Result => Stack(SP - 2));
47 Drop;
48 Drop;
49
50 -----------------
51 -- Bitwise Ops --
52 -----------------