Changes: Christian Thalinger
- $Id: asmpart.h 771 2003-12-13 23:11:08Z stefan $
+ $Id: asmpart.h 779 2003-12-14 18:11:35Z stefan $
*/
void asm_builtin_trace();
void asm_builtin_exittrace();
+int asm_xadd(int *, int);
+
#endif /* _ASMPART_H */
calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 730 2003-12-11 21:23:31Z edwin $
+ $Id: builtin.c 779 2003-12-14 18:11:35Z stefan $
*/
s4 builtin_isanysubclass (classinfo *sub, classinfo *super)
{
- classinfo *tmp;
+ /*classinfo *tmp;*/
if (super->flags & ACC_INTERFACE)
return (sub->vftbl->interfacetablelength > super->index) &&
(sub->vftbl->interfacetable[-super->index] != NULL);
sub->vftbl->baseval, super->vftbl->baseval, (unsigned)(sub->vftbl->baseval - super->vftbl->baseval),
super->vftbl->diffval); */
- return (unsigned) (sub->vftbl->baseval - super->vftbl->baseval) <=
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ s4 res = (unsigned) (sub->vftbl->baseval - super->vftbl->baseval) <=
(unsigned) (super->vftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
/* XXX inline this? */
s4 builtin_isanysubclass_vftbl(vftbl *sub,vftbl *super)
{
int base;
+ s4 res;
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
if ((base = super->baseval) <= 0)
/* super is an interface */
- return (sub->interfacetablelength > -base) &&
+ res = (sub->interfacetablelength > -base) &&
(sub->interfacetable[base] != NULL);
- return (unsigned) (sub->baseval - base)
- <= (unsigned) (super->diffval);
+ else
+ res = (unsigned) (sub->baseval - base)
+ <= (unsigned) (super->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
valuevftbl = o->vftbl;
if ((dim_m1 = desc->dimension - 1) == 0) {
+ s4 res;
+
/* {a is a one-dimensional array} */
/* {a is an array of references} */
return (valuevftbl->interfacetablelength > -base &&
valuevftbl->interfacetable[base] != NULL);
- return (unsigned)(valuevftbl->baseval - base)
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ res = (unsigned)(valuevftbl->baseval - base)
<= (unsigned)(componentvftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
/* {a has dimension > 1} */
/* {componentvftbl->arraydesc != NULL} */
vftbl *elementvftbl;
vftbl *valuevftbl;
int base;
+ s4 res;
if (!o) return 1;
return (valuevftbl->interfacetablelength > -base &&
valuevftbl->interfacetable[base] != NULL);
- return (unsigned)(valuevftbl->baseval - base)
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ res = (unsigned)(valuevftbl->baseval - base)
<= (unsigned)(elementvftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
{
vftbl *elementvftbl;
vftbl *valuevftbl;
+ s4 res;
if (!o) return 1;
if (valuevftbl == elementvftbl)
return 1;
- return (unsigned)(valuevftbl->baseval - elementvftbl->baseval)
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ res = (unsigned)(valuevftbl->baseval - elementvftbl->baseval)
<= (unsigned)(elementvftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
Reinhard Grafl
Christian Thalinger
- $Id: asmpart.S 771 2003-12-13 23:11:08Z stefan $
+ $Id: asmpart.S 779 2003-12-14 18:11:35Z stefan $
*/
popa
ret
+asm_xadd:
+ mov 4(%esp),%ecx
+ mov 8(%esp),%eax
+ lock
+ xaddl %eax,0(%ecx)
+ incl %eax
+ ret
/*
* These are local overrides for various environment variables in Emacs.
calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 730 2003-12-11 21:23:31Z edwin $
+ $Id: builtin.c 779 2003-12-14 18:11:35Z stefan $
*/
s4 builtin_isanysubclass (classinfo *sub, classinfo *super)
{
- classinfo *tmp;
+ /*classinfo *tmp;*/
if (super->flags & ACC_INTERFACE)
return (sub->vftbl->interfacetablelength > super->index) &&
(sub->vftbl->interfacetable[-super->index] != NULL);
sub->vftbl->baseval, super->vftbl->baseval, (unsigned)(sub->vftbl->baseval - super->vftbl->baseval),
super->vftbl->diffval); */
- return (unsigned) (sub->vftbl->baseval - super->vftbl->baseval) <=
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ s4 res = (unsigned) (sub->vftbl->baseval - super->vftbl->baseval) <=
(unsigned) (super->vftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
/* XXX inline this? */
s4 builtin_isanysubclass_vftbl(vftbl *sub,vftbl *super)
{
int base;
+ s4 res;
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
if ((base = super->baseval) <= 0)
/* super is an interface */
- return (sub->interfacetablelength > -base) &&
+ res = (sub->interfacetablelength > -base) &&
(sub->interfacetable[base] != NULL);
- return (unsigned) (sub->baseval - base)
- <= (unsigned) (super->diffval);
+ else
+ res = (unsigned) (sub->baseval - base)
+ <= (unsigned) (super->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
valuevftbl = o->vftbl;
if ((dim_m1 = desc->dimension - 1) == 0) {
+ s4 res;
+
/* {a is a one-dimensional array} */
/* {a is an array of references} */
return (valuevftbl->interfacetablelength > -base &&
valuevftbl->interfacetable[base] != NULL);
- return (unsigned)(valuevftbl->baseval - base)
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ res = (unsigned)(valuevftbl->baseval - base)
<= (unsigned)(componentvftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
/* {a has dimension > 1} */
/* {componentvftbl->arraydesc != NULL} */
vftbl *elementvftbl;
vftbl *valuevftbl;
int base;
+ s4 res;
if (!o) return 1;
return (valuevftbl->interfacetablelength > -base &&
valuevftbl->interfacetable[base] != NULL);
- return (unsigned)(valuevftbl->baseval - base)
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ res = (unsigned)(valuevftbl->baseval - base)
<= (unsigned)(elementvftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
{
vftbl *elementvftbl;
vftbl *valuevftbl;
+ s4 res;
if (!o) return 1;
if (valuevftbl == elementvftbl)
return 1;
- return (unsigned)(valuevftbl->baseval - elementvftbl->baseval)
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_lock();
+#endif
+
+ res = (unsigned)(valuevftbl->baseval - elementvftbl->baseval)
<= (unsigned)(elementvftbl->diffval);
+
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ cast_unlock();
+#endif
+
+ return res;
}
Changes: Christian Thalinger
- $Id: asmpart.h 771 2003-12-13 23:11:08Z stefan $
+ $Id: asmpart.h 779 2003-12-14 18:11:35Z stefan $
*/
void asm_builtin_trace();
void asm_builtin_exittrace();
+int asm_xadd(int *, int);
+
#endif /* _ASMPART_H */
Reinhard Grafl
Christian Thalinger
- $Id: asmpart.S 771 2003-12-13 23:11:08Z stefan $
+ $Id: asmpart.S 779 2003-12-14 18:11:35Z stefan $
*/
popa
ret
+asm_xadd:
+ mov 4(%esp),%ecx
+ mov 8(%esp),%eax
+ lock
+ xaddl %eax,0(%ecx)
+ incl %eax
+ ret
/*
* These are local overrides for various environment variables in Emacs.