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
00043
00044
00045
00046
00047
00048
00049
00050 #include <stddef.h>
00051 #include "abi_properties_gen.h"
00052 #include "targ_isa_registers.h"
00053
00054 static ABI_PROPERTY
00055 allocatable,
00056 callee,
00057 caller,
00058 func_arg,
00059 func_val,
00060 stack_ptr,
00061 frame_ptr,
00062 static_link,
00063 global_ptr,
00064 entry_ptr,
00065 zero,
00066 tmp1,
00067 tmp2,
00068 #if defined(TARG_SL2)
00069 c2acc,
00070 c2cond,
00071 c2mvsel,
00072 c2vlcs,
00073 c2movpat,
00074 #endif
00075 #if defined(TARG_SL)
00076 jump_addr,
00077 loop_count,
00078 accum,
00079 addr_reg,
00080 loopcount0,
00081 loopcount1,
00082 loopcount2,
00083 loopcount3,
00084 #endif
00085 hi_reg,
00086 lo_reg,
00087 #if defined(TARG_SL)
00088 acc0,
00089 acc1,
00090 acc2,
00091 acc3,
00092 add0,
00093 add1,
00094 add2,
00095 add3,
00096 add4,
00097 add5,
00098 add6,
00099 add7,
00100 addrsize0,
00101 addrsize1,
00102 addrsize2,
00103 addrsize3,
00104 addrsize4,
00105 addrsize5,
00106 addrsize6,
00107 addrsize7,
00108 #endif
00109 ret_addr;
00110
00111
00112 static void n64_abi(void)
00113 {
00114 static const char *integer_names[32] = {
00115 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
00116 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
00117 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
00118 NULL, "$t9", NULL, NULL, "$gp", "$sp", "$fp", NULL,
00119 };
00120
00121 Reg_Names(ISA_REGISTER_CLASS_integer, 0, 31, integer_names);
00122
00123 Reg_Property(allocatable, ISA_REGISTER_CLASS_integer,
00124 1, 2, 3, 4, 5, 6, 7,
00125 8, 9, 10, 11, 12, 13, 14, 15,
00126 16, 17, 18, 19, 20, 21, 22, 23,
00127 24, 25, 30,
00128 -1);
00129 Reg_Property(callee, ISA_REGISTER_CLASS_integer,
00130 16, 17, 18, 19, 20, 21, 22, 23,
00131 28, 29, 30,
00132 -1);
00133 Reg_Property(caller, ISA_REGISTER_CLASS_integer,
00134 1, 2, 3, 4, 5, 6, 7,
00135 8, 9, 10, 11, 12, 13, 14, 15,
00136
00137 24, 25,26, 27, 31,
00138 -1);
00139 Reg_Property(func_arg, ISA_REGISTER_CLASS_integer,
00140 4, 5, 6, 7,
00141 8, 9, 10, 11,
00142 -1);
00143 Reg_Property(func_val, ISA_REGISTER_CLASS_integer,
00144 2, 3,
00145 -1);
00146 Reg_Property(static_link, ISA_REGISTER_CLASS_integer,
00147 2,
00148 -1);
00149 Reg_Property(global_ptr, ISA_REGISTER_CLASS_integer,
00150 28,
00151 -1);
00152 Reg_Property(entry_ptr, ISA_REGISTER_CLASS_integer,
00153 25,
00154 -1);
00155 Reg_Property(stack_ptr, ISA_REGISTER_CLASS_integer,
00156 29,
00157 -1);
00158 Reg_Property(frame_ptr, ISA_REGISTER_CLASS_integer,
00159 30,
00160 -1);
00161 Reg_Property(ret_addr, ISA_REGISTER_CLASS_integer,
00162 31,
00163 -1);
00164
00165
00166 Reg_Property(zero, ISA_REGISTER_CLASS_integer,
00167 0,
00168 -1);
00169
00170 Reg_Property(allocatable, ISA_REGISTER_CLASS_float,
00171 0, 1, 2, 3, 4, 5, 6, 7,
00172 8, 9, 10, 11, 12, 13, 14, 15,
00173 16, 17, 18, 19, 20, 21, 22, 23,
00174 24, 25, 26, 27, 28, 29, 30, 31,
00175 -1);
00176
00177 Reg_Property(callee, ISA_REGISTER_CLASS_float,
00178 20, 22,
00179 24, 26, 28, 30,
00180 -1);
00181 Reg_Property(caller, ISA_REGISTER_CLASS_float,
00182 0, 1, 2, 3, 4, 5, 6, 7,
00183 8, 9, 10, 11, 12, 13, 14, 15,
00184 16, 17, 18, 19, 21, 23,
00185 25, 27, 29, 31,
00186 -1);
00187 Reg_Property(func_arg, ISA_REGISTER_CLASS_float,
00188 12, 13, 14, 15,
00189 16, 17, 18, 19,
00190 -1);
00191 Reg_Property(func_val, ISA_REGISTER_CLASS_float,
00192 0, 2,
00193 -1);
00194 Reg_Property(allocatable, ISA_REGISTER_CLASS_fcc,
00195 0, 1, 2, 3, 4, 5, 6, 7,
00196 -1);
00197 Reg_Property(callee, ISA_REGISTER_CLASS_fcc,
00198 -1);
00199 Reg_Property(caller, ISA_REGISTER_CLASS_fcc,
00200 0, 1, 2, 3, 4, 5, 6, 7,
00201 -1);
00202
00203 Reg_Property(allocatable, ISA_REGISTER_CLASS_hilo,
00204 -1);
00205 Reg_Property(callee, ISA_REGISTER_CLASS_hilo,
00206 -1);
00207 Reg_Property(caller, ISA_REGISTER_CLASS_hilo,
00208 -1);
00209 }
00210
00211 main()
00212 {
00213 ABI_Properties_Begin("MIPS");
00214
00215 allocatable = Create_Reg_Property("allocatable");
00216 callee = Create_Reg_Property("callee");
00217 caller = Create_Reg_Property("caller");
00218 func_arg = Create_Reg_Property("func_arg");
00219 func_val = Create_Reg_Property("func_val");
00220 stack_ptr = Create_Reg_Property("stack_ptr");
00221 frame_ptr = Create_Reg_Property("frame_ptr");
00222 static_link = Create_Reg_Property("static_link");
00223 global_ptr = Create_Reg_Property("global_ptr");
00224 entry_ptr = Create_Reg_Property("entry_ptr");
00225 zero = Create_Reg_Property("zero");
00226 tmp1 = Create_Reg_Property("tmp1");
00227 tmp2 = Create_Reg_Property("tmp2");
00228 ret_addr = Create_Reg_Property("ret_addr");
00229 #ifdef TARG_SL
00230 jump_addr = Create_Reg_Property("jump_addr");
00231 loop_count = Create_Reg_Property("loop_count");
00232 accum = Create_Reg_Property("accum");
00233 addr_reg = Create_Reg_Property("addr_reg");
00234 loopcount0 = Create_Reg_Property("loopcount0");
00235 loopcount1 = Create_Reg_Property("loopcount1");
00236 loopcount2 = Create_Reg_Property("loopcount2");
00237 loopcount3 = Create_Reg_Property("loopcount3");
00238 #ifdef TARG_SL2
00239 c2acc = Create_Reg_Property("c2acc");
00240 c2cond = Create_Reg_Property("c2cond");
00241 c2mvsel = Create_Reg_Property("c2mvsel");
00242 c2vlcs = Create_Reg_Property("c2vlcs");
00243 c2movpat = Create_Reg_Property("c2movpat");
00244 #endif
00245 #endif
00246 hi_reg = Create_Reg_Property("hi_reg");
00247 lo_reg= Create_Reg_Property("lo_reg");
00248 #ifdef TARG_SL
00249 acc0 = Create_Reg_Property("acc0");
00250 acc1 = Create_Reg_Property("acc1");
00251 acc2 = Create_Reg_Property("acc2");
00252 acc3 = Create_Reg_Property("acc3");
00253 add0 = Create_Reg_Property("add0");
00254 add1 = Create_Reg_Property("add1");
00255 add2 = Create_Reg_Property("add2");
00256 add3 = Create_Reg_Property("add3");
00257 add4 = Create_Reg_Property("add4");
00258 add5 = Create_Reg_Property("add5");
00259 add6 = Create_Reg_Property("add6");
00260 add7 = Create_Reg_Property("add7");
00261 addrsize0 = Create_Reg_Property("addrsize0");
00262 addrsize1 = Create_Reg_Property("addrsize1");
00263 addrsize2 = Create_Reg_Property("addrsize2");
00264 addrsize3 = Create_Reg_Property("addrsize3");
00265 addrsize4 = Create_Reg_Property("addrsize4");
00266 addrsize5 = Create_Reg_Property("addrsize5");
00267 addrsize6 = Create_Reg_Property("addrsize6");
00268 addrsize7 = Create_Reg_Property("addrsize7");
00269 #endif
00270 Begin_ABI("n32");
00271 n64_abi();
00272
00273 Begin_ABI("n64");
00274 n64_abi();
00275
00276 ABI_Properties_End();
00277 }
00278