#endif
#ifndef MAC
+#ifdef THREADS
__thread struct lockvector lvector;
__thread int mythreadid;
#endif
+#else
-#ifdef D___Object______nativehashCode____
-int CALL01(___Object______nativehashCode____, struct ___Object___ * ___this___) {
- return (int)((INTPTR) VAR(___this___));
-}
#endif
#ifdef D___Object______hashCode____
int CALL01(___Object______hashCode____, struct ___Object___ * ___this___) {
- if (!VAR(___this___)->___cachedHash___) {
- VAR(___this___)->___cachedHash___=1;
- VAR(___this___)->___cachedCode___=(int)((INTPTR)VAR(___this___));
- }
- return VAR(___this___)->___cachedCode___;
+ return VAR(___this___)->hashcode;
}
#endif
#ifdef THREADS
#ifdef D___Object______MonitorEnter____
void CALL01(___Object______MonitorEnter____, struct ___Object___ * ___this___) {
+#ifndef NOLOCK
#ifdef MAC
struct lockvector *lptr=(struct lockvector *)pthread_getspecific(threadlocks);
- int self=pthread_getspecific(macthreadid);
+ int self=(int)(long)pthread_getspecific(macthreadid);
#else
struct lockvector *lptr=&lvector;
int self=mythreadid;
lpair->islastlock=1;
while(1) {
if (VAR(___this___)->tid==0) {
- if (CAS32(&VAR(___this___)->tid, 0, self)==0) {
- return;
- }
+ if (CAS32(&VAR(___this___)->tid, 0, self)==0) {
+ return;
+ }
}
{
#ifdef PRECISE_GC
- if (unlikely(needtocollect))
- checkcollect((struct garbagelist *)___params___);
+ if (unlikely(needtocollect))
+ checkcollect((struct garbagelist *)___params___);
#endif
}
}
}
+#endif
}
#endif
#ifdef D___Object______wait____
void CALL01(___Object______wait____, struct ___Object___ * ___this___) {
#ifdef MAC
- int self=pthread_getspecific(macthreadid);
+ int self=(int)(long)pthread_getspecific(macthreadid);
#else
int self=mythreadid;
#endif
BARRIER();
VAR(___this___)->tid=0;
BARRIER();
-
+
while(notifycount==VAR(___this___)->notifycount) {
#ifdef PRECISE_GC
if (unlikely(needtocollect))
while(1) {
if (VAR(___this___)->tid==0) {
if (CAS32(&VAR(___this___)->tid, 0, self)==0) {
- BARRIER();
- return;
+ BARRIER();
+ return;
}
}
#ifdef PRECISE_GC
#ifdef D___Object______MonitorExit____
void CALL01(___Object______MonitorExit____, struct ___Object___ * ___this___) {
+#ifndef NOLOCK
#ifdef MAC
struct lockvector *lptr=(struct lockvector *)pthread_getspecific(threadlocks);
#else
struct lockvector *lptr=&lvector;
#endif
struct lockpair *lpair=&lptr->locks[--lptr->index];
-
+
if (lpair->islastlock) {
MBARRIER();
lpair->object->tid=0;
}
+#endif
}
#endif
#endif