예제 #1
0
void FramePool::mark_inaccessible(unsigned long _base_frame_no,
								  unsigned long _nframes) 
{

	int i;
	for (i = _base_frame_no; i < _base_frame_no + _nframes; i++) {
		set_nth_bit(frame_vacancy_bitmap, i);
	}
}
예제 #2
0
size_t
readtoken (FILE *stream,
           const char *delim,
           size_t n_delim,
           token_buffer *tokenbuffer)
{
  char *p;
  int c;
  size_t i, n;
  word isdelim[(UCHAR_MAX + bits_per_word) / bits_per_word];

  memset (isdelim, 0, sizeof isdelim);
  for (i = 0; i < n_delim; i++)
    {
      unsigned char ch = delim[i];
      set_nth_bit (ch, isdelim);
    }

  /* skip over any leading delimiters */
  for (c = getc (stream); c >= 0 && get_nth_bit (c, isdelim); c = getc (stream))
    {
      /* empty */
    }

  p = tokenbuffer->buffer;
  n = tokenbuffer->size;
  i = 0;
  for (;;)
    {
      if (c < 0 && i == 0)
        return -1;

      if (i == n)
        p = x2nrealloc (p, &n, sizeof *p);

      if (c < 0)
        {
          p[i] = 0;
          break;
        }
      if (get_nth_bit (c, isdelim))
        {
          p[i] = 0;
          break;
        }
      p[i++] = c;
      c = getc (stream);
    }

  tokenbuffer->buffer = p;
  tokenbuffer->size = n;
  return i;
}
예제 #3
0
unsigned long FramePool::get_frame() {

	// Allocate an available frame from the the bitmap,
	// If successful, return its frame number. Otherwise return 0

	// printf("BEGIN: FramePool searching for an available frame\n");
	
	unsigned long i;
	for (i = 0; i < num_frames; i++) {

		if (get_nth_bit(frame_vacancy_bitmap, i) == 0) {
			set_nth_bit(frame_vacancy_bitmap, i);
			// printf("SUCCESS: FramePool found vacancy at frame <#%lu>\n", i);
			return i;
		}
	}


	Console::puts("ERROR: FramePool could not find a vacant frame\n");
	return 0;
}
예제 #4
0
void ciMethodData::set_arg_returned(int i) {
  set_nth_bit(_arg_returned, i);
}
예제 #5
0
void ciMethodData::set_arg_stack(int i) {
  set_nth_bit(_arg_stack, i);
}
예제 #6
0
void ciMethodData::set_arg_local(int i) {
  set_nth_bit(_arg_local, i);
}