Changeset 10101


Ignore:
Timestamp:
Jul 18, 2008, 7:49:04 PM (11 years ago)
Author:
rme
Message:

Additions for x8632.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/x86_print.c

    r9901 r10101  
    266266}
    267267
     268#ifdef X8632
     269LispObj
     270nth_immediate(LispObj o, unsigned n)
     271{
     272  u16_t imm_word_count = *(u16_t *)(o + misc_data_offset);
     273  natural *constants = (natural *)((char *)o + misc_data_offset + (imm_word_count << 2));
     274  LispObj result = (LispObj)(constants[n-1]);
     275
     276  return result;
     277}
     278#endif
     279
    268280void
    269281sprint_function(LispObj o, int depth)
     
    303315      sprint_specializers_list(method_specializers, depth);
    304316      add_char(' ');
     317    } else if (lfbits & lfbits_gfn_mask) {
     318      LispObj gf_slots;
     319      LispObj gf_name;
     320
     321      add_c_string("Generic Function ");
     322
     323#ifdef X8632
     324      gf_slots = nth_immediate(o, 2);
     325      gf_name = deref(gf_slots, 2);
     326      sprint_lisp_object(gf_name, depth);
     327      add_char(' ');
     328#endif
    305329    } else {
    306330      add_c_string("Function ");
     
    316340sprint_tra(LispObj o, int depth)
    317341{
     342#ifdef X8664
    318343  signed sdisp;
    319344  unsigned disp = 0;
     
    336361    sprint_unsigned_hex(o);
    337362  }
     363#else
     364  LispObj f = 0;
     365  unsigned disp = 0;
     366
     367  if (*(unsigned char *)o == RECOVER_FN_OPCODE) {
     368    f = (LispObj)(*((natural *)(o + 1)));
     369    disp = o - f;
     370  }
     371
     372  if (f && header_subtag(header_of(f)) == subtag_function) {
     373    add_c_string("tagged return address: ");
     374    sprint_function(f, depth);
     375    add_c_string(" + ");
     376    sprint_unsigned_decimal(disp);
     377  } else {
     378    add_c_string("(tra ?) : ");
     379    sprint_unsigned_hex(o);
     380  }
     381#endif
    338382}
    339383               
     
    473517    case fulltag_nodeheader_1:
    474518#else
     519    case fulltag_immheader:
     520    case fulltag_nodeheader:
    475521#endif     
    476522      add_c_string("#<header ? ");
     
    483529    case fulltag_imm_1:
    484530#else
     531    case fulltag_imm:
    485532#endif
    486533      if (o == unbound) {
     
    493540            add_char(c);
    494541          } else {
    495             sprintf(numbuf, "%o", c);
     542            sprintf(numbuf, "%#o", c);
    496543            add_c_string(numbuf);
    497544          }
     
    511558      }
    512559      break;
    513    
     560
     561#ifdef X8664
    514562    case fulltag_nil:
     563#endif
    515564    case fulltag_cons:
    516565      sprint_list(o, depth);
     
    521570      break;
    522571
     572#ifdef X8664
    523573    case fulltag_symbol:
    524574      sprint_symbol(o);
     
    528578      sprint_function(o, depth);
    529579      break;
    530 
     580#endif
     581
     582#ifdef X8664
    531583    case fulltag_tra_0:
    532584    case fulltag_tra_1:
     585#else
     586    case fulltag_tra:
     587#endif
    533588      sprint_tra(o,depth);
    534589      break;
Note: See TracChangeset for help on using the changeset viewer.