diff --git a/src/panfrost/.clang-format b/src/panfrost/.clang-format index 0c23ca6029a..4766dd01180 100644 --- a/src/panfrost/.clang-format +++ b/src/panfrost/.clang-format @@ -68,6 +68,7 @@ ForEachMacros: [ 'pan_foreach_predecessor', 'pan_foreach_successor', 'pan_pack', + 'pan_pack_nodefaults', 'pan_section_pack', 'panvk_cs_reg_upd_ctx', ] diff --git a/src/panfrost/lib/genxml/gen_pack.py b/src/panfrost/lib/genxml/gen_pack.py index a90503837f7..4d48284fa82 100644 --- a/src/panfrost/lib/genxml/gen_pack.py +++ b/src/panfrost/lib/genxml/gen_pack.py @@ -125,6 +125,13 @@ __gen_unpack_padded(const uint8_t *restrict cl, uint32_t start, uint32_t end) ({ PREFIX2(T, pack)((uint32_t *) (dst), &name); \\ _loop_terminate = NULL; })) +#define pan_pack_nodefaults(dst, T, name) \\ + for (struct PREFIX1(T) name = { 0 }, \\ + *_loop_terminate = &name; \\ + __builtin_expect(_loop_terminate != NULL, 1); \\ + ({ PREFIX2(T, pack)((uint32_t *) (dst), &name); \\ + _loop_terminate = NULL; })) + #define pan_unpack(src, T, name) \\ struct PREFIX1(T) name; \\ PREFIX2(T, unpack)((uint8_t *)(src), &name)