Преглед изворни кода

docs: record the MBF add/sub rung (runtime 1325, rt_exec 85/85)

Eric Streit пре 1 дан
родитељ
комит
b9b4a58fe3
1 измењених фајлова са 16 додато и 10 уклоњено
  1. 16 10
      CALC-COMPILE.md

+ 16 - 10
CALC-COMPILE.md

@@ -446,8 +446,8 @@ Exec86):
 | `0946e80` | `v-TP3-CALC-REALCONST` | `ERR 41 15911` (`Upcase`) |
 | `17f7f7c` | `v-TP3-CALC-UPCASE` | **`ERR 102 18267`** (real output) |
 
-- **Code HEAD** `05f118f` (`v-TP3-MBF-FROMINT`); this commit only updates
-  this document.  Nothing pushed; `origin/master` is behind by twenty code
+- **Code HEAD** `45a29e6` (`v-TP3-MBF-ADD`); this commit only updates this
+  document.  Nothing pushed; `origin/master` is behind by twenty-one code
   commits.  Two non-ladder commits in the same period are the terminal-config
   work (`v-TP3-TERMCFG`) and the editor key map (`v-TP3-EDITORKEYS`); they do
   not move the ladder and are documented in `TERMINAL.md`.
@@ -553,9 +553,10 @@ Exec86):
   `ERR 102 18267`, terminal config **4/4**, 64 `.COM` linked and **72 executed
   under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
   the 8 KB boot-sector read).  `tests/nonvacuity.sh`: **108 ok, 0 failed**.
-  The runtime is 964 bytes (wrintw and real_from_int; the golden was
-  re-blessed) and `tests/rt_exec.py` passes **69/69**.  `check_realconst.py`
-  pins the measured 6-byte Real operand bytes.
+  The runtime is 1325 bytes (wrintw, real_from_int, real_add, real_sub; the
+  golden was re-blessed) and `tests/rt_exec.py` passes **85/85**, including 16
+  exact-byte MBF add/sub cases.  `check_realconst.py` pins the measured
+  6-byte Real operand bytes.
 - **`tests/nonvacuity.sh`:** re-run after this commit's cases (the set
   membership bit among them); see the commit message for the count. It is not in
   the default `run_all.sh` and must be run **manually** after touching any check.
@@ -674,11 +675,16 @@ Then the two that are *outside* the ladder and gate the goal as stated:
       * **DONE: `real_from_int`** (`v-TP3-MBF-FROMINT`, entry 21).  ABI:
         source address at [BP+6], destination at [BP+4]; TPSRC3 `intreal` in
         AL/AH/BX/DX.  13 rt_exec cases against the measured table.
-      * **NEXT:** `readd`/`resub` (the same AX/BX/DX + CX/SI/DI convention),
-        `remult`, `rediv`, `recmp`, `reint`, then `fmtreal`/`ascreal` for
-        `Write(Value:FW:DEC)`, `Str` and `Val`.  Each is a direct
-        transcription with rt_exec cases; the register convention is the
-        reference's, so the arithmetic can be checked byte for byte.
+      * **DONE: `real_add`/`real_sub`** (`v-TP3-MBF-ADD`, entries 22/23).
+        ABI: [BP+4] is a 12-byte block (a then b); the result overwrites a.
+        TPSRC2 `readd`/`resub`, one shared core, the reference's scratch
+        bytes and the AX/BX/DX + CX/SI/DI convention.  16 rt_exec cases
+        (alignment, cancellation, signs, carry out, the exponent-overflow
+        STC path).  Two encoder traps: `XOR [mem],reg` is 30h not 32h, and
+        FCML rejects `OR AL,AL`.
+      * **NEXT:** `remult`, `rediv` (`remul11..23` scratch), `recmp`,
+        `reint`, then `fmtreal`/`ascreal` for `Write(Value:FW:DEC)`, `Str`
+        and `Val`.  Each is a direct transcription with rt_exec cases.
       * **THEN** the compiler side: real expressions need a value model
         (pointers to 6-byte temporaries), real comparisons, and real function
         results (currently refused because the result is wider than a word).