Brought back compound-literals in inline functions

Compound-literals weren't the culprit after all! It was... RVO
interactions with inlined function arguments?

To be honest I still don't quite understand what's going on, but I
present to you this madness:

          code           stack
  before: 33664           2624
  after:  33664 (+0.0%)   2624 (+0.0%)
This commit is contained in:
Christopher Haster
2024-05-09 18:16:16 -05:00
parent f39057d2e1
commit 0eb64d9f10
+8 -11
View File
@@ -1463,10 +1463,9 @@ static inline lfsr_cat_t lfsr_data_cat(lfsr_data_t data) {
// only simple data can be converted directly to cats // only simple data can be converted directly to cats
LFS_ASSERT(lfsr_data_isbuf(data)); LFS_ASSERT(lfsr_data_isbuf(data));
LFS_ASSERT(lfsr_data_size(data) <= 0x7fff); LFS_ASSERT(lfsr_data_size(data) <= 0x7fff);
lfsr_cat_t cat; return (lfsr_cat_t){
cat.u.buf.size = data.u.buf.size; .u.buf.size=data.u.buf.size,
cat.u.buf.buffer = data.u.buf.buffer; .u.buf.buffer=data.u.buf.buffer};
return cat;
} }
// cat helpers // cat helpers
@@ -1595,13 +1594,11 @@ typedef struct lfsr_attr {
static inline lfsr_attr_t lfsr_attr( static inline lfsr_attr_t lfsr_attr(
lfsr_tag_t tag, lfsr_srid_t delta, lfsr_cat_t cat) { lfsr_tag_t tag, lfsr_srid_t delta, lfsr_cat_t cat) {
// don't use a compound literal here, GCC hates it return (lfsr_attr_t){
lfsr_attr_t attr; .tag=tag,
attr.tag = tag; .size=cat.u.cat.size,
attr.size = cat.u.cat.size; .delta=delta,
attr.delta = delta; .u.datas=cat.u.cat.datas};
attr.u.datas = cat.u.cat.datas;
return attr;
} }
#define LFSR_ATTR_NOOP() \ #define LFSR_ATTR_NOOP() \