FAILURE MAP
← Case archive

FA-89628 / Instruction set emulation / Member archive

High-digit adjust tests the already adjusted value · case 03

A low-digit adjust that pushes the byte past 0x99 triggers a spurious +0x60.

Member previewVariant 3 · 3 implementations · 10 checks per implementation

Case contract

Input [xs, ys, c]: little-endian packed-BCD byte lists and a carry-in. For each byte: s = a+b+c; AF = low-nibble sum (with carry) > 0x0F; CF = s > 0xFF; al = s & 0xFF. Decimal adjust: if (al & 0x0F) > 9 or AF then al += 6 (8-bit wrap); then if the pre-adjust al > 0x99 or CF then al += 0x60 (8-bit wrap) and carry-out = 1, else carry-out = 0. The carry-out feeds the next byte. Return [result bytes, final carry].

Why this case matters

Decimal-adjust instructions are among the hardest to emulate; the flag inputs and the pre-adjust comparison decide the result.

One recorded failure

Sample boundary fixture

This sample comes from the broken implementation of a controlled reproducer.

Boundary fixtureActualExpectedOutcome
non-decimal low digit[[252, 5], 0][[156, 4], 0]Failed

MEMBER ARCHIVE

The complete case is available to members.

This record includes three runnable implementations, regression fixtures, execution results, and source hashes.

Member access is invitation-based. Sign in with your invited account to inspect the sources.

Sign in to the archive ↗