[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #54572] int64 does not saturate correctly in n

From: Dan Sebald
Subject: [Octave-bug-tracker] [bug #54572] int64 does not saturate correctly in negative direction
Date: Wed, 29 Aug 2018 17:44:17 -0400 (EDT)
User-agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0

Follow-up Comment #31, bug #54572 (project octave):

Works here.

This __signbit() function.  Wouldn't it give better chance of optimization as
an "inline"?  Or am I missing something here in the fact that the
instantiation of the int64_t integer type uses "inline"?

Also, in C/C++ doesn't the standard ensure the following

  // Returns 1 for negative number, 0 otherwise.
  static T
  __signbit (T x)
    return (x < 0);

is sufficient (or perhaps a cast to T is needed.  Sure the optimizing compiler
will probably figure that out have the same code, but still.

Also, the signum routine:

  static T
  signum (T x)
    // With modest optimizations, this will compile without a jump.
    return ((x > 0) ? 1 : 0) - __signbit (x);

Why even call the __signbit routine?  And garden-variety optimization would
still do two comparisons with the above, x > 0 and x < 0 because of the
subtraction operator.  How about:

    return ((x < 0) ? -1 : (x > 0));

which on average might cut the comparisons to 1.5.  Or, one could make the
argument that the more prevalent case is someone having mostly x >  0, so
"return ((x > 0) ? 1 : (x == 0) ? 0 : -1)" would work.  The thing about
avoiding the use of addition and subtraction is that sometimes the processor
could have an instruction that loads a value into a register where that value
is encoded as part of the instruction and not coming from a separate register
which would need an additional load.

Here's a changeset you can pick and choose from or disregard.

(file #44897)

Additional Item Attachment:

File name: octave-inline_some_int_arithmetic-djs2018aug29.patch Size:3 KB


Reply to this item at:


  Message sent via Savannah

reply via email to

[Prev in Thread] Current Thread [Next in Thread]