+#if VECTOR_LEVEL_BITS == 4
+typedef union {
+ vector_index as_whole;
+ struct {
+ unsigned int msb:4; unsigned int lsb:4;
+ } __attribute__ ((__packed__)) as_byte[8];
+} vector_indexing;
+
+#define VECTOR_PART_BYTE(i,p) ((vector_indexing*)(i))->as_byte[ (p)/2 ]
+
+static int VECTOR_INDEX_PART(vector_index *index,int part) {
+ if ( part & 1 ) {
+ return VECTOR_PART_BYTE(index,part).lsb;
+ }
+ return VECTOR_PART_BYTE(index,part).msb;
+}
+
+static int VECTOR_INDEX_PART_INC(vector_index *index,int part) {
+ if ( part & 1 ) {
+ return ++VECTOR_PART_BYTE(index,part).lsb;
+ }
+ return ++VECTOR_PART_BYTE(index,part).msb;
+}
+#endif
+