|
|
1.1 ! root 1: /* C compiler: MIPS configuration parameters */ ! 2: ! 3: #define IREG 0 /* a general-purpose register */ ! 4: #define FREG 1 /* a floating-point register */ ! 5: ! 6: #include "gen.h" ! 7: ! 8: dclproto(extern Symbol argreg,(int, int, int, int)); ! 9: dclproto(extern void emitargb,(Node)); ! 10: dclproto(extern void emitasgnb,(Node)); ! 11: dclproto(extern void addnops,(void)); ! 12: extern int framesize; ! 13: extern int gnum; ! 14: extern char *nrflag; ! 15: ! 16: #define announce(p) (bflag ? put.stackvar(p) : (unsigned)0) ! 17: #define strtod(a,b) atof(a) ! 18: dclproto(extern double atof,(char *)); ! 19: ! 20: struct emit { ! 21: dclproto(void (*seg),(int)); ! 22: dclproto(void (*spacen),(int, char *)); ! 23: dclproto(void (*string),(char*, char*, int, char*)); ! 24: dclproto(unsigned (*emit),(unsigned, int, int, int, int)); ! 25: dclproto(void (*addr),(Symbol, Symbol, int)); ! 26: dclproto(unsigned (*def),(Symbol)); ! 27: dclproto(void (*defaddr),(Symbol)); ! 28: dclproto(void (*end),(Symbol)); ! 29: dclproto(void (*entry),(Symbol, int, int)); ! 30: dclproto(int (*offset),(int)); ! 31: dclproto(void (*symbol),(int, Symbol)); ! 32: dclproto(void (*word),(unsigned, int)); ! 33: }; ! 34: ! 35: extern struct emit put; ! 36: ! 37: #define r_at 1 ! 38: #define r_gp 28 ! 39: #define r_sp 29 ! 40: ! 41: #define ea_base(wd) ((wd >> 21) & 0x001f) ! 42: #define ea_offset(wd) ((wd) & 0xffff) ! 43: #define ea_addr(off,base) (assert(ea_base(off)==0), (((base&0x001f)<<21) | ea_offset(off))) ! 44: ! 45: #define o_add_s (((unsigned)021<<26)|(020<<21)|0) ! 46: #define o_add_d (((unsigned)021<<26)|(021<<21)|0) ! 47: #define o_sub_s (((unsigned)021<<26)|(020<<21)|1) ! 48: #define o_sub_d (((unsigned)021<<26)|(021<<21)|1) ! 49: #define o_mul_s (((unsigned)021<<26)|(020<<21)|2) ! 50: #define o_mul_d (((unsigned)021<<26)|(021<<21)|2) ! 51: #define o_div_s (((unsigned)021<<26)|(020<<21)|3) ! 52: #define o_div_d (((unsigned)021<<26)|(021<<21)|3) ! 53: #define o_mov_s (((unsigned)021<<26)|(020<<21)|6) ! 54: #define o_mov_d (((unsigned)021<<26)|(021<<21)|6) ! 55: #define o_neg_s (((unsigned)021<<26)|(020<<21)|7) ! 56: #define o_neg_d (((unsigned)021<<26)|(021<<21)|7) ! 57: #define o_cvt_d_s (((unsigned)021<<26)|(020<<21)|33) ! 58: #define o_cvt_d_w (((unsigned)021<<26)|(024<<21)|33) ! 59: #define o_cvt_s_d (((unsigned)021<<26)|(021<<21)|32) ! 60: #define o_cvt_w_s (((unsigned)021<<26)|(020<<21)|36) ! 61: #define o_cvt_w_d (((unsigned)021<<26)|(021<<21)|36) ! 62: #define o_c_eq_s (((unsigned)021<<26)|(020<<21)|50) ! 63: #define o_c_eq_d (((unsigned)021<<26)|(021<<21)|50) ! 64: #define o_c_le_s (((unsigned)021<<26)|(020<<21)|62) ! 65: #define o_c_le_d (((unsigned)021<<26)|(021<<21)|62) ! 66: #define o_c_lt_s (((unsigned)021<<26)|(020<<21)|60) ! 67: #define o_c_lt_d (((unsigned)021<<26)|(021<<21)|60) ! 68: #define o_mfc1_s (((unsigned)021<<26)|(0<<21)|0) /* mfc1 */ ! 69: #define o_mtc1_s (((unsigned)021<<26)|(4<<21)|0) /* mtc1 */ ! 70: #define o_mfc1_d (((unsigned)021<<26)|(1<<21)|0) /* fake mfc1 */ ! 71: #define o_mtc1_d (((unsigned)021<<26)|(5<<21)|0) /* fake mtc1 */ ! 72: #define o_cfc1 (((unsigned)021<<26)|(2<<21)|0) ! 73: #define o_ctc1 (((unsigned)021<<26)|(6<<21)|0) ! 74: #define o_l_s ((unsigned)061<<26) /* lwc1 */ ! 75: #define o_l_d ((unsigned)065<<26) /* ldc1 */ ! 76: #define o_s_s ((unsigned)071<<26) /* swc1 */ ! 77: #define o_s_d ((unsigned)075<<26) /* sdc1 */ ! 78: #define o_bc1f (((unsigned)021<<26)|(0400<<16)) ! 79: #define o_bc1t (((unsigned)021<<26)|(0401<<16)) ! 80: #define o_lui ((unsigned)017<<26) ! 81: #define o_lb ((unsigned)040<<26) ! 82: #define o_lbu ((unsigned)044<<26) ! 83: #define o_lh ((unsigned)041<<26) ! 84: #define o_lhu ((unsigned)045<<26) ! 85: #define o_lw ((unsigned)043<<26) ! 86: #define o_sb ((unsigned)050<<26) ! 87: #define o_sh ((unsigned)051<<26) ! 88: #define o_sw ((unsigned)053<<26) ! 89: #define o_lwl ((unsigned)042<<26) ! 90: #define o_lwr ((unsigned)046<<26) ! 91: #define o_swl ((unsigned)052<<26) ! 92: #define o_swr ((unsigned)056<<26) ! 93: #define o_add (((unsigned)0<<26)|040) ! 94: #define o_addu (((unsigned)0<<26)|041) ! 95: #define o_addi ((unsigned)010<<26) ! 96: #define o_addui ((unsigned)011<<26) /* addiu */ ! 97: #define o_and (((unsigned)0<<26)|044) ! 98: #define o_andi ((unsigned)014<<26) ! 99: #define o_sub (((unsigned)0<<26)|042) ! 100: #define o_subu (((unsigned)0<<26)|043) ! 101: #define o_subui ((unsigned)011<<26) /* addiu */ ! 102: #define o_or (((unsigned)0<<26)|045) ! 103: #define o_ori ((unsigned)015<<26) ! 104: #define o_xor (((unsigned)0<<26)|046) ! 105: #define o_xori ((unsigned)016<<26) ! 106: #define o_not (((unsigned)0<<26)|047) /* nor */ ! 107: #define o_mul (((unsigned)0<<26)|030) ! 108: #define o_mulu (((unsigned)0<<26)|031) ! 109: #define o_div (((unsigned)0<<26)|032) ! 110: #define o_divu (((unsigned)0<<26)|033) ! 111: #define o_rem o_div ! 112: #define o_remu o_divu ! 113: #define o_negu o_subu ! 114: #define o_sll (((unsigned)0<<26)|04) /* sllv */ ! 115: #define o_slli (((unsigned)0<<26)|0) /* sll */ ! 116: #define o_srl (((unsigned)0<<26)|06) /* srlv */ ! 117: #define o_srli (((unsigned)0<<26)|02) /* srl */ ! 118: #define o_sra (((unsigned)0<<26)|07) /* srav */ ! 119: #define o_srai (((unsigned)0<<26)|03) /* sra */ ! 120: #define o_slt (((unsigned)0<<26)|052) ! 121: #define o_slti ((unsigned)012<<26) ! 122: #define o_sltu (((unsigned)0<<26)|053) ! 123: #define o_sltui ((unsigned)013<<26) ! 124: #define o_beq ((unsigned)04<<26) ! 125: #define o_bne ((unsigned)05<<26) ! 126: #define o_bge (((unsigned)01<<26)|(1<<16)) /* bgez */ ! 127: #define o_bgt ((unsigned)07<<26) /* bgtz */ ! 128: #define o_ble ((unsigned)06<<26) /* blez */ ! 129: #define o_blt (((unsigned)01<<26)|(0<<16)) /* bltz */ ! 130: #define o_b ((unsigned)02<<26) /* j */ ! 131: #define o_jal ((unsigned)03<<26) /* jalr */ ! 132: #define o_jalr (((unsigned)0<<26)|011) /* jalr */ ! 133: #define o_jr (((unsigned)0<<26)|010) /* jr */ ! 134: #define o_move o_addu ! 135: #define o_mfhi (((unsigned)0<<26)|020) ! 136: #define o_mflo (((unsigned)0<<26)|022) ! 137: #define o_break (((unsigned)0<<26)|015) ! 138: #define o_syscall (((unsigned)0<<26)|014)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.