(no commit message)
[libreriscv.git] / openpower / sv.mdwn
1 # Simple-V Vectorisation for the OpenPOWER ISA
2
3 <https://bugs.libre-soc.org/show_bug.cgi?id=213>
4
5 Fundamental design principles:
6
7 * Simplicity of introduction and implementation on the existing OpenPOWER ISA
8 * Effectively a hardware for-loop, pausing PC, issuing multiple scalar operations
9 * Preserving the underlying scalar execution dependencies as if the for-loop had been expanded as actual scalar instructions
10 (termed "preserving Program Order")
11 * Augments ("tags") existing instructions, providing Vectorisation "context" rather than adding new ones.
12 * Does not modify or deviate from the underly scalar OpenPOWER ISA unless it provides significant performance or other advantage to do so in the Vector space (dropping XER.SO and OE=1 for example)
13
14 Advantages of these design principles:
15
16 * It is therefore easy to create a first (and sometimes only) implementation as literally a for-loop in hardware, simulators, and compilers.
17 * More complex HDL can be done by repeating existing scalar ALUs and pipelines as blocks.
18 * As (mostly) a high-level "context" that does not (significantly) deviate from scalar OpenPOWER ISA and, in its purest form being "a for loop around scalar instructions", it is minimally-disruptive and consequently stands a reasonable chance of broad community adoption and acceptance
19 * Completely wipes not just SIMD opcode proliferation off the
20 map (SIMD is O(N^6) opcode proliferation)
21 but off of Vectorisation ISAs as well. No more separate Vector
22 instructions.
23
24 Pages being developed and examples
25
26 * [[sv/overview]] explaining the basics.
27 * [[sv/predication]]
28 * [[sv/masked_vector_chaining]]
29 * [[sv/discussion]]
30 * [[sv/example_dep_matrices]]
31 * [[sv/prefix]]
32 * [[sv/major_opcode_allocation]]
33 * [[opcode_regs_deduped]]
34 * [[sv/vector_swizzle]]
35 * [[sv/mv.swizzle]]
36 * [[sv/mv.x]]
37 * [[sv/mv.vec]] move to and from vec2/3/4
38 * [[sv/16_bit_compressed]]
39 * [[sv/toc_data_pointer]]
40 * [[sv/cr_int_predication]]
41 * [[sv/setvl]]
42 * [[sv/svp_rewrite]]
43 * [[sv/ldst]]
44 * [[sv/sprs]]
45 * [[sv/bitmanip]]
46 * [[sv/vector_ops]] Vector ops needed to make a "complete" Vector ISA
47 * [[sv/av_opcodes]] scalar opcodes for Audio/Video
48
49 Additional links:
50
51 * <https://www.sigarch.org/simd-instructions-considered-harmful/>
52 * [[simple_v_extension]] old (deprecated) version