tm_register.mdg.cc

Go to the documentation of this file.
00001 /* This file is generated from machine description. */
00002 /*!
00003         \file
00004         \brief Target-machine register
00005         \author jaz
00006 */
00007 
00008 #include <lestes/std/map.hh>
00009 #include <lestes/std/set.hh>
00010 #include <lestes/md/registers/tm_register.g.hh>
00011 #include <lestes/md/types/tm_data_type.g.hh>
00012 #include <lestes/md/instructions/pi_pi2ge_pi_template.g.hh>
00013 
00014 package(lestes);
00015 package(md);
00016 package(registers);
00017 
00018 using namespace ::lestes::md::types;
00019 using namespace ::lestes::md::instructions;
00020 
00021 ptr<tm_register> tm_register::instance(tm_register_base::id_type id) {
00022         map<tm_register_base::id_type, srp<tm_register> >::iterator existing_reg = id_to_instance_get()->find(id);
00023 
00024         if ( existing_reg != id_to_instance_get()->end() ) {
00025                 return existing_reg->second;
00026         }
00027 
00028         ptr<tm_register> new_reg = NULL;
00029         switch(id) {
00030                 case R_UNDEFINED: lassert(false); break;
00031                 case R_AL: {
00032                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00033                         dt_list->insert(DT_INT_8P);
00034                         dt_list->insert(DT_INT_8U);
00035                         dt_list->insert(DT_INT_8S);
00036                         dt_list->insert(DT_BOOL);
00037                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00038                         reg_list->insert(R_AL);
00039                         reg_list->insert(R_AX);
00040                         reg_list->insert(R_EAX);
00041                         ptr<set<ulint> > move_templates = set<ulint>::create();
00042                         move_templates->insert(TEM_REGISTER_MOVE_1);
00043                         new_reg = tm_register::create(R_AL, 8, dt_list, reg_list, move_templates, lstring("AL"),0);
00044                 } break;
00045                 case R_AH: {
00046                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00047                         dt_list->insert(DT_INT_8P);
00048                         dt_list->insert(DT_INT_8U);
00049                         dt_list->insert(DT_INT_8S);
00050                         dt_list->insert(DT_BOOL);
00051                         dt_list->insert(DT_COND);
00052                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00053                         reg_list->insert(R_AH);
00054                         reg_list->insert(R_AX);
00055                         reg_list->insert(R_EAX);
00056                         ptr<set<ulint> > move_templates = set<ulint>::create();
00057                         move_templates->insert(TEM_REGISTER_MOVE_1);
00058                         new_reg = tm_register::create(R_AH, 8, dt_list, reg_list, move_templates, lstring("AH"),0);
00059                 } break;
00060                 case R_AX: {
00061                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00062                         dt_list->insert(DT_INT_16U);
00063                         dt_list->insert(DT_INT_16S);
00064                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00065                         reg_list->insert(R_AX);
00066                         reg_list->insert(R_AH);
00067                         reg_list->insert(R_AL);
00068                         reg_list->insert(R_EAX);
00069                         ptr<set<ulint> > move_templates = set<ulint>::create();
00070                         move_templates->insert(TEM_REGISTER_MOVE_1);
00071                         new_reg = tm_register::create(R_AX, 16, dt_list, reg_list, move_templates, lstring("AX"),0);
00072                 } break;
00073                 case R_EAX: {
00074                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00075                         dt_list->insert(DT_INT_32U);
00076                         dt_list->insert(DT_INT_32S);
00077                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00078                         reg_list->insert(R_EAX);
00079                         reg_list->insert(R_AH);
00080                         reg_list->insert(R_AL);
00081                         reg_list->insert(R_AX);
00082                         ptr<set<ulint> > move_templates = set<ulint>::create();
00083                         move_templates->insert(TEM_REGISTER_MOVE_1);
00084                         new_reg = tm_register::create(R_EAX, 32, dt_list, reg_list, move_templates, lstring("EAX"),0);
00085                 } break;
00086                 case R_BL: {
00087                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00088                         dt_list->insert(DT_INT_8P);
00089                         dt_list->insert(DT_INT_8U);
00090                         dt_list->insert(DT_INT_8S);
00091                         dt_list->insert(DT_BOOL);
00092                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00093                         reg_list->insert(R_BL);
00094                         reg_list->insert(R_BX);
00095                         reg_list->insert(R_EBX);
00096                         ptr<set<ulint> > move_templates = set<ulint>::create();
00097                         move_templates->insert(TEM_REGISTER_MOVE_1);
00098                         new_reg = tm_register::create(R_BL, 8, dt_list, reg_list, move_templates, lstring("BL"),0);
00099                 } break;
00100                 case R_BH: {
00101                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00102                         dt_list->insert(DT_INT_8P);
00103                         dt_list->insert(DT_INT_8U);
00104                         dt_list->insert(DT_INT_8S);
00105                         dt_list->insert(DT_BOOL);
00106                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00107                         reg_list->insert(R_BH);
00108                         reg_list->insert(R_BX);
00109                         reg_list->insert(R_EBX);
00110                         ptr<set<ulint> > move_templates = set<ulint>::create();
00111                         move_templates->insert(TEM_REGISTER_MOVE_1);
00112                         new_reg = tm_register::create(R_BH, 8, dt_list, reg_list, move_templates, lstring("BH"),0);
00113                 } break;
00114                 case R_BX: {
00115                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00116                         dt_list->insert(DT_INT_16U);
00117                         dt_list->insert(DT_INT_16S);
00118                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00119                         reg_list->insert(R_BX);
00120                         reg_list->insert(R_BH);
00121                         reg_list->insert(R_BL);
00122                         reg_list->insert(R_EBX);
00123                         ptr<set<ulint> > move_templates = set<ulint>::create();
00124                         move_templates->insert(TEM_REGISTER_MOVE_1);
00125                         new_reg = tm_register::create(R_BX, 16, dt_list, reg_list, move_templates, lstring("BX"),0);
00126                 } break;
00127                 case R_EBX: {
00128                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00129                         dt_list->insert(DT_INT_32U);
00130                         dt_list->insert(DT_INT_32S);
00131                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00132                         reg_list->insert(R_EBX);
00133                         reg_list->insert(R_BH);
00134                         reg_list->insert(R_BL);
00135                         reg_list->insert(R_BX);
00136                         ptr<set<ulint> > move_templates = set<ulint>::create();
00137                         move_templates->insert(TEM_REGISTER_MOVE_1);
00138                         new_reg = tm_register::create(R_EBX, 32, dt_list, reg_list, move_templates, lstring("EBX"),0);
00139                 } break;
00140                 case R_CL: {
00141                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00142                         dt_list->insert(DT_INT_8P);
00143                         dt_list->insert(DT_INT_8U);
00144                         dt_list->insert(DT_INT_8S);
00145                         dt_list->insert(DT_BOOL);
00146                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00147                         reg_list->insert(R_CL);
00148                         reg_list->insert(R_CX);
00149                         reg_list->insert(R_ECX);
00150                         ptr<set<ulint> > move_templates = set<ulint>::create();
00151                         move_templates->insert(TEM_REGISTER_MOVE_1);
00152                         new_reg = tm_register::create(R_CL, 8, dt_list, reg_list, move_templates, lstring("CL"),0);
00153                 } break;
00154                 case R_CH: {
00155                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00156                         dt_list->insert(DT_INT_8P);
00157                         dt_list->insert(DT_INT_8U);
00158                         dt_list->insert(DT_INT_8S);
00159                         dt_list->insert(DT_BOOL);
00160                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00161                         reg_list->insert(R_CH);
00162                         reg_list->insert(R_CX);
00163                         reg_list->insert(R_ECX);
00164                         ptr<set<ulint> > move_templates = set<ulint>::create();
00165                         move_templates->insert(TEM_REGISTER_MOVE_1);
00166                         new_reg = tm_register::create(R_CH, 8, dt_list, reg_list, move_templates, lstring("CH"),0);
00167                 } break;
00168                 case R_CX: {
00169                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00170                         dt_list->insert(DT_INT_16U);
00171                         dt_list->insert(DT_INT_16S);
00172                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00173                         reg_list->insert(R_CX);
00174                         reg_list->insert(R_CL);
00175                         reg_list->insert(R_CH);
00176                         reg_list->insert(R_ECX);
00177                         ptr<set<ulint> > move_templates = set<ulint>::create();
00178                         move_templates->insert(TEM_REGISTER_MOVE_1);
00179                         new_reg = tm_register::create(R_CX, 16, dt_list, reg_list, move_templates, lstring("CX"),0);
00180                 } break;
00181                 case R_ECX: {
00182                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00183                         dt_list->insert(DT_INT_32U);
00184                         dt_list->insert(DT_INT_32S);
00185                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00186                         reg_list->insert(R_ECX);
00187                         reg_list->insert(R_CL);
00188                         reg_list->insert(R_CH);
00189                         reg_list->insert(R_CX);
00190                         ptr<set<ulint> > move_templates = set<ulint>::create();
00191                         move_templates->insert(TEM_REGISTER_MOVE_1);
00192                         new_reg = tm_register::create(R_ECX, 32, dt_list, reg_list, move_templates, lstring("ECX"),0);
00193                 } break;
00194                 case R_DL: {
00195                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00196                         dt_list->insert(DT_INT_8P);
00197                         dt_list->insert(DT_INT_8U);
00198                         dt_list->insert(DT_INT_8S);
00199                         dt_list->insert(DT_BOOL);
00200                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00201                         reg_list->insert(R_DL);
00202                         reg_list->insert(R_DX);
00203                         reg_list->insert(R_EDX);
00204                         ptr<set<ulint> > move_templates = set<ulint>::create();
00205                         move_templates->insert(TEM_REGISTER_MOVE_1);
00206                         new_reg = tm_register::create(R_DL, 8, dt_list, reg_list, move_templates, lstring("DL"),0);
00207                 } break;
00208                 case R_DH: {
00209                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00210                         dt_list->insert(DT_INT_8P);
00211                         dt_list->insert(DT_INT_8U);
00212                         dt_list->insert(DT_INT_8S);
00213                         dt_list->insert(DT_BOOL);
00214                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00215                         reg_list->insert(R_DH);
00216                         reg_list->insert(R_DX);
00217                         reg_list->insert(R_EDX);
00218                         ptr<set<ulint> > move_templates = set<ulint>::create();
00219                         move_templates->insert(TEM_REGISTER_MOVE_1);
00220                         new_reg = tm_register::create(R_DH, 8, dt_list, reg_list, move_templates, lstring("DL"),0);
00221                 } break;
00222                 case R_DX: {
00223                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00224                         dt_list->insert(DT_INT_16U);
00225                         dt_list->insert(DT_INT_16S);
00226                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00227                         reg_list->insert(R_DX);
00228                         reg_list->insert(R_DL);
00229                         reg_list->insert(R_DH);
00230                         reg_list->insert(R_EDX);
00231                         ptr<set<ulint> > move_templates = set<ulint>::create();
00232                         move_templates->insert(TEM_REGISTER_MOVE_1);
00233                         new_reg = tm_register::create(R_DX, 16, dt_list, reg_list, move_templates, lstring("DX"),0);
00234                 } break;
00235                 case R_EDX: {
00236                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00237                         dt_list->insert(DT_INT_32U);
00238                         dt_list->insert(DT_INT_32S);
00239                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00240                         reg_list->insert(R_EDX);
00241                         reg_list->insert(R_DL);
00242                         reg_list->insert(R_DH);
00243                         reg_list->insert(R_DX);
00244                         ptr<set<ulint> > move_templates = set<ulint>::create();
00245                         move_templates->insert(TEM_REGISTER_MOVE_1);
00246                         new_reg = tm_register::create(R_EDX, 32, dt_list, reg_list, move_templates, lstring("EDX"),0);
00247                 } break;
00248                 case R_DI: {
00249                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00250                         dt_list->insert(DT_INT_16U);
00251                         dt_list->insert(DT_INT_16S);
00252                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00253                         reg_list->insert(R_DI);
00254                         reg_list->insert(R_EDI);
00255                         ptr<set<ulint> > move_templates = set<ulint>::create();
00256                         move_templates->insert(TEM_REGISTER_MOVE_1);
00257                         new_reg = tm_register::create(R_DI, 16, dt_list, reg_list, move_templates, lstring("DI"),0);
00258                 } break;
00259                 case R_EDI: {
00260                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00261                         dt_list->insert(DT_INT_32U);
00262                         dt_list->insert(DT_INT_32S);
00263                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00264                         reg_list->insert(R_EDI);
00265                         reg_list->insert(R_DI);
00266                         ptr<set<ulint> > move_templates = set<ulint>::create();
00267                         move_templates->insert(TEM_REGISTER_MOVE_1);
00268                         new_reg = tm_register::create(R_EDI, 32, dt_list, reg_list, move_templates, lstring("EDI"),0);
00269                 } break;
00270                 case R_SI: {
00271                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00272                         dt_list->insert(DT_INT_16U);
00273                         dt_list->insert(DT_INT_16S);
00274                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00275                         reg_list->insert(R_SI);
00276                         reg_list->insert(R_ESI);
00277                         ptr<set<ulint> > move_templates = set<ulint>::create();
00278                         move_templates->insert(TEM_REGISTER_MOVE_1);
00279                         new_reg = tm_register::create(R_SI, 16, dt_list, reg_list, move_templates, lstring("SI"),0);
00280                 } break;
00281                 case R_ESI: {
00282                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00283                         dt_list->insert(DT_INT_32U);
00284                         dt_list->insert(DT_INT_32S);
00285                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00286                         reg_list->insert(R_ESI);
00287                         reg_list->insert(R_SI);
00288                         ptr<set<ulint> > move_templates = set<ulint>::create();
00289                         move_templates->insert(TEM_REGISTER_MOVE_1);
00290                         new_reg = tm_register::create(R_ESI, 32, dt_list, reg_list, move_templates, lstring("ESI"),0);
00291                 } break;
00292                 case R_COND: {
00293                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00294                         dt_list->insert(DT_COND);
00295                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00296                         reg_list->insert(R_COND);
00297                         ptr<set<ulint> > move_templates = set<ulint>::create();
00298                         move_templates->insert(TEM_REGISTER_MOVE_2);
00299                         move_templates->insert(TEM_REGISTER_MOVE_3);
00300                         move_templates->insert(TEM_REGISTER_MOVE_4);
00301                         new_reg = tm_register::create(R_COND, 8, dt_list, reg_list, move_templates, lstring(""),0);
00302                 } break;
00303                 case R_ESP: {
00304                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00305                         dt_list->insert(DT_INT_32U);
00306                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00307                         reg_list->insert(R_ESP);
00308                         ptr<set<ulint> > move_templates = set<ulint>::create();
00309                         move_templates->insert(TEM_REGISTER_MOVE_5);
00310                         new_reg = tm_register::create(R_ESP, 32, dt_list, reg_list, move_templates, lstring("ESP"),RF_NOSPILL);
00311                 } break;
00312                 case R_EBP: {
00313                         ptr<set<tm_data_type_base::id_type> > dt_list = set<tm_data_type_base::id_type>::create();
00314                         dt_list->insert(DT_INT_32U);
00315                         ptr<set<tm_register_base::id_type> > reg_list = set<tm_register_base::id_type>::create();
00316                         reg_list->insert(R_EBP);
00317                         ptr<set<ulint> > move_templates = set<ulint>::create();
00318                         move_templates->insert(TEM_REGISTER_MOVE_5);
00319                         new_reg = tm_register::create(R_EBP, 32, dt_list, reg_list, move_templates, lstring("EBP"),RF_NOSPILL);
00320                 } break;
00321 
00322                 default: lassert(false); break;
00323 
00324         }
00325 
00326         lassert(new_reg);
00327         id_to_instance_get()->insert(::std::pair<tm_register_base::id_type, srp<tm_register> >(id,new_reg));
00328         return new_reg;
00329 }
00330 
00331 end_package(registers);
00332 end_package(md);
00333 end_package(lestes);

Generated on Mon Feb 12 18:23:43 2007 for lestes by doxygen 1.5.1-20070107