FAILURE MAP
← Case archive

FA-89511 / Instruction set emulation / Open access

Every stored byte receives the low byte · case 01

sw and sh replicate the least significant byte across the whole access.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The store loop does not shift the value per byte lane.

VERIFIED REPAIR

Byte k stores bits 8k..8k+7 of the value.

Unsuccessful approach: Shifting by k bits instead of k bytes stores garbage in the upper lanes.

Case contract

Input [mem, ops]: mem is a byte list; ops [op, addr, value] with lb/lbu/lh/lhu/lw loads and sb/sh/sw stores (sizes 1/2/4). An access whose address is not a multiple of its size yields 'misaligned' (checked first); one extending past memory yields 'fault'. Data is little-endian. lb/lh/lw sign-extend from their top bit, lbu/lhu zero-extend. Stores write the low size bytes of value and yield None. Return [results, final memory].

Why this case matters

Memory access emulation must reproduce endianness, extension and alignment traps bit-exactly.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(*args):
    mem, ops = args
    mem = list(mem)
    out = []
    size = {'b': 1, 'h': 2, 'w': 4}
    for op, addr, val in ops:
        n = size[op[1]]
        if addr % n != 0:
            out.append('misaligned')
            continue
        if addr + n > len(mem):
            out.append('fault')
            continue
        if op[0] == 's':
            for k in range(n):
                mem[addr + k] = val & 0xFF
            out.append(None)
        else:
            v = 0
            for k in range(n):
                v |= mem[addr + k] << (8 * k)
            if not op.endswith('u') and v >> (8 * n - 1):
                v -= 1 << (8 * n)
            out.append(v)
    return [out, mem]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('signed byte load', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737966], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]]), ('out of range', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-126, 127], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[130, 255], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98430, 305430529], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737965], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229331, 205, None, 23130], [130, 127, 254, 255, 1, 128, 52, 18, 237, 205, 90, 90]]), ('out of range', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [130, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-125, 127], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[131, 255], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98429, 305430529], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737964], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229332, 205, None, 23130], [131, 127, 254, 255, 1, 128, 52, 18, 236, 205, 90, 90]]), ('out of range', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [131, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-124, 127], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[132, 255], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98428, 305430529], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737963], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229333, 205, None, 23130], [132, 127, 254, 255, 1, 128, 52, 18, 235, 205, 90, 90]]), ('out of range', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [132, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-123, 127], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[133, 255], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98427, 305430529], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737962], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229334, 205, None, 23130], [133, 127, 254, 255, 1, 128, 52, 18, 234, 205, 90, 90]]), ('out of range', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [133, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
signed byte load[[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
unsigned byte load[[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
halfword loads[[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
word loads[[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
misaligned accesses[['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
store then load back[[None, -286331154, 238, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 238, 90, 90]][[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]]Failed
out of range[['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
byte store[[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]][[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]]Passed

SHA-256 / 3b3064690dbb9603d1991e01c6aded5f832e4ec11bb234bb74777e0aa123dbd1

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(*args):
    mem, ops = args
    mem = list(mem)
    out = []
    size = {'b': 1, 'h': 2, 'w': 4}
    for op, addr, val in ops:
        n = size[op[1]]
        if addr % n != 0:
            out.append('misaligned')
            continue
        if addr + n > len(mem):
            out.append('fault')
            continue
        if op[0] == 's':
            for k in range(n):
                mem[addr + k] = (val >> k) & 0xFF
            out.append(None)
        else:
            v = 0
            for k in range(n):
                v |= mem[addr + k] << (8 * k)
            if not op.endswith('u') and v >> (8 * n - 1):
                v -= 1 << (8 * n)
            out.append(v)
    return [out, mem]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('signed byte load', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737966], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]]), ('out of range', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-126, 127], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[130, 255], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98430, 305430529], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737965], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229331, 205, None, 23130], [130, 127, 254, 255, 1, 128, 52, 18, 237, 205, 90, 90]]), ('out of range', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [130, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-125, 127], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[131, 255], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98429, 305430529], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737964], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229332, 205, None, 23130], [131, 127, 254, 255, 1, 128, 52, 18, 236, 205, 90, 90]]), ('out of range', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [131, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-124, 127], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[132, 255], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98428, 305430529], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737963], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229333, 205, None, 23130], [132, 127, 254, 255, 1, 128, 52, 18, 235, 205, 90, 90]]), ('out of range', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [132, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-123, 127], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[133, 255], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98427, 305430529], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737962], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229334, 205, None, 23130], [133, 127, 254, 255, 1, 128, 52, 18, 234, 205, 90, 90]]), ('out of range', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [133, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
signed byte load[[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
unsigned byte load[[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
halfword loads[[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
word loads[[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
misaligned accesses[['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
store then load back[[None, -1115949074, 247, None, 11610], [129, 127, 254, 255, 1, 128, 52, 18, 238, 247, 90, 45]][[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]]Failed
out of range[['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
byte store[[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]][[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]]Passed

SHA-256 / c1264dd7e415227236c400c273f781c8abb8f23f0a2d59183a13e84ee99748ba

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(*args):
    mem, ops = args
    mem = list(mem)
    out = []
    size = {'b': 1, 'h': 2, 'w': 4}
    for op, addr, val in ops:
        n = size[op[1]]
        if addr % n != 0:
            out.append('misaligned')
            continue
        if addr + n > len(mem):
            out.append('fault')
            continue
        if op[0] == 's':
            for k in range(n):
                mem[addr + k] = (val >> (8 * k)) & 0xFF
            out.append(None)
        else:
            v = 0
            for k in range(n):
                v |= mem[addr + k] << (8 * k)
            if not op.endswith('u') and v >> (8 * n - 1):
                v -= 1 << (8 * n)
            out.append(v)
    return [out, mem]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('signed byte load', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737966], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]]), ('out of range', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-126, 127], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[130, 255], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98430, 305430529], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737965], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229331, 205, None, 23130], [130, 127, 254, 255, 1, 128, 52, 18, 237, 205, 90, 90]]), ('out of range', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[130, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [130, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-125, 127], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[131, 255], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98429, 305430529], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737964], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229332, 205, None, 23130], [131, 127, 254, 255, 1, 128, 52, 18, 236, 205, 90, 90]]), ('out of range', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[131, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [131, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-124, 127], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[132, 255], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98428, 305430529], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737963], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229333, 205, None, 23130], [132, 127, 254, 255, 1, 128, 52, 18, 235, 205, 90, 90]]), ('out of range', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[132, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [132, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])], [('signed byte load', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lb', 0, 0], ['lb', 1, 0]]], [[-123, 127], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('unsigned byte load', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lbu', 0, 0], ['lbu', 3, 0]]], [[133, 255], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('halfword loads', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 2, 0], ['lhu', 2, 0], ['lh', 6, 0], ['lhu', 4, 0]]], [[-2, 65534, 4660, 32769], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('word loads', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 0, 0], ['lw', 4, 0]]], [[-98427, 305430529], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('misaligned accesses', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lh', 1, 0], ['lw', 2, 0], ['sh', 3, 4369], ['lb', 3, 0]]], [['misaligned', 'misaligned', 'misaligned', -1], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('store then load back', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sw', 8, 2309737962], ['lw', 8, 0], ['lbu', 9, 0], ['sh', 10, 23130], ['lh', 10, 0]]], [[None, -1985229334, 205, None, 23130], [133, 127, 254, 255, 1, 128, 52, 18, 234, 205, 90, 90]]), ('out of range', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['lw', 12, 0], ['lb', 11, 0], ['sb', 12, 1]]], [['fault', 0, 'fault'], [133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]), ('byte store', [[133, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0], [['sb', 5, 511], ['lbu', 5, 0], ['lh', 4, 0]]], [[None, 255, -255], [133, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
signed byte load[[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-127, 127], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
unsigned byte load[[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[129, 255], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
halfword loads[[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-2, 65534, 4660, 32769], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
word loads[[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][[-98431, 305430529], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
misaligned accesses[['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][['misaligned', 'misaligned', 'misaligned', -1], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
store then load back[[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]][[None, -1985229330, 205, None, 23130], [129, 127, 254, 255, 1, 128, 52, 18, 238, 205, 90, 90]]Passed
out of range[['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]][['fault', 0, 'fault'], [129, 127, 254, 255, 1, 128, 52, 18, 0, 0, 0, 0]]Passed
byte store[[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]][[None, 255, -255], [129, 127, 254, 255, 1, 255, 52, 18, 0, 0, 0, 0]]Passed

SHA-256 / 50aaf363e70d70dcb05082a07425d434a3fdd4ba2d6e028bbe89c8c3d90bd9a8

Verification & scope

A deterministic bounded teaching model of one emulator rule; the instruction semantics are a stipulated contract inspired by common ISAs and are not a claim of cycle-exact or architectural conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:51:18.061340+00:00.

Case digest / 152d67793ffcbdea677fdc35503bb6ba57dcb5e5e1396a1b3e02ac796d118bb8