diff options
| author | Andreas Schwab | 2000-10-10 11:10:58 +0000 |
|---|---|---|
| committer | Andreas Schwab | 2000-10-10 11:10:58 +0000 |
| commit | c70bbf0690d929279a16a5176c643828b9c2fe8f (patch) | |
| tree | cf871231ff8b197710b721e86738cf1cdbbac5fa /src/alloc.c | |
| parent | d646c828530a325a7908682ab3d9918d5b5eea25 (diff) | |
| download | emacs-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.c | 38 |
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 | ||