Josh Stone <[email protected]> writes:

> +  /* Small lookup table of forms with fixed lengths.  */
> +  static const uint8_t form_lengths[] =
> +    {
> +      [DW_FORM_data1] = 1, [DW_FORM_ref1] = 1, [DW_FORM_flag] = 1,
> +      [DW_FORM_data2] = 2, [DW_FORM_ref2] = 2,
> +      [DW_FORM_data4] = 4, [DW_FORM_ref4] = 4,
> +      [DW_FORM_data8] = 8, [DW_FORM_ref8] = 8, [DW_FORM_ref_sig8] = 8,
> +    };
> +
> +  /* Note that form_lengths[flag_present] is 0, like every other absent 
> index.
> +   * But since flag_present's length truly is 0, check for it explicitly.  */
> +  if (form == DW_FORM_flag_present)
> +    return 0;

One way to get rid of this if would be to store X | 0x80 in the table
(including 0 | 0x80 for DW_FORM_flag_present), and then return
len ^ 0x80 later.  I don't feel strongly about this though, and
certainly not if it offsets the performance gains again ;)

> +
> +  /* Return immediately for forms with fixed lengths.  */
> +  if (form < sizeof(form_lengths) / sizeof(form_lengths[0]))

Space after sizeof

> +    {
> +      size_t len = form_lengths[form];
> +      if (len != 0)
> +     return len;

Fine otherwise.

Thanks,
PM

Reply via email to