| 14 | ==== Example: 2-bit Fields ==== |

| 15 | |

| 16 | There can be some applications of 2-bit integer fields, i.e., the |

| 17 | SIMD vector type <64 x i2> for 128-bit SIMD registers. |

| 18 | |

| 19 | Can this be implemented in a generic way as follows: |

| 20 | |

| 21 | 1. Make it a legal type in the SelectionDAG !LegalizeTypes phase. |

| 22 | 2. Create implementations of the standard vector operations and rule out all others in the SelectionDAG Legalize phase. |

| 23 | 3. Implement each operation using bitwise logic on the 2 positions of each field. |

| 24 | |

| 25 | We explore this possibility with the [wiki:i2Vector i2Vector] project. |

| 26 | |

| 27 | === Support for i128, i256, i512 Types === |

| 28 | |

| 29 | Parabix applications need long stream addition, subtraction and shift operations. |

| 30 | There are standard ways of implementing these, including our parallel long-stream addition algorithm. |

| 31 | Can these be integrated into LLVM? |

| 32 | |

| 33 | The LongInteger project involves systematic support of the i256 type on LLVM, taking advantage |

| 34 | of AVX2 instructions on the latest Intel Haswell chips. |