00001
00002 #include <lestes/std/map.hh>
00003 #include <lestes/md/types/tm_data_type.g.hh>
00004 #include <lestes/md/registers/tm_register.g.hh>
00005
00006
00007
00008
00009
00010
00011 package(lestes);
00012 package(md);
00013 package(types);
00014
00015 using ::lestes::md::registers::tm_register;
00016
00017 ptr<tm_dt_simple> tm_dt_simple::instance(dt_id_type id) {
00018 map<dt_id_type, srp<tm_dt_simple> >::iterator existing_type = id_to_instance_get()->find(id);
00019
00020 if ( existing_type != id_to_instance_get()->end() ) {
00021 return existing_type->second;
00022 }
00023
00024 ptr<tm_dt_simple> new_type = NULL;
00025 switch(id) {
00026 case DT_COND: {
00027 new_type = tm_dt_simple::create(DT_COND, FORMAT_C2, 8, 8, NULL, lstring("BYTE"), lstring("db"));
00028 } break;
00029 case DT_BOOL: {
00030 new_type = tm_dt_simple::create(DT_BOOL, FORMAT_C2, 8, 8, tm_register::instance(::lestes::md::registers::R_AL), lstring("BYTE"), lstring("db"));
00031 } break;
00032 case DT_INT_8P: {
00033 new_type = tm_dt_simple::create(DT_INT_8P, FORMAT_C2, 8, 8, tm_register::instance(::lestes::md::registers::R_AL), lstring("BYTE"), lstring("db"));
00034 } break;
00035 case DT_INT_8U: {
00036 new_type = tm_dt_simple::create(DT_INT_8U, FORMAT_C2, 8, 8, tm_register::instance(::lestes::md::registers::R_AL), lstring("BYTE"), lstring("db"));
00037 } break;
00038 case DT_INT_8S: {
00039 new_type = tm_dt_simple::create(DT_INT_8S, FORMAT_C2, 8, 8, tm_register::instance(::lestes::md::registers::R_AL), lstring("BYTE"), lstring("db"));
00040 } break;
00041 case DT_INT_16S: {
00042 new_type = tm_dt_simple::create(DT_INT_16S, FORMAT_C2, 16, 16, tm_register::instance(::lestes::md::registers::R_AX), lstring("WORD"), lstring("dw"));
00043 } break;
00044 case DT_INT_16U: {
00045 new_type = tm_dt_simple::create(DT_INT_16U, FORMAT_C2, 16, 16, tm_register::instance(::lestes::md::registers::R_AX), lstring("WORD"), lstring("dw"));
00046 } break;
00047 case DT_INT_32S: {
00048 new_type = tm_dt_simple::create(DT_INT_32S, FORMAT_C2, 32, 32, tm_register::instance(::lestes::md::registers::R_EAX), lstring("DWORD"), lstring("dd"));
00049 } break;
00050 case DT_INT_32U: {
00051 new_type = tm_dt_simple::create(DT_INT_32U, FORMAT_C2, 32, 32, tm_register::instance(::lestes::md::registers::R_EAX), lstring("DWORD"), lstring("dd"));
00052 } break;
00053 default: lassert(false);
00054
00055 }
00056
00057 lassert(new_type);
00058 id_to_instance_get()->insert(::std::pair<dt_id_type, srp<tm_dt_simple> >(id,new_type));
00059 return new_type;
00060 }
00061
00062 end_package(types);
00063 end_package(md);
00064 end_package(lestes);