A little speed boost, now hitting 2.51GB/s.

pull/13171/head
Joshua Haberman 5 years ago
parent 8ed6b2fe85
commit b95f217996
  1. 4
      upb/decode.int.h
  2. 3
      upb/decode_fast.c

@ -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);

@ -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;

Loading…
Cancel
Save