Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void ppc_toggle_fpscr_fex(){
- bool fex_result = ((ppc_state.ppc_fpscr & 0x20000000) & (ppc_state.ppc_fpscr & 0x80));
- fex_result |= ((ppc_state.ppc_fpscr & 0x10000000) & (ppc_state.ppc_fpscr & 0x40));
- fex_result |= ((ppc_state.ppc_fpscr & 0x8000000) & (ppc_state.ppc_fpscr & 0x20));
- fex_result |= ((ppc_state.ppc_fpscr & 0x4000000) & (ppc_state.ppc_fpscr & 0x10));
- fex_result |= ((ppc_state.ppc_fpscr & 0x2000000) & (ppc_state.ppc_fpscr & 0x8));
- ppc_state.ppc_fpscr |= (fex_result << 30);
- }
- bool ppc_confirm_inf_nan(uint32_t chosen_reg_1, uint32_t chosen_reg_2, bool is_single, uint32_t op){
- uint64_t input_a = ppc_state.ppc_fpr[chosen_reg_1].int64_r;
- uint64_t input_b = ppc_state.ppc_fpr[chosen_reg_2].int64_r;
- }
- void ppc_grab_regsfpsab(bool int_rep) {
- reg_s = (ppc_cur_instruction >> 21) & 31;
- reg_a = (ppc_cur_instruction >> 16) & 31;
- reg_b = (ppc_cur_instruction >> 11) & 31;
- if (int_rep) {
- ppc_result64_d = ppc_state.ppc_fpr[reg_s].int64_r;
- ppc_result64_a = ppc_state.ppc_fpr[reg_a].int64_r;
- ppc_result64_b = ppc_state.ppc_fpr[reg_b].int64_r;
- }
- else {
- ppc_dblresult64_d = fp_return_double(reg_s);
- ppc_dblresult64_a = fp_return_double(reg_a);
- ppc_dblresult64_c = fp_return_double(reg_c);
- }
- }
- void ppc_fadd() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 58)) {
- ppc_dblresult64_d = ppc_dblresult64_a + ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- }
- void ppc_fadddot() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 58)) {
- ppc_dblresult64_d = ppc_dblresult64_a + ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- ppc_changecrf1();
- }
- void ppc_fsub() {
- ppc_grab_regsfpdab(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 56)) {
- ppc_dblresult64_d = ppc_dblresult64_a - ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- }
- void ppc_fsubdot() {
- ppc_grab_regsfpdab(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 56)) {
- ppc_dblresult64_d = ppc_dblresult64_a - ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- ppc_changecrf1();
- }
- void ppc_fdiv() {
- ppc_grab_regsfpdab(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 36)) {
- ppc_dblresult64_d = ppc_dblresult64_a / ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- }
- void ppc_fdivdot() {
- ppc_grab_regsfpdab(false);
- if (!ppc_confirm_inf_nan(ppc_result64_a, ppc_result64_b, false, 36)) {
- ppc_dblresult64_d = ppc_dblresult64_a / ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- ppc_changecrf1();
- }
- void ppc_fmult() {
- ppc_grab_regsfpdac(false);
- if (!ppc_confirm_inf_nan(ppc_result64_a, ppc_result64_b, false, 50)) {
- ppc_dblresult64_d = ppc_dblresult64_a * ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- }
- void ppc_fmultdot() {
- ppc_grab_regsfpdac(false);
- if (!ppc_confirm_inf_nan(ppc_result64_a, ppc_result64_b, false, 50)) {
- ppc_dblresult64_d = ppc_dblresult64_a * ppc_dblresult64_b;
- ppc_store_dfpresult(false);
- }
- ppc_changecrf1();
- }
- void ppc_fmadd() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 58)) {
- ppc_dblresult64_d += ppc_dblresult64_b;
- }
- }
- ppc_store_dfpresult(false);
- }
- void ppc_fmadddot() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 58)) {
- ppc_dblresult64_d += ppc_dblresult64_b;
- }
- }
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fmsub() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- ppc_dblresult64_d -= ppc_dblresult64_b;
- }
- }
- ppc_store_dfpresult(false);
- }
- void ppc_fmsubdot() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- ppc_dblresult64_d -= ppc_dblresult64_b;
- }
- }
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fnmadd() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 58)) {
- ppc_dblresult64_d += ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = -ppc_dblresult64_d;
- ppc_store_dfpresult(false);
- }
- void ppc_fnmadddot() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_a, reg_b, false, 58)) {
- ppc_dblresult64_d += ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = -ppc_dblresult64_d;
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fnmsub() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- ppc_dblresult64_d -= ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = -ppc_dblresult64_d;
- ppc_store_dfpresult(false);
- }
- void ppc_fnmsubdot() {
- ppc_grab_regsfpdabc(false);
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- ppc_dblresult64_d = (ppc_dblresult64_a * ppc_dblresult64_c);
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- ppc_dblresult64_d -= ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = -ppc_dblresult64_d;
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fmadds() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate += (float)ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- }
- void ppc_fmaddsdot() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate += (float)ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fmsubs() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- intermediate -= (float)ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- }
- void ppc_fmsubsdot() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- intermediate -= (float)ppc_dblresult64_b;
- }
- }
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fnmadds() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate += (float)ppc_dblresult64_b;
- }
- }
- intermediate = -intermediate;
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- }
- void ppc_fnmaddsdot() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_a, reg_b, true, 58)) {
- intermediate += (float)ppc_dblresult64_b;
- }
- }
- intermediate = -intermediate;
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
- void ppc_fnmsubs() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- intermediate -= (float)ppc_dblresult64_b;
- }
- }
- intermediate = -intermediate;
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- }
- void ppc_fnmsubsdot() {
- ppc_grab_regsfpdabc(false);
- float intermediate;
- if (!ppc_confirm_inf_nan(reg_a, reg_c, false, 50)) {
- intermediate = (float)ppc_dblresult64_a * (float)ppc_dblresult64_c;
- if (!ppc_confirm_inf_nan(reg_d, reg_b, false, 56)) {
- intermediate -= (float)ppc_dblresult64_b;
- }
- }
- intermediate = -intermediate;
- ppc_dblresult64_d = static_cast<double>(intermediate);
- ppc_store_dfpresult(false);
- ppc_changecrf1();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement