Skip to content

Program 19: Repeated load-use pairs

Program catalogue · Instruction reference · Executable reference

Purpose

Provide an unrolled sequence where each arithmetic instruction immediately consumes a loaded value.

This is one of the six workload fixtures. This page specifies its instructions and architectural result; pipeline cycles, stalls, and throughput are implementation-specific and are not established by this reference run.

Setup

Property Value
Benchmark workload ID program-19
Headless selection --program 19
Visualizer scenario rv32i-program19
Registered test RV32ISingleCycleSystemTest/program-19
Instruction image 67 words, starting at 0x00000000; last word at 0x00000108
Initial state PC = 0x00000000; all registers zero; neither halted nor trapped
Memories Separate instruction and data memories, 256 KiB each; unlisted data bytes zero
Start address Bytes, in increasing address order
0x00000100 07 00 00 00

The table lists the complete preloaded data image, not instruction bytes. Data values use little-endian byte order.

Register Role established by the program
x1 Fixed source address 0x100
x2 Loaded word, always 7
x3 Accumulator

The shared setup describes reset, loading, and the behavioral-core selection. These hand-written programs do not use the standard ABI stack.

Assembly

Every instruction word is shown, including words that a trap or branch may prevent from executing. Address and word comments identify the exact fixture image. The repeated blocks are fully expanded; there are no omitted instructions or runtime loop directives.

addi x1, x0, 0x100             # 0x00000000 | 0x10000093
addi x3, x0, 0                 # 0x00000004 | 0x00000193
lw x2, 0(x1)                   # 0x00000008 | 0x0000A103
add x3, x3, x2                 # 0x0000000C | 0x002181B3
lw x2, 0(x1)                   # 0x00000010 | 0x0000A103
add x3, x3, x2                 # 0x00000014 | 0x002181B3
lw x2, 0(x1)                   # 0x00000018 | 0x0000A103
add x3, x3, x2                 # 0x0000001C | 0x002181B3
lw x2, 0(x1)                   # 0x00000020 | 0x0000A103
add x3, x3, x2                 # 0x00000024 | 0x002181B3
lw x2, 0(x1)                   # 0x00000028 | 0x0000A103
add x3, x3, x2                 # 0x0000002C | 0x002181B3
lw x2, 0(x1)                   # 0x00000030 | 0x0000A103
add x3, x3, x2                 # 0x00000034 | 0x002181B3
lw x2, 0(x1)                   # 0x00000038 | 0x0000A103
add x3, x3, x2                 # 0x0000003C | 0x002181B3
lw x2, 0(x1)                   # 0x00000040 | 0x0000A103
add x3, x3, x2                 # 0x00000044 | 0x002181B3
lw x2, 0(x1)                   # 0x00000048 | 0x0000A103
add x3, x3, x2                 # 0x0000004C | 0x002181B3
lw x2, 0(x1)                   # 0x00000050 | 0x0000A103
add x3, x3, x2                 # 0x00000054 | 0x002181B3
lw x2, 0(x1)                   # 0x00000058 | 0x0000A103
add x3, x3, x2                 # 0x0000005C | 0x002181B3
lw x2, 0(x1)                   # 0x00000060 | 0x0000A103
add x3, x3, x2                 # 0x00000064 | 0x002181B3
lw x2, 0(x1)                   # 0x00000068 | 0x0000A103
add x3, x3, x2                 # 0x0000006C | 0x002181B3
lw x2, 0(x1)                   # 0x00000070 | 0x0000A103
add x3, x3, x2                 # 0x00000074 | 0x002181B3
lw x2, 0(x1)                   # 0x00000078 | 0x0000A103
add x3, x3, x2                 # 0x0000007C | 0x002181B3
lw x2, 0(x1)                   # 0x00000080 | 0x0000A103
add x3, x3, x2                 # 0x00000084 | 0x002181B3
lw x2, 0(x1)                   # 0x00000088 | 0x0000A103
add x3, x3, x2                 # 0x0000008C | 0x002181B3
lw x2, 0(x1)                   # 0x00000090 | 0x0000A103
add x3, x3, x2                 # 0x00000094 | 0x002181B3
lw x2, 0(x1)                   # 0x00000098 | 0x0000A103
add x3, x3, x2                 # 0x0000009C | 0x002181B3
lw x2, 0(x1)                   # 0x000000A0 | 0x0000A103
add x3, x3, x2                 # 0x000000A4 | 0x002181B3
lw x2, 0(x1)                   # 0x000000A8 | 0x0000A103
add x3, x3, x2                 # 0x000000AC | 0x002181B3
lw x2, 0(x1)                   # 0x000000B0 | 0x0000A103
add x3, x3, x2                 # 0x000000B4 | 0x002181B3
lw x2, 0(x1)                   # 0x000000B8 | 0x0000A103
add x3, x3, x2                 # 0x000000BC | 0x002181B3
lw x2, 0(x1)                   # 0x000000C0 | 0x0000A103
add x3, x3, x2                 # 0x000000C4 | 0x002181B3
lw x2, 0(x1)                   # 0x000000C8 | 0x0000A103
add x3, x3, x2                 # 0x000000CC | 0x002181B3
lw x2, 0(x1)                   # 0x000000D0 | 0x0000A103
add x3, x3, x2                 # 0x000000D4 | 0x002181B3
lw x2, 0(x1)                   # 0x000000D8 | 0x0000A103
add x3, x3, x2                 # 0x000000DC | 0x002181B3
lw x2, 0(x1)                   # 0x000000E0 | 0x0000A103
add x3, x3, x2                 # 0x000000E4 | 0x002181B3
lw x2, 0(x1)                   # 0x000000E8 | 0x0000A103
add x3, x3, x2                 # 0x000000EC | 0x002181B3
lw x2, 0(x1)                   # 0x000000F0 | 0x0000A103
add x3, x3, x2                 # 0x000000F4 | 0x002181B3
lw x2, 0(x1)                   # 0x000000F8 | 0x0000A103
add x3, x3, x2                 # 0x000000FC | 0x002181B3
lw x2, 0(x1)                   # 0x00000100 | 0x0000A103
add x3, x3, x2                 # 0x00000104 | 0x002181B3
ebreak                         # 0x00000108 | 0x00100073

Execution

  1. Set the pointer to 0x100 and the accumulator to zero. Data word 0x00000007 is preloaded at that address.
  2. Execute 32 unrolled LW/ADD pairs. Each LW rereads the same address; its following ADD adds 7 to x3.
  3. The total is 32 × 7 = 224, with 2 + 32 × 2 + 1 = 67 attempts including EBREAK.

There are no branch instructions or pointer updates, so this isolates the load-to-consumer pattern from loop control. Instruction and data addresses can overlap numerically because the fixture uses separate memories.

Expected result

These are the fixture's explicit final-state assertions. Unlisted registers are not implicitly zero; their values follow the assembly. The store table enumerates every written byte, including zero-valued writes.

Item Expected value Meaning
x1 0x00000100 Fixed source address 0x100
x2 0x00000007 Loaded word, always 7
x3 0x000000E0 Accumulator
PC 0x00000108 EBREAK address
Attempts 67 Checkpoints I0–I66
HALTED 1 Project halt
TRAPPED 0 No exception
TRAP_CAUSE 0 None, a project enum code
Start address Bytes, in increasing address order
None —

No data writes occur; the initial data image is unchanged. Data memory is read but never written. The page documents the workload, not a fixed number of load-use stall cycles.

Simulation and checkpoints

For a headless functional check, run build/rv32i_experiment --core single --program 19 --period 4000 --max-cycles 4096 --allocation-limit-mib 512. Select baseline or advanced for the same fixture on another core; add --fidelity reference for the structural-datapath reference profile. The explicit period is a scheduling choice, not a performance result. Use the campaign procedure for clock-certified measurements.

All 67 instruction attempts are included, with absolute simulator time and checkpoint number. The terminating EBREAK is included. The table is scrollable in both directions. Observation conventions distinguish these attempts from loaded word addresses and hardware cycles.

All 67 instruction-attempt checkpoints of RV32ISingleCycleSystemTest/program-19, with a behavioral core. Times are absolute simulator units, not milliseconds or an ISA latency.

CheckpointTimeInstruction / addressExpected architectural effects
I07080ADDI @ 0x00000000raw=0x10000093, pc_after=0x00000004, wb=x1=0x00000100, mem=None, flow=next
I111080ADDI @ 0x00000004raw=0x00000193, pc_after=0x00000008, wb=x3=0x00000000, mem=None, flow=next
I215080LW @ 0x00000008raw=0x0000a103, pc_after=0x0000000c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I319080ADD @ 0x0000000craw=0x002181b3, pc_after=0x00000010, wb=x3=0x00000007, mem=None, flow=next
I423080LW @ 0x00000010raw=0x0000a103, pc_after=0x00000014, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I527080ADD @ 0x00000014raw=0x002181b3, pc_after=0x00000018, wb=x3=0x0000000e, mem=None, flow=next
I631080LW @ 0x00000018raw=0x0000a103, pc_after=0x0000001c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I735080ADD @ 0x0000001craw=0x002181b3, pc_after=0x00000020, wb=x3=0x00000015, mem=None, flow=next
I839080LW @ 0x00000020raw=0x0000a103, pc_after=0x00000024, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I943080ADD @ 0x00000024raw=0x002181b3, pc_after=0x00000028, wb=x3=0x0000001c, mem=None, flow=next
I1047080LW @ 0x00000028raw=0x0000a103, pc_after=0x0000002c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I1151080ADD @ 0x0000002craw=0x002181b3, pc_after=0x00000030, wb=x3=0x00000023, mem=None, flow=next
I1255080LW @ 0x00000030raw=0x0000a103, pc_after=0x00000034, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I1359080ADD @ 0x00000034raw=0x002181b3, pc_after=0x00000038, wb=x3=0x0000002a, mem=None, flow=next
I1463080LW @ 0x00000038raw=0x0000a103, pc_after=0x0000003c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I1567080ADD @ 0x0000003craw=0x002181b3, pc_after=0x00000040, wb=x3=0x00000031, mem=None, flow=next
I1671080LW @ 0x00000040raw=0x0000a103, pc_after=0x00000044, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I1775080ADD @ 0x00000044raw=0x002181b3, pc_after=0x00000048, wb=x3=0x00000038, mem=None, flow=next
I1879080LW @ 0x00000048raw=0x0000a103, pc_after=0x0000004c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I1983080ADD @ 0x0000004craw=0x002181b3, pc_after=0x00000050, wb=x3=0x0000003f, mem=None, flow=next
I2087080LW @ 0x00000050raw=0x0000a103, pc_after=0x00000054, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I2191080ADD @ 0x00000054raw=0x002181b3, pc_after=0x00000058, wb=x3=0x00000046, mem=None, flow=next
I2295080LW @ 0x00000058raw=0x0000a103, pc_after=0x0000005c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I2399080ADD @ 0x0000005craw=0x002181b3, pc_after=0x00000060, wb=x3=0x0000004d, mem=None, flow=next
I24103080LW @ 0x00000060raw=0x0000a103, pc_after=0x00000064, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I25107080ADD @ 0x00000064raw=0x002181b3, pc_after=0x00000068, wb=x3=0x00000054, mem=None, flow=next
I26111080LW @ 0x00000068raw=0x0000a103, pc_after=0x0000006c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I27115080ADD @ 0x0000006craw=0x002181b3, pc_after=0x00000070, wb=x3=0x0000005b, mem=None, flow=next
I28119080LW @ 0x00000070raw=0x0000a103, pc_after=0x00000074, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I29123080ADD @ 0x00000074raw=0x002181b3, pc_after=0x00000078, wb=x3=0x00000062, mem=None, flow=next
I30127080LW @ 0x00000078raw=0x0000a103, pc_after=0x0000007c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I31131080ADD @ 0x0000007craw=0x002181b3, pc_after=0x00000080, wb=x3=0x00000069, mem=None, flow=next
I32135080LW @ 0x00000080raw=0x0000a103, pc_after=0x00000084, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I33139080ADD @ 0x00000084raw=0x002181b3, pc_after=0x00000088, wb=x3=0x00000070, mem=None, flow=next
I34143080LW @ 0x00000088raw=0x0000a103, pc_after=0x0000008c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I35147080ADD @ 0x0000008craw=0x002181b3, pc_after=0x00000090, wb=x3=0x00000077, mem=None, flow=next
I36151080LW @ 0x00000090raw=0x0000a103, pc_after=0x00000094, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I37155080ADD @ 0x00000094raw=0x002181b3, pc_after=0x00000098, wb=x3=0x0000007e, mem=None, flow=next
I38159080LW @ 0x00000098raw=0x0000a103, pc_after=0x0000009c, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I39163080ADD @ 0x0000009craw=0x002181b3, pc_after=0x000000a0, wb=x3=0x00000085, mem=None, flow=next
I40167080LW @ 0x000000a0raw=0x0000a103, pc_after=0x000000a4, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I41171080ADD @ 0x000000a4raw=0x002181b3, pc_after=0x000000a8, wb=x3=0x0000008c, mem=None, flow=next
I42175080LW @ 0x000000a8raw=0x0000a103, pc_after=0x000000ac, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I43179080ADD @ 0x000000acraw=0x002181b3, pc_after=0x000000b0, wb=x3=0x00000093, mem=None, flow=next
I44183080LW @ 0x000000b0raw=0x0000a103, pc_after=0x000000b4, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I45187080ADD @ 0x000000b4raw=0x002181b3, pc_after=0x000000b8, wb=x3=0x0000009a, mem=None, flow=next
I46191080LW @ 0x000000b8raw=0x0000a103, pc_after=0x000000bc, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I47195080ADD @ 0x000000bcraw=0x002181b3, pc_after=0x000000c0, wb=x3=0x000000a1, mem=None, flow=next
I48199080LW @ 0x000000c0raw=0x0000a103, pc_after=0x000000c4, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I49203080ADD @ 0x000000c4raw=0x002181b3, pc_after=0x000000c8, wb=x3=0x000000a8, mem=None, flow=next
I50207080LW @ 0x000000c8raw=0x0000a103, pc_after=0x000000cc, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I51211080ADD @ 0x000000ccraw=0x002181b3, pc_after=0x000000d0, wb=x3=0x000000af, mem=None, flow=next
I52215080LW @ 0x000000d0raw=0x0000a103, pc_after=0x000000d4, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I53219080ADD @ 0x000000d4raw=0x002181b3, pc_after=0x000000d8, wb=x3=0x000000b6, mem=None, flow=next
I54223080LW @ 0x000000d8raw=0x0000a103, pc_after=0x000000dc, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I55227080ADD @ 0x000000dcraw=0x002181b3, pc_after=0x000000e0, wb=x3=0x000000bd, mem=None, flow=next
I56231080LW @ 0x000000e0raw=0x0000a103, pc_after=0x000000e4, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I57235080ADD @ 0x000000e4raw=0x002181b3, pc_after=0x000000e8, wb=x3=0x000000c4, mem=None, flow=next
I58239080LW @ 0x000000e8raw=0x0000a103, pc_after=0x000000ec, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I59243080ADD @ 0x000000ecraw=0x002181b3, pc_after=0x000000f0, wb=x3=0x000000cb, mem=None, flow=next
I60247080LW @ 0x000000f0raw=0x0000a103, pc_after=0x000000f4, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I61251080ADD @ 0x000000f4raw=0x002181b3, pc_after=0x000000f8, wb=x3=0x000000d2, mem=None, flow=next
I62255080LW @ 0x000000f8raw=0x0000a103, pc_after=0x000000fc, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I63259080ADD @ 0x000000fcraw=0x002181b3, pc_after=0x00000100, wb=x3=0x000000d9, mem=None, flow=next
I64263080LW @ 0x00000100raw=0x0000a103, pc_after=0x00000104, wb=x2=0x00000007, mem=Read Word @0x00000100 -> 0x00000007, flow=next
I65267080ADD @ 0x00000104raw=0x002181b3, pc_after=0x00000108, wb=x3=0x000000e0, mem=None, flow=next
I66271080EBREAK @ 0x00000108raw=0x00100073, pc_after=0x00000108, wb=None, mem=None, flow=next, halted=true

Open program 19 reference