|
|
1.1 root 1: /*
2: * PowerPC emulation micro-operations for qemu.
1.1.1.2 ! root 3: *
! 4: * Copyright (c) 2003-2007 Jocelyn Mayer
1.1 root 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 */
1.1.1.2 ! root 22: void OPPROTO glue(op_load_gpr_T0_gpr, REG) (void)
1.1 root 23: {
1.1.1.2 ! root 24: T0 = env->gpr[REG];
1.1 root 25: RETURN();
26: }
27:
1.1.1.2 ! root 28: void OPPROTO glue(op_load_gpr_T1_gpr, REG) (void)
1.1 root 29: {
1.1.1.2 ! root 30: T1 = env->gpr[REG];
1.1 root 31: RETURN();
32: }
33:
1.1.1.2 ! root 34: void OPPROTO glue(op_load_gpr_T2_gpr, REG) (void)
1.1 root 35: {
1.1.1.2 ! root 36: T2 = env->gpr[REG];
1.1 root 37: RETURN();
38: }
39:
1.1.1.2 ! root 40: void OPPROTO glue(op_store_T0_gpr_gpr, REG) (void)
1.1 root 41: {
1.1.1.2 ! root 42: env->gpr[REG] = T0;
1.1 root 43: RETURN();
44: }
45:
1.1.1.2 ! root 46: void OPPROTO glue(op_store_T1_gpr_gpr, REG) (void)
1.1 root 47: {
1.1.1.2 ! root 48: env->gpr[REG] = T1;
1.1 root 49: RETURN();
50: }
51:
1.1.1.2 ! root 52: #if 0 // unused
! 53: void OPPROTO glue(op_store_T2_gpr_gpr, REG) (void)
1.1 root 54: {
1.1.1.2 ! root 55: env->gpr[REG] = T2;
1.1 root 56: RETURN();
57: }
1.1.1.2 ! root 58: #endif
1.1 root 59:
1.1.1.2 ! root 60: /* General purpose registers containing vector operands moves */
! 61: #if !defined(TARGET_PPC64)
! 62: void OPPROTO glue(op_load_gpr64_T0_gpr, REG) (void)
1.1 root 63: {
1.1.1.2 ! root 64: T0_64 = (uint64_t)env->gpr[REG] | ((uint64_t)env->gprh[REG] << 32);
1.1 root 65: RETURN();
66: }
67:
1.1.1.2 ! root 68: void OPPROTO glue(op_load_gpr64_T1_gpr, REG) (void)
1.1 root 69: {
1.1.1.2 ! root 70: T1_64 = (uint64_t)env->gpr[REG] | ((uint64_t)env->gprh[REG] << 32);
1.1 root 71: RETURN();
72: }
73:
1.1.1.2 ! root 74: #if 0 // unused
! 75: void OPPROTO glue(op_load_gpr64_T2_gpr, REG) (void)
1.1 root 76: {
1.1.1.2 ! root 77: T2_64 = (uint64_t)env->gpr[REG] | ((uint64_t)env->gprh[REG] << 32);
1.1 root 78: RETURN();
79: }
1.1.1.2 ! root 80: #endif
1.1 root 81:
1.1.1.2 ! root 82: void OPPROTO glue(op_store_T0_gpr64_gpr, REG) (void)
1.1 root 83: {
1.1.1.2 ! root 84: env->gpr[REG] = T0_64;
! 85: env->gprh[REG] = T0_64 >> 32;
1.1 root 86: RETURN();
87: }
88:
1.1.1.2 ! root 89: void OPPROTO glue(op_store_T1_gpr64_gpr, REG) (void)
1.1 root 90: {
1.1.1.2 ! root 91: env->gpr[REG] = T1_64;
! 92: env->gprh[REG] = T1_64 >> 32;
1.1 root 93: RETURN();
94: }
95:
1.1.1.2 ! root 96: #if 0 // unused
! 97: void OPPROTO glue(op_store_T2_gpr64_gpr, REG) (void)
1.1 root 98: {
1.1.1.2 ! root 99: env->gpr[REG] = T2_64;
! 100: env->gprh[REG] = T2_64 >> 32;
1.1 root 101: RETURN();
102: }
1.1.1.2 ! root 103: #endif
! 104: #endif /* !defined(TARGET_PPC64) */
1.1 root 105:
1.1.1.2 ! root 106: /* Altivec registers moves */
! 107: void OPPROTO glue(op_load_avr_A0_avr, REG) (void)
1.1 root 108: {
1.1.1.2 ! root 109: AVR0 = env->avr[REG];
1.1 root 110: RETURN();
111: }
112:
1.1.1.2 ! root 113: void OPPROTO glue(op_load_avr_A1_avr, REG) (void)
1.1 root 114: {
1.1.1.2 ! root 115: AVR1 = env->avr[REG];
1.1 root 116: RETURN();
117: }
1.1.1.2 ! root 118:
! 119: void OPPROTO glue(op_load_avr_A2_avr, REG) (void)
1.1 root 120: {
1.1.1.2 ! root 121: AVR2 = env->avr[REG];
1.1 root 122: RETURN();
123: }
124:
1.1.1.2 ! root 125: void OPPROTO glue(op_store_A0_avr_avr, REG) (void)
1.1 root 126: {
1.1.1.2 ! root 127: env->avr[REG] = AVR0;
1.1 root 128: RETURN();
129: }
130:
1.1.1.2 ! root 131: void OPPROTO glue(op_store_A1_avr_avr, REG) (void)
1.1 root 132: {
1.1.1.2 ! root 133: env->avr[REG] = AVR1;
! 134: RETURN();
! 135: }
! 136:
! 137: #if 0 // unused
! 138: void OPPROTO glue(op_store_A2_avr_avr, REG) (void)
! 139: {
! 140: env->avr[REG] = AVR2;
1.1 root 141: RETURN();
142: }
143: #endif
144:
1.1.1.2 ! root 145: #if REG <= 7
! 146: /* Condition register moves */
! 147: void OPPROTO glue(op_load_crf_T0_crf, REG) (void)
! 148: {
! 149: T0 = env->crf[REG];
! 150: RETURN();
! 151: }
1.1 root 152:
1.1.1.2 ! root 153: void OPPROTO glue(op_load_crf_T1_crf, REG) (void)
1.1 root 154: {
1.1.1.2 ! root 155: T1 = env->crf[REG];
1.1 root 156: RETURN();
157: }
158:
1.1.1.2 ! root 159: void OPPROTO glue(op_store_T0_crf_crf, REG) (void)
1.1 root 160: {
1.1.1.2 ! root 161: env->crf[REG] = T0;
1.1 root 162: RETURN();
163: }
164:
1.1.1.2 ! root 165: #if 0 // Unused
! 166: void OPPROTO glue(op_store_T1_crf_crf, REG) (void)
1.1 root 167: {
1.1.1.2 ! root 168: env->crf[REG] = T1;
1.1 root 169: RETURN();
170: }
1.1.1.2 ! root 171: #endif
! 172:
! 173: #endif /* REG <= 7 */
1.1 root 174:
1.1.1.2 ! root 175: /* floating point registers moves */
! 176: void OPPROTO glue(op_load_fpr_FT0_fpr, REG) (void)
1.1 root 177: {
1.1.1.2 ! root 178: FT0 = env->fpr[REG];
1.1 root 179: RETURN();
180: }
181:
1.1.1.2 ! root 182: void OPPROTO glue(op_store_FT0_fpr_fpr, REG) (void)
1.1 root 183: {
1.1.1.2 ! root 184: env->fpr[REG] = FT0;
1.1 root 185: RETURN();
186: }
187:
1.1.1.2 ! root 188: void OPPROTO glue(op_load_fpr_FT1_fpr, REG) (void)
1.1 root 189: {
1.1.1.2 ! root 190: FT1 = env->fpr[REG];
1.1 root 191: RETURN();
192: }
193:
1.1.1.2 ! root 194: void OPPROTO glue(op_store_FT1_fpr_fpr, REG) (void)
1.1 root 195: {
1.1.1.2 ! root 196: env->fpr[REG] = FT1;
1.1 root 197: RETURN();
198: }
199:
1.1.1.2 ! root 200: void OPPROTO glue(op_load_fpr_FT2_fpr, REG) (void)
1.1 root 201: {
1.1.1.2 ! root 202: FT2 = env->fpr[REG];
! 203: RETURN();
! 204: }
! 205:
! 206: #if 0 // unused
! 207: void OPPROTO glue(op_store_FT2_fpr_fpr, REG) (void)
! 208: {
! 209: env->fpr[REG] = FT2;
1.1 root 210: RETURN();
211: }
212: #endif
213:
214: #undef REG
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.