⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.y

📁 Spim软件的一些源码。其中有Xspim的
💻 Y
📖 第 1 页 / 共 4 页
字号:
		}	|	FP_MOVE_OPS_REV2 F_DEST	F_SRC1		{		  mips32_r2_inst ();		}	|	MOVEC_OPS	DEST	SRC1	CC_REG		{		  r_type_inst ($1.i, $2.i, $3.i, cc_to_rt ($4.i, 0, 0));		}	|	FP_MOVEC_OPS	F_DEST	F_SRC1	REG		{		  r_co_type_inst ($1.i, $2.i, $3.i, $4.i);		}	|	FP_MOVECC_OPS	F_DEST	F_SRC1	CC_REG		{		  r_co_type_inst ($1.i, $2.i, $3.i, cc_to_rt ($4.i, 0, 0));		}	|	FP_MOVECC_OPS_REV2 F_DEST	F_SRC1	CC_REG		{		  mips32_r2_inst ();		}	|	FP_MOVEC_OPS_REV2 F_DEST	F_SRC1	REG		{		  mips32_r2_inst ();		}	|	MOVE_FROM_HILO_OPS REG		{		  r_type_inst ($1.i, $2.i, 0, 0);		}	|	MOVE_TO_HILO_OPS REG		{		  r_type_inst ($1.i, 0, $2.i, 0);		}	|	MOVEC_OPS	DEST	SRC1	SRC2		{		  r_type_inst ($1.i, $2.i, $3.i, $4.i);		}	|	MOVE_COP_OPS	REG	COP_REG		{		  if ($1.i == Y_MFC1_D_POP)		    {		      r_co_type_inst (Y_MFC1_OP, 0, $3.i, $2.i);		      r_co_type_inst (Y_MFC1_OP, 0, $3.i + 1, $2.i + 1);		    }		  else if ($1.i == Y_MTC1_D_POP)		    {		      r_co_type_inst (Y_MTC1_OP, 0, $3.i, $2.i);		      r_co_type_inst (Y_MTC1_OP, 0, $3.i + 1, $2.i + 1);		    }		  else		    r_co_type_inst ($1.i, 0, $3.i, $2.i);		}	|	MOVE_COP_OPS_REV2 REG	COP_REG		{		  mips32_r2_inst ();		}	|	CTL_COP_OPS	REG	COP_REG		{		  r_co_type_inst ($1.i, 0, $3.i, $2.i);		}	|	FP_UNARY_OPS	F_DEST	F_SRC2		{		  r_co_type_inst ($1.i, $2.i, $3.i, 0);		}	|	FP_UNARY_OPS_REV2 F_DEST	F_SRC2		{		  mips32_r2_inst ();		}	|	FP_BINARY_OPS	F_DEST	F_SRC1	F_SRC2		{		  r_co_type_inst ($1.i, $2.i, $3.i, $4.i);		}	|	FP_BINARY_OPS_REV2 F_DEST	F_SRC1	F_SRC2		{		  mips32_r2_inst ();		}	|	FP_TERNARY_OPS_REV2 F_DEST	F_SRC1	F_SRC2	FP_REGISTER		{		  mips32_r2_inst ();		}	|	FP_CMP_OPS	F_SRC1	F_SRC2		{		  r_cond_type_inst ($1.i, $2.i, $3.i, 0);		}	|	FP_CMP_OPS	CC_REG	F_SRC1	F_SRC2		{		  r_cond_type_inst ($1.i, $3.i, $4.i, $2.i);		}	|	FP_CMP_OPS_REV2	F_SRC1	F_SRC2		{		  mips32_r2_inst ();		}	|	Y_COP2_OP	IMM32		{		  i_type_inst_free ($1.i, 0, 0, (imm_expr *)$2.p);		}	;LOAD_OPS:	Y_LB_OP	|	Y_LBU_OP	|	Y_LH_OP	|	Y_LHU_OP	|	Y_LL_OP	|	Y_LW_OP	|	Y_LWL_OP	|	Y_LWR_OP	|	Y_PFW_OP	|	Y_LD_POP	;LOADI_OPS:	Y_LUI_OP	;ULOADH_POPS:	Y_ULH_POP	|	Y_ULHU_POP	;LOADC_OPS:	Y_LDC2_OP	|	Y_LWC2_OP	;LOADFP_OPS:	Y_LDC1_OP	|	Y_LWC1_OP	|	Y_L_D_POP { $$.i = Y_LDC1_OP; }	|	Y_L_S_POP { $$.i = Y_LWC1_OP; }	;LOADFP_INDEX_OPS:	Y_LDXC1_OP	|	Y_LUXC1_OP	|	Y_LWXC1_OP	;STORE_OPS:	Y_SB_OP	|	Y_SC_OP	|	Y_SH_OP	|	Y_SW_OP	|	Y_SWL_OP	|	Y_SWR_OP	|	Y_SD_POP	;STOREC_OPS:	Y_SWC2_OP	|	Y_SDC2_OP	|	Y_S_D_POP { $$.i = Y_SDC1_OP; }	|	Y_S_S_POP { $$.i = Y_SWC1_OP; }	;STOREFP_OPS:	Y_SWC1_OP	|	Y_SDC1_OP	;STOREFP_INDEX_OPS:	Y_SDXC1_OP	|	Y_SUXC1_OP	|	Y_SWXC1_OP	;SYS_OPS:	Y_RFE_OP		{#ifdef MIPS1			yywarn ("RFE should only be used when SPIM is compiled as a MIPS-I processor");#endif		}	|	Y_SYSCALL_OP	;PREFETCH_OPS:	Y_PREFX_OP	|	Y_SYNCI_OP	;CACHE_OPS:	Y_CACHE_OP	|	Y_PREF_OP	;TLB_OPS:	Y_TLBP_OP	|	Y_TLBR_OP	|	Y_TLBWI_OP	|	Y_TLBWR_OP	;NULLARY_OPS:	Y_ERET_OP		{#ifdef MIPS1			yywarn ("ERET should only be used when SPIM is compiled as a MIPS32 processor");#endif		}	;NULLARY_OPS_REV2:	Y_DERET_OP	|	Y_EHB_OP	|	Y_SDBBP_OP	;COUNT_LEADING_OPS:	Y_CLO_OP	|	Y_CLZ_OP	;UNARY_OPS_REV2:	Y_DI_OP	|	Y_EI_OP	;/* These binary operations have immediate analogues. */BINARYI_OPS:	Y_ADD_OP	|	Y_ADDU_OP	|	Y_AND_OP	|	Y_XOR_OP	|	Y_OR_OP	|	Y_SLT_OP	|	Y_SLTU_OP	;BINARYIR_OPS:	Y_SLLV_OP	|	Y_SRAV_OP	|	Y_SRLV_OP	;BINARY_ARITHI_OPS:	Y_ADDI_OP	|	Y_ADDIU_OP	|	Y_SLTI_OP	|	Y_SLTIU_OP	;BINARY_LOGICALI_OPS:	Y_ANDI_OP	|	Y_ORI_OP	|	Y_XORI_OP	;SHIFT_OPS:	Y_SLL_OP	|	Y_SRA_OP	|	Y_SRL_OP	;SHIFT_OPS_REV2:	Y_ROTR_OP	;SHIFTV_OPS_REV2:	Y_ROTRV_OP	;/* These binary operations do not have immediate analogues. */BINARY_OPS:	Y_NOR_OP	;BINARY_OPS_REV2:	Y_RDHWR_OP	|	Y_RDPGPR_OP	|	Y_SEB_OP	|	Y_SEH_OP	|	Y_WRPGPR_OP	|	Y_WSBH_OP	;SUB_OPS:	Y_SUB_OP	|	Y_SUBU_OP	;DIV_POPS:	Y_DIV_OP	|	Y_DIVU_OP	|	Y_REM_POP	|	Y_REMU_POP	;MUL_POPS:	Y_MULO_POP	|	Y_MULOU_POP	;SET_LE_POPS:	Y_SLE_POP	|	Y_SLEU_POP	;SET_GT_POPS:	Y_SGT_POP	|	Y_SGTU_POP	;SET_GE_POPS:	Y_SGE_POP	|	Y_SGEU_POP	;SET_EQ_POPS:	Y_SEQ_POP	|	Y_SNE_POP	;MULT_OPS:	Y_MULT_OP	|	Y_MULTU_OP	|	Y_MADD_OP	|	Y_MADDU_OP	|	Y_MSUB_OP	|	Y_MSUBU_OP	;MULT_OPS3: Y_MUL_OP	;BF_OPS_REV2:	Y_EXT_OP	|	Y_INS_OP	;BR_COP_OPS:	Y_BC1F_OP	|	Y_BC1FL_OP	|	Y_BC1T_OP	|	Y_BC1TL_OP	|	Y_BC2F_OP	|	Y_BC2FL_OP	|	Y_BC2T_OP	|	Y_BC2TL_OP	;UNARY_BR_OPS:	Y_BGEZ_OP	|	Y_BGEZL_OP	|	Y_BGEZAL_OP	|	Y_BGEZALL_OP	|	Y_BGTZ_OP	|	Y_BGTZL_OP	|	Y_BLEZ_OP	|	Y_BLEZL_OP	|	Y_BLTZ_OP	|	Y_BLTZL_OP	|	Y_BLTZAL_OP	|	Y_BLTZALL_OP	;UNARY_BR_POPS:	Y_BEQZ_POP	|	Y_BNEZ_POP	;BINARY_BR_OPS:	Y_BEQ_OP	|	Y_BEQL_OP	|	Y_BNE_OP	|	Y_BNEL_OP	;BR_GT_POPS:	Y_BGT_POP	|	Y_BGTU_POPBR_GE_POPS:	Y_BGE_POP	|	Y_BGEU_POPBR_LT_POPS:	Y_BLT_POP	|	Y_BLTU_POPBR_LE_POPS:	Y_BLE_POP	|	Y_BLEU_POP	;J_OPS:	Y_J_OP	|	Y_JR_OP	|	Y_JR_HB_OP { yywarn ("Warning:IPS32 Rev 2 '.HB' extension is not implemented and is ignored"); }	|	Y_JAL_OP	|	Y_JALR_OP	|	Y_JALR_HB_OP { yywarn ("Warning:IPS32 Rev 2 '.HB' extension is not implemented and is ignored"); }	;B_OPS:	Y_B_POP	|	Y_BAL_POP	;UNARY_TRAP_OPS:	Y_TEQI_OP	|	Y_TGEI_OP	|	Y_TGEIU_OP	|	Y_TLTI_OP	|	Y_TLTIU_OP	|	Y_TNEI_OP	;BINARY_TRAP_OPS:	Y_TEQ_OP	|	Y_TGE_OP	|	Y_TGEU_OP	|	Y_TLT_OP	|	Y_TLTU_OP	|	Y_TNE_OP	;MOVE_FROM_HILO_OPS:	Y_MFHI_OP	|	Y_MFLO_OP	;MOVE_TO_HILO_OPS:	Y_MTHI_OP	|	Y_MTLO_OP	;MOVEC_OPS:	Y_MOVN_OP	|	Y_MOVZ_OP	;MOVE_COP_OPS:	Y_MFC0_OP	|	Y_MFC1_OP	|	Y_MFC1_D_POP	|	Y_MFC2_OP	|	Y_MTC0_OP	|	Y_MTC1_OP	|	Y_MTC1_D_POP	|	Y_MTC2_OP	;MOVE_COP_OPS_REV2:	Y_MFHC1_OP	|	Y_MFHC2_OP	|	Y_MTHC1_OP	|	Y_MTHC2_OP	;CTL_COP_OPS:	Y_CFC0_OP	|	Y_CFC1_OP	|	Y_CFC2_OP	|	Y_CTC0_OP	|	Y_CTC1_OP	|	Y_CTC2_OP	;/* Floating point operations */FP_MOVE_OPS:	Y_MOV_S_OP	|	Y_MOV_D_OP	;FP_MOVE_OPS_REV2:	Y_MOV_PS_OP	;MOVEC_OPS:	Y_MOVF_OP	|	Y_MOVT_OP	;FP_MOVEC_OPS:	Y_MOVN_D_OP	|	Y_MOVN_S_OP	|	Y_MOVZ_D_OP	|	Y_MOVZ_S_OP	;FP_MOVEC_OPS_REV2:	Y_MOVN_PS_OP	|	Y_MOVZ_PS_OP	;FP_MOVECC_OPS:	Y_MOVF_D_OP	|	Y_MOVF_S_OP	|	Y_MOVT_D_OP	|	Y_MOVT_S_OP	;FP_MOVECC_OPS_REV2:	Y_MOVF_PS_OP	|	Y_MOVT_PS_OP	;FP_UNARY_OPS:		Y_ABS_S_OP	|	Y_ABS_D_OP	|	Y_CEIL_W_D_OP	|	Y_CEIL_W_S_OP	|	Y_CVT_D_S_OP	|	Y_CVT_D_W_OP	|	Y_CVT_S_D_OP	|	Y_CVT_S_W_OP	|	Y_CVT_W_D_OP	|	Y_CVT_W_S_OP	|	Y_FLOOR_W_D_OP	|	Y_FLOOR_W_S_OP	|	Y_NEG_S_OP	|	Y_NEG_D_OP	|	Y_ROUND_W_D_OP	|	Y_ROUND_W_S_OP	|	Y_SQRT_D_OP	|	Y_SQRT_S_OP	|	Y_TRUNC_W_D_OP	|	Y_TRUNC_W_S_OP	;FP_UNARY_OPS_REV2:	Y_ABS_PS_OP	|	Y_CEIL_L_D_OP	|	Y_CEIL_L_S_OP	|	Y_CVT_D_L_OP	|	Y_CVT_L_D_OP	|	Y_CVT_L_S_OP	|	Y_CVT_PS_S_OP	|	Y_CVT_S_L_OP	|	Y_CVT_S_PL_OP	|	Y_CVT_S_PU_OP	|	Y_FLOOR_L_D_OP	|	Y_FLOOR_L_S_OP	|	Y_NEG_PS_OP	|	Y_RECIP_D_OP	|	Y_RECIP_S_OP	|	Y_ROUND_L_D_OP	|	Y_ROUND_L_S_OP	|	Y_RSQRT_D_OP	|	Y_RSQRT_S_OP	|	Y_TRUNC_L_D_OP	|	Y_TRUNC_L_S_OP	;FP_BINARY_OPS:	Y_ADD_S_OP	|	Y_ADD_D_OP	|	Y_DIV_S_OP	|	Y_DIV_D_OP	|	Y_MUL_S_OP	|	Y_MUL_D_OP	|	Y_SUB_S_OP	|	Y_SUB_D_OP	;FP_BINARY_OPS_REV2:	Y_ADD_PS_OP	|	Y_MUL_PS_OP	|	Y_PLL_PS_OP	|	Y_PLU_PS_OP	|	Y_PUL_PS_OP	|	Y_PUU_PS_OP	;FP_TERNARY_OPS_REV2:	Y_ALNV_PS_OP	|	Y_MADD_D_OP	|	Y_MADD_PS_OP	|	Y_MADD_S_OP	|	Y_MSUB_D_OP	|	Y_MSUB_PS_OP	|	Y_MSUB_S_OP	|	Y_NMADD_D_OP	|	Y_NMADD_PS_OP	|	Y_NMADD_S_OP	|	Y_NMSUB_D_OP	|	Y_NMSUB_PS_OP	|	Y_NMSUB_S_OP	;FP_CMP_OPS:	Y_C_F_S_OP	|	Y_C_UN_S_OP	|	Y_C_EQ_S_OP	|	Y_C_UEQ_S_OP	|	Y_C_OLT_S_OP	|	Y_C_OLE_S_OP	|	Y_C_ULT_S_OP	|	Y_C_ULE_S_OP	|	Y_C_SF_S_OP	|	Y_C_NGLE_S_OP	|	Y_C_SEQ_S_OP	|	Y_C_NGL_S_OP	|	Y_C_LT_S_OP	|	Y_C_NGE_S_OP	|	Y_C_LE_S_OP	|	Y_C_NGT_S_OP	|	Y_C_F_D_OP	|	Y_C_UN_D_OP	|	Y_C_EQ_D_OP	|	Y_C_UEQ_D_OP	|	Y_C_OLT_D_OP	|	Y_C_OLE_D_OP	|	Y_C_ULT_D_OP	|	Y_C_ULE_D_OP	|	Y_C_SF_D_OP	|	Y_C_NGLE_D_OP	|	Y_C_SEQ_D_OP	|	Y_C_NGL_D_OP	|	Y_C_LT_D_OP	|	Y_C_NGE_D_OP	|	Y_C_LE_D_OP	|	Y_C_NGT_D_OP	;FP_CMP_OPS_REV2:	Y_C_EQ_PS_OP	|	Y_C_F_PS_OP	|	Y_C_LT_PS_OP	|	Y_C_LE_PS_OP	|	Y_C_NGE_PS_OP	|	Y_C_NGL_PS_OP	|	Y_C_NGLE_PS_OP	|	Y_C_NGT_PS_OP	|	Y_C_OLE_PS_OP	|	Y_C_OLT_PS_OP	|	Y_C_SEQ_PS_OP	|	Y_C_SF_PS_OP	|	Y_C_UEQ_PS_OP	|	Y_C_ULE_PS_OP	|	Y_C_ULT_PS_OP	|	Y_C_UN_PS_OP	;ASM_DIRECTIVE:	Y_ALIAS_DIR	Y_REG	Y_REG	|	Y_ALIGN_DIR	EXPR		{		  align_data ($2.i);		}	|	Y_ASCII_DIR {null_term = 0;}	STR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_ASCIIZ_DIR {null_term = 1;}	STR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_ASM0_DIR	|	Y_BGNB_DIR	Y_INT	|	Y_BYTE_DIR		{store_op = store_byte;}		EXPR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_COMM_DIR	ID	EXPR		{		  align_data (2);		  if (lookup_label ((char*)$2.p)->addr == 0)		  {		    (void)record_label ((char*)$2.p, current_data_pc (), 1);		    free ((char*)$2.p);		  }		  increment_data_pc ($3.i);		}	|	Y_DATA_DIR		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		}	|	Y_DATA_DIR	Y_INT		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		  set_data_pc ($2.i);		}	|	Y_K_DATA_DIR		{		  user_kernel_data_segment (1);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		}	|	Y_K_DATA_DIR	Y_INT		{		  user_kernel_data_segment (1);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		  set_data_pc ($2.i);		}	|	Y_DOUBLE_DIR		{		  store_op = store_double;		  if (data_dir) set_data_alignment (3);		}		FP_EXPR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_END_DIR	OPTIONAL_ID	|	Y_ENDB_DIR	Y_INT	|	Y_ENDR_DIR	|	Y_ENT_DIR	ID	|	Y_ENT_DIR	ID	Y_INT	|	Y_EXTERN_DIR	ID	EXPR		{		  extern_directive ((char*)$2.p, $3.i);		}	|	Y_ERR_DIR		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -