diff options
| author | Paul Eggert | 2019-06-27 12:31:27 -0700 |
|---|---|---|
| committer | Paul Eggert | 2019-06-27 12:35:09 -0700 |
| commit | f59a3f3d61c7da8a22ddb13185ae2271865ae155 (patch) | |
| tree | efc3b8dcdbafd11ddcd4532d701414f90e7de236 /src | |
| parent | 4893a09c005cac81c05cd3db05c87225be6a7b42 (diff) | |
| download | emacs-f59a3f3d61c7da8a22ddb13185ae2271865ae155.tar.gz emacs-f59a3f3d61c7da8a22ddb13185ae2271865ae155.zip | |
Improve XFIXNUM cleanup a bit
Based on Pip Cet’s review (Bug#36370#13).
* src/ccl.c (Fccl_execute_on_string): Use clearer indexing.
* src/dosfns.c (Fint86, Fdos_memput):
Avoid runtime checks for negative fixnums when debugging.
This restores the earlier machine code.
* src/lisp.h (XFIXNUM, XUFIXNUM): Use eassert, not eassume.
(XFIXNAT): At the start, merely eassert FIXNUMP rather
than eassuming FIXNATP. At the end, eassume that the
result is nonnegative. This restores help to the compiler
that the previous patch mistakenly removed.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ccl.c | 4 | ||||
| -rw-r--r-- | src/dosfns.c | 22 | ||||
| -rw-r--r-- | src/lisp.h | 10 |
3 files changed, 19 insertions, 17 deletions
| @@ -2062,9 +2062,9 @@ usage: (ccl-execute-on-string CCL-PROGRAM STATUS STRING &optional CONTINUE UNIBY | |||
| 2062 | if (TYPE_RANGED_FIXNUMP (int, AREF (status, i))) | 2062 | if (TYPE_RANGED_FIXNUMP (int, AREF (status, i))) |
| 2063 | ccl.reg[i] = XFIXNUM (AREF (status, i)); | 2063 | ccl.reg[i] = XFIXNUM (AREF (status, i)); |
| 2064 | } | 2064 | } |
| 2065 | if (FIXNUMP (AREF (status, i))) | 2065 | if (FIXNUMP (AREF (status, 8))) |
| 2066 | { | 2066 | { |
| 2067 | EMACS_INT ic = XFIXNUM (AREF (status, i)); | 2067 | EMACS_INT ic = XFIXNUM (AREF (status, 8)); |
| 2068 | if (ccl.ic < ic && ic < ccl.size) | 2068 | if (ccl.ic < ic && ic < ccl.size) |
| 2069 | ccl.ic = ic; | 2069 | ccl.ic = ic; |
| 2070 | } | 2070 | } |
diff --git a/src/dosfns.c b/src/dosfns.c index fb5bcc9ad3f..635f29bd656 100644 --- a/src/dosfns.c +++ b/src/dosfns.c | |||
| @@ -72,16 +72,16 @@ REGISTERS should be a vector produced by `make-register' and | |||
| 72 | if (no < 0 || no > 0xff || ASIZE (registers) != 8) | 72 | if (no < 0 || no > 0xff || ASIZE (registers) != 8) |
| 73 | return Qnil; | 73 | return Qnil; |
| 74 | for (i = 0; i < 8; i++) | 74 | for (i = 0; i < 8; i++) |
| 75 | CHECK_FIXNAT (AREF (registers, i)); | 75 | CHECK_FIXNUM (AREF (registers, i)); |
| 76 | 76 | ||
| 77 | inregs.x.ax = (unsigned long) XFIXNAT (AREF (registers, 0)); | 77 | inregs.x.ax = (unsigned long) XFIXNUM (AREF (registers, 0)); |
| 78 | inregs.x.bx = (unsigned long) XFIXNAT (AREF (registers, 1)); | 78 | inregs.x.bx = (unsigned long) XFIXNUM (AREF (registers, 1)); |
| 79 | inregs.x.cx = (unsigned long) XFIXNAT (AREF (registers, 2)); | 79 | inregs.x.cx = (unsigned long) XFIXNUM (AREF (registers, 2)); |
| 80 | inregs.x.dx = (unsigned long) XFIXNAT (AREF (registers, 3)); | 80 | inregs.x.dx = (unsigned long) XFIXNUM (AREF (registers, 3)); |
| 81 | inregs.x.si = (unsigned long) XFIXNAT (AREF (registers, 4)); | 81 | inregs.x.si = (unsigned long) XFIXNUM (AREF (registers, 4)); |
| 82 | inregs.x.di = (unsigned long) XFIXNAT (AREF (registers, 5)); | 82 | inregs.x.di = (unsigned long) XFIXNUM (AREF (registers, 5)); |
| 83 | inregs.x.cflag = (unsigned long) XFIXNAT (AREF (registers, 6)); | 83 | inregs.x.cflag = (unsigned long) XFIXNUM (AREF (registers, 6)); |
| 84 | inregs.x.flags = (unsigned long) XFIXNAT (AREF (registers, 7)); | 84 | inregs.x.flags = (unsigned long) XFIXNUM (AREF (registers, 7)); |
| 85 | 85 | ||
| 86 | int86 (no, &inregs, &outregs); | 86 | int86 (no, &inregs, &outregs); |
| 87 | 87 | ||
| @@ -139,8 +139,8 @@ DEFUN ("msdos-memput", Fdos_memput, Sdos_memput, 2, 2, 0, | |||
| 139 | 139 | ||
| 140 | for (i = 0; i < len; i++) | 140 | for (i = 0; i < len; i++) |
| 141 | { | 141 | { |
| 142 | CHECK_FIXNAT (AREF (vector, i)); | 142 | CHECK_FIXNUM (AREF (vector, i)); |
| 143 | buf[i] = (unsigned char) XFIXNAT (AREF (vector, i)) & 0xFF; | 143 | buf[i] = (unsigned char) XFIXNUM (AREF (vector, i)) & 0xFF; |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | dosmemput (buf, len, offs); | 146 | dosmemput (buf, len, offs); |
diff --git a/src/lisp.h b/src/lisp.h index 077d2360654..a0619e64f20 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -1195,7 +1195,7 @@ INLINE bool | |||
| 1195 | INLINE EMACS_INT | 1195 | INLINE EMACS_INT |
| 1196 | XFIXNUM (Lisp_Object a) | 1196 | XFIXNUM (Lisp_Object a) |
| 1197 | { | 1197 | { |
| 1198 | eassume (FIXNUMP (a)); | 1198 | eassert (FIXNUMP (a)); |
| 1199 | return XFIXNUM_RAW (a); | 1199 | return XFIXNUM_RAW (a); |
| 1200 | } | 1200 | } |
| 1201 | 1201 | ||
| @@ -1209,7 +1209,7 @@ XUFIXNUM_RAW (Lisp_Object a) | |||
| 1209 | INLINE EMACS_UINT | 1209 | INLINE EMACS_UINT |
| 1210 | XUFIXNUM (Lisp_Object a) | 1210 | XUFIXNUM (Lisp_Object a) |
| 1211 | { | 1211 | { |
| 1212 | eassume (FIXNUMP (a)); | 1212 | eassert (FIXNUMP (a)); |
| 1213 | return XUFIXNUM_RAW (a); | 1213 | return XUFIXNUM_RAW (a); |
| 1214 | } | 1214 | } |
| 1215 | 1215 | ||
| @@ -2828,9 +2828,11 @@ FIXNATP (Lisp_Object x) | |||
| 2828 | INLINE EMACS_INT | 2828 | INLINE EMACS_INT |
| 2829 | XFIXNAT (Lisp_Object a) | 2829 | XFIXNAT (Lisp_Object a) |
| 2830 | { | 2830 | { |
| 2831 | eassume (FIXNATP (a)); | 2831 | eassert (FIXNUMP (a)); |
| 2832 | EMACS_INT int0 = Lisp_Int0; | 2832 | EMACS_INT int0 = Lisp_Int0; |
| 2833 | return USE_LSB_TAG ? XFIXNUM (a) : XLI (a) - (int0 << VALBITS); | 2833 | EMACS_INT result = USE_LSB_TAG ? XFIXNUM (a) : XLI (a) - (int0 << VALBITS); |
| 2834 | eassume (0 <= result); | ||
| 2835 | return result; | ||
| 2834 | } | 2836 | } |
| 2835 | 2837 | ||
| 2836 | INLINE bool | 2838 | INLINE bool |