ffa_ch4_ffacalc.kv 1
ffa_ch4_ffacalc.kv 2
ffa_ch4_ffacalc.kv 3
ffa_ch4_ffacalc.kv 4
ffa_ch14_barrett.kv 5
ffa_ch4_ffacalc.kv 6
ffa_ch4_ffacalc.kv 7
ffa_ch4_ffacalc.kv 8
ffa_ch4_ffacalc.kv 9
ffa_ch4_ffacalc.kv 10
ffa_ch4_ffacalc.kv 11
ffa_ch4_ffacalc.kv 12
ffa_ch4_ffacalc.kv 13
ffa_ch4_ffacalc.kv 14
ffa_ch4_ffacalc.kv 15
ffa_ch4_ffacalc.kv 16
ffa_ch4_ffacalc.kv 17
ffa_ch4_ffacalc.kv 18
ffa_ch4_ffacalc.kv 19
ffa_ch4_ffacalc.kv 20
ffa_ch14_barrett.kv 21 with Version; use Version;
ffa_ch8_randomism.kv 22 with OS; use OS;
ffa_ch8_randomism.kv 23 with CmdLine; use CmdLine;
ffa_ch4_ffacalc.kv 24
ffa_ch4_ffacalc.kv 25
ffa_ch11_tuning_a... 26 with FFA; use FFA;
ffa_ch4_ffacalc.kv 27
ffa_ch11_tuning_a... 28
ffa_ch11_tuning_a... 29 use type FFA.Word;
ffa_ch4_ffacalc.kv 30
ffa_ch8_randomism.kv 31
ffa_ch8_randomism.kv 32 with FFA_RNG; use FFA_RNG;
ffa_ch8_randomism.kv 33
ffa_ch8_randomism.kv 34
ffa_ch4_ffacalc.kv 35 procedure FFA_Calc is
ffa_ch4_ffacalc.kv 36
ffa_ch14_barrett.kv 37 Width : Positive;
ffa_ch14_barrett.kv 38 Height : Positive;
ffa_ch14_barrett.kv 39 RNG : RNG_Device;
ffa_ch4_ffacalc.kv 40
ffa_ch4_ffacalc.kv 41 begin
ffa_ch8_randomism.kv 42 if Arg_Count < 3 or Arg_Count > 4 then
ffa_ch8_randomism.kv 43 Eggog("Usage: ./ffa_calc WIDTH HEIGHT [/dev/rng]");
ffa_ch4_ffacalc.kv 44 end if;
ffa_ch4_ffacalc.kv 45
ffa_ch4_ffacalc.kv 46 declare
ffa_ch4_ffacalc.kv 47 Arg1 : CmdLineArg;
ffa_ch4_ffacalc.kv 48 Arg2 : CmdLineArg;
ffa_ch4_ffacalc.kv 49 begin
ffa_ch4_ffacalc.kv 50
ffa_ch4_ffacalc.kv 51 Get_Argument(1, Arg1);
ffa_ch4_ffacalc.kv 52 Get_Argument(2, Arg2);
ffa_ch4_ffacalc.kv 53
ffa_ch8_randomism.kv 54 if Arg_Count = 4 then
ffa_ch8_randomism.kv 55
ffa_ch8_randomism.kv 56 declare
ffa_ch8_randomism.kv 57 Arg3 : CmdLineArg;
ffa_ch8_randomism.kv 58 begin
ffa_ch8_randomism.kv 59 Get_Argument(3, Arg3);
ffa_ch8_randomism.kv 60
ffa_ch8_randomism.kv 61
ffa_ch8_randomism.kv 62
ffa_ch8_randomism.kv 63
ffa_ch8_randomism.kv 64
ffa_ch8_randomism.kv 65 Init_RNG(RNG, Arg3(Arg3'First .. Len_Arg(3)));
ffa_ch8_randomism.kv 66 end;
ffa_ch8_randomism.kv 67 else
ffa_ch8_randomism.kv 68
ffa_ch8_randomism.kv 69 Init_RNG(RNG);
ffa_ch8_randomism.kv 70 end if;
ffa_ch8_randomism.kv 71
ffa_ch4_ffacalc.kv 72
ffa_ch4_ffacalc.kv 73 Width := Positive'Value(Arg1);
ffa_ch4_ffacalc.kv 74 Height := Positive'Value(Arg2);
ffa_ch4_ffacalc.kv 75 exception
ffa_ch4_ffacalc.kv 76 when others =>
ffa_ch4_ffacalc.kv 77 Eggog("Invalid arguments!");
ffa_ch4_ffacalc.kv 78 end;
ffa_ch4_ffacalc.kv 79
ffa_ch4_ffacalc.kv 80
ffa_ch11_tuning_a... 81 if not FFA_FZ_Valid_Bitness_P(Width) then
ffa_ch11_tuning_a... 82 Eggog("Invalid Width: " & FFA_Validity_Rule_Doc);
ffa_ch4_ffacalc.kv 83 end if;
ffa_ch4_ffacalc.kv 84
ffa_ch4_ffacalc.kv 85
ffa_ch4_ffacalc.kv 86 declare
ffa_ch4_ffacalc.kv 87
ffa_ch4_ffacalc.kv 88
ffa_ch4_ffacalc.kv 89 Wordness : Indices := Indices(Width / Bitness);
ffa_ch4_ffacalc.kv 90
ffa_ch4_ffacalc.kv 91
ffa_ch4_ffacalc.kv 92
ffa_ch4_ffacalc.kv 93
ffa_ch4_ffacalc.kv 94
ffa_ch4_ffacalc.kv 95 subtype Stack_Positions is Natural range 0 .. Height;
ffa_ch4_ffacalc.kv 96 type Stacks is array(Stack_Positions range <>) of FZ(1 .. Wordness);
ffa_ch4_ffacalc.kv 97 Stack : Stacks(Stack_Positions'Range);
ffa_ch4_ffacalc.kv 98
ffa_ch4_ffacalc.kv 99
ffa_ch4_ffacalc.kv 100 SP : Stack_Positions := Stack_Positions'First;
ffa_ch4_ffacalc.kv 101
ffa_ch4_ffacalc.kv 102
ffa_ch4_ffacalc.kv 103 Flag : WBool := 0;
ffa_ch4_ffacalc.kv 104
ffa_ch4_ffacalc.kv 105
ffa_ch4_ffacalc.kv 106 Pos : Natural := 0;
ffa_ch4_ffacalc.kv 107
ffa_ch4_ffacalc.kv 108
ffa_ch4_ffacalc.kv 109 QuoteLevel : Natural := 0;
ffa_ch4_ffacalc.kv 110 CommLevel : Natural := 0;
ffa_ch4_ffacalc.kv 111 CondLevel : Natural := 0;
ffa_ch13_measure_... 112
ffa_ch13_measure_... 113
ffa_ch13_measure_... 114 PrevC : Character := ' ';
ffa_ch13_measure_... 115 HavePrefix : Boolean := False;
ffa_ch13_measure_... 116
ffa_ch4_ffacalc.kv 117
ffa_ch4_ffacalc.kv 118
ffa_ch4_ffacalc.kv 119
ffa_ch4_ffacalc.kv 120
ffa_ch4_ffacalc.kv 121 procedure Zap is
ffa_ch4_ffacalc.kv 122 begin
ffa_ch4_ffacalc.kv 123
ffa_ch4_ffacalc.kv 124 for i in Stack'Range loop
ffa_ch11_tuning_a... 125 FFA_FZ_Clear(Stack(i));
ffa_ch4_ffacalc.kv 126 end loop;
ffa_ch4_ffacalc.kv 127
ffa_ch4_ffacalc.kv 128 SP := Stack_Positions'First;
ffa_ch4_ffacalc.kv 129
ffa_ch4_ffacalc.kv 130 Flag := 0;
ffa_ch13_measure_... 131
ffa_ch13_measure_... 132 HavePrefix := False;
ffa_ch13_measure_... 133 PrevC := ' ';
ffa_ch4_ffacalc.kv 134 end Zap;
ffa_ch4_ffacalc.kv 135
ffa_ch4_ffacalc.kv 136
ffa_ch4_ffacalc.kv 137
ffa_ch4_ffacalc.kv 138 procedure E(S : in String) is
ffa_ch4_ffacalc.kv 139 begin
ffa_ch4_ffacalc.kv 140 Eggog("Pos:" & Natural'Image(Pos) & ": " & S);
ffa_ch4_ffacalc.kv 141 end E;
ffa_ch4_ffacalc.kv 142
ffa_ch4_ffacalc.kv 143
ffa_ch4_ffacalc.kv 144
ffa_ch4_ffacalc.kv 145 procedure Push is
ffa_ch4_ffacalc.kv 146 begin
ffa_ch4_ffacalc.kv 147 if SP = Stack_Positions'Last then
ffa_ch4_ffacalc.kv 148 E("Stack Overflow!");
ffa_ch4_ffacalc.kv 149 else
ffa_ch4_ffacalc.kv 150 SP := SP + 1;
ffa_ch4_ffacalc.kv 151 end if;
ffa_ch4_ffacalc.kv 152 end Push;
ffa_ch4_ffacalc.kv 153
ffa_ch4_ffacalc.kv 154
ffa_ch4_ffacalc.kv 155
ffa_ch4_ffacalc.kv 156 procedure Drop is
ffa_ch4_ffacalc.kv 157 begin
ffa_ch11_tuning_a... 158 FFA_FZ_Clear(Stack(SP));
ffa_ch4_ffacalc.kv 159 SP := SP - 1;
ffa_ch4_ffacalc.kv 160 end Drop;
ffa_ch4_ffacalc.kv 161
ffa_ch4_ffacalc.kv 162
ffa_ch4_ffacalc.kv 163
ffa_ch4_ffacalc.kv 164 procedure Want(N : in Positive) is
ffa_ch4_ffacalc.kv 165 begin
ffa_ch4_ffacalc.kv 166 if SP < N then
ffa_ch4_ffacalc.kv 167 E("Stack Underflow!");
ffa_ch4_ffacalc.kv 168 end if;
ffa_ch4_ffacalc.kv 169 end Want;
ffa_ch4_ffacalc.kv 170
ffa_ch4_ffacalc.kv 171
ffa_ch5_egypt.kv 172
ffa_ch5_egypt.kv 173 procedure MustNotZero(D : in FZ) is
ffa_ch5_egypt.kv 174 begin
ffa_ch11_tuning_a... 175 if FFA_FZ_ZeroP(D) = 1 then
ffa_ch5_egypt.kv 176 E("Division by Zero!");
ffa_ch5_egypt.kv 177 end if;
ffa_ch5_egypt.kv 178 end MustNotZero;
ffa_ch5_egypt.kv 179
ffa_ch5_egypt.kv 180
ffa_ch4_ffacalc.kv 181
ffa_ch11_tuning_a... 182 procedure Ins_Hex_Digit(Digit : in Nibble) is
ffa_ch11_tuning_a... 183 Overflow : WBool := 0;
ffa_ch4_ffacalc.kv 184 begin
ffa_ch11_tuning_a... 185
ffa_ch11_tuning_a... 186
ffa_ch11_tuning_a... 187 FFA_FZ_Insert_Bottom_Nibble(N => Stack(SP),
ffa_ch11_tuning_a... 188 D => Digit,
ffa_ch11_tuning_a... 189 Overflow => Overflow);
ffa_ch4_ffacalc.kv 190
ffa_ch4_ffacalc.kv 191
ffa_ch11_tuning_a... 192 if Overflow = 1 then
ffa_ch4_ffacalc.kv 193 E("Constant Exceeds Bitness!");
ffa_ch4_ffacalc.kv 194 end if;
ffa_ch4_ffacalc.kv 195
ffa_ch4_ffacalc.kv 196 end;
ffa_ch4_ffacalc.kv 197
ffa_ch4_ffacalc.kv 198
ffa_ch11_tuning_a... 199
ffa_ch11_tuning_a... 200 procedure Print_FZ(N : in FZ) is
ffa_ch11_tuning_a... 201 S : String(1 .. FFA_FZ_ASCII_Length(N));
ffa_ch11_tuning_a... 202 begin
ffa_ch11_tuning_a... 203 FFA_FZ_To_Hex_String(N, S);
ffa_ch11_tuning_a... 204 Write_String(S);
ffa_ch11_tuning_a... 205 Write_Newline;
ffa_ch11_tuning_a... 206 end Print_FZ;
ffa_ch11_tuning_a... 207
ffa_ch11_tuning_a... 208
ffa_ch13_measure_... 209
ffa_ch13_measure_... 210 procedure IsPrefix is
ffa_ch13_measure_... 211 begin
ffa_ch13_measure_... 212 HavePrefix := True;
ffa_ch13_measure_... 213 end IsPrefix;
ffa_ch13_measure_... 214
ffa_ch13_measure_... 215
ffa_ch4_ffacalc.kv 216
ffa_ch4_ffacalc.kv 217 procedure Op_Normal(C : in Character) is
ffa_ch4_ffacalc.kv 218
ffa_ch4_ffacalc.kv 219
ffa_ch4_ffacalc.kv 220 F : Word;
ffa_ch4_ffacalc.kv 221
ffa_ch4_ffacalc.kv 222 begin
ffa_ch4_ffacalc.kv 223
ffa_ch4_ffacalc.kv 224 case C is
ffa_ch4_ffacalc.kv 225
ffa_ch4_ffacalc.kv 226
ffa_ch4_ffacalc.kv 227
ffa_ch4_ffacalc.kv 228
ffa_ch4_ffacalc.kv 229
ffa_ch4_ffacalc.kv 230 when '(' =>
ffa_ch4_ffacalc.kv 231 CommLevel := 1;
ffa_ch4_ffacalc.kv 232
ffa_ch4_ffacalc.kv 233
ffa_ch4_ffacalc.kv 234 when ')' =>
ffa_ch4_ffacalc.kv 235 E("Mismatched close-comment parenthesis !");
ffa_ch4_ffacalc.kv 236
ffa_ch4_ffacalc.kv 237
ffa_ch4_ffacalc.kv 238 when '[' =>
ffa_ch4_ffacalc.kv 239 QuoteLevel := 1;
ffa_ch4_ffacalc.kv 240
ffa_ch4_ffacalc.kv 241
ffa_ch4_ffacalc.kv 242 when ']' =>
ffa_ch4_ffacalc.kv 243 E("Mismatched close-quote bracket !");
ffa_ch4_ffacalc.kv 244
ffa_ch4_ffacalc.kv 245
ffa_ch4_ffacalc.kv 246 when '{' =>
ffa_ch4_ffacalc.kv 247 Want(1);
ffa_ch11_tuning_a... 248 if FFA_FZ_ZeroP(Stack(SP)) = 1 then
ffa_ch4_ffacalc.kv 249 CondLevel := 1;
ffa_ch4_ffacalc.kv 250 end if;
ffa_ch4_ffacalc.kv 251 Drop;
ffa_ch4_ffacalc.kv 252
ffa_ch4_ffacalc.kv 253
ffa_ch4_ffacalc.kv 254
ffa_ch4_ffacalc.kv 255 when '}' =>
ffa_ch4_ffacalc.kv 256 Push;
ffa_ch11_tuning_a... 257 FFA_WBool_To_FZ(0, Stack(SP));
ffa_ch4_ffacalc.kv 258
ffa_ch4_ffacalc.kv 259
ffa_ch4_ffacalc.kv 260
ffa_ch4_ffacalc.kv 261
ffa_ch4_ffacalc.kv 262
ffa_ch4_ffacalc.kv 263
ffa_ch4_ffacalc.kv 264
ffa_ch4_ffacalc.kv 265
ffa_ch4_ffacalc.kv 266 when '0' .. '9' =>
ffa_ch4_ffacalc.kv 267 Want(1);
ffa_ch11_tuning_a... 268 Ins_Hex_Digit(Character'Pos(C) - Character'Pos('0'));
ffa_ch4_ffacalc.kv 269
ffa_ch4_ffacalc.kv 270 when 'A' .. 'F' =>
ffa_ch4_ffacalc.kv 271 Want(1);
ffa_ch11_tuning_a... 272 Ins_Hex_Digit(10 + Character'Pos(C) - Character'Pos('A'));
ffa_ch4_ffacalc.kv 273
ffa_ch4_ffacalc.kv 274 when 'a' .. 'f' =>
ffa_ch4_ffacalc.kv 275 Want(1);
ffa_ch11_tuning_a... 276 Ins_Hex_Digit(10 + Character'Pos(C) - Character'Pos('a'));
ffa_ch4_ffacalc.kv 277
ffa_ch4_ffacalc.kv 278
ffa_ch4_ffacalc.kv 279
ffa_ch4_ffacalc.kv 280
ffa_ch4_ffacalc.kv 281
ffa_ch4_ffacalc.kv 282
ffa_ch4_ffacalc.kv 283 when '.' =>
ffa_ch4_ffacalc.kv 284 Push;
ffa_ch11_tuning_a... 285 FFA_FZ_Clear(Stack(SP));
ffa_ch4_ffacalc.kv 286
ffa_ch4_ffacalc.kv 287
ffa_ch4_ffacalc.kv 288 when '"' =>
ffa_ch4_ffacalc.kv 289 Want(1);
ffa_ch4_ffacalc.kv 290 Push;
ffa_ch4_ffacalc.kv 291 Stack(SP) := Stack(SP - 1);
ffa_ch4_ffacalc.kv 292
ffa_ch4_ffacalc.kv 293
ffa_ch4_ffacalc.kv 294 when '_' =>
ffa_ch4_ffacalc.kv 295 Want(1);
ffa_ch4_ffacalc.kv 296 Drop;
ffa_ch4_ffacalc.kv 297
ffa_ch4_ffacalc.kv 298
ffa_ch4_ffacalc.kv 299 when ''' =>
ffa_ch4_ffacalc.kv 300 Want(2);
ffa_ch11_tuning_a... 301 FFA_FZ_Swap(Stack(SP), Stack(SP - 1));
ffa_ch4_ffacalc.kv 302
ffa_ch4_ffacalc.kv 303
ffa_ch4_ffacalc.kv 304 when '`' =>
ffa_ch4_ffacalc.kv 305 Want(2);
ffa_ch4_ffacalc.kv 306 Push;
ffa_ch4_ffacalc.kv 307 Stack(SP) := Stack(SP - 2);
ffa_ch4_ffacalc.kv 308
ffa_ch4_ffacalc.kv 309
ffa_ch4_ffacalc.kv 310
ffa_ch4_ffacalc.kv 311
ffa_ch4_ffacalc.kv 312
ffa_ch4_ffacalc.kv 313
ffa_ch4_ffacalc.kv 314 when '=' =>
ffa_ch4_ffacalc.kv 315 Want(2);
ffa_ch11_tuning_a... 316 FFA_WBool_To_FZ(FFA_FZ_EqP(X => Stack(SP),
ffa_ch11_tuning_a... 317 Y => Stack(SP - 1)),
ffa_ch11_tuning_a... 318 Stack(SP - 1));
ffa_ch4_ffacalc.kv 319 Drop;
ffa_ch4_ffacalc.kv 320
ffa_ch4_ffacalc.kv 321
ffa_ch4_ffacalc.kv 322 when '<' =>
ffa_ch4_ffacalc.kv 323 Want(2);
ffa_ch11_tuning_a... 324 FFA_WBool_To_FZ(FFA_FZ_LessThanP(X => Stack(SP - 1),
ffa_ch11_tuning_a... 325 Y => Stack(SP)),
ffa_ch11_tuning_a... 326 Stack(SP - 1));
ffa_ch4_ffacalc.kv 327 Drop;
ffa_ch4_ffacalc.kv 328
ffa_ch4_ffacalc.kv 329
ffa_ch4_ffacalc.kv 330 when '>' =>
ffa_ch4_ffacalc.kv 331 Want(2);
ffa_ch11_tuning_a... 332 FFA_WBool_To_FZ(FFA_FZ_GreaterThanP(X => Stack(SP - 1),
ffa_ch11_tuning_a... 333 Y => Stack(SP)),
ffa_ch11_tuning_a... 334 Stack(SP - 1));
ffa_ch4_ffacalc.kv 335 Drop;
ffa_ch4_ffacalc.kv 336
ffa_ch4_ffacalc.kv 337
ffa_ch4_ffacalc.kv 338
ffa_ch4_ffacalc.kv 339
ffa_ch4_ffacalc.kv 340
ffa_ch4_ffacalc.kv 341
ffa_ch4_ffacalc.kv 342 when '-' =>
ffa_ch4_ffacalc.kv 343 Want(2);
ffa_ch11_tuning_a... 344 FFA_FZ_Subtract(X => Stack(SP - 1),
ffa_ch11_tuning_a... 345 Y => Stack(SP),
ffa_ch11_tuning_a... 346 Difference => Stack(SP - 1),
ffa_ch11_tuning_a... 347 Underflow => F);
ffa_ch11_tuning_a... 348 Flag := FFA_Word_NZeroP(F);
ffa_ch4_ffacalc.kv 349 Drop;
ffa_ch4_ffacalc.kv 350
ffa_ch4_ffacalc.kv 351
ffa_ch4_ffacalc.kv 352 when '+' =>
ffa_ch4_ffacalc.kv 353 Want(2);
ffa_ch11_tuning_a... 354 FFA_FZ_Add(X => Stack(SP - 1),
ffa_ch11_tuning_a... 355 Y => Stack(SP),
ffa_ch11_tuning_a... 356 Sum => Stack(SP - 1),
ffa_ch11_tuning_a... 357 Overflow => F);
ffa_ch11_tuning_a... 358 Flag := FFA_Word_NZeroP(F);
ffa_ch4_ffacalc.kv 359 Drop;
ffa_ch4_ffacalc.kv 360
ffa_ch5_egypt.kv 361
ffa_ch5_egypt.kv 362 when '\' =>
ffa_ch5_egypt.kv 363 Want(2);
ffa_ch5_egypt.kv 364 MustNotZero(Stack(SP));
ffa_ch11_tuning_a... 365 FFA_FZ_IDiv(Dividend => Stack(SP - 1),
ffa_ch11_tuning_a... 366 Divisor => Stack(SP),
ffa_ch11_tuning_a... 367 Quotient => Stack(SP - 1),
ffa_ch11_tuning_a... 368 Remainder => Stack(SP));
ffa_ch5_egypt.kv 369
ffa_ch5_egypt.kv 370
ffa_ch5_egypt.kv 371 when '/' =>
ffa_ch5_egypt.kv 372 Want(2);
ffa_ch5_egypt.kv 373 MustNotZero(Stack(SP));
ffa_ch11_tuning_a... 374 FFA_FZ_Div(Dividend => Stack(SP - 1),
ffa_ch11_tuning_a... 375 Divisor => Stack(SP),
ffa_ch11_tuning_a... 376 Quotient => Stack(SP - 1));
ffa_ch5_egypt.kv 377 Drop;
ffa_ch5_egypt.kv 378
ffa_ch5_egypt.kv 379
ffa_ch5_egypt.kv 380 when '%' =>
ffa_ch5_egypt.kv 381 Want(2);
ffa_ch5_egypt.kv 382 MustNotZero(Stack(SP));
ffa_ch11_tuning_a... 383 FFA_FZ_Mod(Dividend => Stack(SP - 1),
ffa_ch11_tuning_a... 384 Divisor => Stack(SP),
ffa_ch11_tuning_a... 385 Remainder => Stack(SP - 1));
ffa_ch5_egypt.kv 386 Drop;
ffa_ch5_egypt.kv 387
ffa_ch5_egypt.kv 388
ffa_ch5_egypt.kv 389 when '*' =>
ffa_ch5_egypt.kv 390 Want(2);
ffa_ch11_tuning_a... 391 FFA_FZ_Multiply(X => Stack(SP - 1),
ffa_ch11_tuning_a... 392 Y => Stack(SP),
ffa_ch11_tuning_a... 393 XY_Lo => Stack(SP - 1),
ffa_ch11_tuning_a... 394 XY_Hi => Stack(SP));
ffa_ch5_egypt.kv 395
ffa_ch4_ffacalc.kv 396
ffa_ch4_ffacalc.kv 397
ffa_ch4_ffacalc.kv 398
ffa_ch4_ffacalc.kv 399
ffa_ch4_ffacalc.kv 400
ffa_ch4_ffacalc.kv 401 when '&' =>
ffa_ch4_ffacalc.kv 402 Want(2);
ffa_ch11_tuning_a... 403 FFA_FZ_And(X => Stack(SP - 1),
ffa_ch11_tuning_a... 404 Y => Stack(SP),
ffa_ch11_tuning_a... 405 Result => Stack(SP - 1));
ffa_ch4_ffacalc.kv 406 Drop;
ffa_ch4_ffacalc.kv 407
ffa_ch4_ffacalc.kv 408
ffa_ch4_ffacalc.kv 409 when '|' =>
ffa_ch4_ffacalc.kv 410 Want(2);
ffa_ch11_tuning_a... 411 FFA_FZ_Or(X => Stack(SP - 1),
ffa_ch11_tuning_a... 412 Y => Stack(SP),
ffa_ch11_tuning_a... 413 Result => Stack(SP - 1));
ffa_ch4_ffacalc.kv 414 Drop;
ffa_ch4_ffacalc.kv 415
ffa_ch4_ffacalc.kv 416
ffa_ch4_ffacalc.kv 417 when '^' =>
ffa_ch4_ffacalc.kv 418 Want(2);
ffa_ch11_tuning_a... 419 FFA_FZ_Xor(X => Stack(SP - 1),
ffa_ch11_tuning_a... 420 Y => Stack(SP),
ffa_ch11_tuning_a... 421 Result => Stack(SP - 1));
ffa_ch4_ffacalc.kv 422 Drop;
ffa_ch4_ffacalc.kv 423
ffa_ch4_ffacalc.kv 424
ffa_ch4_ffacalc.kv 425 when '~' =>
ffa_ch4_ffacalc.kv 426 Want(1);
ffa_ch11_tuning_a... 427 FFA_FZ_Not(Stack(SP), Stack(SP));
ffa_ch4_ffacalc.kv 428
ffa_ch4_ffacalc.kv 429
ffa_ch4_ffacalc.kv 430
ffa_ch4_ffacalc.kv 431
ffa_ch4_ffacalc.kv 432
ffa_ch8_randomism.kv 433
ffa_ch8_randomism.kv 434 when '?' =>
ffa_ch8_randomism.kv 435 Push;
ffa_ch11_tuning_a... 436 FFA_FZ_Clear(Stack(SP));
ffa_ch8_randomism.kv 437 FZ_Random(RNG, Stack(SP));
ffa_ch8_randomism.kv 438
ffa_ch4_ffacalc.kv 439
ffa_ch4_ffacalc.kv 440 when 'U' =>
ffa_ch4_ffacalc.kv 441 Want(3);
ffa_ch11_tuning_a... 442 FFA_FZ_Mux(X => Stack(SP - 2),
ffa_ch11_tuning_a... 443 Y => Stack(SP - 1),
ffa_ch11_tuning_a... 444 Result => Stack(SP - 2),
ffa_ch11_tuning_a... 445 Sel => FFA_FZ_NZeroP(Stack(SP)));
ffa_ch4_ffacalc.kv 446 Drop;
ffa_ch4_ffacalc.kv 447 Drop;
ffa_ch4_ffacalc.kv 448
ffa_ch13_measure_... 449
ffa_ch13_measure_... 450 when 'W' =>
ffa_ch13_measure_... 451 Want(1);
ffa_ch13_measure_... 452 declare
ffa_ch13_measure_... 453
ffa_ch14_barrett.kv 454 Measure : FZBit_Index := FFA_FZ_Measure(Stack(SP));
ffa_ch14_barrett.kv 455 begin
ffa_ch13_measure_... 456
ffa_ch13_measure_... 457 FFA_FZ_Clear(Stack(SP));
ffa_ch14_barrett.kv 458 FFA_FZ_Set_Head(Stack(SP), Word(Measure));
ffa_ch13_measure_... 459 end;
ffa_ch13_measure_... 460
ffa_ch4_ffacalc.kv 461
ffa_ch4_ffacalc.kv 462 when 'O' =>
ffa_ch4_ffacalc.kv 463 Push;
ffa_ch11_tuning_a... 464 FFA_WBool_To_FZ(Flag, Stack(SP));
ffa_ch4_ffacalc.kv 465
ffa_ch4_ffacalc.kv 466
ffa_ch4_ffacalc.kv 467 when '#' =>
ffa_ch4_ffacalc.kv 468 Want(1);
ffa_ch11_tuning_a... 469 Print_FZ(Stack(SP));
ffa_ch4_ffacalc.kv 470 Drop;
ffa_ch4_ffacalc.kv 471
ffa_ch4_ffacalc.kv 472
ffa_ch4_ffacalc.kv 473 when 'Z' =>
ffa_ch4_ffacalc.kv 474 Zap;
ffa_ch4_ffacalc.kv 475
ffa_ch4_ffacalc.kv 476
ffa_ch4_ffacalc.kv 477 when 'Q' =>
ffa_ch4_ffacalc.kv 478 for I in reverse Stack'First + 1 .. SP loop
ffa_ch11_tuning_a... 479 Print_FZ(Stack(I));
ffa_ch4_ffacalc.kv 480 end loop;
ffa_ch4_ffacalc.kv 481 Quit(0);
ffa_ch4_ffacalc.kv 482
ffa_ch14_barrett.kv 483
ffa_ch14_barrett.kv 484
ffa_ch14_barrett.kv 485 when 'V' =>
ffa_ch14_barrett.kv 486 Push;
ffa_ch14_barrett.kv 487 Push;
ffa_ch14_barrett.kv 488
ffa_ch14_barrett.kv 489 FFA_FZ_Clear(Stack(SP - 1));
ffa_ch14_barrett.kv 490 FFA_FZ_Set_Head(Stack(SP - 1), Word(FFACalc_K_Version));
ffa_ch14_barrett.kv 491
ffa_ch14_barrett.kv 492 FFA_FZ_Clear(Stack(SP));
ffa_ch14_barrett.kv 493 FFA_FZ_Set_Head(Stack(SP), Word(FFA_K_Version));
ffa_ch14_barrett.kv 494
ffa_ch12_karatsub... 495
ffa_ch12_karatsub... 496 when 'S' =>
ffa_ch12_karatsub... 497 Want(1);
ffa_ch12_karatsub... 498 Push;
ffa_ch12_karatsub... 499 FFA_FZ_Square(X => Stack(SP - 1),
ffa_ch12_karatsub... 500 XX_Lo => Stack(SP - 1),
ffa_ch12_karatsub... 501 XX_Hi => Stack(SP));
ffa_ch13_measure_... 502
ffa_ch13_measure_... 503
ffa_ch13_measure_... 504
ffa_ch13_measure_... 505
ffa_ch13_measure_... 506
ffa_ch13_measure_... 507
ffa_ch13_measure_... 508 when 'L' =>
ffa_ch13_measure_... 509 IsPrefix;
ffa_ch13_measure_... 510
ffa_ch13_measure_... 511
ffa_ch13_measure_... 512 when 'R' =>
ffa_ch13_measure_... 513 IsPrefix;
ffa_ch13_measure_... 514
ffa_ch13_measure_... 515
ffa_ch13_measure_... 516 when 'M' =>
ffa_ch13_measure_... 517 IsPrefix;
ffa_ch13_measure_... 518
ffa_ch13_measure_... 519
ffa_ch13_measure_... 520
ffa_ch13_measure_... 521
ffa_ch13_measure_... 522 when '!' | '@' | '$' | ':' | ';' | ',' |
ffa_ch13_measure_... 523 'G' | 'H' | 'I' | 'J' | 'K' | 'N' |
ffa_ch14_barrett.kv 524 'P' | 'T' | 'X' | 'Y' =>
ffa_ch13_measure_... 525
ffa_ch13_measure_... 526 E("This Operator is not defined yet: " & C);
ffa_ch12_karatsub... 527
ffa_ch12_karatsub... 528
ffa_ch4_ffacalc.kv 529
ffa_ch4_ffacalc.kv 530
ffa_ch4_ffacalc.kv 531
ffa_ch4_ffacalc.kv 532
ffa_ch13_measure_... 533
ffa_ch4_ffacalc.kv 534 when others =>
ffa_ch4_ffacalc.kv 535 null;
ffa_ch4_ffacalc.kv 536
ffa_ch4_ffacalc.kv 537 end case;
ffa_ch4_ffacalc.kv 538
ffa_ch4_ffacalc.kv 539 end Op_Normal;
ffa_ch4_ffacalc.kv 540
ffa_ch4_ffacalc.kv 541
ffa_ch13_measure_... 542
ffa_ch13_measure_... 543 procedure Op_Prefixed(Prefix : in Character;
ffa_ch13_measure_... 544 O : in Character) is
ffa_ch13_measure_... 545 begin
ffa_ch13_measure_... 546
ffa_ch13_measure_... 547
ffa_ch13_measure_... 548 case Prefix is
ffa_ch13_measure_... 549
ffa_ch13_measure_... 550
ffa_ch13_measure_... 551
ffa_ch13_measure_... 552 when 'L' =>
ffa_ch13_measure_... 553
ffa_ch13_measure_... 554
ffa_ch13_measure_... 555 case O is
ffa_ch13_measure_... 556
ffa_ch13_measure_... 557
ffa_ch13_measure_... 558 when 'S' =>
ffa_ch13_measure_... 559 Want(2);
ffa_ch13_measure_... 560 declare
ffa_ch13_measure_... 561
ffa_ch13_measure_... 562 ShiftCount : FZBit_Index
ffa_ch13_measure_... 563 := FZBit_Index(FFA_FZ_Get_Head(Stack(SP)));
ffa_ch13_measure_... 564 begin
ffa_ch13_measure_... 565 FFA_FZ_Quiet_ShiftLeft(N => Stack(SP - 1),
ffa_ch13_measure_... 566 ShiftedN => Stack(SP - 1),
ffa_ch13_measure_... 567 Count => ShiftCount);
ffa_ch13_measure_... 568 end;
ffa_ch13_measure_... 569 Drop;
ffa_ch13_measure_... 570
ffa_ch13_measure_... 571
ffa_ch13_measure_... 572 when 'R' =>
ffa_ch13_measure_... 573 E("Left-Rotate not yet defined!");
ffa_ch13_measure_... 574
ffa_ch13_measure_... 575
ffa_ch13_measure_... 576 when others =>
ffa_ch13_measure_... 577 E("Undefined Op: L" & O);
ffa_ch13_measure_... 578
ffa_ch13_measure_... 579 end case;
ffa_ch13_measure_... 580
ffa_ch13_measure_... 581
ffa_ch13_measure_... 582 when 'R' =>
ffa_ch13_measure_... 583
ffa_ch13_measure_... 584
ffa_ch13_measure_... 585 case O is
ffa_ch13_measure_... 586
ffa_ch13_measure_... 587
ffa_ch13_measure_... 588 when 'S' =>
ffa_ch13_measure_... 589 Want(2);
ffa_ch13_measure_... 590 declare
ffa_ch13_measure_... 591
ffa_ch13_measure_... 592 ShiftCount : FZBit_Index
ffa_ch13_measure_... 593 := FZBit_Index(FFA_FZ_Get_Head(Stack(SP)));
ffa_ch13_measure_... 594 begin
ffa_ch13_measure_... 595 FFA_FZ_Quiet_ShiftRight(N => Stack(SP - 1),
ffa_ch13_measure_... 596 ShiftedN => Stack(SP - 1),
ffa_ch13_measure_... 597 Count => ShiftCount);
ffa_ch13_measure_... 598 end;
ffa_ch13_measure_... 599 Drop;
ffa_ch13_measure_... 600
ffa_ch13_measure_... 601
ffa_ch13_measure_... 602 when 'R' =>
ffa_ch13_measure_... 603 E("Right-Rotate not yet defined!");
ffa_ch13_measure_... 604
ffa_ch13_measure_... 605
ffa_ch13_measure_... 606 when others =>
ffa_ch13_measure_... 607 E("Undefined Op: R" & O);
ffa_ch13_measure_... 608
ffa_ch13_measure_... 609 end case;
ffa_ch13_measure_... 610
ffa_ch13_measure_... 611
ffa_ch13_measure_... 612 when 'M' =>
ffa_ch13_measure_... 613
ffa_ch13_measure_... 614
ffa_ch13_measure_... 615 case O is
ffa_ch13_measure_... 616
ffa_ch13_measure_... 617
ffa_ch13_measure_... 618 when '*' =>
ffa_ch13_measure_... 619 Want(3);
ffa_ch13_measure_... 620 MustNotZero(Stack(SP));
ffa_ch13_measure_... 621 FFA_FZ_Modular_Multiply(X => Stack(SP - 2),
ffa_ch13_measure_... 622 Y => Stack(SP - 1),
ffa_ch13_measure_... 623 Modulus => Stack(SP),
ffa_ch13_measure_... 624 Product => Stack(SP - 2));
ffa_ch13_measure_... 625 Drop;
ffa_ch13_measure_... 626 Drop;
ffa_ch13_measure_... 627
ffa_ch13_measure_... 628
ffa_ch13_measure_... 629 when 'X' =>
ffa_ch13_measure_... 630 Want(3);
ffa_ch13_measure_... 631 MustNotZero(Stack(SP));
ffa_ch13_measure_... 632 FFA_FZ_Modular_Exponentiate(Base => Stack(SP - 2),
ffa_ch13_measure_... 633 Exponent => Stack(SP - 1),
ffa_ch13_measure_... 634 Modulus => Stack(SP),
ffa_ch13_measure_... 635 Result => Stack(SP - 2));
ffa_ch13_measure_... 636 Drop;
ffa_ch13_measure_... 637 Drop;
ffa_ch13_measure_... 638
ffa_ch13_measure_... 639
ffa_ch13_measure_... 640 when others =>
ffa_ch13_measure_... 641 E("Undefined Op: M" & O);
ffa_ch13_measure_... 642
ffa_ch13_measure_... 643 end case;
ffa_ch13_measure_... 644
ffa_ch13_measure_... 645
ffa_ch13_measure_... 646 when others =>
ffa_ch13_measure_... 647 E("Undefined Prefix: " & Prefix);
ffa_ch13_measure_... 648
ffa_ch13_measure_... 649 end case;
ffa_ch13_measure_... 650
ffa_ch13_measure_... 651 end Op_Prefixed;
ffa_ch13_measure_... 652
ffa_ch13_measure_... 653
ffa_ch4_ffacalc.kv 654
ffa_ch4_ffacalc.kv 655 procedure Op(C : in Character) is
ffa_ch4_ffacalc.kv 656 begin
ffa_ch4_ffacalc.kv 657
ffa_ch4_ffacalc.kv 658
ffa_ch4_ffacalc.kv 659
ffa_ch4_ffacalc.kv 660 if CommLevel > 0 then
ffa_ch4_ffacalc.kv 661 case C is
ffa_ch4_ffacalc.kv 662 when ')' =>
ffa_ch4_ffacalc.kv 663 CommLevel := CommLevel - 1;
ffa_ch4_ffacalc.kv 664 when '(' =>
ffa_ch4_ffacalc.kv 665 CommLevel := CommLevel + 1;
ffa_ch4_ffacalc.kv 666 when others =>
ffa_ch4_ffacalc.kv 667 null;
ffa_ch4_ffacalc.kv 668 end case;
ffa_ch4_ffacalc.kv 669
ffa_ch4_ffacalc.kv 670
ffa_ch4_ffacalc.kv 671 elsif QuoteLevel > 0 then
ffa_ch4_ffacalc.kv 672 case C is
ffa_ch4_ffacalc.kv 673 when ']' =>
ffa_ch4_ffacalc.kv 674 QuoteLevel := QuoteLevel - 1;
ffa_ch4_ffacalc.kv 675 when '[' =>
ffa_ch4_ffacalc.kv 676 QuoteLevel := QuoteLevel + 1;
ffa_ch4_ffacalc.kv 677 when others =>
ffa_ch4_ffacalc.kv 678 null;
ffa_ch4_ffacalc.kv 679 end case;
ffa_ch4_ffacalc.kv 680
ffa_ch4_ffacalc.kv 681
ffa_ch4_ffacalc.kv 682 if QuoteLevel > 0 then
ffa_ch4_ffacalc.kv 683 Write_Char(C);
ffa_ch4_ffacalc.kv 684 end if;
ffa_ch4_ffacalc.kv 685
ffa_ch4_ffacalc.kv 686
ffa_ch4_ffacalc.kv 687 elsif CondLevel > 0 then
ffa_ch4_ffacalc.kv 688 case C is
ffa_ch4_ffacalc.kv 689 when '}' =>
ffa_ch4_ffacalc.kv 690 CondLevel := CondLevel - 1;
ffa_ch4_ffacalc.kv 691
ffa_ch4_ffacalc.kv 692
ffa_ch4_ffacalc.kv 693
ffa_ch4_ffacalc.kv 694 if CondLevel = 0 then
ffa_ch4_ffacalc.kv 695 Push;
ffa_ch11_tuning_a... 696 FFA_WBool_To_FZ(1, Stack(SP));
ffa_ch4_ffacalc.kv 697 end if;
ffa_ch4_ffacalc.kv 698
ffa_ch4_ffacalc.kv 699 when '{' =>
ffa_ch4_ffacalc.kv 700 CondLevel := CondLevel + 1;
ffa_ch4_ffacalc.kv 701 when others =>
ffa_ch4_ffacalc.kv 702 null;
ffa_ch4_ffacalc.kv 703 end case;
ffa_ch13_measure_... 704
ffa_ch13_measure_... 705
ffa_ch13_measure_... 706 elsif HavePrefix then
ffa_ch13_measure_... 707
ffa_ch13_measure_... 708
ffa_ch13_measure_... 709 HavePrefix := False;
ffa_ch13_measure_... 710
ffa_ch13_measure_... 711
ffa_ch13_measure_... 712 Op_Prefixed(Prefix => PrevC, O => C);
ffa_ch13_measure_... 713
ffa_ch4_ffacalc.kv 714 else
ffa_ch4_ffacalc.kv 715
ffa_ch4_ffacalc.kv 716 Op_Normal(C);
ffa_ch4_ffacalc.kv 717 end if;
ffa_ch4_ffacalc.kv 718
ffa_ch4_ffacalc.kv 719 end Op;
ffa_ch4_ffacalc.kv 720
ffa_ch4_ffacalc.kv 721
ffa_ch4_ffacalc.kv 722
ffa_ch4_ffacalc.kv 723 C : Character;
ffa_ch4_ffacalc.kv 724
ffa_ch4_ffacalc.kv 725 begin
ffa_ch4_ffacalc.kv 726
ffa_ch4_ffacalc.kv 727 Zap;
ffa_ch4_ffacalc.kv 728
ffa_ch4_ffacalc.kv 729 loop
ffa_ch4_ffacalc.kv 730 if Read_Char(C) then
ffa_ch4_ffacalc.kv 731
ffa_ch4_ffacalc.kv 732 Op(C);
ffa_ch4_ffacalc.kv 733
ffa_ch4_ffacalc.kv 734 Pos := Pos + 1;
ffa_ch13_measure_... 735
ffa_ch13_measure_... 736 PrevC := C;
ffa_ch4_ffacalc.kv 737 else
ffa_ch4_ffacalc.kv 738 Zap;
ffa_ch4_ffacalc.kv 739 Quit(0);
ffa_ch4_ffacalc.kv 740 end if;
ffa_ch4_ffacalc.kv 741 end loop;
ffa_ch4_ffacalc.kv 742 end;
ffa_ch4_ffacalc.kv 743
ffa_ch4_ffacalc.kv 744 end FFA_Calc;