/[qemu]/qemu/target-ppc/translate.c
ViewVC logotype

Diff of /qemu/target-ppc/translate.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by bellard, Sun Nov 23 14:55:54 2003 UTC revision 1.2 by bellard, Sun Nov 23 16:58:08 2003 UTC
# Line 36  static uint16_t *gen_opc_ptr; Line 36  static uint16_t *gen_opc_ptr;
36  static uint32_t *gen_opparam_ptr;  static uint32_t *gen_opparam_ptr;
37    
38  #include "gen-op.h"  #include "gen-op.h"
39  #include "select.h"  
40    typedef void (GenOpFunc)(void);
41    
42    #define GEN8(func, NAME) \
43    static GenOpFunc *NAME ## _table [8] = {\
44    NAME ## 0, NAME ## 1, NAME ## 2, NAME ## 3,\
45    NAME ## 4, NAME ## 5, NAME ## 6, NAME ## 7,\
46    };\
47    static inline void func(int n)\
48    {\
49        NAME ## _table[n]();\
50    }
51    
52    #define GEN32(func, NAME) \
53    static GenOpFunc *NAME ## _table [32] = {\
54    NAME ## 0, NAME ## 1, NAME ## 2, NAME ## 3,\
55    NAME ## 4, NAME ## 5, NAME ## 6, NAME ## 7,\
56    NAME ## 8, NAME ## 9, NAME ## 10, NAME ## 11,\
57    NAME ## 12, NAME ## 13, NAME ## 14, NAME ## 15,\
58    NAME ## 16, NAME ## 17, NAME ## 18, NAME ## 19,\
59    NAME ## 20, NAME ## 21, NAME ## 22, NAME ## 23,\
60    NAME ## 24, NAME ## 25, NAME ## 26, NAME ## 27,\
61    NAME ## 28, NAME ## 29, NAME ## 30, NAME ## 31,\
62    };\
63    static inline void func(int n)\
64    {\
65        NAME ## _table[n]();\
66    }
67    
68    GEN8(gen_op_load_crf_T0, gen_op_load_crf_T0_crf)
69    GEN8(gen_op_load_crf_T1, gen_op_load_crf_T1_crf)
70    GEN8(gen_op_store_T0_crf, gen_op_store_T0_crf_crf)
71    GEN8(gen_op_store_T1_crf, gen_op_store_T1_crf_crf)
72    
73    GEN32(gen_op_load_gpr_T0, gen_op_load_gpr_T0_gpr)
74    GEN32(gen_op_load_gpr_T1, gen_op_load_gpr_T1_gpr)
75    GEN32(gen_op_load_gpr_T2, gen_op_load_gpr_T2_gpr)
76    
77    GEN32(gen_op_store_T0_gpr, gen_op_store_T0_gpr_gpr)
78    GEN32(gen_op_store_T1_gpr, gen_op_store_T1_gpr_gpr)
79    GEN32(gen_op_store_T2_gpr, gen_op_store_T2_gpr_gpr)
80    
81    GEN32(gen_op_load_FT0_fpr, gen_op_load_FT0_fpr)
82    GEN32(gen_op_store_FT0_fpr, gen_op_store_FT0_fpr)
83    
84  static uint8_t  spr_access[1024 / 2];  static uint8_t  spr_access[1024 / 2];
85    
# Line 810  GEN_HANDLER(mcrfs, 0x3F, 0x00, 0x02, 0x0 Line 853  GEN_HANDLER(mcrfs, 0x3F, 0x00, 0x02, 0x0
853  /* mffs */  /* mffs */
854  GEN_HANDLER(mffs, 0x3F, 0x07, 0x12, 0x001FF800, PPC_FLOAT)  GEN_HANDLER(mffs, 0x3F, 0x07, 0x12, 0x001FF800, PPC_FLOAT)
855  {  {
856      gen_op_load_fpscr(rD(ctx->opcode));      gen_op_load_fpscr();
857        gen_op_store_T0_gpr(rD(ctx->opcode));
858      if (Rc(ctx->opcode)) {      if (Rc(ctx->opcode)) {
859          /* Update CR1 */          /* Update CR1 */
860      }      }
# Line 832  GEN_HANDLER(mtfsb1, 0x3F, 0x06, 0x01, 0x Line 876  GEN_HANDLER(mtfsb1, 0x3F, 0x06, 0x01, 0x
876  /* mtfsf */  /* mtfsf */
877  GEN_HANDLER(mtfsf, 0x3F, 0x07, 0x16, 0x02010000, PPC_FLOAT)  GEN_HANDLER(mtfsf, 0x3F, 0x07, 0x16, 0x02010000, PPC_FLOAT)
878  {  {
879      gen_op_store_fpscr(FM(ctx->opcode), rB(ctx->opcode));      gen_op_load_gpr_T0(rB(ctx->opcode));
880        gen_op_store_fpscr(FM(ctx->opcode));
881      if (Rc(ctx->opcode)) {      if (Rc(ctx->opcode)) {
882          /* Update CR1 */          /* Update CR1 */
883      }      }
# Line 1182  GEN_HANDLER(lf##width, opc, 0xFF, 0xFF, Line 1227  GEN_HANDLER(lf##width, opc, 0xFF, 0xFF,
1227  {                                                                             \  {                                                                             \
1228      uint32_t simm = SIMM(ctx->opcode);                                        \      uint32_t simm = SIMM(ctx->opcode);                                        \
1229      if (rA(ctx->opcode) == 0) {                                               \      if (rA(ctx->opcode) == 0) {                                               \
1230          gen_op_lf##width##_z(simm, rD(ctx->opcode));                          \          gen_op_lf##width##_z_FT0(simm);                          \
1231      } else {                                                                  \      } else {                                                                  \
1232          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \
1233          gen_op_lf##width(simm, rD(ctx->opcode));                              \          gen_op_lf##width##_FT0(simm);                              \
1234      }                                                                         \      }                                                                         \
1235        gen_op_store_FT0_fpr(rD(ctx->opcode));\
1236      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1237  }  }
1238    
# Line 1197  GEN_HANDLER(lf##width##u, opc, 0xFF, 0xF Line 1243  GEN_HANDLER(lf##width##u, opc, 0xFF, 0xF
1243          rA(ctx->opcode) == rD(ctx->opcode))                                   \          rA(ctx->opcode) == rD(ctx->opcode))                                   \
1244          SET_RETVAL(EXCP_INVAL);                                               \          SET_RETVAL(EXCP_INVAL);                                               \
1245      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \
1246      gen_op_lf##width(SIMM(ctx->opcode), rD(ctx->opcode));                     \      gen_op_lf##width##_FT0(SIMM(ctx->opcode));                     \
1247        gen_op_store_FT0_fpr(rD(ctx->opcode));\
1248      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \
1249      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1250  }  }
# Line 1210  GEN_HANDLER(lf##width##ux, 0x1F, 0x17, o Line 1257  GEN_HANDLER(lf##width##ux, 0x1F, 0x17, o
1257          SET_RETVAL(EXCP_INVAL);                                               \          SET_RETVAL(EXCP_INVAL);                                               \
1258      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \
1259      gen_op_load_gpr_T1(rB(ctx->opcode));                                      \      gen_op_load_gpr_T1(rB(ctx->opcode));                                      \
1260      gen_op_lf##width##x(rD(ctx->opcode));                                     \      gen_op_lf##width##x_FT0();                                     \
1261        gen_op_store_FT0_fpr(rD(ctx->opcode));\
1262      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \
1263      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1264  }  }
# Line 1220  GEN_HANDLER(lf##width##x, 0x1F, 0x17, op Line 1268  GEN_HANDLER(lf##width##x, 0x1F, 0x17, op
1268  {                                                                             \  {                                                                             \
1269      if (rA(ctx->opcode) == 0) {                                               \      if (rA(ctx->opcode) == 0) {                                               \
1270          gen_op_load_gpr_T0(rB(ctx->opcode));                                  \          gen_op_load_gpr_T0(rB(ctx->opcode));                                  \
1271          gen_op_lf##width##x_z(rD(ctx->opcode));                               \          gen_op_lf##width##x_z_FT0();                               \
1272      } else {                                                                  \      } else {                                                                  \
1273          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \
1274          gen_op_load_gpr_T1(rB(ctx->opcode));                                  \          gen_op_load_gpr_T1(rB(ctx->opcode));                                  \
1275          gen_op_lf##width##x(rD(ctx->opcode));                                 \          gen_op_lf##width##x_FT0();                                 \
1276      }                                                                         \      }                                                                         \
1277        gen_op_store_FT0_fpr(rD(ctx->opcode));\
1278      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1279  }  }
1280    
# Line 1238  GEN_LFX(width, opc | 0x00) Line 1287  GEN_LFX(width, opc | 0x00)
1287  /* lfd lfdu lfdux lfdx */  /* lfd lfdu lfdux lfdx */
1288  GEN_LDF(d, 0x12);  GEN_LDF(d, 0x12);
1289  /* lfs lfsu lfsux lfsx */  /* lfs lfsu lfsux lfsx */
 #define gen_op_lfs_z(a, b)  
 #define gen_op_lfs(a, b)  
 #define gen_op_lfsx_z(a)  
 #define gen_op_lfsx(a)  
1290  GEN_LDF(s, 0x10);  GEN_LDF(s, 0x10);
1291    
1292  /***                         Floating-point store                          ***/  /***                         Floating-point store                          ***/
# Line 1249  GEN_LDF(s, 0x10); Line 1294  GEN_LDF(s, 0x10);
1294  GEN_HANDLER(stf##width, opc, 0xFF, 0xFF, 0x00000000, PPC_FLOAT)               \  GEN_HANDLER(stf##width, opc, 0xFF, 0xFF, 0x00000000, PPC_FLOAT)               \
1295  {                                                                             \  {                                                                             \
1296      uint32_t simm = SIMM(ctx->opcode);                                        \      uint32_t simm = SIMM(ctx->opcode);                                        \
1297        gen_op_load_FT0_fpr(rS(ctx->opcode));\
1298      if (rA(ctx->opcode) == 0) {                                               \      if (rA(ctx->opcode) == 0) {                                               \
1299          gen_op_stf##width##_z(simm, rS(ctx->opcode));                         \          gen_op_stf##width##_z_FT0(simm);                         \
1300      } else {                                                                  \      } else {                                                                  \
1301          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \
1302          gen_op_stf##width(simm, rS(ctx->opcode));                             \          gen_op_stf##width##_FT0(simm);                             \
1303      }                                                                         \      }                                                                         \
1304      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1305  }  }
# Line 1264  GEN_HANDLER(stf##width##u, opc, 0xFF, 0x Line 1310  GEN_HANDLER(stf##width##u, opc, 0xFF, 0x
1310      if (rA(ctx->opcode) == 0)                                                 \      if (rA(ctx->opcode) == 0)                                                 \
1311          SET_RETVAL(EXCP_INVAL);                                               \          SET_RETVAL(EXCP_INVAL);                                               \
1312      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \
1313      gen_op_stf##width(SIMM(ctx->opcode), rS(ctx->opcode));                    \      gen_op_load_FT0_fpr(rS(ctx->opcode));\
1314        gen_op_stf##width##_FT0(SIMM(ctx->opcode));                    \
1315      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \
1316      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1317  }  }
# Line 1276  GEN_HANDLER(stf##width##ux, 0x1F, 0x17, Line 1323  GEN_HANDLER(stf##width##ux, 0x1F, 0x17,
1323          SET_RETVAL(EXCP_INVAL);                                               \          SET_RETVAL(EXCP_INVAL);                                               \
1324      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \      gen_op_load_gpr_T0(rA(ctx->opcode));                                      \
1325      gen_op_load_gpr_T1(rB(ctx->opcode));                                      \      gen_op_load_gpr_T1(rB(ctx->opcode));                                      \
1326      gen_op_stf##width##x(rS(ctx->opcode));                                    \      gen_op_load_FT0_fpr(rS(ctx->opcode));\
1327        gen_op_stf##width##x_FT0();                                    \
1328      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \      gen_op_store_T0_gpr(rA(ctx->opcode));                                     \
1329      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1330  }  }
# Line 1284  GEN_HANDLER(stf##width##ux, 0x1F, 0x17, Line 1332  GEN_HANDLER(stf##width##ux, 0x1F, 0x17,
1332  #define GEN_STFX(width, opc)                                                  \  #define GEN_STFX(width, opc)                                                  \
1333  GEN_HANDLER(stf##width##x, 0x1F, 0x17, opc, 0x00000001, PPC_FLOAT)            \  GEN_HANDLER(stf##width##x, 0x1F, 0x17, opc, 0x00000001, PPC_FLOAT)            \
1334  {                                                                             \  {                                                                             \
1335        gen_op_load_FT0_fpr(rS(ctx->opcode));\
1336      if (rA(ctx->opcode) == 0) {                                               \      if (rA(ctx->opcode) == 0) {                                               \
1337          gen_op_load_gpr_T0(rB(ctx->opcode));                                  \          gen_op_load_gpr_T0(rB(ctx->opcode));                                  \
1338          gen_op_stf##width##x_z(rS(ctx->opcode));                              \          gen_op_stf##width##x_z_FT0();                              \
1339      } else {                                                                  \      } else {                                                                  \
1340          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \          gen_op_load_gpr_T0(rA(ctx->opcode));                                  \
1341          gen_op_load_gpr_T1(rB(ctx->opcode));                                  \          gen_op_load_gpr_T1(rB(ctx->opcode));                                  \
1342          gen_op_stf##width##x(rS(ctx->opcode));                                \          gen_op_stf##width##x_FT0();                                \
1343      }                                                                         \      }                                                                         \
1344      SET_RETVAL(0);                                                            \      SET_RETVAL(0);                                                            \
1345  }  }
# Line 1304  GEN_STFX(width, opc | 0x00) Line 1353  GEN_STFX(width, opc | 0x00)
1353  /* stfd stfdu stfdux stfdx */  /* stfd stfdu stfdux stfdx */
1354  GEN_STOF(d, 0x16);  GEN_STOF(d, 0x16);
1355  /* stfs stfsu stfsux stfsx */  /* stfs stfsu stfsux stfsx */
 #define gen_op_stfs_z(a, b)  
 #define gen_op_stfs(a, b)  
 #define gen_op_stfsx_z(a)  
 #define gen_op_stfsx(a)  
1356  GEN_STOF(s, 0x14);  GEN_STOF(s, 0x14);
1357    
1358  /* Optional: */  /* Optional: */

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26