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:
@@ -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
|
||||
LFS_ASSERT(lfsr_data_isbuf(data));
|
||||
LFS_ASSERT(lfsr_data_size(data) <= 0x7fff);
|
||||
lfsr_cat_t cat;
|
||||
cat.u.buf.size = data.u.buf.size;
|
||||
cat.u.buf.buffer = data.u.buf.buffer;
|
||||
return cat;
|
||||
return (lfsr_cat_t){
|
||||
.u.buf.size=data.u.buf.size,
|
||||
.u.buf.buffer=data.u.buf.buffer};
|
||||
}
|
||||
|
||||
// cat helpers
|
||||
@@ -1595,13 +1594,11 @@ typedef struct lfsr_attr {
|
||||
|
||||
static inline lfsr_attr_t lfsr_attr(
|
||||
lfsr_tag_t tag, lfsr_srid_t delta, lfsr_cat_t cat) {
|
||||
// don't use a compound literal here, GCC hates it
|
||||
lfsr_attr_t attr;
|
||||
attr.tag = tag;
|
||||
attr.size = cat.u.cat.size;
|
||||
attr.delta = delta;
|
||||
attr.u.datas = cat.u.cat.datas;
|
||||
return attr;
|
||||
return (lfsr_attr_t){
|
||||
.tag=tag,
|
||||
.size=cat.u.cat.size,
|
||||
.delta=delta,
|
||||
.u.datas=cat.u.cat.datas};
|
||||
}
|
||||
|
||||
#define LFSR_ATTR_NOOP() \
|
||||
|
||||
Reference in New Issue
Block a user