?? op.c
字號:
#if defined(TARGET_PPC64)void OPPROTO op_check_addo_64 (void){ xer_ov = (((uint64_t)T2 ^ (uint64_t)T1 ^ UINT64_MAX) & ((uint64_t)T2 ^ (uint64_t)T0)) >> 63; xer_so |= xer_ov; RETURN();}#endif/* add carrying */void OPPROTO op_check_addc (void){ if (likely((uint32_t)T0 >= (uint32_t)T2)) { xer_ca = 0; } else { xer_ca = 1; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_check_addc_64 (void){ if (likely((uint64_t)T0 >= (uint64_t)T2)) { xer_ca = 0; } else { xer_ca = 1; } RETURN();}#endif/* add extended */void OPPROTO op_adde (void){ do_adde(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_adde_64 (void){ do_adde_64(); RETURN();}#endif/* add immediate */void OPPROTO op_addi (void){ T0 += (int32_t)PARAM1; RETURN();}/* add to minus one extended */void OPPROTO op_add_me (void){ T0 += xer_ca + (-1); if (likely((uint32_t)T1 != 0)) xer_ca = 1; else xer_ca = 0; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_add_me_64 (void){ T0 += xer_ca + (-1); if (likely((uint64_t)T1 != 0)) xer_ca = 1; else xer_ca = 0; RETURN();}#endifvoid OPPROTO op_addmeo (void){ do_addmeo(); RETURN();}void OPPROTO op_addmeo_64 (void){ do_addmeo(); RETURN();}/* add to zero extended */void OPPROTO op_add_ze (void){ T0 += xer_ca; RETURN();}/* divide word */void OPPROTO op_divw (void){ if (unlikely(((int32_t)T0 == INT32_MIN && (int32_t)T1 == (int32_t)-1) || (int32_t)T1 == 0)) { T0 = (int32_t)(UINT32_MAX * ((uint32_t)T0 >> 31)); } else { T0 = (int32_t)T0 / (int32_t)T1; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_divd (void){ if (unlikely(((int64_t)T0 == INT64_MIN && (int64_t)T1 == (int64_t)-1LL) || (int64_t)T1 == 0)) { T0 = (int64_t)(UINT64_MAX * ((uint64_t)T0 >> 63)); } else { T0 = (int64_t)T0 / (int64_t)T1; } RETURN();}#endifvoid OPPROTO op_divwo (void){ do_divwo(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_divdo (void){ do_divdo(); RETURN();}#endif/* divide word unsigned */void OPPROTO op_divwu (void){ if (unlikely(T1 == 0)) { T0 = 0; } else { T0 = (uint32_t)T0 / (uint32_t)T1; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_divdu (void){ if (unlikely(T1 == 0)) { T0 = 0; } else { T0 /= T1; } RETURN();}#endifvoid OPPROTO op_divwuo (void){ do_divwuo(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_divduo (void){ do_divduo(); RETURN();}#endif/* multiply high word */void OPPROTO op_mulhw (void){ T0 = ((int64_t)((int32_t)T0) * (int64_t)((int32_t)T1)) >> 32; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_mulhd (void){ uint64_t tl, th; muls64(&tl, &th, T0, T1); T0 = th; RETURN();}#endif/* multiply high word unsigned */void OPPROTO op_mulhwu (void){ T0 = ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1) >> 32; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_mulhdu (void){ uint64_t tl, th; mulu64(&tl, &th, T0, T1); T0 = th; RETURN();}#endif/* multiply low immediate */void OPPROTO op_mulli (void){ T0 = ((int32_t)T0 * (int32_t)PARAM1); RETURN();}/* multiply low word */void OPPROTO op_mullw (void){ T0 = (int32_t)(T0 * T1); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_mulld (void){ T0 *= T1; RETURN();}#endifvoid OPPROTO op_mullwo (void){ do_mullwo(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_mulldo (void){ do_mulldo(); RETURN();}#endif/* negate */void OPPROTO op_neg (void){ if (likely(T0 != INT32_MIN)) { T0 = -(int32_t)T0; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_neg_64 (void){ if (likely(T0 != INT64_MIN)) { T0 = -(int64_t)T0; } RETURN();}#endifvoid OPPROTO op_nego (void){ do_nego(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_nego_64 (void){ do_nego_64(); RETURN();}#endif/* subtract from */void OPPROTO op_subf (void){ T0 = T1 - T0; RETURN();}/* subtract from carrying */void OPPROTO op_check_subfc (void){ if (likely((uint32_t)T0 > (uint32_t)T1)) { xer_ca = 0; } else { xer_ca = 1; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_check_subfc_64 (void){ if (likely((uint64_t)T0 > (uint64_t)T1)) { xer_ca = 0; } else { xer_ca = 1; } RETURN();}#endif/* subtract from extended */void OPPROTO op_subfe (void){ do_subfe(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_subfe_64 (void){ do_subfe_64(); RETURN();}#endif/* subtract from immediate carrying */void OPPROTO op_subfic (void){ T0 = (int32_t)PARAM1 + ~T0 + 1; if ((uint32_t)T0 <= (uint32_t)PARAM1) { xer_ca = 1; } else { xer_ca = 0; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_subfic_64 (void){ T0 = (int64_t)PARAM1 + ~T0 + 1; if ((uint64_t)T0 <= (uint64_t)PARAM1) { xer_ca = 1; } else { xer_ca = 0; } RETURN();}#endif/* subtract from minus one extended */void OPPROTO op_subfme (void){ T0 = ~T0 + xer_ca - 1; if (likely((uint32_t)T0 != UINT32_MAX)) xer_ca = 1; else xer_ca = 0; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_subfme_64 (void){ T0 = ~T0 + xer_ca - 1; if (likely((uint64_t)T0 != UINT64_MAX)) xer_ca = 1; else xer_ca = 0; RETURN();}#endifvoid OPPROTO op_subfmeo (void){ do_subfmeo(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_subfmeo_64 (void){ do_subfmeo_64(); RETURN();}#endif/* subtract from zero extended */void OPPROTO op_subfze (void){ T1 = ~T0; T0 = T1 + xer_ca; if ((uint32_t)T0 < (uint32_t)T1) { xer_ca = 1; } else { xer_ca = 0; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_subfze_64 (void){ T1 = ~T0; T0 = T1 + xer_ca; if ((uint64_t)T0 < (uint64_t)T1) { xer_ca = 1; } else { xer_ca = 0; } RETURN();}#endifvoid OPPROTO op_subfzeo (void){ do_subfzeo(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_subfzeo_64 (void){ do_subfzeo_64(); RETURN();}#endif/*** Integer comparison ***//* compare */void OPPROTO op_cmp (void){ if ((int32_t)T0 < (int32_t)T1) { T0 = 0x08; } else if ((int32_t)T0 > (int32_t)T1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_cmp_64 (void){ if ((int64_t)T0 < (int64_t)T1) { T0 = 0x08; } else if ((int64_t)T0 > (int64_t)T1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#endif/* compare immediate */void OPPROTO op_cmpi (void){ if ((int32_t)T0 < (int32_t)PARAM1) { T0 = 0x08; } else if ((int32_t)T0 > (int32_t)PARAM1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_cmpi_64 (void){ if ((int64_t)T0 < (int64_t)((int32_t)PARAM1)) { T0 = 0x08; } else if ((int64_t)T0 > (int64_t)((int32_t)PARAM1)) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#endif/* compare logical */void OPPROTO op_cmpl (void){ if ((uint32_t)T0 < (uint32_t)T1) { T0 = 0x08; } else if ((uint32_t)T0 > (uint32_t)T1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_cmpl_64 (void){ if ((uint64_t)T0 < (uint64_t)T1) { T0 = 0x08; } else if ((uint64_t)T0 > (uint64_t)T1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#endif/* compare logical immediate */void OPPROTO op_cmpli (void){ if ((uint32_t)T0 < (uint32_t)PARAM1) { T0 = 0x08; } else if ((uint32_t)T0 > (uint32_t)PARAM1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_cmpli_64 (void){ if ((uint64_t)T0 < (uint64_t)PARAM1) { T0 = 0x08; } else if ((uint64_t)T0 > (uint64_t)PARAM1) { T0 = 0x04; } else { T0 = 0x02; } T0 |= xer_so; RETURN();}#endifvoid OPPROTO op_isel (void){ if (T0) T0 = T1; else T0 = T2; RETURN();}void OPPROTO op_popcntb (void){ do_popcntb(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_popcntb_64 (void){ do_popcntb_64(); RETURN();}#endif/*** Integer logical ***//* and */void OPPROTO op_and (void){ T0 &= T1; RETURN();}/* andc */void OPPROTO op_andc (void){ T0 &= ~T1; RETURN();}/* andi. */void OPPROTO op_andi_T0 (void){ T0 &= (uint32_t)PARAM1; RETURN();}void OPPROTO op_andi_T1 (void){ T1 &= (uint32_t)PARAM1; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_andi_T0_64 (void){ T0 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2; RETURN();}void OPPROTO op_andi_T1_64 (void){ T1 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2; RETURN();}#endif/* count leading zero */void OPPROTO op_cntlzw (void){ do_cntlzw(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_cntlzd (void){ do_cntlzd(); RETURN();}#endif/* eqv */void OPPROTO op_eqv (void){ T0 = ~(T0 ^ T1); RETURN();}/* extend sign byte */void OPPROTO op_extsb (void){#if defined (TARGET_PPC64) T0 = (int64_t)((int8_t)T0);#else T0 = (int32_t)((int8_t)T0);#endif RETURN();}/* extend sign half word */void OPPROTO op_extsh (void){#if defined (TARGET_PPC64) T0 = (int64_t)((int16_t)T0);#else T0 = (int32_t)((int16_t)T0);#endif RETURN();}#if defined (TARGET_PPC64)void OPPROTO op_extsw (void){ T0 = (int64_t)((int32_t)T0); RETURN();}#endif/* nand */void OPPROTO op_nand (void){ T0 = ~(T0 & T1); RETURN();}/* nor */void OPPROTO op_nor (void){ T0 = ~(T0 | T1); RETURN();}/* or */void OPPROTO op_or (void){ T0 |= T1; RETURN();}/* orc */void OPPROTO op_orc (void){ T0 |= ~T1; RETURN();}/* ori */void OPPROTO op_ori (void){ T0 |= (uint32_t)PARAM1; RETURN();}/* xor */void OPPROTO op_xor (void){ T0 ^= T1; RETURN();}/* xori */void OPPROTO op_xori (void){ T0 ^= (uint32_t)PARAM1; RETURN();}/*** Integer rotate ***/void OPPROTO op_rotl32_T0_T1 (void){ T0 = rotl32(T0, T1 & 0x1F); RETURN();}void OPPROTO op_rotli32_T0 (void){ T0 = rotl32(T0, PARAM1); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_rotl64_T0_T1 (void){ T0 = rotl64(T0, T1 & 0x3F); RETURN();}void OPPROTO op_rotli64_T0 (void){ T0 = rotl64(T0, PARAM1); RETURN();}#endif/*** Integer shift ***//* shift left word */void OPPROTO op_slw (void){ if (T1 & 0x20) { T0 = 0; } else { T0 = (uint32_t)(T0 << T1); } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_sld (void){ if (T1 & 0x40) { T0 = 0; } else { T0 = T0 << T1; } RETURN();}#endif/* shift right algebraic word */void OPPROTO op_sraw (void){ do_sraw(); RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_srad (void){ do_srad(); RETURN();}#endif/* shift right algebraic word immediate */void OPPROTO op_srawi (void){ uint32_t mask = (uint32_t)PARAM2; T0 = (int32_t)T0 >> PARAM1; if ((int32_t)T1 < 0 && (T1 & mask) != 0) { xer_ca = 1; } else { xer_ca = 0; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_sradi (void){ uint64_t mask = ((uint64_t)PARAM2 << 32) | (uint64_t)PARAM3; T0 = (int64_t)T0 >> PARAM1; if ((int64_t)T1 < 0 && ((uint64_t)T1 & mask) != 0) { xer_ca = 1; } else { xer_ca = 0; } RETURN();}#endif/* shift right word */void OPPROTO op_srw (void){ if (T1 & 0x20) { T0 = 0; } else { T0 = (uint32_t)T0 >> T1; } RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_srd (void){ if (T1 & 0x40) { T0 = 0; } else { T0 = (uint64_t)T0 >> T1; } RETURN();}#endifvoid OPPROTO op_sl_T0_T1 (void){ T0 = T0 << T1; RETURN();}void OPPROTO op_sli_T0 (void){ T0 = T0 << PARAM1; RETURN();}void OPPROTO op_sli_T1 (void){ T1 = T1 << PARAM1; RETURN();}void OPPROTO op_srl_T0_T1 (void){ T0 = (uint32_t)T0 >> T1; RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_srl_T0_T1_64 (void){ T0 = (uint32_t)T0 >> T1; RETURN();}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -