📄 snap_bytecode.c
字号:
case FMULI: case FDIVI: { value_t lit; COPY_LIT(lit,FLOATV,*i); fprintf(f,"\t"); fprintf_value(p,f,&lit); break; }#else /* polymorphic literals */ case PUSH: case EQI: case NEQI: case GTI: case GEQI: case LTI: case LEQI: case ADDI: case SUBI: case MULTI: case DIVI: fprintf(f,"\t"); fprintf_value(p,f,&(i->arg)); break;#endif default: /* nothing */; } return 0;}#else/* kernel versions */int printk_addr(unsigned int addr) { printk("%d.%d.%d.%d",NIPQUAD(addr)); return 0;}int printk_value_tag(TAG_T tag) { switch(tag) { case INTV: printk("INTV"); break; case ADDRV: printk("ADDRV"); break; case STRV: printk("STRV"); break; case EXCV: printk("EXCV"); break; case TUPLEV: printk("TUPLEV"); break; case FLOATV: printk("FLOATV"); break; default: printk("BOGUSV"); break; } return 0;}int printk_value(packet_t *p,value_t *val) { void *heap = p->heap_min; switch(GET_TAG(*val)) { case INTV: printk("%d",GET_INT(*val)); break; case ADDRV: { uint32 addr; GET_ADDR(addr,heap,*val); printk_addr(addr); break; } case FLOATV: { float32 fv; GET_FLOAT(fv,heap,*val); printk("%d.%02d",(int)fv,(int)((fv - (int)fv) * 100)); break; } case STRV: { heap_obj *_ho = (heap_obj *)((void *)heap + GET_OFFS(*val)); char *cp = (char *)&(_ho->s); int i; if (cp[_ho->len - 1] == (char)0xff) { /* blob */ printk("|%d|",_ho->len); break; } printk("\""); for(i=0; i<_ho->len; i++) { if (*cp == '\0') { break; } switch(*cp) { case '"': printk("\\\""); break; case '\\': printk("\\"); break; case '\n': printk("\\n"); break; case '\b': printk("\\b"); break; case '\r': printk("\\r"); break; case '\t': printk("\\t"); break; default: if (isprint(*cp)) { printk("%c",*cp); } else { printk("\\%03o",(int)*cp); } break; } cp++; } printk("\""); break; } case EXCV: printk("E_%d",GET_INT(*val)); break; case TUPLEV: { heap_obj *_ho = (heap_obj *)((void *)heap + GET_OFFS(*val)); int i; printk("("); for (i=0; i< _ho->len; i+= sizeof(value_t)) { printk_value(p,(value_t *)&(_ho->s[i])); if (i+sizeof(value_t) < _ho->len) printk(", "); } printk(")"); break; } default: printk("<bogusv>"); break; } return 0;}int printk_opcode(OPCODE_T op) { switch(op) { case EXIT: printk("exit"); break; case POP: printk("pop"); break; case POPI: printk("popi"); break; case PULL: printk("pull"); break; case STORE: printk("store"); break; case JI: printk("ji"); break; case PAJ: printk("paj"); break; case TPAJ: printk("tpaj"); break; case BEZ: printk("bez"); break; case BNE: printk("bne"); break; case MKTUP: printk("mktup"); break; case NTH: printk("nth"); break; case LEN: printk("len"); break; case ISTUP: printk("istup"); break; case EQ: printk("eq"); break; case NEQ: printk("neq"); break; case GT: printk("gt"); break; case GTI: printk("gti"); break; case GEQ: printk("geq"); break; case GEQI: printk("geqi"); break; case LEQ: printk("leq"); break; case LEQI: printk("leqi"); break; case LT: printk("lt"); break; case LTI: printk("lti"); break; case ADD: printk("add"); break; case ADDI: printk("addi"); break; case SUB: printk("sub"); break; case SUBI: printk("subi"); break; case MULT: printk("mult"); break; case MULTI: printk("multi"); break; case DIV: printk("div"); break; case DIVI: printk("divi"); break; case MOD: printk("mod"); break; case MODI: printk("modi"); break; case NEG: printk("neg"); break; case NOT: printk("not"); break; case LNOT: printk("lnot"); break; case AND: printk("and"); break; case ANDI: printk("andi"); break; case OR: printk("or"); break; case ORI: printk("ori"); break; case LSHL: printk("lshl"); break; case LSHLI: printk("lshli"); break; case RSHL: printk("rshl"); break; case RSHLI: printk("rshli"); break; case RSHA: printk("rsha"); break; case RSHAI: printk("rshai"); break; case XOR: printk("xor"); break; case XORI: printk("xori"); break; case SNET: printk("snet"); break; case SNETI: printk("sneti"); break; case BCAST: printk("bcast"); break; case BCASTI: printk("bcasti"); break; case ISX: printk("isx"); break; case GETRB: printk("getrb"); break; case GETSRC: printk("getsrc"); break; case GETDST: printk("getdst"); break; case GETSPT: printk("getspt"); break; case HERE: printk("here"); break; case ISHERE: printk("ishere"); break; case ROUTE: printk("route"); break; case RTDEV: printk("rtdev"); break; case SEND: printk("send"); break; case HOP: printk("hop"); break;/* case SENDCK: printk("sendck"); break; *//* case HOPCK: printk("hopck"); break; */ case FORW: printk("forw"); break; case FORWTO: printk("forwto"); break; case DEMUX: printk("demux"); break; case DEMUXI: printk("demuxi"); break; case PRINT: printk("print"); break;#ifndef SMALL_INSTRS case PUSH: printk("push"); break; case EQI: printk("eqi"); break; case NEQI: printk("neqi"); break;#else case PINT: printk("pint"); break; case EQINT: printk("eqint"); break; case NQINT: printk("nqint"); break; case PADDR: printk("paddr"); break; case EQADR: printk("eqadr"); break; case NQADR: printk("nqadr"); break; case PTUP: printk("ptup"); break; case EQTUP: printk("eqtup"); break; case NQTUP: printk("nqtup"); break; case PEXC: printk("pexc"); break; case EQEXC: printk("eqexc"); break; case NQEXC: printk("nqexc"); break; case PSTR: printk("pstr"); break; case EQSTR: printk("eqstr"); break; case NQSTR: printk("nqstr"); break; case PFLT: printk("pflt"); break; case EQFLT: printk("eqflt"); break; case NQFLT: printk("nqflt"); break; case FGTI: printk("fgti"); break; case FGEQI: printk("fgeqi"); break; case FLEQI: printk("fleqi"); break; case FLTI: printk("flti"); break; case FADDI: printk("faddi"); break; case FSUBI: printk("fsubi"); break; case FMULI: printk("fmulti"); break; case FDIVI: printk("fdivi"); break; case GETLD: printk("getld"); break;#endif case SVCV: printk("svcv"); break; case CALLS: printk("calls"); break; default: printk("invalid opcode %d\n",op); } return 0;}int printk_instr(packet_t *p, instr_t *i) { printk_opcode(GET_OP(*i)); switch(GET_OP(*i)) { /* int literals */#ifdef SMALL_INSTRS case PINT: case EQINT: case NQINT: case GTI: case GEQI: case LTI: case LEQI: case ADDI: case SUBI: case MULTI: case DIVI:#endif case POPI: case PULL: case STORE: case PAJ: case TPAJ: case JI: case BEZ: case BNE: case MKTUP: case NTH: case MODI: case ANDI: case ORI: case LSHLI: case RSHLI: case RSHAI: case XORI: { value_t lit; COPY_LIT(lit,INTV,*i); printk("\t"); printk_value(p,&lit); break; } /* addr literals */#ifdef SMALL_INSTRS case PADDR: case EQADR: case NQADR:#endif case SNETI: case BCASTI: { value_t lit; COPY_LIT(lit,ADDRV,*i); printk("\t"); printk_value(p,&lit); break; } /* string literals */#ifdef SMALL_INSTRS case PSTR: case EQSTR: case NQSTR:#endif case CALLS: case SVCV: { value_t lit; COPY_LIT(lit,STRV,*i); printk("\t"); printk_value(p,&lit); break; }#ifdef SMALL_INSTRS /* tuple literals */ case PTUP: case EQTUP: case NQTUP: { value_t lit; COPY_LIT(lit,TUPLEV,*i); printk("\t"); printk_value(p,&lit); break; } /* exception literals */ case PEXC: case EQEXC: case NQEXC: { value_t lit; COPY_LIT(lit,EXCV,*i); printk("\t"); printk_value(p,&lit); break; } /* float literals */ case PFLT: case EQFLT: case NQFLT: case FGEQI: case FLEQI: case FLTI: case FGTI: case FADDI: case FSUBI: case FMULI: case FDIVI: { value_t lit; COPY_LIT(lit,FLOATV,*i); printk("\t"); printk_value(p,&lit); break; }#else /* polymorphic literals */ case PUSH: case EQI: case NEQI: case GTI: case GEQI: case LTI: case LEQI: case ADDI: case SUBI: case MULTI: case DIVI: printk("\t"); printk_value(p,&(i->arg)); break;#endif default: /* nothing */; } return 0;}#endif /* !__KERNEL__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -