|
|
1.1 ! root 1: /* ! 2: * PowerPC emulation micro-operations for qemu. ! 3: * ! 4: * Copyright (c) 2003-2005 Jocelyn Mayer ! 5: * ! 6: * This library is free software; you can redistribute it and/or ! 7: * modify it under the terms of the GNU Lesser General Public ! 8: * License as published by the Free Software Foundation; either ! 9: * version 2 of the License, or (at your option) any later version. ! 10: * ! 11: * This library is distributed in the hope that it will be useful, ! 12: * but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 14: * Lesser General Public License for more details. ! 15: * ! 16: * You should have received a copy of the GNU Lesser General Public ! 17: * License along with this library; if not, write to the Free Software ! 18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! 19: */ ! 20: ! 21: /* General purpose registers moves */ ! 22: void OPPROTO glue(op_load_gpr_T0_gpr, REG)(void) ! 23: { ! 24: T0 = regs->gpr[REG]; ! 25: RETURN(); ! 26: } ! 27: ! 28: void OPPROTO glue(op_load_gpr_T1_gpr, REG)(void) ! 29: { ! 30: T1 = regs->gpr[REG]; ! 31: RETURN(); ! 32: } ! 33: ! 34: void OPPROTO glue(op_load_gpr_T2_gpr, REG)(void) ! 35: { ! 36: T2 = regs->gpr[REG]; ! 37: RETURN(); ! 38: } ! 39: ! 40: void OPPROTO glue(op_store_T0_gpr_gpr, REG)(void) ! 41: { ! 42: regs->gpr[REG] = T0; ! 43: RETURN(); ! 44: } ! 45: ! 46: void OPPROTO glue(op_store_T1_gpr_gpr, REG)(void) ! 47: { ! 48: regs->gpr[REG] = T1; ! 49: RETURN(); ! 50: } ! 51: ! 52: void OPPROTO glue(op_store_T2_gpr_gpr, REG)(void) ! 53: { ! 54: regs->gpr[REG] = T2; ! 55: RETURN(); ! 56: } ! 57: ! 58: #if REG <= 7 ! 59: /* Condition register moves */ ! 60: void OPPROTO glue(op_load_crf_T0_crf, REG)(void) ! 61: { ! 62: T0 = regs->crf[REG]; ! 63: RETURN(); ! 64: } ! 65: ! 66: void OPPROTO glue(op_load_crf_T1_crf, REG)(void) ! 67: { ! 68: T1 = regs->crf[REG]; ! 69: RETURN(); ! 70: } ! 71: ! 72: void OPPROTO glue(op_store_T0_crf_crf, REG)(void) ! 73: { ! 74: regs->crf[REG] = T0; ! 75: RETURN(); ! 76: } ! 77: ! 78: void OPPROTO glue(op_store_T1_crf_crf, REG)(void) ! 79: { ! 80: regs->crf[REG] = T1; ! 81: RETURN(); ! 82: } ! 83: ! 84: /* Floating point condition and status register moves */ ! 85: void OPPROTO glue(op_load_fpscr_T0_fpscr, REG)(void) ! 86: { ! 87: T0 = regs->fpscr[REG]; ! 88: RETURN(); ! 89: } ! 90: ! 91: #if REG == 0 ! 92: void OPPROTO glue(op_store_T0_fpscr_fpscr, REG)(void) ! 93: { ! 94: regs->fpscr[REG] = (regs->fpscr[REG] & 0x9) | (T0 & ~0x9); ! 95: RETURN(); ! 96: } ! 97: ! 98: void OPPROTO glue(op_store_T0_fpscri_fpscr, REG)(void) ! 99: { ! 100: regs->fpscr[REG] = (regs->fpscr[REG] & ~0x9) | (PARAM(1) & 0x9); ! 101: RETURN(); ! 102: } ! 103: ! 104: void OPPROTO glue(op_clear_fpscr_fpscr, REG)(void) ! 105: { ! 106: regs->fpscr[REG] = (regs->fpscr[REG] & 0x9); ! 107: RETURN(); ! 108: } ! 109: #else ! 110: void OPPROTO glue(op_store_T0_fpscr_fpscr, REG)(void) ! 111: { ! 112: regs->fpscr[REG] = T0; ! 113: RETURN(); ! 114: } ! 115: ! 116: void OPPROTO glue(op_store_T0_fpscri_fpscr, REG)(void) ! 117: { ! 118: regs->fpscr[REG] = PARAM(1); ! 119: RETURN(); ! 120: } ! 121: ! 122: void OPPROTO glue(op_clear_fpscr_fpscr, REG)(void) ! 123: { ! 124: regs->fpscr[REG] = 0x0; ! 125: RETURN(); ! 126: } ! 127: #endif ! 128: ! 129: #endif /* REG <= 7 */ ! 130: ! 131: /* floating point registers moves */ ! 132: void OPPROTO glue(op_load_fpr_FT0_fpr, REG)(void) ! 133: { ! 134: FT0 = env->fpr[REG]; ! 135: RETURN(); ! 136: } ! 137: ! 138: void OPPROTO glue(op_store_FT0_fpr_fpr, REG)(void) ! 139: { ! 140: env->fpr[REG] = FT0; ! 141: RETURN(); ! 142: } ! 143: ! 144: void OPPROTO glue(op_load_fpr_FT1_fpr, REG)(void) ! 145: { ! 146: FT1 = env->fpr[REG]; ! 147: RETURN(); ! 148: } ! 149: ! 150: void OPPROTO glue(op_store_FT1_fpr_fpr, REG)(void) ! 151: { ! 152: env->fpr[REG] = FT1; ! 153: RETURN(); ! 154: } ! 155: ! 156: void OPPROTO glue(op_load_fpr_FT2_fpr, REG)(void) ! 157: { ! 158: FT2 = env->fpr[REG]; ! 159: RETURN(); ! 160: } ! 161: ! 162: void OPPROTO glue(op_store_FT2_fpr_fpr, REG)(void) ! 163: { ! 164: env->fpr[REG] = FT2; ! 165: RETURN(); ! 166: } ! 167: ! 168: #if REG <= 15 ! 169: /* Segment register moves */ ! 170: void OPPROTO glue(op_load_sr, REG)(void) ! 171: { ! 172: T0 = env->sr[REG]; ! 173: RETURN(); ! 174: } ! 175: ! 176: void OPPROTO glue(op_store_sr, REG)(void) ! 177: { ! 178: do_store_sr(env, REG, T0); ! 179: RETURN(); ! 180: } ! 181: #endif ! 182: ! 183: #undef REG
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.