Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum svp64_rm_field {
- SVP64_RM_SPR,
- SVP64_RM_MMODE,
- SVP64_RM_MASK,
- SVP64_RM_ELWIDTH,
- SVP64_RM_EWSRC,
- SVP64_RM_SUBVL,
- SVP64_RM_EXTRA,
- SVP64_RM_MODE,
- SVP64_RM_EXTRA2_0,
- SVP64_RM_EXTRA2_1,
- SVP64_RM_EXTRA2_2,
- SVP64_RM_EXTRA2_3,
- SVP64_RM_SMASK,
- SVP64_RM_EXTRA3_0,
- SVP64_RM_EXTRA3_1,
- };
- struct svp64_rm {
- uint32_t value : 24;
- };
- uint32_t svp64_rm_get(struct svp64_rm storage, enum svp64_rm_field field);
- void svp64_rm_set(struct svp64_rm *storage, enum svp64_rm_field field, uint32_t value);
- #define SVP64_FIELD_CLEAR(VALUE, BIT) \
- (VALUE & ~((UINT32_C(1) << UINT32_C(BIT))))
- #define SVP64_FIELD_REMAP(VALUE, SRC, DST) \
- (((VALUE >> UINT32_C(SRC)) & UINT32_C(1)) << UINT32_C(DST))
- #define SVP64_FIELD_GET(ORIGIN, SRC, DST) \
- SVP64_FIELD_REMAP(ORIGIN, SRC, DST)
- #define SVP64_FIELD_SET(RESULT, VALUE, SRC, DST) \
- *(RESULT) = (SVP64_FIELD_CLEAR(*(RESULT), DST) | SVP64_FIELD_REMAP(VALUE, SRC, DST))
- uint32_t svp64_rm_get(struct svp64_rm storage, enum svp64_rm_field field)
- {
- uint32_t result = UINT32_C(0);
- uint32_t origin = storage.value;
- switch (field) {
- case SVP64_RM_SPR:
- result |= SVP64_FIELD_GET(origin, 23, 0);
- result |= SVP64_FIELD_GET(origin, 22, 1);
- result |= SVP64_FIELD_GET(origin, 21, 2);
- result |= SVP64_FIELD_GET(origin, 20, 3);
- result |= SVP64_FIELD_GET(origin, 19, 4);
- result |= SVP64_FIELD_GET(origin, 18, 5);
- result |= SVP64_FIELD_GET(origin, 17, 6);
- result |= SVP64_FIELD_GET(origin, 16, 7);
- result |= SVP64_FIELD_GET(origin, 15, 8);
- result |= SVP64_FIELD_GET(origin, 14, 9);
- result |= SVP64_FIELD_GET(origin, 13, 10);
- result |= SVP64_FIELD_GET(origin, 12, 11);
- result |= SVP64_FIELD_GET(origin, 11, 12);
- result |= SVP64_FIELD_GET(origin, 10, 13);
- result |= SVP64_FIELD_GET(origin, 9, 14);
- result |= SVP64_FIELD_GET(origin, 8, 15);
- result |= SVP64_FIELD_GET(origin, 7, 16);
- result |= SVP64_FIELD_GET(origin, 6, 17);
- result |= SVP64_FIELD_GET(origin, 5, 18);
- result |= SVP64_FIELD_GET(origin, 4, 19);
- result |= SVP64_FIELD_GET(origin, 3, 20);
- result |= SVP64_FIELD_GET(origin, 2, 21);
- result |= SVP64_FIELD_GET(origin, 1, 22);
- result |= SVP64_FIELD_GET(origin, 0, 23);
- break;
- case SVP64_RM_MMODE:
- result |= SVP64_FIELD_GET(origin, 0, 0);
- break;
- case SVP64_RM_MASK:
- result |= SVP64_FIELD_GET(origin, 3, 0);
- result |= SVP64_FIELD_GET(origin, 2, 1);
- result |= SVP64_FIELD_GET(origin, 1, 2);
- break;
- case SVP64_RM_ELWIDTH:
- result |= SVP64_FIELD_GET(origin, 5, 0);
- result |= SVP64_FIELD_GET(origin, 4, 1);
- break;
- case SVP64_RM_EWSRC:
- result |= SVP64_FIELD_GET(origin, 7, 0);
- result |= SVP64_FIELD_GET(origin, 6, 1);
- break;
- case SVP64_RM_SUBVL:
- result |= SVP64_FIELD_GET(origin, 9, 0);
- result |= SVP64_FIELD_GET(origin, 8, 1);
- break;
- case SVP64_RM_EXTRA:
- result |= SVP64_FIELD_GET(origin, 18, 0);
- result |= SVP64_FIELD_GET(origin, 17, 1);
- result |= SVP64_FIELD_GET(origin, 16, 2);
- result |= SVP64_FIELD_GET(origin, 15, 3);
- result |= SVP64_FIELD_GET(origin, 14, 4);
- result |= SVP64_FIELD_GET(origin, 13, 5);
- result |= SVP64_FIELD_GET(origin, 12, 6);
- result |= SVP64_FIELD_GET(origin, 11, 7);
- result |= SVP64_FIELD_GET(origin, 10, 8);
- break;
- case SVP64_RM_MODE:
- result |= SVP64_FIELD_GET(origin, 23, 0);
- result |= SVP64_FIELD_GET(origin, 22, 1);
- result |= SVP64_FIELD_GET(origin, 21, 2);
- result |= SVP64_FIELD_GET(origin, 20, 3);
- result |= SVP64_FIELD_GET(origin, 19, 4);
- break;
- case SVP64_RM_EXTRA2_0:
- result |= SVP64_FIELD_GET(origin, 11, 0);
- result |= SVP64_FIELD_GET(origin, 10, 1);
- break;
- case SVP64_RM_EXTRA2_1:
- result |= SVP64_FIELD_GET(origin, 13, 0);
- result |= SVP64_FIELD_GET(origin, 12, 1);
- break;
- case SVP64_RM_EXTRA2_2:
- result |= SVP64_FIELD_GET(origin, 15, 0);
- result |= SVP64_FIELD_GET(origin, 14, 1);
- break;
- case SVP64_RM_EXTRA2_3:
- result |= SVP64_FIELD_GET(origin, 17, 0);
- result |= SVP64_FIELD_GET(origin, 16, 1);
- break;
- case SVP64_RM_SMASK:
- result |= SVP64_FIELD_GET(origin, 18, 0);
- result |= SVP64_FIELD_GET(origin, 17, 1);
- result |= SVP64_FIELD_GET(origin, 16, 2);
- break;
- case SVP64_RM_EXTRA3_0:
- result |= SVP64_FIELD_GET(origin, 12, 0);
- result |= SVP64_FIELD_GET(origin, 11, 1);
- result |= SVP64_FIELD_GET(origin, 10, 2);
- break;
- case SVP64_RM_EXTRA3_1:
- result |= SVP64_FIELD_GET(origin, 15, 0);
- result |= SVP64_FIELD_GET(origin, 14, 1);
- result |= SVP64_FIELD_GET(origin, 13, 2);
- break;
- }
- return result;
- }
- void svp64_rm_set(struct svp64_rm *storage, enum svp64_rm_field field, uint32_t value)
- {
- uint32_t result = storage->value;
- switch (field) {
- case SVP64_RM_SPR:
- SVP64_FIELD_SET(&result, value, 0, 23);
- SVP64_FIELD_SET(&result, value, 1, 22);
- SVP64_FIELD_SET(&result, value, 2, 21);
- SVP64_FIELD_SET(&result, value, 3, 20);
- SVP64_FIELD_SET(&result, value, 4, 19);
- SVP64_FIELD_SET(&result, value, 5, 18);
- SVP64_FIELD_SET(&result, value, 6, 17);
- SVP64_FIELD_SET(&result, value, 7, 16);
- SVP64_FIELD_SET(&result, value, 8, 15);
- SVP64_FIELD_SET(&result, value, 9, 14);
- SVP64_FIELD_SET(&result, value, 10, 13);
- SVP64_FIELD_SET(&result, value, 11, 12);
- SVP64_FIELD_SET(&result, value, 12, 11);
- SVP64_FIELD_SET(&result, value, 13, 10);
- SVP64_FIELD_SET(&result, value, 14, 9);
- SVP64_FIELD_SET(&result, value, 15, 8);
- SVP64_FIELD_SET(&result, value, 16, 7);
- SVP64_FIELD_SET(&result, value, 17, 6);
- SVP64_FIELD_SET(&result, value, 18, 5);
- SVP64_FIELD_SET(&result, value, 19, 4);
- SVP64_FIELD_SET(&result, value, 20, 3);
- SVP64_FIELD_SET(&result, value, 21, 2);
- SVP64_FIELD_SET(&result, value, 22, 1);
- SVP64_FIELD_SET(&result, value, 23, 0);
- break;
- case SVP64_RM_MMODE:
- SVP64_FIELD_SET(&result, value, 0, 0);
- break;
- case SVP64_RM_MASK:
- SVP64_FIELD_SET(&result, value, 0, 3);
- SVP64_FIELD_SET(&result, value, 1, 2);
- SVP64_FIELD_SET(&result, value, 2, 1);
- break;
- case SVP64_RM_ELWIDTH:
- SVP64_FIELD_SET(&result, value, 0, 5);
- SVP64_FIELD_SET(&result, value, 1, 4);
- break;
- case SVP64_RM_EWSRC:
- SVP64_FIELD_SET(&result, value, 0, 7);
- SVP64_FIELD_SET(&result, value, 1, 6);
- break;
- case SVP64_RM_SUBVL:
- SVP64_FIELD_SET(&result, value, 0, 9);
- SVP64_FIELD_SET(&result, value, 1, 8);
- break;
- case SVP64_RM_EXTRA:
- SVP64_FIELD_SET(&result, value, 0, 18);
- SVP64_FIELD_SET(&result, value, 1, 17);
- SVP64_FIELD_SET(&result, value, 2, 16);
- SVP64_FIELD_SET(&result, value, 3, 15);
- SVP64_FIELD_SET(&result, value, 4, 14);
- SVP64_FIELD_SET(&result, value, 5, 13);
- SVP64_FIELD_SET(&result, value, 6, 12);
- SVP64_FIELD_SET(&result, value, 7, 11);
- SVP64_FIELD_SET(&result, value, 8, 10);
- break;
- case SVP64_RM_MODE:
- SVP64_FIELD_SET(&result, value, 0, 23);
- SVP64_FIELD_SET(&result, value, 1, 22);
- SVP64_FIELD_SET(&result, value, 2, 21);
- SVP64_FIELD_SET(&result, value, 3, 20);
- SVP64_FIELD_SET(&result, value, 4, 19);
- break;
- case SVP64_RM_EXTRA2_0:
- SVP64_FIELD_SET(&result, value, 0, 11);
- SVP64_FIELD_SET(&result, value, 1, 10);
- break;
- case SVP64_RM_EXTRA2_1:
- SVP64_FIELD_SET(&result, value, 0, 13);
- SVP64_FIELD_SET(&result, value, 1, 12);
- break;
- case SVP64_RM_EXTRA2_2:
- SVP64_FIELD_SET(&result, value, 0, 15);
- SVP64_FIELD_SET(&result, value, 1, 14);
- break;
- case SVP64_RM_EXTRA2_3:
- SVP64_FIELD_SET(&result, value, 0, 17);
- SVP64_FIELD_SET(&result, value, 1, 16);
- break;
- case SVP64_RM_SMASK:
- SVP64_FIELD_SET(&result, value, 0, 18);
- SVP64_FIELD_SET(&result, value, 1, 17);
- SVP64_FIELD_SET(&result, value, 2, 16);
- break;
- case SVP64_RM_EXTRA3_0:
- SVP64_FIELD_SET(&result, value, 0, 12);
- SVP64_FIELD_SET(&result, value, 1, 11);
- SVP64_FIELD_SET(&result, value, 2, 10);
- break;
- case SVP64_RM_EXTRA3_1:
- SVP64_FIELD_SET(&result, value, 0, 15);
- SVP64_FIELD_SET(&result, value, 1, 14);
- SVP64_FIELD_SET(&result, value, 2, 13);
- break;
- }
- storage->value = result;
- }
- #undef SVP64_FIELD_CLEAR
- #undef SVP64_FIELD_REMAP
- #undef SVP64_FIELD_GET
- #undef SVP64_FIELD_SET
Advertisement
Add Comment
Please, Sign In to add comment