aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2019-06-27 12:31:27 -0700
committerPaul Eggert2019-06-27 12:35:09 -0700
commitf59a3f3d61c7da8a22ddb13185ae2271865ae155 (patch)
treeefc3b8dcdbafd11ddcd4532d701414f90e7de236 /src
parent4893a09c005cac81c05cd3db05c87225be6a7b42 (diff)
downloademacs-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.c4
-rw-r--r--src/dosfns.c22
-rw-r--r--src/lisp.h10
3 files changed, 19 insertions, 17 deletions
diff --git a/src/ccl.c b/src/ccl.c
index f1d4c28df1c..ff42c6f25fc 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -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
1195INLINE EMACS_INT 1195INLINE EMACS_INT
1196XFIXNUM (Lisp_Object a) 1196XFIXNUM (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)
1209INLINE EMACS_UINT 1209INLINE EMACS_UINT
1210XUFIXNUM (Lisp_Object a) 1210XUFIXNUM (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)
2828INLINE EMACS_INT 2828INLINE EMACS_INT
2829XFIXNAT (Lisp_Object a) 2829XFIXNAT (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
2836INLINE bool 2838INLINE bool