Branch: Tag:

2001-07-18

2001-07-18 19:07:25 by Henrik Grubbström (Grubba) <grubba@grubba.org>

--with-machine-code finally seems to work on sparc.

Rev: src/interpret_functions.h:1.80
Rev: src/program.c:1.356

5:   \*/   /**/   #include "global.h" - RCSID("$Id: program.c,v 1.355 2001/07/17 08:33:23 hubbe Exp $"); + RCSID("$Id: program.c,v 1.356 2001/07/18 19:07:25 grubba Exp $");   #include "program.h"   #include "object.h"   #include "dynamic_buffer.h"
4081:    static INT32 shift;    ptrdiff_t offset;    +  linep[0] = 0; +     if (prog == 0) {    struct pike_string *unknown_program; -  *linep = 0; +     MAKE_CONSTANT_SHARED_STRING(unknown_program, "Unknown program");    return unknown_program;    } - #ifdef PIKE_USE_MACHINE_CODE -  offset = (long) pc; - #else -  offset = pc - prog->program; - #endif +        if(prog == Pike_compiler->new_program)    {    struct pike_string *optimizer; -  linep[0]=0; +     MAKE_CONSTANT_SHARED_STRING(optimizer, "Optimizer");    return optimizer;    }    -  + #ifdef PIKE_USE_MACHINE_CODE +  offset = (long) pc; + #else +  offset = pc - prog->program; + #endif +  +  if ((offset > (ptrdiff_t)prog->num_program) || (offset < 0)) { +  struct pike_string *not_found; +  MAKE_CONSTANT_SHARED_STRING(not_found, "Line not found"); +  return not_found; +  } +     if(prog->id != pid || offset < off)    {    cnt=prog->linenumbers;
4111:    goto fromold;    }    -  if ((offset > (ptrdiff_t)prog->num_program) || (offset < 0)) { -  struct pike_string *res = begin_wide_shared_string(len, shift); -  memcpy(res->str, file, len<<shift); -  return end_shared_string(res); -  } -  +     while(cnt < prog->linenumbers + prog->num_linenumbers)    {    if(*cnt == 127)
5581:   void make_program_executable(struct program *p)   {    mprotect(p->program, p->num_program, PROT_EXEC | PROT_READ | PROT_WRITE); + #ifdef sparc +  { +  register INT32 cnt = 0; +  register INT32 max = (p->num_program+1)*sizeof(INT32); +  register void *program = p->program; +  +  do { +  __asm__ __volatile__ (" flush %0+%1" +  : +  : "r" (program), "r" (cnt) +  : "memory"); +  cnt += 8; +  } while (cnt < max);    } -  + #endif /* sparc */ + }   #endif