11# yaml-language-server: $schema=../../../schemas/inst_schema.json
22
33fence.i :
4- long_name : No synopsis available.
4+ long_name : Instruction fence
55 description : |
6- No description available.
6+ The FENCE.I instruction is used to synchronize the instruction and data
7+ streams. RISC-V does not guarantee that stores to instruction memory
8+ will be made visible to instruction fetches on a RISC-V hart until that
9+ hart executes a FENCE.I instruction. A FENCE.I instruction ensures that
10+ a subsequent instruction fetch on a RISC-V hart will see any previous
11+ data stores already visible to the same RISC-V hart. FENCE.I does _not_
12+ ensure that other RISC-V harts' instruction fetches will observe the
13+ local hart's stores in a multiprocessor system. To make a store to
14+ instruction memory visible to all RISC-V harts, the writing hart also
15+ has to execute a data FENCE before requesting that all remote RISC-V
16+ harts execute a FENCE.I.
17+
18+ The unused fields in the FENCE.I instruction, _imm[11:0]_, _rs1_, and
19+ _rd_, are reserved for finer-grain fences in future extensions. For
20+ forward compatibility, base implementations shall ignore these fields,
21+ and standard software shall zero these fields.
22+ (((FENCE.I, finer-grained)))
23+ (((FENCE.I, forward compatibility)))
24+
25+ [NOTE]
26+ ====
27+ Because FENCE.I only orders stores with a hart's own instruction
28+ fetches, application code should only rely upon FENCE.I if the
29+ application thread will not be migrated to a different hart. The EEI can
30+ provide mechanisms for efficient multiprocessor instruction-stream
31+ synchronization.
32+ ====
733 definedBy : Zifencei
8- assembly : xs1, xd, imm
34+ assembly : " "
935 encoding :
1036 match : -----------------001-----0001111
1137 variables :
@@ -20,6 +46,5 @@ fence.i:
2046 u : always
2147 vs : always
2248 vu : always
23- data_independent_timing : true
2449 operation() : |
25-
50+ ifence();
0 commit comments