aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorAndreas Schwab2000-10-10 11:10:58 +0000
committerAndreas Schwab2000-10-10 11:10:58 +0000
commitc70bbf0690d929279a16a5176c643828b9c2fe8f (patch)
treecf871231ff8b197710b721e86738cf1cdbbac5fa /src/alloc.c
parentd646c828530a325a7908682ab3d9918d5b5eea25 (diff)
downloademacs-c70bbf0690d929279a16a5176c643828b9c2fe8f.tar.gz
emacs-c70bbf0690d929279a16a5176c643828b9c2fe8f.zip
(mark_object): Remove all workarounds installed on
1993-08-08.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c38
1 files changed, 9 insertions, 29 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 7a1d488c6a0..85b9d42f1a3 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3966,8 +3966,6 @@ mark_object (argptr)
3966 { 3966 {
3967 register struct Lisp_Vector *ptr = XVECTOR (obj); 3967 register struct Lisp_Vector *ptr = XVECTOR (obj);
3968 register EMACS_INT size = ptr->size; 3968 register EMACS_INT size = ptr->size;
3969 /* See comment above under Lisp_Vector. */
3970 struct Lisp_Vector *volatile ptr1 = ptr;
3971 register int i; 3969 register int i;
3972 3970
3973 if (size & ARRAY_MARK_FLAG) 3971 if (size & ARRAY_MARK_FLAG)
@@ -3979,17 +3977,16 @@ mark_object (argptr)
3979 for (i = 0; i < size; i++) /* and then mark its elements */ 3977 for (i = 0; i < size; i++) /* and then mark its elements */
3980 { 3978 {
3981 if (i != COMPILED_CONSTANTS) 3979 if (i != COMPILED_CONSTANTS)
3982 mark_object (&ptr1->contents[i]); 3980 mark_object (&ptr->contents[i]);
3983 } 3981 }
3984 /* This cast should be unnecessary, but some Mips compiler complains 3982 /* This cast should be unnecessary, but some Mips compiler complains
3985 (MIPS-ABI + SysVR4, DC/OSx, etc). */ 3983 (MIPS-ABI + SysVR4, DC/OSx, etc). */
3986 objptr = (Lisp_Object *) &ptr1->contents[COMPILED_CONSTANTS]; 3984 objptr = (Lisp_Object *) &ptr->contents[COMPILED_CONSTANTS];
3987 goto loop; 3985 goto loop;
3988 } 3986 }
3989 else if (GC_FRAMEP (obj)) 3987 else if (GC_FRAMEP (obj))
3990 { 3988 {
3991 /* See comment above under Lisp_Vector for why this is volatile. */ 3989 register struct frame *ptr = XFRAME (obj);
3992 register struct frame *volatile ptr = XFRAME (obj);
3993 register EMACS_INT size = ptr->size; 3990 register EMACS_INT size = ptr->size;
3994 3991
3995 if (size & ARRAY_MARK_FLAG) break; /* Already marked */ 3992 if (size & ARRAY_MARK_FLAG) break; /* Already marked */
@@ -4035,13 +4032,6 @@ mark_object (argptr)
4035 register struct Lisp_Vector *ptr = XVECTOR (obj); 4032 register struct Lisp_Vector *ptr = XVECTOR (obj);
4036 struct window *w = XWINDOW (obj); 4033 struct window *w = XWINDOW (obj);
4037 register EMACS_INT size = ptr->size; 4034 register EMACS_INT size = ptr->size;
4038 /* The reason we use ptr1 is to avoid an apparent hardware bug
4039 that happens occasionally on the FSF's HP 300s.
4040 The bug is that a2 gets clobbered by recursive calls to mark_object.
4041 The clobberage seems to happen during function entry,
4042 perhaps in the moveml instruction.
4043 Yes, this is a crock, but we have to do it. */
4044 struct Lisp_Vector *volatile ptr1 = ptr;
4045 register int i; 4035 register int i;
4046 4036
4047 /* Stop if already marked. */ 4037 /* Stop if already marked. */
@@ -4055,9 +4045,9 @@ mark_object (argptr)
4055 /* There is no Lisp data above The member CURRENT_MATRIX in 4045 /* There is no Lisp data above The member CURRENT_MATRIX in
4056 struct WINDOW. Stop marking when that slot is reached. */ 4046 struct WINDOW. Stop marking when that slot is reached. */
4057 for (i = 0; 4047 for (i = 0;
4058 (char *) &ptr1->contents[i] < (char *) &w->current_matrix; 4048 (char *) &ptr->contents[i] < (char *) &w->current_matrix;
4059 i++) 4049 i++)
4060 mark_object (&ptr1->contents[i]); 4050 mark_object (&ptr->contents[i]);
4061 4051
4062 /* Mark glyphs for leaf windows. Marking window matrices is 4052 /* Mark glyphs for leaf windows. Marking window matrices is
4063 sufficient because frame matrices use the same glyph 4053 sufficient because frame matrices use the same glyph
@@ -4106,13 +4096,6 @@ mark_object (argptr)
4106 { 4096 {
4107 register struct Lisp_Vector *ptr = XVECTOR (obj); 4097 register struct Lisp_Vector *ptr = XVECTOR (obj);
4108 register EMACS_INT size = ptr->size; 4098 register EMACS_INT size = ptr->size;
4109 /* The reason we use ptr1 is to avoid an apparent hardware bug
4110 that happens occasionally on the FSF's HP 300s.
4111 The bug is that a2 gets clobbered by recursive calls to mark_object.
4112 The clobberage seems to happen during function entry,
4113 perhaps in the moveml instruction.
4114 Yes, this is a crock, but we have to do it. */
4115 struct Lisp_Vector *volatile ptr1 = ptr;
4116 register int i; 4099 register int i;
4117 4100
4118 if (size & ARRAY_MARK_FLAG) break; /* Already marked */ 4101 if (size & ARRAY_MARK_FLAG) break; /* Already marked */
@@ -4122,14 +4105,13 @@ mark_object (argptr)
4122 size &= PSEUDOVECTOR_SIZE_MASK; 4105 size &= PSEUDOVECTOR_SIZE_MASK;
4123 4106
4124 for (i = 0; i < size; i++) /* and then mark its elements */ 4107 for (i = 0; i < size; i++) /* and then mark its elements */
4125 mark_object (&ptr1->contents[i]); 4108 mark_object (&ptr->contents[i]);
4126 } 4109 }
4127 break; 4110 break;
4128 4111
4129 case Lisp_Symbol: 4112 case Lisp_Symbol:
4130 { 4113 {
4131 /* See comment above under Lisp_Vector for why this is volatile. */ 4114 register struct Lisp_Symbol *ptr = XSYMBOL (obj);
4132 register struct Lisp_Symbol *volatile ptr = XSYMBOL (obj);
4133 struct Lisp_Symbol *ptrx; 4115 struct Lisp_Symbol *ptrx;
4134 4116
4135 if (XMARKBIT (ptr->plist)) break; 4117 if (XMARKBIT (ptr->plist)) break;
@@ -4187,8 +4169,7 @@ mark_object (argptr)
4187 mark_object (&ptr->realvalue); 4169 mark_object (&ptr->realvalue);
4188 mark_object (&ptr->buffer); 4170 mark_object (&ptr->buffer);
4189 mark_object (&ptr->frame); 4171 mark_object (&ptr->frame);
4190 /* See comment above under Lisp_Vector for why not use ptr here. */ 4172 objptr = &ptr->cdr;
4191 objptr = &XBUFFER_LOCAL_VALUE (obj)->cdr;
4192 goto loop; 4173 goto loop;
4193 } 4174 }
4194 4175
@@ -4235,8 +4216,7 @@ mark_object (argptr)
4235 goto loop; 4216 goto loop;
4236 } 4217 }
4237 mark_object (&ptr->car); 4218 mark_object (&ptr->car);
4238 /* See comment above under Lisp_Vector for why not use ptr here. */ 4219 objptr = &ptr->cdr;
4239 objptr = &XCDR (obj);
4240 goto loop; 4220 goto loop;
4241 } 4221 }
4242 4222