From b95f2179967a7cc54e9a13abfa04822ac095d0c3 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Tue, 13 Oct 2020 09:31:50 -0700 Subject: [PATCH] A little speed boost, now hitting 2.51GB/s. --- upb/decode.int.h | 4 +--- upb/decode_fast.c | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/upb/decode.int.h b/upb/decode.int.h index c8f75c73f9..f35066a47a 100644 --- a/upb/decode.int.h +++ b/upb/decode.int.h @@ -23,9 +23,7 @@ const char *fastdecode_err(upb_decstate *d); UPB_INLINE -upb_msg *decode_newmsg_ceil(upb_decstate *d, const upb_msglayout *l, - int msg_ceil_bytes) { - size_t size = l->size + sizeof(upb_msg_internal); +upb_msg *decode_newmsg_ceil(upb_decstate *d, size_t size, int msg_ceil_bytes) { char *msg_data; if (UPB_LIKELY(msg_ceil_bytes > 0 && _upb_arenahas(&d->arena, msg_ceil_bytes))) { UPB_ASSERT(size <= (size_t)msg_ceil_bytes); diff --git a/upb/decode_fast.c b/upb/decode_fast.c index 37361679fd..4d133b2531 100644 --- a/upb/decode_fast.c +++ b/upb/decode_fast.c @@ -313,6 +313,7 @@ static const char *fastdecode_submsg(UPB_PARSE_PARAMS, int tagbytes, const upb_msglayout *table_p = (void*)(table >> 8); const upb_msglayout *subl = table_p->submsgs[submsg_idx]; intptr_t subt = (intptr_t)subl << 8 | subl->table_mask; + size_t submsg_size = subl->size + sizeof(upb_msg_internal); submsg = fastdecode_getfield_ofs(d, ptr, msg, &data, &hasbits, &arr, &end, sizeof(upb_msg *), card, true); @@ -343,7 +344,7 @@ again: upb_msg* child = *submsg; if (card == CARD_r || UPB_LIKELY(!child)) { - *submsg = child = decode_newmsg_ceil(d, subl, msg_ceil_bytes); + *submsg = child = decode_newmsg_ceil(d, submsg_size, msg_ceil_bytes); } ptr += tagbytes + 1;