[BACK]Return to gc_risa.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2018 / parse

Annotation of OpenXM_contrib2/asir2018/parse/gc_risa.c, Revision 1.1

1.1     ! noro        1: /* $OpenXM$ */
        !             2:
        !             3: #if defined(VISUAL) || defined(__MINGW32__)
        !             4: #include "private/gcconfig.h"
        !             5: #if !defined(SIGUSR1)
        !             6: #define SIGUSR1 30
        !             7: #endif
        !             8: #endif
        !             9: #include "gc.h"
        !            10: #include <time.h>
        !            11: #include <signal.h>
        !            12:
        !            13: void error(char *);
        !            14: void int_handler();
        !            15:
        !            16: int *StackBottom;
        !            17: int in_gc, caught_intr;
        !            18:
        !            19: void check_caught_intr()
        !            20: {
        !            21:   if ( caught_intr == 1 ) {
        !            22:     caught_intr = 0;
        !            23:     int_handler(SIGINT);
        !            24:   } else if ( caught_intr == 2 ) {
        !            25:     caught_intr = 0;
        !            26:     ox_usr1_handler(SIGUSR1);
        !            27:     }
        !            28: }
        !            29:
        !            30: void *Risa_GC_malloc(size_t d)
        !            31: {
        !            32:   void *ret;
        !            33:
        !            34:   in_gc = 1;
        !            35:   ret = (void *)GC_malloc(d);
        !            36:   in_gc = 0;
        !            37:   check_caught_intr();
        !            38:   if ( !ret )
        !            39:     error("GC_malloc : failed to allocate memory");
        !            40:   return ret;
        !            41: }
        !            42:
        !            43: void *Risa_GC_malloc_atomic(size_t d)
        !            44: {
        !            45:   void *ret;
        !            46:
        !            47:   in_gc = 1;
        !            48:   ret = (void *)GC_malloc_atomic(d);
        !            49:   in_gc = 0;
        !            50:   check_caught_intr();
        !            51:   if ( !ret )
        !            52:     error("GC_malloc_atomic : failed to allocate memory");
        !            53:   return ret;
        !            54: }
        !            55:
        !            56: void *Risa_GC_malloc_atomic_ignore_off_page(size_t d)
        !            57: {
        !            58:   void *ret;
        !            59:
        !            60:   in_gc = 1;
        !            61:   ret = (void *)GC_malloc_atomic_ignore_off_page(d);
        !            62:   in_gc = 0;
        !            63:   check_caught_intr();
        !            64:   if ( !ret )
        !            65:     error("GC_malloc_atomic_ignore_off_page : failed to allocate memory");
        !            66:   return ret;
        !            67: }
        !            68:
        !            69: void *Risa_GC_realloc(void *p,size_t d)
        !            70: {
        !            71:   void *ret;
        !            72:
        !            73:   in_gc = 1;
        !            74:   ret = (void *)GC_realloc(p,d);
        !            75:   in_gc = 0;
        !            76:   check_caught_intr();
        !            77:   if ( !ret )
        !            78:     error("GC_realloc : failed to reallocate memory");
        !            79:   return ret;
        !            80: }
        !            81:
        !            82: void Risa_GC_free(void *p)
        !            83: {
        !            84:   in_gc = 1;
        !            85:   GC_free(p);
        !            86:   in_gc = 0;
        !            87:   check_caught_intr();
        !            88: }
        !            89:
        !            90: size_t get_heapsize()
        !            91: {
        !            92:   return GC_get_heap_size();
        !            93: }
        !            94:
        !            95: #if !defined(BYTES_TO_WORDS)
        !            96: #define BYTES_TO_WORDS(x)   ((x)>>2)
        !            97: #endif
        !            98:
        !            99: size_t get_allocwords()
        !           100: {
        !           101:   size_t n = GC_get_total_bytes();
        !           102:   return BYTES_TO_WORDS(n); /* bytes to words */
        !           103: }
        !           104:
        !           105: static double asir_start_time;
        !           106:
        !           107: double get_clock(), get_rtime(), get_current_time();
        !           108:
        !           109: void rtime_init()
        !           110: {
        !           111: #if defined(i386) && defined(linux)
        !           112:   unsigned short cw;
        !           113:
        !           114: #define fldcw(addr)             __asm("fldcw %0" : : "m" (*addr))
        !           115: #define fnstcw(addr)            __asm("fnstcw %0" : "=m" (*addr) : "0" (*addr))
        !           116:   fnstcw(&cw); cw &= 0xfeff; cw |= 0x0200; fldcw(&cw);
        !           117: #endif
        !           118:   asir_start_time = get_current_time();
        !           119: }
        !           120:
        !           121: double get_rtime()
        !           122: {
        !           123:   return get_current_time() - asir_start_time;
        !           124: }
        !           125:
        !           126: #if defined(VISUAL) || defined(__MINGW32__)
        !           127: #include <windows.h>
        !           128:
        !           129: extern int recv_intr,doing_batch;
        !           130: void send_intr();
        !           131:
        !           132: BOOL set_ctrlc_flag(DWORD type)
        !           133: {
        !           134:   enter_signal_cs();
        !           135:   if ( doing_batch ) {
        !           136:     send_intr();
        !           137:   }else {
        !           138:     recv_intr = 1;
        !           139:   }
        !           140:   leave_signal_cs();
        !           141:   return TRUE;
        !           142: }
        !           143:
        !           144: void register_ctrlc_handler() {
        !           145:   SetConsoleCtrlHandler((PHANDLER_ROUTINE)set_ctrlc_flag,TRUE);
        !           146: }
        !           147:
        !           148: int mythreadid() {
        !           149:   return GetCurrentThreadId();
        !           150: }
        !           151:
        !           152: double get_current_time()
        !           153: {
        !           154: //  return (double)clock()/(double)CLOCKS_PER_SEC;
        !           155:   return ((double)GetTickCount())/1000.0;
        !           156: }
        !           157:
        !           158: double get_clock()
        !           159: {
        !           160:   static int initialized = 0;
        !           161:   static int is_winnt = 0;
        !           162:   static HANDLE curproc;
        !           163:
        !           164:   if ( !initialized ) {
        !           165:     OSVERSIONINFO vinfo;
        !           166:
        !           167:     curproc = GetCurrentProcess();
        !           168:     vinfo.dwOSVersionInfoSize = sizeof(vinfo);
        !           169:     GetVersionEx(&vinfo);
        !           170:     if ( vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT )
        !           171:       is_winnt = 1;
        !           172:     else
        !           173:       is_winnt = 0;
        !           174:   }
        !           175:   if ( is_winnt ) {
        !           176:     FILETIME c,e,k,u;
        !           177:
        !           178:     GetProcessTimes(curproc,&c,&e,&k,&u);
        !           179:     return ((double)k.dwLowDateTime+(double)u.dwLowDateTime
        !           180:       +4294967296.0*((double)k.dwHighDateTime+(double)u.dwHighDateTime))/10000000.0;
        !           181:   } else
        !           182:     return get_current_time();
        !           183: }
        !           184: #elif defined(THINK_C) || defined(__MWERKS__) || defined(MSWIN32)
        !           185: double get_current_time()
        !           186: {
        !           187:   return get_clock();
        !           188: }
        !           189:
        !           190: double get_clock()
        !           191: {
        !           192:   clock_t c;
        !           193:
        !           194:   c = clock();
        !           195:   return (double)c/(double)CLOCKS_PER_SEC;
        !           196: }
        !           197: #else
        !           198: #include <sys/time.h>
        !           199:
        !           200: double get_current_time()
        !           201: {
        !           202:   struct timeval t;
        !           203:   struct timezone z;
        !           204:
        !           205:   gettimeofday(&t,&z);
        !           206:   return (double)t.tv_sec + ((double)t.tv_usec)/((double)1000000);
        !           207: }
        !           208:
        !           209: #if defined(_PA_RISC1_1) || defined(__svr4__) || defined(__CYGWIN__)
        !           210:
        !           211: #include <sys/times.h>
        !           212: #include <limits.h>
        !           213:
        !           214: double get_clock()
        !           215: {
        !           216:   struct tms buf;
        !           217:
        !           218:   times(&buf);
        !           219:   return (double)(buf.tms_utime+buf.tms_stime)/(double)CLK_TCK;
        !           220: }
        !           221: #else
        !           222:
        !           223: #include <sys/resource.h>
        !           224:
        !           225: double get_clock()
        !           226: {
        !           227:   int tv_sec,tv_usec;
        !           228:   struct rusage ru;
        !           229:
        !           230:   getrusage(RUSAGE_SELF,&ru);
        !           231:   tv_sec = ru.ru_utime.tv_sec + ru.ru_stime.tv_sec;
        !           232:   tv_usec = ru.ru_utime.tv_usec + ru.ru_stime.tv_usec;
        !           233:   return (double)tv_sec+(double)tv_usec/(double)1000000;
        !           234: }
        !           235: #endif
        !           236: #endif
        !           237:
        !           238: #if !defined(NO_ASIR_GC)
        !           239: extern int GC_free_space_numerator;
        !           240:
        !           241: void Risa_GC_get_adj(int *nm, int *dn) {
        !           242:   *nm = GC_free_space_numerator;
        !           243:   *dn = GC_free_space_divisor;
        !           244: }
        !           245:
        !           246: void Risa_GC_set_adj(int nm, int dn) {
        !           247:   GC_free_space_numerator = nm;
        !           248:   GC_free_space_divisor = dn;
        !           249: }
        !           250: #else
        !           251: void Risa_GC_get_adj(int *nm, int *dn) {
        !           252:   *nm = 1;
        !           253:   *dn = GC_free_space_divisor;
        !           254: }
        !           255:
        !           256: void Risa_GC_set_adj(int nm, int dn) {
        !           257:   GC_free_space_divisor = dn/nm;
        !           258: }
        !           259:
        !           260: double GC_get_gctime() {
        !           261:   return 0.0;
        !           262: }
        !           263: #endif
        !           264:
        !           265: #if defined(MSWIN32) && !defined(VISUAL) && !defined(__MINGW32__)
        !           266: #include <signal.h>
        !           267: void process_events() {
        !           268:   if ( check_break() )
        !           269:     raise(SIGINT);
        !           270: }
        !           271: #endif
        !           272:
        !           273: #if defined(THINK_C) || defined(__MWERKS__)
        !           274: #include <signal.h>
        !           275: #include <Events.h>
        !           276:
        !           277: int sigsetmask(int mask){ return 0; }
        !           278:
        !           279: void process_events() {
        !           280:
        !           281:   register EvQElPtr q;
        !           282: #if 0
        !           283:   extern void (*app_process_events)();
        !           284: #endif
        !           285:
        !           286:   for (q = (EvQElPtr) GetEventQueue()->qHead; q; q = (EvQElPtr) q->qLink)
        !           287:     if (q->evtQWhat == keyDown && (char) q->evtQMessage == '.')
        !           288:       if (q->evtQModifiers & cmdKey) {
        !           289:         raise(SIGINT); break;
        !           290:       }
        !           291: #if 0
        !           292:   if ( app_process_events )
        !           293:     (*app_process_events)();
        !           294: #endif
        !           295: }
        !           296: #endif
        !           297:
        !           298: #if (defined(VISUAL) || defined(__MINGW32__)) && !defined(MSWIN32)
        !           299: int sigsetmask(mask) int mask; { return 0; }
        !           300:
        !           301: void process_events() {
        !           302: int c;
        !           303:
        !           304:   while ( c = read_cons() )
        !           305: #if defined(GO32)
        !           306:     if ( c == ('x' & 037 ) )
        !           307: #else
        !           308:     if ( c == ('c' & 037 ) )
        !           309: #endif
        !           310:       int_handler(SIGINT);
        !           311: }
        !           312: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>