mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-13 06:50:39 -08:00
Improve eq1/memql performance
* src/fns.c (Fmemql, Feql): Inline to tweak performance.
This commit is contained in:
parent
b354935902
commit
40bc7ddb75
1 changed files with 11 additions and 9 deletions
20
src/fns.c
20
src/fns.c
|
|
@ -1521,7 +1521,7 @@ union double_and_words
|
|||
EMACS_UINT word[WORDS_PER_DOUBLE];
|
||||
};
|
||||
|
||||
/* Return true if X and Y are the same floating-point value.
|
||||
/* Return true if the floats X and Y have the same value.
|
||||
This looks at X's and Y's representation, since (unlike '==')
|
||||
it returns true if X and Y are the same NaN. */
|
||||
static bool
|
||||
|
|
@ -1567,32 +1567,32 @@ DEFUN ("memql", Fmemql, Smemql, 2, 2, 0,
|
|||
The value is actually the tail of LIST whose car is ELT. */)
|
||||
(Lisp_Object elt, Lisp_Object list)
|
||||
{
|
||||
Lisp_Object tail = list;
|
||||
|
||||
if (FLOATP (elt))
|
||||
{
|
||||
Lisp_Object tail = list;
|
||||
FOR_EACH_TAIL (tail)
|
||||
{
|
||||
Lisp_Object tem = XCAR (tail);
|
||||
if (FLOATP (tem) && same_float (elt, tem))
|
||||
return tail;
|
||||
}
|
||||
CHECK_LIST_END (tail, list);
|
||||
return Qnil;
|
||||
}
|
||||
else if (BIGNUMP (elt))
|
||||
{
|
||||
Lisp_Object tail = list;
|
||||
FOR_EACH_TAIL (tail)
|
||||
{
|
||||
Lisp_Object tem = XCAR (tail);
|
||||
if (equal_no_quit (elt, tem))
|
||||
if (BIGNUMP (tem)
|
||||
&& mpz_cmp (XBIGNUM (elt)->value, XBIGNUM (tem)->value) == 0)
|
||||
return tail;
|
||||
}
|
||||
CHECK_LIST_END (tail, list);
|
||||
return Qnil;
|
||||
}
|
||||
else
|
||||
return Fmemq (elt, list);
|
||||
|
||||
CHECK_LIST_END (tail, list);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
DEFUN ("assq", Fassq, Sassq, 2, 2, 0,
|
||||
|
|
@ -2301,7 +2301,9 @@ This differs from numeric comparison: (eql 0.0 -0.0) returns nil and
|
|||
if (FLOATP (obj1))
|
||||
return FLOATP (obj2) && same_float (obj1, obj2) ? Qt : Qnil;
|
||||
else if (BIGNUMP (obj1))
|
||||
return equal_no_quit (obj1, obj2) ? Qt : Qnil;
|
||||
return ((BIGNUMP (obj2)
|
||||
&& mpz_cmp (XBIGNUM (obj1)->value, XBIGNUM (obj2)->value) == 0)
|
||||
? Qt : Qnil);
|
||||
else
|
||||
return EQ (obj1, obj2) ? Qt : Qnil;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue