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

📄 translate.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
GEN_HANDLER(name, opc1, opc2, opc3, 0x0000F800, type)                         \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    gen_op_##name();                                                          \    gen_op_store_T0_gpr(rD(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}/* Two operands arithmetic functions */#define GEN_INT_ARITH2(name, opc1, opc2, opc3, type)                          \__GEN_INT_ARITH2(name, opc1, opc2, opc3, 0x00000000, type)                    \__GEN_INT_ARITH2_O(name##o, opc1, opc2, opc3 | 0x10, 0x00000000, type)/* Two operands arithmetic functions with no overflow allowed */#define GEN_INT_ARITHN(name, opc1, opc2, opc3, type)                          \__GEN_INT_ARITH2(name, opc1, opc2, opc3, 0x00000400, type)/* One operand arithmetic functions */#define GEN_INT_ARITH1(name, opc1, opc2, opc3, type)                          \__GEN_INT_ARITH1(name, opc1, opc2, opc3, type)                                \__GEN_INT_ARITH1_O(name##o, opc1, opc2, opc3 | 0x10, type)#if defined(TARGET_PPC64)#define __GEN_INT_ARITH2_64(name, opc1, opc2, opc3, inval, type)              \GEN_HANDLER(name, opc1, opc2, opc3, inval, type)                              \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    gen_op_load_gpr_T1(rB(ctx->opcode));                                      \    if (ctx->sf_mode)                                                         \        gen_op_##name##_64();                                                 \    else                                                                      \        gen_op_##name();                                                      \    gen_op_store_T0_gpr(rD(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}#define __GEN_INT_ARITH2_O_64(name, opc1, opc2, opc3, inval, type)            \GEN_HANDLER(name, opc1, opc2, opc3, inval, type)                              \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    gen_op_load_gpr_T1(rB(ctx->opcode));                                      \    if (ctx->sf_mode)                                                         \        gen_op_##name##_64();                                                 \    else                                                                      \        gen_op_##name();                                                      \    gen_op_store_T0_gpr(rD(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}#define __GEN_INT_ARITH1_64(name, opc1, opc2, opc3, type)                     \GEN_HANDLER(name, opc1, opc2, opc3, 0x0000F800, type)                         \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    if (ctx->sf_mode)                                                         \        gen_op_##name##_64();                                                 \    else                                                                      \        gen_op_##name();                                                      \    gen_op_store_T0_gpr(rD(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}#define __GEN_INT_ARITH1_O_64(name, opc1, opc2, opc3, type)                   \GEN_HANDLER(name, opc1, opc2, opc3, 0x0000F800, type)                         \{                                                                             \    gen_op_load_gpr_T0(rA(ctx->opcode));                                      \    if (ctx->sf_mode)                                                         \        gen_op_##name##_64();                                                 \    else                                                                      \        gen_op_##name();                                                      \    gen_op_store_T0_gpr(rD(ctx->opcode));                                     \    if (unlikely(Rc(ctx->opcode) != 0))                                       \        gen_set_Rc0(ctx);                                                     \}/* Two operands arithmetic functions */#define GEN_INT_ARITH2_64(name, opc1, opc2, opc3, type)                       \__GEN_INT_ARITH2_64(name, opc1, opc2, opc3, 0x00000000, type)                 \__GEN_INT_ARITH2_O_64(name##o, opc1, opc2, opc3 | 0x10, 0x00000000, type)/* Two operands arithmetic functions with no overflow allowed */#define GEN_INT_ARITHN_64(name, opc1, opc2, opc3, type)                       \__GEN_INT_ARITH2_64(name, opc1, opc2, opc3, 0x00000400, type)/* One operand arithmetic functions */#define GEN_INT_ARITH1_64(name, opc1, opc2, opc3, type)                       \__GEN_INT_ARITH1_64(name, opc1, opc2, opc3, type)                             \__GEN_INT_ARITH1_O_64(name##o, opc1, opc2, opc3 | 0x10, type)#else#define GEN_INT_ARITH2_64 GEN_INT_ARITH2#define GEN_INT_ARITHN_64 GEN_INT_ARITHN#define GEN_INT_ARITH1_64 GEN_INT_ARITH1#endif/* add    add.    addo    addo.    */static always_inline void gen_op_addo (void){    gen_op_move_T2_T0();    gen_op_add();    gen_op_check_addo();}#if defined(TARGET_PPC64)#define gen_op_add_64 gen_op_addstatic always_inline void gen_op_addo_64 (void){    gen_op_move_T2_T0();    gen_op_add();    gen_op_check_addo_64();}#endifGEN_INT_ARITH2_64 (add,    0x1F, 0x0A, 0x08, PPC_INTEGER);/* addc   addc.   addco   addco.   */static always_inline void gen_op_addc (void){    gen_op_move_T2_T0();    gen_op_add();    gen_op_check_addc();}static always_inline void gen_op_addco (void){    gen_op_move_T2_T0();    gen_op_add();    gen_op_check_addc();    gen_op_check_addo();}#if defined(TARGET_PPC64)static always_inline void gen_op_addc_64 (void){    gen_op_move_T2_T0();    gen_op_add();    gen_op_check_addc_64();}static always_inline void gen_op_addco_64 (void){    gen_op_move_T2_T0();    gen_op_add();    gen_op_check_addc_64();    gen_op_check_addo_64();}#endifGEN_INT_ARITH2_64 (addc,   0x1F, 0x0A, 0x00, PPC_INTEGER);/* adde   adde.   addeo   addeo.   */static always_inline void gen_op_addeo (void){    gen_op_move_T2_T0();    gen_op_adde();    gen_op_check_addo();}#if defined(TARGET_PPC64)static always_inline void gen_op_addeo_64 (void){    gen_op_move_T2_T0();    gen_op_adde_64();    gen_op_check_addo_64();}#endifGEN_INT_ARITH2_64 (adde,   0x1F, 0x0A, 0x04, PPC_INTEGER);/* addme  addme.  addmeo  addmeo.  */static always_inline void gen_op_addme (void){    gen_op_move_T1_T0();    gen_op_add_me();}#if defined(TARGET_PPC64)static always_inline void gen_op_addme_64 (void){    gen_op_move_T1_T0();    gen_op_add_me_64();}#endifGEN_INT_ARITH1_64 (addme,  0x1F, 0x0A, 0x07, PPC_INTEGER);/* addze  addze.  addzeo  addzeo.  */static always_inline void gen_op_addze (void){    gen_op_move_T2_T0();    gen_op_add_ze();    gen_op_check_addc();}static always_inline void gen_op_addzeo (void){    gen_op_move_T2_T0();    gen_op_add_ze();    gen_op_check_addc();    gen_op_check_addo();}#if defined(TARGET_PPC64)static always_inline void gen_op_addze_64 (void){    gen_op_move_T2_T0();    gen_op_add_ze();    gen_op_check_addc_64();}static always_inline void gen_op_addzeo_64 (void){    gen_op_move_T2_T0();    gen_op_add_ze();    gen_op_check_addc_64();    gen_op_check_addo_64();}#endifGEN_INT_ARITH1_64 (addze,  0x1F, 0x0A, 0x06, PPC_INTEGER);/* divw   divw.   divwo   divwo.   */GEN_INT_ARITH2 (divw,   0x1F, 0x0B, 0x0F, PPC_INTEGER);/* divwu  divwu.  divwuo  divwuo.  */GEN_INT_ARITH2 (divwu,  0x1F, 0x0B, 0x0E, PPC_INTEGER);/* mulhw  mulhw.                   */GEN_INT_ARITHN (mulhw,  0x1F, 0x0B, 0x02, PPC_INTEGER);/* mulhwu mulhwu.                  */GEN_INT_ARITHN (mulhwu, 0x1F, 0x0B, 0x00, PPC_INTEGER);/* mullw  mullw.  mullwo  mullwo.  */GEN_INT_ARITH2 (mullw,  0x1F, 0x0B, 0x07, PPC_INTEGER);/* neg    neg.    nego    nego.    */GEN_INT_ARITH1_64 (neg,    0x1F, 0x08, 0x03, PPC_INTEGER);/* subf   subf.   subfo   subfo.   */static always_inline void gen_op_subfo (void){    gen_op_moven_T2_T0();    gen_op_subf();    gen_op_check_addo();}#if defined(TARGET_PPC64)#define gen_op_subf_64 gen_op_subfstatic always_inline void gen_op_subfo_64 (void){    gen_op_moven_T2_T0();    gen_op_subf();    gen_op_check_addo_64();}#endifGEN_INT_ARITH2_64 (subf,   0x1F, 0x08, 0x01, PPC_INTEGER);/* subfc  subfc.  subfco  subfco.  */static always_inline void gen_op_subfc (void){    gen_op_subf();    gen_op_check_subfc();}static always_inline void gen_op_subfco (void){    gen_op_moven_T2_T0();    gen_op_subf();    gen_op_check_subfc();    gen_op_check_addo();}#if defined(TARGET_PPC64)static always_inline void gen_op_subfc_64 (void){    gen_op_subf();    gen_op_check_subfc_64();}static always_inline void gen_op_subfco_64 (void){    gen_op_moven_T2_T0();    gen_op_subf();    gen_op_check_subfc_64();    gen_op_check_addo_64();}#endifGEN_INT_ARITH2_64 (subfc,  0x1F, 0x08, 0x00, PPC_INTEGER);/* subfe  subfe.  subfeo  subfeo.  */static always_inline void gen_op_subfeo (void){    gen_op_moven_T2_T0();    gen_op_subfe();    gen_op_check_addo();}#if defined(TARGET_PPC64)#define gen_op_subfe_64 gen_op_subfestatic always_inline void gen_op_subfeo_64 (void){    gen_op_moven_T2_T0();    gen_op_subfe_64();    gen_op_check_addo_64();}#endifGEN_INT_ARITH2_64 (subfe,  0x1F, 0x08, 0x04, PPC_INTEGER);/* subfme subfme. subfmeo subfmeo. */GEN_INT_ARITH1_64 (subfme, 0x1F, 0x08, 0x07, PPC_INTEGER);/* subfze subfze. subfzeo subfzeo. */GEN_INT_ARITH1_64 (subfze, 0x1F, 0x08, 0x06, PPC_INTEGER);/* addi */GEN_HANDLER(addi, 0x0E, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_long simm = SIMM(ctx->opcode);    if (rA(ctx->opcode) == 0) {        /* li case */        gen_set_T0(simm);    } else {        gen_op_load_gpr_T0(rA(ctx->opcode));        if (likely(simm != 0))            gen_op_addi(simm);    }    gen_op_store_T0_gpr(rD(ctx->opcode));}/* addic */GEN_HANDLER(addic, 0x0C, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_long simm = SIMM(ctx->opcode);    gen_op_load_gpr_T0(rA(ctx->opcode));    if (likely(simm != 0)) {        gen_op_move_T2_T0();        gen_op_addi(simm);#if defined(TARGET_PPC64)        if (ctx->sf_mode)            gen_op_check_addc_64();        else#endif            gen_op_check_addc();    } else {        gen_op_clear_xer_ca();    }    gen_op_store_T0_gpr(rD(ctx->opcode));}/* addic. */GEN_HANDLER2(addic_, "addic.", 0x0D, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_long simm = SIMM(ctx->opcode);    gen_op_load_gpr_T0(rA(ctx->opcode));    if (likely(simm != 0)) {        gen_op_move_T2_T0();        gen_op_addi(simm);#if defined(TARGET_PPC64)        if (ctx->sf_mode)            gen_op_check_addc_64();        else#endif            gen_op_check_addc();    } else {        gen_op_clear_xer_ca();    }    gen_op_store_T0_gpr(rD(ctx->opcode));    gen_set_Rc0(ctx);}/* addis */GEN_HANDLER(addis, 0x0F, 0xFF, 0xFF, 0x00000000, PPC_INTEGER){    target_long simm = SIMM(ctx->opcode);    if (rA(ctx->opcode) == 0) {        /* lis case */        gen_set_T0(simm << 16);    } else {        gen_op_load_gpr_T0(rA(ctx->opcode));        if (likely(simm != 0))            gen_op_addi(simm << 16);    }

⌨️ 快捷键说明

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