00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "itanium_gen.h"
00043 #include "ekapi_itanium.h"
00044
00045 void Print_Resource(FILE *c_file)
00046 {
00047 RESOURCE::Output_All(c_file);
00048 }
00049
00050 void Print_SI(void *pknobs, FILE *c_file)
00051 {
00052 int fu_count,fu_index;
00053
00054 fu_count = KAPI_fuCount(pknobs);
00055 for (fu_index=0; fu_index<fu_count; fu_index++)
00056 {
00057 SCHE_INFO *si = new SCHE_INFO(pknobs, fu_index);
00058 si->Output_SI(pknobs, c_file);
00059 }
00060
00061
00062
00063
00064
00065 SCHE_INFO *si_unknown = new SCHE_INFO(pknobs, "Dummy instructions" );
00066 si_unknown->Output_SI(pknobs, c_file);
00067
00068
00069 SCHE_INFO *si_dummy = new SCHE_INFO(pknobs, "dummy" );
00070 si_dummy->Req_Issue_Resource();
00071 si_dummy->Output_SI(pknobs, c_file);
00072
00073 SCHE_INFO::Output_SI_ID(c_file);
00074 }
00075
00076 void Print_Top_Si(void *pknobs, FILE *c_file)
00077 {
00078 SCHE_INFO::Output_OP_SI(pknobs, c_file);
00079 }
00080
00081 void Itanium_Generator(void *pknobs, GEN_MODE mode, MACHINE_TYPE type)
00082 {
00083 FILE *c_file;
00084 int issue_width, max_slot, bundle_width;
00085 int issue_res_id, sem_res_id;
00086
00087 if (type == MCK_TYPE)
00088 Init_Module_Files(mode, "itanium_mck",&c_file);
00089 else
00090 Init_Module_Files(mode, "itanium",&c_file);
00091
00092 fprintf(c_file, "#include \"ti_si.h\"\n");
00093
00094 bundle_width = KAPI_BundleIssueWidth(pknobs, -1);
00095 max_slot = EKAPI_GetMaxSlot(pknobs);
00096 issue_width = bundle_width * max_slot;
00097
00098 EKAPI_ClearResource();
00099
00100
00101
00102 EKAPI_CreatResource("issue", issue_width, 1);
00103 EKAPI_CreatResource("sem", 1);
00104
00105 if (type == MCK_TYPE) {
00106 EKAPI_MapResource(pknobs, "integer_or_memory", 0,
00107 kapi_utI, 0,
00108 kapi_utI, 1,
00109 kapi_utM, 0,
00110 kapi_utM, 1,
00111 kapi_utM, 2,
00112 kapi_utM, 3, -1);
00113 EKAPI_MapResource(pknobs, "memory", 0,
00114 kapi_utM, 0,
00115 kapi_utM, 1,
00116 kapi_utM, 2,
00117 kapi_utM, 3, -1);
00118 EKAPI_MapResource(pknobs, "memory_ld", 0,
00119 kapi_utM, 0,
00120 kapi_utM, 1, -1);
00121 EKAPI_MapResource(pknobs, "memory_st", 0,
00122 kapi_utM, 2,
00123 kapi_utM, 3, -1);
00124 EKAPI_MapResource(pknobs, "memory0", 0,
00125 kapi_utM, 0, -1);
00126 EKAPI_MapResource(pknobs, "memory2", 0,
00127 kapi_utM, 2, -1);
00128
00129 } else {
00130 EKAPI_MapResource(pknobs, "integer_or_memory", 0,
00131 kapi_utI, 0,
00132 kapi_utI, 1,
00133 kapi_utM, 0,
00134 kapi_utM, 1, -1);
00135 EKAPI_MapResource(pknobs, "memory", 0,
00136 kapi_utM, 0,
00137 kapi_utM, 1, -1);
00138 EKAPI_MapResource(pknobs, "memory0", 0,
00139 kapi_utM, 0, -1);
00140 }
00141 EKAPI_MapResource(pknobs, "floating-point", 0,
00142 kapi_utF, 0,
00143 kapi_utF, 1, -1);
00144 EKAPI_MapResource(pknobs, "floating-point0", 0,
00145 kapi_utF, 0, -1);
00146 EKAPI_MapResource(pknobs, "integer", 0,
00147 kapi_utI, 0,
00148 kapi_utI, 1, -1);
00149 EKAPI_MapResource(pknobs, "integer0", 0,
00150 kapi_utI, 0, -1);
00151 EKAPI_MapResource(pknobs, "branch", 0,
00152 kapi_utB, 0,
00153 kapi_utB, 1,
00154 kapi_utB, 2, -1);
00155 EKAPI_MapResource(pknobs, "B0_or_B1", 0,
00156 kapi_utB, 0,
00157 kapi_utB, 1, -1);
00158 EKAPI_MapResource(pknobs, "B0_or_B2", 0,
00159 kapi_utB, 0,
00160 kapi_utB, 2, -1);
00161 EKAPI_MapResource(pknobs, "B2", 0,
00162 kapi_utB, 2, -1);
00163
00164
00165
00166 Print_Resource(c_file);
00167
00168
00169 Print_SI(pknobs, c_file);
00170
00171
00172 Print_Top_Si(pknobs, c_file);
00173
00174
00175 fclose(c_file);
00176
00177 }