diff --git a/configs/boot/ammp.rcS b/configs/boot/ammp.rcS new file mode 100644 index 000000000..485244c3c --- /dev/null +++ b/configs/boot/ammp.rcS @@ -0,0 +1,12 @@ +#!/bin/sh + +cd /benchmarks/spec/ammp00/ + +/sbin/m5 checkpoint 0 0 +/sbin/m5 checkpoint 100000000 200000000 + +/sbin/m5 loadsymbol + +/sbin/m5 resetstats +./ammp < input/mdred.in +/sbin/m5 exit diff --git a/configs/boot/ammp.symbol b/configs/boot/ammp.symbol new file mode 100644 index 000000000..93ef40555 --- /dev/null +++ b/configs/boot/ammp.symbol @@ -0,0 +1,257 @@ +000000012001da40 T AMMPmonitor +000000012001dfc0 T AMMPmonitor_mute +0000000120034338 D _DYNAMIC +00000001200346c8 D _GLOBAL_OFFSET_TABLE_ +0000000120034d60 G _IO_stdin_used +0000000120034500 T _PROCEDURE_LINKAGE_TABLE_ +00000001200344e0 d __CTOR_END__ +00000001200344d8 d __CTOR_LIST__ +00000001200344f0 d __DTOR_END__ +00000001200344e8 d __DTOR_LIST__ +0000000120034334 r __FRAME_END__ +00000001200344f8 d __JCR_END__ +00000001200344f8 d __JCR_LIST__ +0000000120034da0 A __bss_start +00000001200328c8 D __data_start +0000000120020c40 t __do_global_ctors_aux +0000000120001090 t __do_global_dtors_aux +0000000120034d68 G __dso_handle +00000001200328c8 A __fini_array_end +00000001200328c8 A __fini_array_start +00000001200328c8 A __init_array_end +00000001200328c8 A __init_array_start +0000000120020ba0 T __libc_csu_fini +0000000120020af0 T __libc_csu_init +0000000120001050 W __start +0000000120034da0 A _edata +0000000120035418 A _end +0000000120020ca0 T _fini +0000000120000fe8 T _init +0000000120001050 T _start +000000012000d220 T a_angle +000000012000b3d0 T a_bond +000000012000e1b0 T a_c_angle +0000000120009cd0 T a_d_zero +0000000120009c90 T a_f_zero +0000000120009f70 T a_ftodx +000000012000a000 T a_ftogx +000000012000a090 T a_ftovx +0000000120009d20 T a_g_zero +0000000120010950 T a_hybrid +000000012000a7c0 T a_inactive_f_zero +0000000120009e50 T a_inc_d +0000000120009dc0 T a_inc_f +0000000120009ee0 T a_inc_v +000000012000a370 T a_l2_d +000000012000a220 T a_l2_f +000000012000a290 T a_l2_g +000000012000a300 T a_l2_v +0000000120008bf0 T a_m_serial +000000012000a1a0 T a_max_d +000000012000a120 T a_max_f +000000012000d570 T a_mmangle +000000012000b620 T a_mmbond +0000000120009c30 T a_next +0000000120005350 T a_noel +0000000120004700 T a_nonbon +0000000120009bc0 T a_number +00000001200096b0 T a_pr_beta +000000012000a660 T a_readvelocity +0000000120020750 T a_restrain +000000012001eda0 T a_tether +000000012001a2e0 T a_torsion +0000000120009d70 T a_v_zero +0000000120003c90 T aaerror +0000000120009a60 T activate +000000012001fef0 T alltether +0000000120004370 T analyze +000000012000c0d0 T angle +0000000120034df8 S angle_first +0000000120034e00 S angle_last +0000000120034dd0 s ap.2 +0000000120034de0 s ap.4 +0000000120008970 T atom +0000000120034dc8 s atomNUMBER +0000000120034dcc s atomUPDATE +000000012000a8b0 T bond +0000000120034de8 S bond_first +0000000120034df0 S bond_last +000000012000bf20 T bond_length +000000012001f240 T bstrot +0000000120034ea0 b buff.0 +000000012001ad40 T cngdel +0000000120034da0 s completed.1 +00000001200200c0 T cpyvec +00000001200328c8 W data_start +0000000120034d98 g dielecold.0 +000000012000efe0 T dump_angles +0000000120008d00 T dump_atoms +000000012000be40 T dump_bonds +000000012000a3e0 T dump_excludes +000000012000a6c0 T dump_force +0000000120011a50 T dump_hybrids +0000000120005c20 T dump_noels +0000000120008f40 T dump_pdb +0000000120020a10 T dump_restrains +000000012001ffe0 T dump_tethers +0000000120017b30 T dump_tgroup +000000012001a170 T dump_torsions +000000012001b7a0 T dump_variable +000000012000a590 T dump_velocity +0000000120034d7c g echo.0 +0000000120001760 T eval +000000012000c580 T f_angle +000000012000ac60 T f_bond +0000000120001230 T f_box +000000012000dc50 T f_c_angle +000000012000ea10 T f_ho_angle +000000012000bab0 T f_ho_bond +0000000120011020 T f_ho_hybrid +0000000120005840 T f_ho_noel +000000012001fca0 T f_ho_tether +00000001200102b0 T f_hybrid +000000012000cd10 T f_mmangle +000000012000b0e0 T f_mmbond +0000000120005060 T f_noel +00000001200155d0 T f_nonbon +0000000120020500 T f_restrain +000000012001ebd0 T f_tether +0000000120019850 T f_torsion +000000012000fbd0 T f_trace +0000000120034db8 S first +0000000120035058 B forces +0000000120001130 t frame_dummy +0000000120014b20 T fv_update_nonbon +0000000120034e58 s fx.0 +0000000120034e60 s fy.1 +0000000120034e68 s fz.2 +000000012000ef40 T get_angle +000000012000bda0 T get_bond +000000012000c050 T get_bond_pointer +000000012001b6e0 T get_f_variable +00000001200119b0 T get_hybrid +000000012001b740 T get_i_variable +0000000120005b80 T get_noel +0000000120020970 T get_restrain +000000012001a9f0 T get_torsion +00000001200184a0 T get_torsion_value +000000012001ca50 T getatomdata +000000012000f130 T gsdg +000000012000e5a0 T gsdg_angle +000000012000bfc0 T gsdg_bond +000000012000f810 T gsdg_dgeom +0000000120011790 T gsdg_hybrid +000000012000f6c0 T gsdg_line_search +0000000120005d30 T gsdg_noel +000000012001a850 T gsdg_torsion +0000000120034d84 g highest.0 +0000000120007490 T hpac +000000012000fe30 T hybrid +0000000120034e08 S hybrid_first +0000000120034e10 S hybrid_last +0000000120034e70 S in_mom_list +0000000120009920 T inactivate +00000001200097a0 T inactivate_non_zero +0000000120034d80 g inloop.1 +0000000120034e74 s ip.1 +0000000120034e78 s jp.2 +0000000120034e7c s kp.3 +0000000120034dc0 S last +0000000120034dd8 s lastmatched.3 +000000012001b0d0 T linmin +0000000120003f80 T loadloop +0000000120034e28 s local.3 +0000000120034d88 g lowest.1 +0000000120034e20 s lsize.2 +0000000120001180 T main +0000000120017c10 T match_tgroup +000000012001b450 T match_variable +000000012001b860 T math +000000012001cd40 T math_findlabel +000000012001ccb0 T math_match_atom +0000000120020100 T matmul +0000000120012b90 T mm_fv_update_nonbon +000000012001cef0 T mom +000000012001d3f0 T mom_add +000000012001d900 T mom_jab +00000001200350f8 B mom_list +000000012001d890 T mom_param +000000012001d600 T mom_solve +0000000120004c70 T noel +0000000120034da8 S noel_first +0000000120034db0 S noel_last +0000000120034d78 G nused +0000000120034e18 s oldatomnumber.0 +0000000120034d90 g oldcutoff.4 +0000000120034d70 g p.0 +0000000120006430 T pac +0000000120006dd0 T pacpac +00000001200350a8 B potentials +0000000120007ac0 T ppac +0000000120008180 T ptpac +000000012001e840 T rand3 +000000012001e480 T randf +000000012001e760 T randg +0000000120001550 T read_eval_do +00000001200201c0 T restrain +0000000120034e90 S restrain_first +0000000120034e98 S restrain_last +000000012001b4e0 T set_f_variable +000000012001b5e0 T set_i_variable +0000000120018730 T set_torsion +000000012001e2a0 T significance +0000000120034e1c s since.1 +000000012001aa90 T steep +0000000120018f50 T tailor_exclude +0000000120018d30 T tailor_include +0000000120019110 T tailor_qab +000000012001e940 T tether +0000000120034e80 S tether_first +0000000120034e88 S tether_last +00000001200171f0 T tg_apply +0000000120017490 T tg_d_apply +0000000120016fd0 T tg_do_search +0000000120034e30 S tg_first +0000000120017a20 T tg_gen_con +0000000120016b90 T tg_init +0000000120017700 T tg_nonbon +0000000120016220 T tgroup +0000000120004220 T tisint +0000000120003cd0 T tisvariable +00000001200189e0 T tmap +0000000120017ec0 T tmin +0000000120019190 T torsion +0000000120034e38 S torsion_first +0000000120034e40 S torsion_last +0000000120006840 T tpac +0000000120016800 T tsearch +0000000120017c80 T tset +0000000120018200 T tset_bond_build +0000000120012100 T u_f_nonbon +0000000120011b60 T u_v_nonbon +0000000120012770 T uselist +000000012000c310 T v_angle +000000012000aac0 T v_bond +0000000120001540 T v_box +000000012000d930 T v_c_angle +000000012000e750 T v_ho_angle +000000012000b8a0 T v_ho_bond +0000000120010ce0 T v_ho_hybrid +00000001200055e0 T v_ho_noel +000000012001faf0 T v_ho_tether +000000012000fff0 T v_hybrid +0000000120005dc0 T v_maxwell +000000012000ca20 T v_mmangle +000000012000aef0 T v_mmbond +0000000120004e60 T v_noel +0000000120015a80 T v_nonbon +0000000120005fd0 T v_rescale +0000000120020360 T v_restrain +000000012001eab0 T v_tether +00000001200193e0 T v_torsion +000000012000f990 T v_trace +000000012001c6f0 T validatom +0000000120034e48 S variableFIRST +0000000120034e50 S variableLAST +00000001200061a0 T verlet +0000000120015ec0 T zone_nonbon diff --git a/configs/boot/art.rcS b/configs/boot/art.rcS new file mode 100644 index 000000000..caca5889e --- /dev/null +++ b/configs/boot/art.rcS @@ -0,0 +1,7 @@ +#!/bin/sh + +#/benchmarks/spec/art00/art -scanfile c756hel.in -trainfile1 a10.img -stride 2 -startx 134 -starty 220 -endx 184 -endy 240 -objects 3 +cd /benchmarks/spec/art00/ +/sbin/m5 resetstats +/benchmarks/spec/art00/art -scanfile c756hel.in -trainfile1 a10.img -stride 5 -startx 134 -starty 220 -endx 184 -endy 240 -objects 1 +/sbin/m5 exit diff --git a/configs/boot/bonnie.rcS b/configs/boot/bonnie.rcS new file mode 100644 index 000000000..65b2fd6c9 --- /dev/null +++ b/configs/boot/bonnie.rcS @@ -0,0 +1,13 @@ +#!/bin/sh +# +# /etc/init.d/rcS +# + +echo -n "Mounting empty disk..." +mkdir /tmp-space +/bin/mount /dev/hdb1 /tmp-space +chmod a+rwx /tmp-space +echo "done." + +/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /tmp-space +m5 exit diff --git a/configs/boot/bonnie.symbol b/configs/boot/bonnie.symbol new file mode 100644 index 000000000..041753eb2 --- /dev/null +++ b/configs/boot/bonnie.symbol @@ -0,0 +1,309 @@ +0000000120025cb0 V DW.ref._ZTISt9bad_alloc +0000000120025c98 V DW.ref.__gxx_personality_v0 +0000000120025018 D _DYNAMIC +00000001200255a0 D _GLOBAL_OFFSET_TABLE_ +0000000120025c80 G _IO_stdin_used +00000001200251e0 T _PROCEDURE_LINKAGE_TABLE_ +000000012000e8a0 T _Unwind_Backtrace +000000012000e860 T _Unwind_DeleteException +000000012000c290 T _Unwind_FindEnclosingFunction +0000000120010df0 T _Unwind_Find_FDE +0000000120010850 t _Unwind_Find_registered_FDE +000000012000e470 T _Unwind_ForcedUnwind +000000012000e340 t _Unwind_ForcedUnwind_Phase2 +000000012000c260 T _Unwind_GetCFA +000000012000c2d0 T _Unwind_GetDataRelBase +000000012000e9d0 T _Unwind_GetGR +000000012000e9f0 T _Unwind_GetIP +000000012000c270 T _Unwind_GetLanguageSpecificData +000000012000c280 T _Unwind_GetRegionStart +000000012000c2e0 T _Unwind_GetTextRelBase +0000000120010ac0 t _Unwind_IteratePhdrCallback +000000012000e160 T _Unwind_RaiseException +000000012000e070 t _Unwind_RaiseException_Phase2 +000000012000e5c0 T _Unwind_Resume +000000012000e710 T _Unwind_Resume_or_Rethrow +000000012000e9e0 T _Unwind_SetGR +000000012000ea00 T _Unwind_SetIP +0000000120003cb0 T _Z10TestDirOpsiiiiR12CGlobalItems +0000000120003220 T _Z11TestFileOpsiR12CGlobalItems +0000000120009250 T _Z11bon_setugidPKcS0_b +00000001200096b4 t _Z12read_sleb128PKhPl +0000000120009678 t _Z12read_uleb128PKhPm +0000000120009a04 t _Z15get_ttype_entryP16lsda_header_infom +0000000120009a84 t _Z16get_adjusted_ptrPKSt9type_infoS1_PPv +000000012000ab40 t _Z16get_globals_dtorPv +000000012000ab9c t _Z16get_globals_initv +00000001200098a8 t _Z17parse_lsda_headerP15_Unwind_ContextPKhP16lsda_header_info +0000000120009b30 t _Z20check_exception_specP16lsda_header_infoPKSt9type_infoPvl +0000000120009be0 t _Z20empty_exception_specP16lsda_header_infol +00000001200095b4 t _Z21base_of_encoded_valuehP15_Unwind_Context +000000012000abe0 t _Z21get_globals_init_oncev +0000000120009548 t _Z21size_of_encoded_valueh +000000012000a3ec t _Z23__gxx_exception_cleanup19_Unwind_Reason_CodeP17_Unwind_Exception +000000012000970c t _Z28read_encoded_value_with_basehmPKhPm +0000000120004200 T _Z5usagev +0000000120004510 T _Z6seekerP4ForkPvi +0000000120004240 T _Z8io_errorPKcb +000000012000a310 T _ZN10__cxxabiv111__terminateEPFvvE +000000012000a374 T _ZN10__cxxabiv112__unexpectedEPFvvE +000000012000b08c T _ZN10__cxxabiv117__class_type_infoD0Ev +000000012000b058 T _ZN10__cxxabiv117__class_type_infoD1Ev +000000012000b024 T _ZN10__cxxabiv117__class_type_infoD2Ev +0000000120025ca0 G _ZN10__cxxabiv119__terminate_handlerE +000000012000b148 T _ZN10__cxxabiv120__si_class_type_infoD0Ev +000000012000b114 T _ZN10__cxxabiv120__si_class_type_infoD1Ev +000000012000b0e0 T _ZN10__cxxabiv120__si_class_type_infoD2Ev +0000000120025ca8 G _ZN10__cxxabiv120__unexpected_handlerE +000000012000b204 T _ZN10__cxxabiv121__vmi_class_type_infoD0Ev +000000012000b1d0 T _ZN10__cxxabiv121__vmi_class_type_infoD1Ev +000000012000b19c T _ZN10__cxxabiv121__vmi_class_type_infoD2Ev +00000001200024b0 T _ZN12CGlobalItems18decrement_and_waitEi +0000000120002380 T _ZN12CGlobalItemsC1EPb +0000000120002250 T _ZN12CGlobalItemsC2EPb +0000000120008de0 T _ZN4Fork2goEPFvPS_PviES1_i +0000000120009080 T _ZN4Fork4ReadEPvii +0000000120009010 T _ZN4Fork4waitEv +0000000120009160 T _ZN4Fork5WriteEPvii +0000000120008d60 T _ZN4Fork7startitEP11THREAD_DATA +0000000120008d40 T _ZN4ForkC1Ev +0000000120008d20 T _ZN4ForkC2Ev +0000000120004cd0 T _ZN7CFileOp10read_blockEPv +0000000120004f90 T _ZN7CFileOp11write_blockEPv +0000000120004e70 T _ZN7CFileOp15read_block_getcEPc +0000000120005080 T _ZN7CFileOp16write_block_putcEv +0000000120005180 T _ZN7CFileOp4openEPKcbb +0000000120004a40 T _ZN7CFileOp4seekEii +0000000120005770 T _ZN7CFileOp5closeEv +0000000120005910 T _ZN7CFileOp6doseekElb +0000000120005630 T _ZN7CFileOp6m_openEPKcib +0000000120005430 T _ZN7CFileOp6reopenEbb +0000000120004760 T _ZN7CFileOp9seek_testEbR9Semaphore +0000000120005330 T _ZN7CFileOpC1ER8BonTimeriib +0000000120005230 T _ZN7CFileOpC2ER8BonTimeriib +0000000120004400 T _ZN7CFileOpD1Ev +00000001200042f0 T _ZN7CFileOpD2Ev +0000000120007b40 T _ZN8BonTimer10InitializeEv +0000000120007820 T _ZN8BonTimer10cpu_so_farEv +0000000120007c80 T _ZN8BonTimer10print_statE7tests_t +0000000120007f80 T _ZN8BonTimer11PrintHeaderEP8_IO_FILE +00000001200078f0 T _ZN8BonTimer11get_cpu_useEv +0000000120007970 T _ZN8BonTimer11get_delta_tE7tests_t +00000001200077e0 T _ZN8BonTimer11time_so_farEv +0000000120007860 T _ZN8BonTimer12get_cur_timeEv +0000000120007b70 T _ZN8BonTimer14print_cpu_statE7tests_t +0000000120007e40 T _ZN8BonTimer15print_file_statE7tests_t +0000000120007a10 T _ZN8BonTimer16add_delta_reportER8report_s7tests_t +00000001200079c0 T _ZN8BonTimer16get_delta_reportER8report_s +0000000120008030 T _ZN8BonTimer8DoReportEPKciiiiiiP8_IO_FILE +0000000120007790 T _ZN8BonTimer9timestampEv +0000000120007b00 T _ZN8BonTimerC1Ev +0000000120007ac0 T _ZN8BonTimerC2Ev +00000001200061a0 T _ZN9COpenTest10make_namesEb +0000000120005bf0 T _ZN9COpenTest11random_sortEv +0000000120007400 T _ZN9COpenTest11stat_randomER8BonTimer +0000000120006520 T _ZN9COpenTest13create_a_fileEPKcPcii +0000000120006710 T _ZN9COpenTest13create_a_linkEPKcS1_i +0000000120006c50 T _ZN9COpenTest13delete_randomER8BonTimer +00000001200074c0 T _ZN9COpenTest15stat_sequentialER8BonTimer +0000000120006f10 T _ZN9COpenTest17delete_sequentialER8BonTimer +0000000120006830 T _ZN9COpenTest6createEPKcR8BonTimeriiiib +0000000120007280 T _ZN9COpenTest9stat_fileEPKc +0000000120005b50 T _ZN9COpenTestC1EibPb +0000000120005ab0 T _ZN9COpenTestC2EibPb +0000000120005f40 T _ZN9COpenTestD1Ev +0000000120005ce0 T _ZN9COpenTestD2Ev +0000000120008aa0 T _ZN9Semaphore18decrement_and_waitEi +0000000120008920 T _ZN9Semaphore6createEi +0000000120008850 T _ZN9Semaphore9clear_semEv +0000000120008be0 T _ZN9Semaphore9get_mutexEv +0000000120008a10 T _ZN9Semaphore9get_semidEv +0000000120008c80 T _ZN9Semaphore9put_mutexEv +00000001200087d0 T _ZN9SemaphoreC1Eiii +0000000120008750 T _ZN9SemaphoreC2Eiii +000000012000b258 T _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj +000000012000ba74 T _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE +000000012000b2b8 T _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv +000000012000b4c0 T _ZNK10__cxxabiv117__class_type_info12__do_dyncastElNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE +000000012000b330 T _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcElPKvPKS0_S2_ +000000012000baa4 T _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE +000000012000b510 T _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE +000000012000b340 T _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_ +000000012000bb38 T _ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE +000000012000b5c4 T _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE +000000012000b394 T _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_ +000000012000ab30 T _ZNKSt9exception4whatEv +000000012000b00c T _ZNKSt9type_info10__do_catchEPKS_PPvj +000000012000b01c T _ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv +000000012000affc T _ZNKSt9type_info14__is_pointer_pEv +000000012000b004 T _ZNKSt9type_info15__is_function_pEv +000000012000afa8 T _ZNSt10bad_typeidD0Ev +000000012000af74 T _ZNSt10bad_typeidD1Ev +000000012000af40 T _ZNSt10bad_typeidD2Ev +000000012000aadc T _ZNSt13bad_exceptionD0Ev +000000012000aaa8 T _ZNSt13bad_exceptionD1Ev +000000012000aa74 T _ZNSt13bad_exceptionD2Ev +000000012000aeec T _ZNSt8bad_castD0Ev +000000012000aeb8 T _ZNSt8bad_castD1Ev +000000012000ae84 T _ZNSt8bad_castD2Ev +000000012000add4 T _ZNSt9bad_allocD0Ev +000000012000ada0 T _ZNSt9bad_allocD1Ev +000000012000ad6c T _ZNSt9bad_allocD2Ev +000000012000aa40 T _ZNSt9exceptionD0Ev +000000012000aa2c T _ZNSt9exceptionD1Ev +000000012000aa18 T _ZNSt9exceptionD2Ev +000000012000ae50 T _ZNSt9type_infoD0Ev +000000012000ae3c T _ZNSt9type_infoD1Ev +000000012000ae28 T _ZNSt9type_infoD2Ev +000000012000a39c T _ZSt10unexpectedv +000000012000a3bc T _ZSt13set_terminatePFvvE +000000012000a3d4 T _ZSt14set_unexpectedPFvvE +000000012000ad54 T _ZSt15set_new_handlerPFvvE +000000012000a9e4 T _ZSt18uncaught_exceptionv +0000000120025cd0 G _ZSt7nothrow +000000012000a354 T _ZSt9terminatev +00000001200127d8 V _ZTIN10__cxxabiv117__class_type_infoE +00000001200127f0 V _ZTIN10__cxxabiv120__si_class_type_infoE +0000000120012808 V _ZTIN10__cxxabiv121__vmi_class_type_infoE +00000001200127c0 V _ZTISt10bad_typeid +0000000120012578 V _ZTISt13bad_exception +00000001200127a8 V _ZTISt8bad_cast +00000001200125d8 V _ZTISt9bad_alloc +0000000120012568 V _ZTISt9exception +0000000120012798 V _ZTISt9type_info +000000012001286b V _ZTSN10__cxxabiv117__class_type_infoE +0000000120012846 V _ZTSN10__cxxabiv120__si_class_type_infoE +0000000120012820 V _ZTSN10__cxxabiv121__vmi_class_type_infoE +000000012001288d V _ZTSSt10bad_typeid +0000000120012590 V _ZTSSt13bad_exception +000000012001289c V _ZTSSt8bad_cast +00000001200125f0 V _ZTSSt9bad_alloc +00000001200125a2 V _ZTSSt9exception +00000001200128a8 V _ZTSSt9type_info +00000001200126b0 V _ZTVN10__cxxabiv117__class_type_infoE +0000000120012658 V _ZTVN10__cxxabiv120__si_class_type_infoE +0000000120012600 V _ZTVN10__cxxabiv121__vmi_class_type_infoE +0000000120012708 V _ZTVSt10bad_typeid +0000000120012518 V _ZTVSt13bad_exception +0000000120012730 V _ZTVSt8bad_cast +00000001200125b0 V _ZTVSt9bad_alloc +0000000120012540 V _ZTVSt9exception +0000000120012758 V _ZTVSt9type_info +0000000120025cb8 g _ZZ18__gthread_active_pvE20__gthread_active_ptr +0000000120025cc8 g _ZZ18__gthread_active_pvE20__gthread_active_ptr +0000000120025cc4 g _ZZ21get_globals_init_oncevE4once +0000000120009518 T _ZdlPv +000000012000a648 T _Znam +000000012000a580 T _Znwm +00000001200251c0 d __CTOR_END__ +00000001200251b8 d __CTOR_LIST__ +00000001200251d0 d __DTOR_END__ +00000001200251c8 d __DTOR_LIST__ +0000000120024f30 r __FRAME_END__ +00000001200251d8 d __JCR_END__ +00000001200251d8 d __JCR_LIST__ +0000000120025ce8 A __bss_start +000000012000a694 T __cxa_allocate_exception +000000012000a884 T __cxa_begin_catch +000000012000a19c T __cxa_call_unexpected +000000012000a930 T __cxa_end_catch +000000012000a7b4 T __cxa_free_exception +000000012000ac84 T __cxa_get_globals +000000012000ac3c T __cxa_get_globals_fast +000000012000a4f8 T __cxa_rethrow +000000012000a45c T __cxa_throw +0000000120024000 D __data_start +000000012000fa50 T __deregister_frame +000000012000fa20 T __deregister_frame_info +000000012000f8c0 T __deregister_frame_info_bases +0000000120011470 t __do_global_ctors_aux +0000000120002160 t __do_global_dtors_aux +0000000120025c88 G __dso_handle +000000012000bd74 T __dynamic_cast +0000000120024000 A __fini_array_end +0000000120024000 A __fini_array_start +000000012000d250 T __frame_state_for +0000000120025ce0 g __gthread_active_ptr.0 +0000000120025cd8 g __gthread_active_ptr.1 +0000000120009c28 T __gxx_personality_v0 +0000000120024000 A __init_array_end +0000000120024000 A __init_array_start +00000001200113e0 T __libc_csu_fini +0000000120011350 T __libc_csu_init +0000000120025d00 S __new_handler +000000012000f6f0 T __register_frame +000000012000f6b0 T __register_frame_info +000000012000f5f0 T __register_frame_info_bases +000000012000f820 T __register_frame_info_table +000000012000f760 T __register_frame_info_table_bases +000000012000f860 T __register_frame_table +0000000120002120 W __start +0000000120025ce8 A _edata +0000000120035db0 A _end +00000001200114d0 T _fini +00000001200020b0 T _init +0000000120002120 T _start +0000000120010250 t add_fdes +0000000120025cea s already_printed_error +00000001200094b0 T arm +0000000120010a30 t base_from_cb_data +000000012000fab0 t base_from_object +000000012000bf50 t base_of_encoded_value +00000001200094f8 T checkpoint +00000001200100e0 t classify_object_over_fdes +0000000120025ce8 s completed.1 +00000001200024f0 T ctrl_c_handler +0000000120024000 W data_start +0000000120009508 T debugbreak +00000001200094e8 T dump_stats +00000001200094f0 T dumpreset_stats +0000000120035d40 b dwarf_reg_size_table +0000000120025d30 b emergency_buffer +0000000120024008 d emergency_mutex +0000000120025cf0 s emergency_used +000000012000caa0 t execute_cfa_program +000000012000c520 t execute_stack_op +0000000120025ce9 s exitNow +000000012000c2f0 t extract_cie_info +000000012000fd20 t fde_mixed_encoding_compare +000000012000fc60 t fde_single_encoding_compare +00000001200111d0 t fde_split +000000012000fc30 t fde_unencoded_compare +0000000120002200 t frame_dummy +000000012000fe00 t frame_heapsort +000000012000fb40 t get_cie_encoding +0000000120025cf8 s globals_key +0000000120035d30 b globals_static +000000012000ea10 t init_dwarf_reg_size_table +0000000120010e90 t init_object +00000001200094d8 T initparam +00000001200094c0 T ivlb +00000001200094c8 T ivle +00000001200103d0 t linear_search_fdes +00000001200094d0 T m5exit +0000000120002590 T main +0000000120025d10 s marker.1 +0000000120035d88 b object_mutex +0000000120025d08 s once_regsizes.0 +0000000120025c90 g p.0 +00000001200094b8 T quiesce +000000012000c0d0 t read_encoded_value_with_base +000000012000f460 t read_encoded_value_with_base +000000012000c060 t read_sleb128 +000000012000f3f0 t read_sleb128 +000000012000c020 t read_uleb128 +000000012000f3b0 t read_uleb128 +0000000120009500 T readfile +00000001200094e0 T reset_stats +0000000120010560 t search_object +0000000120025d20 s seen_objects +000000012000bed0 t size_of_encoded_value +000000012000f330 t size_of_encoded_value +0000000120009510 T switchcpu +0000000120025d18 s unseen_objects +0000000120025cc0 g use_thread_key +000000012000cf90 t uw_frame_state_for +000000012000d590 t uw_init_context_1 +000000012000d650 t uw_install_context_1 +000000012000d540 t uw_update_context +000000012000d390 t uw_update_context_1 diff --git a/configs/boot/bzip.rcS b/configs/boot/bzip.rcS new file mode 100644 index 000000000..369659ca0 --- /dev/null +++ b/configs/boot/bzip.rcS @@ -0,0 +1,6 @@ +#!/bin/sh + +cd /benchmarks/spec/bzip200/ +/sbin/m5 resetstats +/benchmarks/spec/bzip200/bzip2 lgred.graphic 1 +/sbin/m5 exit diff --git a/configs/boot/cc1.symbol b/configs/boot/cc1.symbol new file mode 100644 index 000000000..16c16912b --- /dev/null +++ b/configs/boot/cc1.symbol @@ -0,0 +1,3454 @@ +00000001201fec60 G DFbignan +00000001201fec68 G DFlittlenan +0000000120006f30 T GNU_xref_begin +0000000120006f70 T GNU_xref_end +00000001201e9b60 d Reg_names +00000001201fec70 G SFbignan +00000001201fec74 G SFlittlenan +00000001201e9ff8 D TFbignan +00000001201ea008 D TFlittlenan +00000001201e82c8 D W_options +00000001201ea018 D XFbignan +00000001201ea024 D XFlittlenan +00000001201fad48 D _DYNAMIC +00000001201fb210 D _GLOBAL_OFFSET_TABLE_ +00000001201febe8 G _IO_stdin_used +00000001201faf10 T _PROCEDURE_LINKAGE_TABLE_ +00000001201faef0 d __CTOR_END__ +00000001201faee8 d __CTOR_LIST__ +00000001201faf00 d __DTOR_END__ +00000001201faef8 d __DTOR_LIST__ +00000001201fad44 r __FRAME_END__ +00000001201faf08 d __JCR_END__ +00000001201faf08 d __JCR_LIST__ +00000001201fecdc A __bss_start +00000001201e6a58 D __data_start +000000012019eb20 t __do_global_ctors_aux +00000001200019e0 t __do_global_dtors_aux +00000001201febf0 G __dso_handle +00000001201e6a58 A __fini_array_end +00000001201e6a58 A __fini_array_start +00000001201e6a58 A __init_array_end +00000001201e6a58 A __init_array_start +000000012019ea80 T __libc_csu_fini +000000012019e9d0 T __libc_csu_init +00000001200019a0 W __start +00000001201fecdc A _edata +00000001202157c8 A _end +000000012019eb80 T _fini +0000000120001938 T _init +00000001200019a0 T _start +00000001202003e8 S abs_optab +00000001200d89c0 t abstract_origin_attribute +000000012016a550 t actual_hazard +000000012016af00 t actual_hazard_this_instance +000000012016fb20 t add_bb_string +00000001201831a0 T add_clobbers +00000001201ff138 s add_cost +0000000120200858 S add_cost +0000000120164b10 t add_dependence +0000000120055d40 T add_double +00000001200b4c60 T add_insn +00000001200b2c40 T add_insn_after +00000001200b2d90 T add_insn_before +000000012002f860 t add_ixpansion +00000001200fed90 t add_label_notes +0000000120197770 T add_operand +0000000120200408 S add_optab +000000012015d210 t add_to_delay_list +00000001201ff5f8 s added_links_insn +00000001201ff4c0 s addr_combined_regs +00000001201ff4b8 s addr_placeholder +00000001201731d0 T address_operand +00000001201720f0 T adj_offsettable_operand +00000001200dfe00 t adjust_copied_decl_tree +000000012016aa30 t adjust_priority +0000000120095b20 T adjust_stack +00000001200291a0 t affix_data_type +00000001201ff588 s after_insn_hard_regs +0000000120062e10 T aggregate_value_p +00000001201fed48 s align.4 +000000012005f550 t all_blocks +000000012006a350 T all_cases_count +00000001201eb418 d all_from_align +00000001201ff3e8 s all_minus_one +0000000120200110 S all_types_permanent +0000000120134ef0 t alloc_qty_for_scratch +0000000120094f90 T allocate_dynamic_stack_space +000000012010fc50 T allocate_for_life_analysis +0000000120154180 t allocate_reload_reg +00000001200422b0 T allocation_temporary_p +00000001201ff808 s allocno_calls_crossed +000000012013a160 t allocno_compare +00000001201ff818 s allocno_live_length +00000001201ff810 s allocno_n_refs +00000001201ff7a0 s allocno_order +00000001201ff798 s allocno_reg +00000001201ff7c0 s allocno_row_words +00000001201ff7a8 s allocno_size +00000001201ff820 s allocnos_live +00000001201fed6c s already.0 +00000001201ff698 s altclass +000000012014b230 t alter_reg +000000012016e1e0 T alter_subreg +0000000120140e20 t alternative_allows_memconst +0000000120190fb0 t alu_unit_blockage +000000012018cc20 T alu_unit_blockage_range +000000012018c790 T alu_unit_ready_cost +00000001202005d8 S and_optab +00000001200387d0 T announce_function +00000001201ff258 s anonymous_types +0000000120095bd0 T anti_adjust_stack +00000001201645f0 T anti_dependence +000000012006f4f0 T any_pending_cleanups +000000012016f6b0 T app_disable +000000012016f690 T app_enable +00000001201ffb1c s app_on +0000000120203548 b apply_args_mode +0000000120203748 b apply_args_reg_offset +0000000120082a30 T apply_args_register_offset +0000000120084640 t apply_args_size +00000001201ff108 s apply_args_value +000000012016fd70 T apply_change_group +0000000120122f00 t apply_distributive_law +0000000120203648 b apply_result_mode +0000000120084920 t apply_result_size +000000012010d890 t approx_final_value +00000001202007d8 S arg_pointer_rtx +00000001202001e8 S arg_pointer_save_area +00000001201e73ff d argnofun.1 +00000001201e73e8 d argstring.0 +0000000120197640 T arith32_operand +00000001201975c0 T arith5_operand +00000001201976b0 T arith64_operand +0000000120197540 T arith_operand +00000001201eb6b8 d arityvec +0000000120043af0 T array_type_nelts +00000001200ba350 t asctoe +00000001200ba340 t asctoe113 +00000001200ba310 t asctoe24 +00000001200ba320 t asctoe53 +00000001200ba330 t asctoe64 +00000001200ba360 t asctoeg +00000001202004f0 S ashl_optab +0000000120200608 S ashr_optab +00000001201fff10 S asm_file_name +000000012016f110 T asm_fprintf +000000012016c9c0 t asm_insn_count +0000000120171ab0 T asm_noperands +0000000120200058 S asm_out_file +00000001200a80b0 T assemble_alias +00000001200a8fb0 T assemble_align +00000001200a8b20 T assemble_asm +00000001200a8a10 T assemble_constant_align +00000001200a8cb0 T assemble_constructor +00000001200a8bd0 T assemble_destructor +00000001200a8dd0 T assemble_end_function +00000001200a9310 T assemble_external +00000001200a9320 T assemble_external_libcall +00000001200a8d40 T assemble_gc_entry +00000001200a9330 T assemble_global +00000001200a4660 T assemble_integer +00000001200a93b0 T assemble_label +00000001200a3d40 T assemble_name +00000001200a4890 T assemble_real +00000001200a2700 T assemble_start_function +00000001200a3e80 T assemble_static_space +00000001200a9060 T assemble_string +00000001200a40f0 T assemble_trampoline_template +00000001200a2be0 T assemble_variable +00000001200a8f30 T assemble_zeros +0000000120059c00 T assign_outer_stack_local +000000012005d300 T assign_parms +0000000120059a60 T assign_stack_local +0000000120059db0 T assign_stack_temp +00000001201e7368 d asso_values.0 +0000000120162c10 t attach_deaths +0000000120169c10 t attach_deaths_insn +0000000120040b10 T attribute_hash_list +0000000120040bc0 T attribute_list_contained +0000000120040b40 T attribute_list_equal +0000000120200b10 b attrtab +00000001201feec8 s attrtab_idx +0000000120200000 S aux_info_file +00000001201fefe0 s aux_info_file_name +000000012010cd40 T back_branch_in_range_p +00000001201ff8a4 s bad_spill_regs +000000012006c730 t balance_case_nodes +00000001201ff218 s base_label_num +00000001201ff520 s basic_block_drops_in +00000001202008c8 S basic_block_end +00000001202008d8 S basic_block_head +0000000120200878 S basic_block_live_at_start +00000001201ff528 s basic_block_loop_depth +0000000120215098 B basic_block_needs +00000001201045b0 t basic_induction_var +00000001201ffa18 s bb_dead_regs +00000001201fecb8 g bb_file_label_num +00000001201fecbc g bb_func_label_num +00000001201ffad0 s bb_head +00000001201ffa20 s bb_live_regs +00000001201fecb0 g bb_tail +00000001201ff968 s bb_ticks +0000000120081f90 T bc_adjust_stack +000000012019c610 T bc_align +000000012019b890 T bc_align_bytecode +000000012019bd00 T bc_align_const +000000012019bfa0 T bc_align_data +00000001200810f0 T bc_allocate_local +0000000120082af0 T bc_allocate_variable_array +000000012019b760 T bc_begin_function +0000000120063420 T bc_build_calldesc +0000000120081320 T bc_canonicalize_array_ref +000000012006ab50 t bc_check_for_full_enumeration_handling +000000012019c5f0 T bc_data +00000001201ffbc8 s bc_data_seg +000000012019b710 T bc_define_pointer +000000012019c760 T bc_emit +000000012019cb00 T bc_emit_bytecode +000000012019b960 T bc_emit_bytecode_const +000000012019ba90 T bc_emit_bytecode_labeldef +000000012019bb10 T bc_emit_bytecode_labelref +000000012019bc00 T bc_emit_code_labelref +000000012019c240 T bc_emit_common +000000012019bdd0 T bc_emit_const +000000012019bf60 T bc_emit_const_labeldef +000000012019bf80 T bc_emit_const_labelref +000000012019bea0 T bc_emit_const_skip +000000012019c070 T bc_emit_data +000000012019c200 T bc_emit_data_labeldef +000000012019c220 T bc_emit_data_labelref +000000012019c140 T bc_emit_data_skip +000000012019ac10 T bc_emit_instruction +000000012019c9b0 T bc_emit_labeldef +000000012019ca00 T bc_emit_labelref +000000012019c890 T bc_emit_skip +000000012019cc40 T bc_emit_trampoline +000000012019a140 T bc_end_function +0000000120081600 T bc_expand_address +000000012019d430 T bc_expand_binary_operation +0000000120081480 T bc_expand_component_address +0000000120081a90 T bc_expand_constructor +000000012019dd40 T bc_expand_conversion +0000000120068a10 t bc_expand_decl +0000000120068ce0 t bc_expand_decl_init +0000000120068110 t bc_expand_end_bindings +000000012006bc60 t bc_expand_end_case +0000000120065b50 t bc_expand_end_cond +000000012006fc40 t bc_expand_end_loop +000000012007b490 T bc_expand_expr +0000000120064180 t bc_expand_fixup +0000000120063670 T bc_expand_function_end +000000012005fcc0 T bc_expand_function_start +000000012006f690 t bc_expand_goto_internal +000000012019df90 T bc_expand_increment +0000000120069450 t bc_expand_start_case +0000000120065ab0 t bc_expand_start_cond +000000012019de90 T bc_expand_truth_conversion +000000012019d900 T bc_expand_unary_operation +0000000120064240 t bc_fixup_gotos +0000000120081910 T bc_gen_constr_label +000000012019ca60 T bc_gen_rtx +000000012019ba30 T bc_get_bytecode_label +000000012019c420 T bc_globalize_label +000000012019d350 T bc_init_mode_to_code_map +000000012006fe00 T bc_init_mode_to_opcode_maps +0000000120199ef0 T bc_initialize +0000000120082b60 T bc_load_bit_field +00000001200811a0 T bc_load_externaddr +0000000120081200 T bc_load_externaddr_id +0000000120081290 T bc_load_localaddr +0000000120080f90 T bc_load_memory +00000001200812d0 T bc_load_parmaddr +00000001200a9d10 t bc_make_decl_rtl +000000012006f5a0 T bc_new_uid +00000001200a9160 T bc_output_constructor +00000001200a9250 T bc_output_data_constructor +000000012019caf0 T bc_print_rtl +00000001200815a0 T bc_push_offset_and_size +000000012006a050 t bc_pushcase +0000000120081870 T bc_runtime_type_code +0000000120081f50 T bc_store_bit_field +0000000120081e50 T bc_store_field +0000000120081040 T bc_store_memory +000000012019c5d0 T bc_text +00000001201ffbc0 s bc_text_seg +00000001201ff0b0 s bc_uid.1 +000000012019ca50 T bc_write_file +000000012019ce50 T bc_xstrdup +000000012020c108 B bcc_gen_fctn +00000001202004d0 S bcmp_libfunc +0000000120200698 S bcopy_libfunc +00000001201eb43c d best_from_align +000000012002b5a0 T binary_op_error +0000000120043510 T binfo_member +000000012016add0 t birthing_insn_p +00000001200d8380 t bit_offset_attribute +000000012018ed90 T bit_unit_ready_cost +000000012010ce50 T biv_total_increment +0000000120132150 t block_alloc +00000001201ffb18 s block_depth +00000001201ff530 s block_live_static +0000000120198b80 t block_move_loop +0000000120191ea0 t block_move_no_loop +00000001201921e0 t block_move_sequence +00000001202002d0 S block_stack +00000001202002ac S block_start_count +00000001201ff0e8 s block_vector +000000012005f520 t blocks_nreverse +00000001201e9f94 d bmask +00000001201ffda0 S boolean_false_node +00000001201ffcc8 S boolean_true_node +00000001201ffe58 S boolean_type_node +0000000120038bb0 T botch +0000000120096150 t break_out_memory_refs +0000000120205fe4 b buffer.0 +0000000120206048 b buffer.1 +00000001202063cc b buffer.10 +0000000120206430 b buffer.11 +0000000120206494 b buffer.12 +00000001201fedf8 s buffer.2 +00000001202060ac b buffer.2 +0000000120206110 b buffer.3 +0000000120206174 b buffer.4 +00000001202061d8 b buffer.5 +000000012020623c b buffer.6 +00000001202062a0 b buffer.7 +0000000120206304 b buffer.8 +0000000120206368 b buffer.9 +00000001201feee0 s buffer_length.2 +000000012003fff0 T build +0000000120040250 T build1 +000000012001adb0 T build_array_ref +00000001200414f0 T build_array_type +000000012001c1a0 T build_binary_op +0000000120044230 T build_block +000000012001fc20 T build_c_cast +0000000120042a00 T build_complex +00000001200415e0 T build_complex_type +000000012001a930 T build_component_ref +00000001200255b0 T build_compound_expr +000000012001f570 T build_conditional_expr +0000000120044170 T build_decl +00000001200442b0 T build_decl_attribute_variant +00000001200437a0 T build_decl_list +0000000120014920 T build_enumerator +000000012001b260 T build_function_call +0000000120044ed0 T build_function_type +0000000120044dd0 T build_index_2_type +0000000120044c40 T build_index_type +000000012001abc0 T build_indirect_ref +00000001200427b0 T build_int_2_wide +0000000120045090 T build_method_type +0000000120020200 T build_modify_expr +00000001200403e0 T build_nt +0000000120006f10 T build_objc_string +0000000120045170 T build_offset_type +00000001200404a0 T build_parse_node +00000001200412a0 T build_pointer_type +00000001200413a0 T build_range_type +0000000120042800 T build_real +000000012003dc50 T build_real_from_int_cst +0000000120044fd0 T build_reference_type +000000012003e0c0 T build_string +0000000120043750 T build_tree_list +0000000120040590 T build_type_attribute_variant +0000000120040810 T build_type_copy +0000000120040740 T build_type_variant +000000012001e500 T build_unary_op +00000001200105e0 T builtin_function +00000001202006f4 S byte_mode +00000001200d81c0 t byte_size_attribute +0000000120200a28 S bytecode +0000000120200510 S bzero_libfunc +0000000120025510 T c_alignof +0000000120019fd0 T c_alignof_expr +000000012002d690 T c_build_type_variant +000000012000c410 T c_decode_option +0000000120024980 T c_expand_asm_operands +000000012002d190 T c_expand_expr_stmt +0000000120024c10 T c_expand_return +0000000120025bf0 T c_expand_start_case +00000001201ffc18 S c_function_chain +00000001201fedc0 s c_function_varargs +0000000120017a00 T c_mark_varargs +0000000120025430 T c_size_in_bytes +0000000120019e30 T c_sizeof +0000000120025350 T c_sizeof_nowarn +0000000120084500 t c_strlen +000000012010d100 t calculate_giv_inc +0000000120197400 T call_address_operand +0000000120200928 S call_fixed_reg_set +0000000120213ab0 B call_fixed_regs +0000000120200910 S call_used_reg_set +0000000120213a70 B call_used_regs +0000000120200978 S caller_save_needed +0000000120084d50 t calls_function_1 +00000001201ff128 s calls_function_save_exprs +000000012012c200 t can_combine_p +000000012009c7e0 T can_compare_p +00000001200a15b0 T can_extend_p +0000000120200800 S can_reach_end +00000001200e6860 T can_reverse_comparison_p +00000001201700e0 T cancel_changes +00000001201ff8c0 s cannot_omit_stores +00000001200e9090 t canon_hash +00000001200ea190 t canon_reg +00000001201648e0 t canon_rtx +000000012006f570 T case_index_expr_type +00000001202002c8 S case_stack +00000001201ff53c s cc0_live +0000000120200718 S cc0_rtx +00000001202007c8 S cc1_rtx +0000000120093200 T ceil_log2 +0000000120043540 T chain_member +00000001200435a0 T chain_member_purpose +0000000120043570 T chain_member_value +00000001200435f0 T chainon +00000001200b22f0 T change_address +0000000120209a58 b change_locs +0000000120044710 T change_main_variant +0000000120209800 b change_objects +0000000120209990 b change_old_codes +0000000120209be8 b change_olds +00000001201ffc30 S char_array_type_node +00000001201ffcb8 S char_type_node +000000012016fc40 T check_asm_operands +000000012002d290 T check_case_value +0000000120105f70 t check_dbra_loop +00000001201040a0 t check_final_value +000000012006a850 T check_for_full_enumeration_handling +000000012002d7a0 t check_format_info +000000012002cce0 T check_function_format +00000001200234d0 t check_init_type_bitfields +0000000120008020 T check_newline +000000012012ff00 T choose_hard_reg_mode +0000000120093540 t choose_multiplier +000000012014e7e0 t choose_reload_regs +0000000120213514 B class_narrowest_mode +00000001200b3080 T classify_insn +0000000120196810 T classify_integer +0000000120200240 S cleanup_label +00000001202002d8 S cleanups_this_call +0000000120200a40 b clear_binding_level +00000001200a9450 T clear_const_double_mem +000000012006e9f0 T clear_last_expr +0000000120042460 T clear_momentary +0000000120017050 T clear_parm_order +0000000120082a90 T clear_pending_stack_adjust +00000001201559d0 t clear_reg_live +0000000120153020 t clear_reload_reg_in_use +0000000120082650 T clear_storage +0000000120200358 S cmp_optab +000000012020c4a8 B code_to_optab +000000012002e9d0 t collect_iterators +0000000120114400 t combinable_i3pat +00000001201ff590 s combine_attempts +00000001201fef14 S combine_dump +00000001201ffef0 S combine_dump_file +00000001201ff598 s combine_extras +0000000120105650 t combine_givs +0000000120113b30 T combine_instructions +00000001201ff5bc s combine_max_regno +00000001201ff594 s combine_merges +00000001200fe3a0 t combine_movables +0000000120015c30 T combine_parm_decls +0000000120133580 t combine_regs +0000000120146c80 t combine_reloads +00000001200294d0 T combine_strings +00000001201ff59c s combine_successes +000000012005a0d0 T combine_temp_slots +00000001201fffd4 S combine_time +0000000120019070 T common_type +00000001200801f0 t compare +00000001200a5200 t compare_constant_1 +0000000120080310 T compare_from_rtx +0000000120152d50 t compare_spill_regs +00000001200e6bb0 T comparison_dominates_p +0000000120173a00 T comparison_operator +0000000120039530 t compile_file +00000001201feeb8 s compiled_from_record.0 +0000000120011560 T complete_array_type +00000001201fece0 s completed.1 +00000001201ffc08 S complex_double_type_node +00000001201ffe70 S complex_float_type_node +00000001201ffc38 S complex_integer_type_node +00000001201ffce8 S complex_long_double_type_node +00000001200196f0 T comptypes +0000000120200288 S cond_stack +00000001201968b0 T condition_value +00000001200e6db0 T condjump_in_parallel_p +00000001200e6cd0 T condjump_p +00000001201ff7b8 s conflicts +00000001201ff3f0 s consec_ints +0000000120105360 t consec_sets_giv +00000001201012d0 t consec_sets_invariant_p +0000000120200708 S const0_rtx +0000000120200780 S const1_rtx +0000000120200750 S const2_rtx +000000012004aac0 t const_binop +00000001201ff170 s const_double_chain +0000000120173400 T const_double_operand +00000001200a4df0 t const_hash +0000000120203b98 b const_hash_table +00000001201733f0 T const_int_operand +0000000120205b20 b const_int_rtx +00000001202006c8 S const_labelno +000000012018ee30 T const_num_delay_slots +00000001201ffe38 S const_ptr_type_node +00000001201ff188 s const_rtx_hash_table +00000001201ff1a8 s const_rtx_sym_hash_table +00000001200a8260 T const_section +00000001201ffe60 S const_string_type_node +0000000120213530 B const_tiny_rtx +00000001202007b8 S const_true_rtx +00000001200d9fa0 t const_value_attribute +000000012002cd30 T constant_expression_warning +00000001201ff438 s constant_pool_entries_cost +0000000120200798 S constm1_rtx +00000001201723a0 T constrain_operands +0000000120152980 t constraint_accepts_reg_p +00000001201feea0 s constructor_asmspec +00000001201fee58 s constructor_bit_index +00000001201fee68 s constructor_constant +00000001201fee98 s constructor_decl +00000001201fee80 s constructor_depth +00000001201fee60 s constructor_elements +00000001201fee70 s constructor_erroneous +00000001201fee28 s constructor_fields +00000001201fee84 s constructor_implicit +00000001201fee90 s constructor_incremental +00000001201fee30 s constructor_index +00000001201fee40 s constructor_max_index +00000001201fee00 S constructor_no_implicit +00000001201fee78 s constructor_pending_elts +00000001201fee38 s constructor_range_end +00000001201feeb0 s constructor_result +00000001201fee6c s constructor_simple +00000001201ffe98 S constructor_stack +00000001201fee74 s constructor_subconstants_deferred +00000001201feea8 s constructor_top_level +00000001201fee20 s constructor_type +00000001201fee48 s constructor_unfilled_fields +00000001201fee50 s constructor_unfilled_index +0000000120043f90 T contains_placeholder_p +00000001200a3c50 t contains_pointers_p +00000001201ff030 s context_display +00000001201ec720 d conversion_info +000000012019e5b0 t conversion_reasonable_p +000000012020ae90 b conversion_recipe +0000000120026880 T convert +000000012002cf90 T convert_and_check +000000012001b520 t convert_arguments +0000000120020650 t convert_for_assignment +0000000120071230 T convert_modes +0000000120070530 T convert_move +0000000120199c60 T convert_to_complex +0000000120199080 T convert_to_integer +00000001200711f0 T convert_to_mode +0000000120199930 T convert_to_pointer +0000000120199ad0 T convert_to_real +00000001200959e0 T copy_addr_to_reg +0000000120095600 T copy_all_regs +00000001201ff300 s copy_asm_constraints_vector +00000001201ff2f8 s copy_asm_operands_vector +00000001200a5dc0 t copy_constant +000000012012f480 t copy_cost +0000000120200834 S copy_cost +00000001200dae60 t copy_decl_list +00000001200dafd0 t copy_decl_rtls +00000001200daf10 t copy_decl_tree +00000001200db590 t copy_for_inline +0000000120017c10 T copy_lang_decl +00000001200426f0 T copy_list +0000000120109ac0 t copy_loop_body +00000001200aab70 T copy_most_rtx +000000012003d5b0 T copy_node +0000000120143780 T copy_replacements +00000001200aa7c0 T copy_rtx +00000001200dda30 T copy_rtx_and_substitute +00000001200b2430 T copy_rtx_if_shared +0000000120094b10 T copy_to_mode_reg +0000000120094a50 T copy_to_reg +0000000120095a90 T copy_to_suggested_reg +0000000120200440 S cos_optab +00000001201ff0d0 s cost_table +00000001201ff688 s costs +00000001201ffaf8 s count_basic_blocks +0000000120038620 T count_error +0000000120101550 t count_loop_regs_set +0000000120100050 t count_nonfixed_reads +0000000120152a80 t count_occurrences +000000012014a920 t count_possible_groups +00000001200f4b50 t count_reg_usage +00000001201ff8b0 s counted_for_groups +00000001201ff8b8 s counted_for_nongroups +0000000120165850 t create_reg_dead_note +00000001201ff310 s cross_jump_death_matters +00000001201fef0c S cse2_dump +00000001201fff38 S cse2_dump_file +00000001201fff90 S cse2_time +00000001200f4080 t cse_basic_block +00000001201ff3fc s cse_basic_block_end +00000001201ff3f8 s cse_basic_block_start +00000001200fc2e0 t cse_check_loop_start +00000001201ff440 s cse_check_loop_start_value +00000001201fef04 S cse_dump +00000001201ffff8 S cse_dump_file +00000001200f3530 T cse_end_of_basic_block +00000001200ed360 t cse_gen_binary +00000001200f6d90 t cse_insn +00000001201ff40c s cse_jumps_altered +00000001200f3a60 T cse_main +00000001202002e4 S cse_not_expected +00000001200f3290 t cse_process_notes +00000001200fb530 t cse_set_around_loop +00000001201fff44 S cse_time +00000001200a83f0 T ctors_section +00000001201fec54 g cur_insn_uid +00000001201fedd0 s current_binding_level +00000001201fed08 s current_declspecs +00000001201ff290 s current_dienum +00000001201fedc8 s current_extern_inline +00000001201fec90 g current_funcdef_number +0000000120200218 S current_function_arg_offset_rtx +0000000120200230 S current_function_args_info +0000000120200214 S current_function_args_size +0000000120200170 S current_function_calls_alloca +0000000120200188 S current_function_calls_longjmp +00000001202001a8 S current_function_calls_setjmp +0000000120200234 S current_function_contains_functions +00000001201ffd80 S current_function_decl +0000000120200168 S current_function_epilogue_delay_list +0000000120200258 S current_function_has_nonlocal_goto +0000000120200270 S current_function_has_nonlocal_label +00000001202001c8 S current_function_internal_arg_pointer +00000001202001f8 S current_function_name +0000000120200160 S current_function_needs_context +0000000120200248 S current_function_outgoing_args_size +00000001201fed98 s current_function_parm_tags +00000001201fed90 s current_function_parms +00000001202001c0 S current_function_pops_args +000000012020015c S current_function_pretend_args_size +00000001201feda0 s current_function_prototype_file +00000001201feda8 s current_function_prototype_line +0000000120200178 S current_function_return_rtx +00000001201ffcb0 S current_function_returns_null +0000000120200280 S current_function_returns_pcc_struct +0000000120200208 S current_function_returns_pointer +000000012020018c S current_function_returns_struct +00000001201ffdc0 S current_function_returns_value +00000001202001f0 S current_function_stdarg +0000000120200210 S current_function_uses_const_pool +00000001202001d0 S current_function_uses_pic_offset_table +000000012020020c S current_function_varargs +00000001201ff980 s current_live_regs +00000001202000a0 S current_obstack +00000001200d74c0 t data_member_location_attribute +00000001200a8580 T data_section +00000001201e6a58 W data_start +00000001201feec0 s data_type +00000001201fef2c S dbr_sched_dump +0000000120200038 S dbr_sched_dump_file +00000001201ffee0 S dbr_sched_time +00000001201593d0 T dbr_schedule +000000012016f6d0 T dbr_sequence_length +0000000120200730 S dconst0 +00000001202007d0 S dconst1 +0000000120200788 S dconst2 +0000000120200700 S dconstm1 +00000001201ffa30 s dead_notes +00000001200b08c0 T dead_or_set_p +00000001200ae500 T dead_or_set_regno_p +00000001201fef3c S debug_info_level +00000001201ffab8 s debug_insn +00000001201feffc S debug_no_type_hash +0000000120042380 T debug_obstack +00000001200bce10 T debug_real +0000000120145250 T debug_reload +00000001200acd80 T debug_rtx +00000001201ff1b8 S debug_rtx_count +00000001200acec0 T debug_rtx_find +00000001200acdd0 T debug_rtx_list +00000001201fec10 G debug_temp_inits +0000000120047750 T debug_tree +0000000120029800 T decl_attributes +0000000120041b90 T decl_function_context +0000000120039220 t decl_name +0000000120200060 S decl_printable_name +0000000120043810 T decl_tree_cons +00000001200453e0 T decl_type_context +000000012002c750 T declare_function_name +000000012006e810 T declare_nonlocal_label +0000000120016590 T declare_parm_level +00000001200a9b50 T declare_weak +00000001201fed10 s declspec_stack +00000001200a9f90 t decode_addr_const +0000000120171c90 T decode_asm_operands +0000000120058ce0 t decode_field_reference +00000001200a1bf0 T decode_reg_name +00000001200aa310 t decode_rtx_const +000000012013d160 t decompose +000000012019e060 t deduce_conversion +000000012001a1d0 T default_conversion +00000001201ffc48 S default_function_type +00000001200388a0 T default_print_error_function +00000001200a94a0 T defer_addressed_constants +00000001201ff180 s defer_addressed_constants_flag +000000012007e5d0 t defer_cleanups_to +00000001201ff178 s deferred_constants +000000012000e1a0 T define_label +0000000120016730 T delete_block +00000001200e4330 t delete_computation +00000001200f4de0 T delete_dead_from_cse +000000012014b150 t delete_dead_insn +00000001200e6f00 T delete_for_peephole +000000012015d2f0 t delete_from_delay_slot +00000001200e4d90 t delete_from_jump_chain +00000001200e4560 T delete_insn +00000001200b4ca0 T delete_insns_since +00000001200e42c0 T delete_jump +00000001200e5260 t delete_labelref_insn +0000000120152360 t delete_output_reload +0000000120021fc0 t digest_init +000000012020350c b direct_load +0000000120203529 b direct_store +00000001201feed8 s directive_buffer.1 +0000000120056e70 t distribute_bit_expr +000000012012ba90 t distribute_links +000000012012ad10 t distribute_notes +000000012004a2b0 T div_and_round_double +0000000120203a3c b div_cost +000000012018ee60 t div_unit_blockage +000000012018ebb0 T div_unit_blockage_range +000000012018b380 T div_unit_ready_cost +0000000120038b90 T do_abort +00000001201ff250 s do_block +00000001200e3700 t do_cross_jump +00000001201ff000 s do_identifier_warnings +000000012007e800 T do_jump +000000012007fc50 t do_jump_by_parts_equality +000000012007fe50 t do_jump_by_parts_equality_rtx +000000012007f710 t do_jump_by_parts_greater +000000012007f9e0 T do_jump_by_parts_greater_rtx +000000012007fff0 t do_jump_for_compare +000000012006c110 t do_jump_if_equal +00000001201ff414 s do_not_record +000000012007e550 T do_pending_stack_adjust +00000001201fec3c G do_preexpand_calls +0000000120080560 t do_store_flag +00000001201ffc00 S doing_objc_thang +00000001201fed68 S dollars_in_ident +00000001201ffd98 S double_ftype_double +00000001201ffe18 S double_ftype_double_double +0000000120200998 S double_reg_address_ok +00000001201ffd78 S double_type_node +000000012006f350 T drop_through_at_end_p +00000001200a8470 T dtors_section +0000000120200018 S dump_base_name +000000012012beb0 T dump_combine_stats +000000012012bf10 T dump_combine_total_stats +0000000120139930 t dump_conflicts +0000000120112190 T dump_flow_info +0000000120139f80 T dump_global_regs +0000000120134e20 T dump_local_alloc +00000001201fff6c S dump_time +00000001200454e0 T dump_tree_statistics +0000000120017c20 t duplicate_decls +00000001200e2ab0 t duplicate_loop_exit_test +00000001200ce060 t dwarf_attr_name +00000001200ce5e0 t dwarf_fund_type_name +00000001201ff2c0 s dwarf_last_decl +00000001200d7200 t dwarf_tag_name +00000001200cd250 T dwarfout_begin_block +00000001200cd480 T dwarfout_begin_function +00000001200cd900 T dwarfout_define +00000001200cd300 T dwarfout_end_block +00000001200cd5c0 T dwarfout_end_epilogue +00000001200cd520 T dwarfout_end_function +00000001200caa30 T dwarfout_file_scope_decl +00000001200cc540 T dwarfout_finish +00000001200cb950 T dwarfout_init +00000001200cd3b0 T dwarfout_label +00000001200cb160 T dwarfout_line +00000001200cd7c0 T dwarfout_resume_previous_source_file +00000001200cd650 T dwarfout_start_new_source_file +00000001200cdbb0 T dwarfout_undef +00000001201ff094 s dynamic_offset +00000001200b8a30 t e113toe +00000001200b8e80 t e24toe +00000001201e9e2c D e32 +00000001200b80a0 t e53toe +00000001200b8570 t e64toe +00000001200b6c40 t eadd +00000001200b6df0 t eadd1 +00000001200b65e0 T earith +000000012013c790 t earlyclobber_operand_p +00000001200b95e0 t ecmp +00000001200b7570 t ediv +00000001200bd6a0 t edivm +00000001200bc0d0 T efixi +00000001200bc140 T efixui +00000001200bb210 t efloor +00000001201e9e08 D ehalf +00000001200bea70 t eifrac +00000001200bb5c0 t eiremain +00000001200b6a30 t eisnan +00000001200b6a10 t eisneg +00000001200bb380 t eldexp +00000001200d84f0 t element_list_attribute +000000012018e7c0 T eligible_for_annul_true +000000012018e1b0 T eligible_for_delay +00000001201ff548 s elim_reg_set +00000001201e8fc8 d elim_regs.0 +00000001201ff834 s eliminable_regset +00000001201ea050 d eliminables.0 +00000001201ea0a0 d eliminables.0 +00000001201ea688 d eliminables.0 +00000001201ea670 d eliminables.2 +0000000120095380 T eliminate_constant_term +000000012014bc10 T eliminate_regs +000000012014cd40 t eliminate_regs_in_insn +00000001201e9e38 D elog2 +00000001200bdd70 t emdnorm +00000001200b5f30 T emit +00000001200a1250 T emit_0_to_1_insn +0000000120194ba0 t emit_add +00000001200b5be0 T emit_barrier +00000001200b3010 T emit_barrier_after +00000001200b5250 T emit_barrier_before +00000001201957a0 T emit_bcnd +0000000120071840 T emit_block_move +0000000120089a50 t emit_call_1 +00000001200b5ab0 T emit_call_insn +00000001200b5190 T emit_call_insn_before +000000012006cac0 t emit_case_nodes +00000001200a1210 T emit_clr_insn +000000012009c090 T emit_cmp_insn +000000012015cec0 t emit_delay_sequence +0000000120200298 S emit_filename +000000012009c830 T emit_float_lib_cmp +00000001200a1290 T emit_indirect_jump +00000001200b5750 T emit_insn +00000001200b2ee0 T emit_insn_after +00000001200b5340 T emit_insn_after_with_line_notes +00000001200b4fc0 T emit_insn_before +00000001200b58a0 T emit_insns +00000001200b5970 T emit_insns_after +00000001200b5900 T emit_insns_before +0000000120105ac0 T emit_iv_add_mult +000000012006e580 T emit_jump +000000012006ca30 t emit_jump_if_reachable +00000001200b59f0 T emit_jump_insn +00000001200b5500 T emit_jump_insn_after +00000001200b50e0 T emit_jump_insn_before +00000001200b5b80 T emit_label +00000001200b55b0 T emit_label_after +0000000120194ef0 t emit_ldst +000000012009be10 T emit_libcall_block +0000000120088070 T emit_library_call +00000001200887a0 T emit_library_call_value +00000001200b5c50 T emit_line_note +00000001200b5690 T emit_line_note_after +00000001200b5ef0 T emit_line_note_force +0000000120200290 S emit_lineno +0000000120071c20 T emit_move_insn +0000000120071e90 T emit_move_insn_1 +0000000120191520 T emit_move_sequence +000000012009ba10 T emit_no_conflict_block +000000012006e460 T emit_nop +00000001200b5db0 T emit_note +00000001200b5610 T emit_note_after +00000001200b52c0 T emit_note_before +0000000120072360 T emit_push_insn +00000001200821d0 T emit_queue +0000000120150350 t emit_reload_insns +0000000120095df0 T emit_stack_restore +0000000120094d40 T emit_stack_save +00000001200922d0 T emit_store_flag +00000001201989a0 T emit_test +000000012019dc30 T emit_typecode_conversion +00000001200a0dc0 T emit_unop_insn +000000012010a770 T emit_unrolled_add +00000001200b6990 t emov +00000001200bd500 t emovi +00000001201e9ef8 d emtens +00000001200b7b30 t emul +00000001200bdb40 t emulm +000000012016b090 T end_final +00000001201fed28 s end_of_file +00000001201ff958 s end_of_function_label +0000000120209514 b end_of_function_needs +00000001200b6430 T end_sequence +0000000120042160 T end_temporary_allocation +00000001200bd410 t endian +00000001200b69e0 t eneg +00000001200b9ff0 t enormlz +00000001201fed70 s enum_next_value +00000001201fed78 s enum_overflow +00000001201e9e14 D eone +00000001201e9e50 D epi +00000001201ff0a8 s epilogue +00000001201ffb94 s epilogue_marked +00000001202005b0 S eqdf2_libfunc +0000000120200458 S eqhf2_libfunc +00000001202006b0 S eqsf2_libfunc +00000001202005e0 S eqtf2_libfunc +0000000120197ba0 T equality_op +00000001200f16c0 t equiv_constant +00000001201ff778 s equiv_mem +00000001201ff780 s equiv_mem_modified +0000000120205f5c b equot +00000001202003f0 S eqxf2_libfunc +00000001200b6750 T ereal_atof +00000001200bd250 T ereal_cmp +00000001200bd340 T ereal_from_double +00000001200bd2f0 T ereal_from_float +00000001200bc1b0 T ereal_from_int +00000001200bc7c0 T ereal_from_uint +00000001200bd2b0 T ereal_isneg +00000001200bcd90 T ereal_ldexp +00000001200bc080 T ereal_negate +00000001200bd200 T ereal_to_decimal +00000001200b6840 T ereal_to_int +00000001201e9fb8 d ermsg +0000000120030560 T error +00000001200301d0 T error_for_asm +0000000120021a20 T error_init +00000001201ffd48 S error_mark_node +000000012002ffa0 T error_with_decl +000000012002fcf0 T error_with_file_and_line +00000001201fef44 S errorcount +00000001200b9cc0 t eshift +00000001201ff240 s esqinited +00000001201e9e44 D esqrt2 +000000012006c220 t estimate_case_costs +00000001200b6a90 t esub +00000001200bd090 T etardouble +00000001200bcf80 T etarldouble +00000001200bd0f0 T etarsingle +00000001200bce70 T etartdouble +00000001201e9e5c d etens +00000001200bf010 t etoasc +00000001200b92e0 t etoe53 +00000001200bba10 T etrunci +00000001200bbd60 T etruncui +00000001201e9e20 D etwo +00000001200b9750 t euifrac +000000012004bf50 t eval_subst +0000000120197a00 T even_relop +00000001201fec98 g everything.1 +00000001201fec9c g everything.2 +00000001201feca0 g everything.5 +0000000120038c80 T exact_log2_wide +00000001200e9450 t exp_equiv_p +000000012009ad30 T expand_abs +00000001200921b0 T expand_and +0000000120068e40 T expand_anon_union_decl +000000012006e940 T expand_asm +0000000120064330 T expand_asm_operands +0000000120072c90 T expand_assignment +00000001200962f0 T expand_binop +0000000120196d00 T expand_block_move +000000012007bde0 t expand_builtin +000000012007d3f0 t expand_builtin_apply +000000012007d180 t expand_builtin_apply_args +000000012007dad0 t expand_builtin_return +0000000120082930 T expand_builtin_return_addr +0000000120085050 T expand_call +00000001200690e0 t expand_cleanups +000000012007e6e0 T expand_cleanups_to +000000012009b0c0 T expand_complex_abs +000000012011e640 t expand_compound_operation +000000012006e5f0 T expand_computed_goto +000000012006eed0 T expand_continue_loop +0000000120093170 T expand_dec +0000000120068320 T expand_decl +000000012006f3f0 T expand_decl_cleanup +0000000120068b10 T expand_decl_init +000000012008eaa0 T expand_divmod +000000012006ed50 T expand_elseif +0000000120067850 T expand_end_bindings +000000012006acc0 T expand_end_case +0000000120069630 T expand_end_case_dummy +00000001200658d0 T expand_end_cond +0000000120065d70 T expand_end_loop +00000001200654b0 T expand_end_stmt_expr +000000012006ef30 T expand_exit_loop +000000012006ef90 T expand_exit_loop_if_false +000000012006f160 T expand_exit_something +0000000120075360 T expand_expr +0000000120064f60 T expand_expr_stmt +000000012011e960 t expand_field_assignment +000000012009ddb0 T expand_fix +0000000120063eb0 t expand_fixup +000000012006e920 T expand_fixups +000000012009cf70 T expand_float +00000001200607d0 T expand_function_end +000000012005ff70 T expand_function_start +00000001200639c0 T expand_goto +0000000120063ce0 t expand_goto_internal +00000001200930e0 T expand_inc +000000012007dce0 t expand_increment +00000001200dbc40 T expand_inline_function +000000012006e6a0 T expand_label +000000012006ee30 T expand_loop_continue_here +0000000120063660 T expand_main_function +000000012008da30 T expand_mult +00000001200933d0 T expand_mult_add +000000012008e3a0 T expand_mult_highpart +0000000120093240 T expand_mult_highpart_adjust +000000012006f1d0 T expand_null_return +00000001201374d0 t expand_preferences +0000000120066330 T expand_return +000000012008ce50 T expand_shift +0000000120067600 T expand_start_bindings +0000000120069210 T expand_start_case +0000000120069500 T expand_start_case_dummy +0000000120065700 T expand_start_cond +000000012006ec10 T expand_start_else +000000012006eb00 T expand_start_elseif +0000000120065b90 T expand_start_loop +000000012006edd0 T expand_start_loop_continue_elsewhere +000000012006ea10 T expand_start_stmt_expr +000000012002f4a0 t expand_stmt_with_iterators_1 +00000001200998a0 T expand_twoval_binop +0000000120099f20 T expand_unop +00000001201fed54 S explicit_flag_signed_bitfields +0000000120095510 T expr_size +00000001202002a8 S expr_stmts_for_value +00000001202000b8 S expression_obstack +00000001202003f8 S extenddftf2_libfunc +0000000120200320 S extenddfxf2_libfunc +000000012012bd50 T extended_count +0000000120200658 S extendsfdf2_libfunc +0000000120200418 S extendsftf2_libfunc +0000000120200488 S extendsfxf2_libfunc +000000012020fce0 B extendtab +00000001201fefc4 S extra_warnings +000000012008b320 T extract_bit_field +000000012008c510 t extract_fixed_bit_field +000000012012c9c0 t extract_left_shift +000000012008cb50 t extract_split_bit_field +0000000120205f50 B ezero +00000001201e7a08 D f_options +00000001201ea030 D factors +00000001201ffba8 s failure_errno.1 +00000001201ff2b8 s fake_containing_scope +0000000120038b70 T fancy_abort +0000000120030830 T fatal +000000012002f9d0 T fatal_insn +0000000120038790 T fatal_insn_not_found +0000000120038740 T fatal_io_error +0000000120200688 S ffs_optab +00000001200d9980 t field_byte_offset +0000000120018f00 t field_decl_cmp +00000001201ff270 s filename_table +000000012015b4b0 t fill_eager_delay_slots +0000000120159ed0 t fill_simple_delay_slots +000000012015e3a0 t fill_slots_from_thread +000000012016ca70 T final +000000012010bd30 T final_biv_value +000000012016f890 T final_end_function +000000012010c1d0 T final_giv_value +000000012016cdb0 T final_scan_insn +00000001202009c0 S final_sequence +000000012016f720 T final_start_function +00000001201ffed8 S final_time +00000001201ff264 s finalizing +00000001201003a0 t find_and_verify_loops +000000012010df00 t find_basic_blocks +00000001200f5950 t find_best_addr +00000001200f67a0 t find_comparison_args +0000000120173f60 t find_constant_term_loc +00000001200e3280 t find_cross_jump +000000012013c220 t find_dummy_reload +000000012015cc40 t find_end_label +0000000120143fa0 T find_equiv_reg +0000000120134400 t find_free_reg +0000000120061c20 T find_function_data +0000000120144fc0 t find_inc_amount +00000001200b03c0 T find_last_value +000000012006f5c0 T find_loop_tree_blocks +0000000120103610 t find_mem_givs +0000000120093b30 T find_next_ref +0000000120137ba0 t find_reg +00000001200ae880 T find_reg_fusage +00000001200b09c0 T find_reg_note +00000001200ae9e0 T find_regno_fusage +00000001200b0a20 T find_regno_note +000000012013d610 T find_reloads +0000000120141490 t find_reloads_address +0000000120142720 t find_reloads_address_1 +0000000120143360 t find_reloads_address_part +0000000120140ed0 t find_reloads_toplev +0000000120145e60 T find_replacement +0000000120173060 T find_single_use +0000000120170dc0 t find_single_use_1 +0000000120107b10 t find_single_use_in_loop +0000000120117900 t find_split_point +000000012010aff0 t find_splittable_givs +000000012010a800 t find_splittable_regs +0000000120164a10 t find_symbolic_term +0000000120111f40 t find_use_as_address +0000000120010df0 T finish_decl +0000000120014560 T finish_enum +0000000120006fb0 T finish_file +0000000120015fe0 T finish_function +0000000120016430 T finish_incomplete_decl +00000001200257e0 T finish_init +0000000120013a60 T finish_struct +0000000120200010 S finput +00000001202006d8 S first_global_object_name +00000001201ff1e8 s first_insn +00000001201ff210 s first_label_num +00000001201ff190 s first_pool +000000012005ed80 T fix_lexical_addr +0000000120130180 T fix_register +00000001202003b0 S fixdfdi_libfunc +0000000120200370 S fixdfsi_libfunc +00000001202002f8 S fixdfti_libfunc +0000000120200920 S fixed_reg_set +0000000120213bec B fixed_regs +0000000120200468 S fixsfdi_libfunc +00000001202005f0 S fixsfsi_libfunc +0000000120200368 S fixsfti_libfunc +000000012020c850 B fixtab +0000000120200400 S fixtfdi_libfunc +00000001202003a0 S fixtfsi_libfunc +00000001202004c0 S fixtfti_libfunc +0000000120211728 B fixtrunctab +00000001202005c8 S fixunsdfdi_libfunc +00000001202004e8 S fixunsdfsi_libfunc +00000001202005a0 S fixunsdfti_libfunc +0000000120200378 S fixunssfdi_libfunc +0000000120200448 S fixunssfsi_libfunc +0000000120200328 S fixunssfti_libfunc +00000001202003c8 S fixunstfdi_libfunc +00000001202006b8 S fixunstfsi_libfunc +00000001202003b8 S fixunstfti_libfunc +0000000120200310 S fixunsxfdi_libfunc +00000001202004f8 S fixunsxfsi_libfunc +0000000120200650 S fixunsxfti_libfunc +000000012006f820 t fixup_gotos +000000012005bd20 t fixup_memory_subreg +00000001200493d0 T fixup_signed_type +000000012005c060 t fixup_stack_1 +00000001200494e0 T fixup_unsigned_type +000000012005aaa0 t fixup_var_refs +000000012005afa0 t fixup_var_refs_1 +000000012005ac10 t fixup_var_refs_insns +0000000120200318 S fixxfdi_libfunc +0000000120200630 S fixxfsi_libfunc +0000000120200490 S fixxfti_libfunc +00000001201fed50 S flag_allow_single_precision +00000001201fef74 S flag_caller_saves +00000001201ffc40 S flag_cond_mismatch +00000001201fff28 S flag_cse_follow_jumps +00000001201fff98 S flag_cse_skip_blocks +00000001201fef84 S flag_defer_pop +0000000120200024 S flag_delayed_branch +00000001201fff88 S flag_expensive_optimizations +00000001201fef9c S flag_fast_math +00000001201fef88 S flag_float_store +00000001201fef80 S flag_force_addr +00000001201fef7c S flag_force_mem +00000001201fefa4 S flag_gen_aux_info +00000001201fec24 G flag_gnu_linker +00000001201fefb4 S flag_inhibit_size_directive +00000001201ffef8 S flag_inline_functions +00000001201ffecc S flag_keep_inline_functions +00000001201fec78 g flag_minimal_debug +00000001201ffe50 S flag_no_asm +00000001201ffc98 S flag_no_builtin +0000000120200008 S flag_no_common +00000001201fef90 S flag_no_function_cse +00000001201fed58 S flag_no_ident +00000001201fff68 S flag_no_inline +00000001201ffc94 S flag_no_nonansi_builtin +00000001201fef98 S flag_no_peephole +00000001201fef94 S flag_omit_frame_pointer +00000001201fefbc S flag_pack_struct +00000001201fef78 S flag_pcc_struct_return +00000001201fefa8 S flag_pedantic_errors +00000001201fffdc S flag_pic +00000001201ffec8 S flag_pretend_float +00000001201fef30 S flag_print_asm_name +00000001201fefdc s flag_rerun_cse_after_loop +00000001201fefac S flag_schedule_insns +00000001201fefb0 S flag_schedule_insns_after_reload +0000000120200030 S flag_shared_data +00000001201ffe20 S flag_short_double +00000001201ffee8 S flag_short_enums +00000001201fffb8 S flag_short_temps +00000001201fec0c G flag_signed_bitfields +00000001201fff48 S flag_signed_char +00000001201fef8c S flag_strength_reduce +00000001201fefa0 S flag_syntax_only +00000001201fff08 S flag_thread_jumps +00000001201ffdf8 S flag_traditional +00000001201fff94 S flag_unroll_all_loops +00000001201fec1c G flag_unroll_loops +00000001201fefb8 S flag_verbose_asm +00000001201fff60 S flag_volatile +0000000120200068 S flag_volatile_global +00000001201fec20 G flag_writable_strings +00000001202033e8 b float_error +00000001201ffd88 S float_ftype_float +00000001201fff0c S float_handled +000000012020ba18 B float_handler +00000001200394c0 t float_signal +00000001201ffdd0 S float_type_node +0000000120200648 S floatdidf_libfunc +00000001202004b8 S floatdisf_libfunc +0000000120200638 S floatditf_libfunc +0000000120200668 S floatdixf_libfunc +0000000120200380 S floatsidf_libfunc +0000000120200528 S floatsisf_libfunc +00000001202004a0 S floatsitf_libfunc +00000001202003e0 S floatsixf_libfunc +000000012020e298 B floattab +00000001202003a8 S floattidf_libfunc +0000000120200530 S floattisf_libfunc +00000001202005f8 S floattitf_libfunc +0000000120200338 S floattixf_libfunc +0000000120200438 S flodiv_optab +0000000120038ce0 T floor_log2_wide +000000012010db80 T flow_analysis +000000012010eea0 t flow_delete_insn +00000001201fef10 S flow_dump +0000000120200048 S flow_dump_file +0000000120200040 S flow_time +0000000120164f30 t flush_pending_lists +000000012004c5f0 T fold +0000000120056820 t fold_convert +00000001200ee250 t fold_rtx +0000000120057700 t fold_truthop +00000001200e3cc0 T follow_jumps +000000012020099c S forbidden_regs +00000001200a69e0 T force_const_mem +0000000120049f20 T force_fit_type +00000001200fe2a0 t force_movables +00000001200b5f10 T force_next_line_note +0000000120095a00 T force_not_mem +0000000120074c00 T force_operand +0000000120094bf0 T force_reg +0000000120120540 t force_to_mode +00000001202007f8 S forced_labels +000000012014e490 t forget_old_reloads_1 +000000012000b7d0 T forget_protocol_qualifiers +0000000120145b80 T form_sum +000000012018f1c0 t fpadd100_unit_blockage +000000012018b860 T fpadd100_unit_blockage_range +000000012018b5e0 T fpadd100_unit_ready_cost +000000012018ef60 t fpadd110_unit_blockage +000000012018b460 T fpadd110_unit_blockage_range +000000012018ec40 T fpadd110_unit_ready_cost +000000012018fa70 t fpmul100_unit_blockage +000000012018bb20 T fpmul100_unit_blockage_range +000000012018ba30 T fpmul100_unit_ready_cost +000000012018ed00 T fpmul110_unit_ready_cost +0000000120001a80 t frame_dummy +00000001201ffb88 s frame_laid_out +00000001202001d8 S frame_offset +00000001202009ac S frame_pointer_needed +00000001202007c0 S frame_pointer_rtx +00000001201ffb8c s frame_size +00000001201fedd8 s free_binding_level +00000001200e7f30 t free_element +00000001201ff420 s free_element_chain +00000001201688c0 t free_pending_lists +0000000120062020 T free_temp_slots +0000000120062090 T free_temps_for_rtl_expr +00000001201ff27c s ft_entries +00000001201ff278 s ft_entries_allocated +0000000120200498 S ftrunc_optab +0000000120200284 S function_call_count +00000001200da320 T function_cannot_inline_p +00000001201ff160 s function_defined +00000001201feed0 s function_format_list +00000001202000f0 S function_maybepermanent_obstack +00000001202000c8 S function_obstack +00000001200a8830 T function_section +00000001200199a0 t function_types_compatible_p +00000001201eb100 D function_units +000000012018ced0 T function_units_used +00000001200ce960 t fundamental_type_code +00000001201fff9c S g_switch_set +00000001201ffeb0 S g_switch_value +000000012003bd90 T gcc_obstack_init +0000000120200360 S gedf2_libfunc +00000001202003d0 S gehf2_libfunc +000000012018a050 T gen_absdf2 +000000012018a0c0 T gen_abssf2 +00000001200a1330 T gen_add2_insn +0000000120188dc0 T gen_adddf3 +0000000120188f50 T gen_adddi3 +0000000120188ee0 T gen_addsf3 +0000000120188d50 T gen_addsi3 +00000001201898e0 T gen_anddi3 +00000001201815c0 T gen_andsi3 +0000000120181aa0 T gen_ashlsi3 +0000000120181f00 T gen_ashrsi3 +0000000120028650 T gen_aux_info_record +0000000120185ee0 T gen_bcnd +0000000120186100 T gen_beq +0000000120186a80 T gen_bge +0000000120186bd0 T gen_bgeu +00000001201863a0 T gen_bgt +00000001201864f0 T gen_bgtu +0000000120126bf0 t gen_binary +0000000120186df0 T gen_ble +0000000120186f40 T gen_bleu +000000012018a630 T gen_blockage +0000000120186710 T gen_blt +0000000120186860 T gen_bltu +0000000120186250 T gen_bne +0000000120185ff0 T gen_bxx +000000012018a130 T gen_call +0000000120187a30 T gen_call_block_move +0000000120187dc0 T gen_call_movstrsi_loop +000000012018a2e0 T gen_call_value +0000000120182830 T gen_casesi +0000000120182fc0 T gen_casesi_enter +0000000120182de0 T gen_casesi_jump +0000000120185360 T gen_cmpdf +0000000120185260 T gen_cmpsf +0000000120185120 T gen_cmpsi +0000000120027d40 t gen_decl +000000012018a6d0 T gen_decrement_and_branch_until_zero +0000000120181340 T gen_divdf3 +0000000120189870 T gen_divsf3 +000000012017f050 T gen_divsi3 +0000000120183160 T gen_dummy +000000012018a590 T gen_epilogue +00000001200a15e0 T gen_extend_insn +0000000120188720 T gen_extendhisi2 +0000000120188850 T gen_extendqihi2 +0000000120188980 T gen_extendqisi2 +0000000120188ab0 T gen_extendsfdf2 +00000001201885a0 T gen_extendsidi2 +0000000120189e90 T gen_extv +0000000120189f00 T gen_extzv +0000000120189d60 T gen_ffssi2 +0000000120188c70 T gen_fix_truncdfsi2 +0000000120188ce0 T gen_fix_truncsfsi2 +0000000120188b90 T gen_floatsidf2 +0000000120188c00 T gen_floatsisf2 +0000000120028c20 t gen_formal_list_for_func_def +00000001200287b0 t gen_formal_list_for_type +00000001200b1bf0 T gen_highpart +00000001200b3e60 T gen_imagpart +000000012018a690 T gen_indirect_jump +00000001200b43f0 T gen_inline_header_rtx +0000000120189950 T gen_iordi3 +0000000120181780 T gen_iorsi3 +0000000120183100 T gen_jump +00000001200b4360 T gen_label_rtx +0000000120187160 T gen_locate1 +0000000120187220 T gen_locate2 +00000001200b4000 T gen_lowpart +00000001200b14c0 T gen_lowpart_common +00000001201265a0 t gen_lowpart_for_combine +00000001200f1980 T gen_lowpart_if_possible +0000000120182360 T gen_lshrsi3 +00000001201833f0 T gen_m88k_rcs_id +00000001201877a0 T gen_movdf +00000001201876d0 T gen_movdi +000000012009cbd0 T gen_move_insn +0000000120187530 T gen_movhi +0000000120187600 T gen_movqi +0000000120187870 T gen_movsf +0000000120187370 T gen_movsi +0000000120187940 T gen_movstrsi +00000001201893a0 T gen_muldf3 +00000001201894c0 T gen_mulsf3 +0000000120189330 T gen_mulsi3 +0000000120189f70 T gen_negdf2 +0000000120189fe0 T gen_negsf2 +00000001201827c0 T gen_negsi2 +000000012018a4c0 T gen_nop +0000000120189aa0 T gen_one_cmpldi2 +0000000120189a30 T gen_one_cmplsi2 +000000012018a520 T gen_prologue +00000001200828f0 T gen_push_operand +00000001200b3e10 T gen_realpart +00000001200b1290 T gen_reg_rtx +0000000120151de0 T gen_reload +0000000120187440 T gen_reload_insi +000000012018a4e0 T gen_return +0000000120189b70 T gen_rotlsi3 +0000000120189cf0 T gen_rotrsi3 +00000001200b1100 T gen_rtvec +00000001200b1210 T gen_rtvec_v +00000001200b0e00 T gen_rtx +00000001201269a0 t gen_rtx_combine +00000001201854a0 T gen_seq +00000001200b64a0 T gen_sequence +0000000120185920 T gen_sge +00000001201859e0 T gen_sgeu +0000000120185620 T gen_sgt +00000001201856e0 T gen_sgtu +0000000120185aa0 T gen_sle +0000000120185b60 T gen_sleu +00000001201857a0 T gen_slt +0000000120185860 T gen_sltu +0000000120185560 T gen_sne +0000000120183430 T gen_split_1 +000000012017eed0 T gen_split_125 +000000012017e110 T gen_split_13 +000000012017e390 T gen_split_14 +000000012017e5a0 T gen_split_15 +0000000120184140 T gen_split_16 +00000001201842e0 T gen_split_17 +0000000120184450 T gen_split_18 +000000012017e7f0 T gen_split_19 +0000000120183610 T gen_split_2 +000000012017ea70 T gen_split_20 +000000012017ec80 T gen_split_21 +00000001201845e0 T gen_split_22 +0000000120184780 T gen_split_23 +00000001201848f0 T gen_split_24 +00000001201837f0 T gen_split_3 +0000000120184a80 T gen_split_31 +0000000120184bb0 T gen_split_33 +0000000120184d00 T gen_split_35 +0000000120184e30 T gen_split_37 +00000001201839d0 T gen_split_4 +0000000120183bb0 T gen_split_5 +0000000120183d90 T gen_split_6 +0000000120183f70 T gen_split_7 +0000000120185c20 T gen_split_75 +0000000120185d70 T gen_split_80 +00000001200a1470 T gen_sub2_insn +00000001201890b0 T gen_subdf3 +0000000120189240 T gen_subdi3 +00000001201891d0 T gen_subsf3 +0000000120189040 T gen_subsi3 +0000000120189b10 T gen_tbnd +0000000120189570 T gen_tcnd_divide_by_zero +0000000120184f80 T gen_test +0000000120189530 T gen_trap_divide_by_zero +0000000120188b20 T gen_truncdfsf2 +0000000120026a00 t gen_type +0000000120180e90 T gen_udivsi3 +0000000120126f10 t gen_unary +00000001201899c0 T gen_xordi3 +0000000120181920 T gen_xorsi3 +00000001201881f0 T gen_zero_extendhisi2 +0000000120188320 T gen_zero_extendqihi2 +0000000120188450 T gen_zero_extendqisi2 +00000001201049d0 t general_induction_var +0000000120171140 T general_operand +0000000120200428 S gesf2_libfunc +000000012018ee20 T get_attr_cpu +000000012018d8b0 T get_attr_fpu +000000012016be50 T get_attr_length +000000012018da20 T get_attr_type +0000000120048ce0 T get_best_mode +0000000120157380 t get_branch_condition +0000000120107100 T get_condition +0000000120107760 T get_condition_for_loop +000000012002c580 T get_directive_line +0000000120041c40 T get_file_function_name +0000000120062d80 T get_first_block_beg +00000001200b3df0 T get_first_label_num +0000000120062d30 T get_first_nonparm_insn +0000000120061cb0 T get_frame_size +000000012003d8a0 T get_identifier +00000001200746b0 T get_inner_reference +00000001200745e0 t get_inner_unaligned_p +00000001200b4830 T get_insns +00000001200afcb0 T get_integer_term +0000000120156dd0 t get_jump_flags +00000001200e39a0 T get_label_after +00000001200e3910 T get_label_before +00000001200b4850 T get_last_insn +00000001200b48b0 T get_last_insn_anywhere +00000001201299d0 t get_last_value +00000001201297d0 t get_last_value_validate +00000001200b4900 T get_max_uid +0000000120041960 T get_narrower +0000000120013760 T get_parm_info +0000000120048e70 T get_pending_sizes +00000001200842e0 t get_pointer_alignment +00000001200a9760 T get_pool_constant +00000001200a9830 T get_pool_mode +00000001200a9900 T get_pool_offset +00000001200a99d0 T get_pool_size +00000001200afd30 T get_related_value +00000001200384e0 T get_run_time +0000000120041e00 T get_set_constructor_bits +0000000120041fc0 T get_set_constructor_bytes +0000000120021790 t get_spelling +00000001200416b0 T get_unwidened +0000000120016e20 T getdecls +0000000120200580 S getf2_libfunc +0000000120198ed0 T getpwd +0000000120016e40 T gettags +0000000120200678 S gexf2_libfunc +0000000120135fa0 T global_alloc +0000000120200090 S global_alloc_time +00000001201fede0 s global_binding_level +00000001200164d0 T global_bindings_p +0000000120136f90 t global_conflicts +00000001202007e8 S global_const_equiv_map +00000001202007f0 S global_const_equiv_map_size +00000001201fef20 S global_reg_dump +0000000120200078 S global_reg_dump_file +0000000120213d0c B global_regs +0000000120130270 T globalize_reg +00000001201ff0e0 s goto_fixup_chain +0000000120011750 t grokdeclarator +0000000120017710 T grokfield +0000000120013550 t grokparms +0000000120016ee0 T groktypename +0000000120016f20 T groktypename_in_parm_context +000000012006c550 t group_case_nodes +0000000120200340 S gtdf2_libfunc +0000000120200670 S gthf2_libfunc +0000000120200500 S gtsf2_libfunc +0000000120200460 S gttf2_libfunc +0000000120200598 S gtxf2_libfunc +000000012000c110 T handle_pragma_token +00000001200a99f0 T handle_pragma_weak +0000000120008c80 T handle_sysv_pragma +00000001202007e0 S hard_frame_pointer_rtx +0000000120095f70 T hard_function_value +0000000120096090 T hard_libcall_value +00000001201ff7d0 s hard_reg_conflicts +00000001201ff7e0 s hard_reg_copy_preferences +00000001201ff7e8 s hard_reg_full_preferences +00000001201ff7d8 s hard_reg_preferences +000000012013c7e0 t hard_reg_set_here_p +0000000120152d20 t hard_reg_use_compare +00000001201ff3d8 s hard_regs_in_table +00000001201ff7c4 s hard_regs_live +00000001201ff938 s hard_regs_live +00000001201ff85c s hard_regs_live_known +00000001201ff948 s hard_regs_need_restore +00000001201ff940 s hard_regs_saved +00000001201ff418 s hash_arg_in_memory +00000001201ff41c s hash_arg_in_struct +0000000120201258 b hash_table +0000000120209db8 b hashtab +00000001200a1440 T have_add2_insn +00000001200a1580 T have_sub2_insn +00000001201ff244 s have_used_extensions +00000001201ffae8 s high_block_linenum +00000001201ffaec s high_function_linenum +00000001201ff120 s highest_outgoing_arg_in_use +00000001201ff6a8 s highest_regno_in_uid_map +00000001201ffff0 S id_clash_len +00000001201feff8 S id_string_size +000000012005f2a0 T identify_blocks +00000001201fecf8 s if_stmt_file +00000001201fed00 s if_stmt_line +00000001201219a0 t if_then_else_cond +00000001200fe1d0 t ignore_some_movables +00000001200a4ad0 T immed_double_const +00000001200a9420 T immed_real_const +00000001200a4d30 T immed_real_const_1 +00000001201732d0 T immediate_operand +0000000120200148 S immediate_size_expand +00000001200169f0 T implicitly_declare +00000001201ff08c s in_arg_offset +00000001201ff168 s in_named_name +00000001201ff308 s in_nonparm_insns +00000001200165c0 T in_parm_level_p +00000001201ff148 s in_section +00000001200b6480 T in_sequence_p +00000001201fef68 S in_system_header +00000001200a86e0 T in_text_section +0000000120152660 t inc_for_reload +00000001201fef58 S incomplete_decl_finalize_hook +0000000120018f40 T incomplete_type_error +00000001201ff1b4 s indent.0 +0000000120047830 T indent_to +0000000120044df0 T index_type_equal +0000000120173810 T indirect_operand +0000000120200999 S indirect_symref_ok +00000001200af270 T inequality_comparisons_p +00000001202002ec S inhibit_defer_pop +00000001201fefc0 S inhibit_warnings +00000001201ff348 s init.0 +00000001201ff34c s init.3 +00000001201ff350 s init.4 +00000001201641d0 T init_alias_analysis +00000001201740b0 T init_all_optabs +00000001201549c0 T init_caller_save +00000001200a9560 T init_const_rtx_hash_table +000000012000e5d0 T init_decl_processing +00000001200b35a0 T init_emit +00000001200b3800 T init_emit_once +0000000120089c70 T init_expmed +0000000120082040 T init_expr +000000012006ff10 T init_expr_once +000000012016f630 T init_final +000000012002cb10 T init_function_format_info +000000012005f5e0 T init_function_start +000000012016f700 T init_insn_lengths +000000012002e8e0 T init_iterators +0000000120007110 T init_lex +00000001200a1640 t init_libfuncs +0000000120107800 T init_loop +000000012018a8b0 T init_mov_optab +0000000120084200 t init_noncopied_parts +000000012003b990 T init_obstacks +000000012009ecb0 T init_optabs +0000000120082a70 T init_pending_stack_adjust +0000000120172e30 T init_recog +0000000120172e10 T init_recog_no_volatile +0000000120114280 t init_reg_last_arrays +0000000120109a30 t init_reg_map +0000000120130b10 t init_reg_modes +000000012012d1e0 T init_reg_sets +00000001201307a0 t init_reg_sets_1 +000000012012fec0 T init_regs +000000012010ff40 t init_regset_vector +0000000120147440 T init_reload +00000001200ac2b0 T init_rtl +0000000120156100 T init_save_areas +000000012006e240 T init_stmt +000000012006e270 T init_stmt_for_function +00000001200425f0 T init_tree_codes +00000001201ea0f8 d initial_call_used_regs +00000001201ea0b8 d initial_fixed_regs +000000012010d3a0 t initial_reg_note_copy +00000001201ff028 s initial_trampoline.1 +00000001201ffea0 S initialization_message +00000001200dfa70 t initialize_for_inline +00000001201ff26c s initialized.2 +00000001200213c0 T initializer_constant_valid_p +00000001201ffe90 S initializer_stack +0000000120200198 S inline_function_decl +0000000120200108 S inline_obstacks +00000001201fff20 S input_file_stack +000000012020000c S input_file_stack_tick +00000001201fffc0 S input_filename +00000001200e7f50 t insert +00000001200167b0 T insert_block +00000001200e7ab0 t insert_regs +0000000120155d20 t insert_save_restore +00000001202009b8 S insn_addresses +00000001201ff9f0 s insn_blockage +0000000120164cf0 t insn_cost +00000001201ff9e0 s insn_costs +00000001201ffac8 s insn_counter +00000001202009b4 S insn_current_address +000000012018ea90 T insn_current_length +00000001201109b0 t insn_dead_p +000000012018a8c0 T insn_default_length +000000012017c590 T insn_extract +00000001201bf238 R insn_gen_function +00000001201ffb28 s insn_lengths +00000001201ff9d0 s insn_luid +00000001201ff2d8 s insn_map +00000001201cec10 R insn_n_alternatives +00000001201bff7c R insn_n_dups +00000001201bfb10 R insn_n_operands +00000001201ea800 D insn_name +00000001201fecc8 G insn_name_ptr +00000001201ffb08 s insn_noperands +00000001201c03e8 R insn_operand_constraint +00000001201c5c58 R insn_operand_mode +00000001201c93a0 R insn_operand_predicate +00000001201c8890 R insn_operand_strict_low +00000001201be960 R insn_outfun +00000001201ff9d8 s insn_priority +0000000120209570 b insn_queue +00000001201ff9f8 s insn_ref_count +00000001201be088 R insn_template +00000001201ffa38 s insn_tick +00000001201ff9e8 s insn_units +000000012018eb20 T insn_variable_length_p +0000000120063780 t instantiate_decls_1 +00000001200621a0 T instantiate_virtual_regs +000000012005c860 t instantiate_virtual_regs_1 +0000000120197760 T int32_operand +0000000120197730 T int5_operand +00000001201ffcf8 S intDI_type_node +00000001201ffd08 S intHI_type_node +00000001201ffc78 S intQI_type_node +00000001201ffcd8 S intSI_type_node +00000001201ffdb0 S int_array_type_node +0000000120045270 T int_fits_type_p +00000001201ffe08 S int_ftype_cptr_cptr_sizet +00000001201ffd30 S int_ftype_int +00000001201ffca8 S int_ftype_ptr_ptr_int +00000001201ffde0 S int_ftype_string_string +00000001201ea238 d int_reg_class_contents +0000000120043a30 T int_size_in_bytes +0000000120042cf0 T integer_all_onesp +0000000120196960 T integer_ok_for_set +00000001201ffd58 S integer_one_node +0000000120042b90 T integer_onep +0000000120042ef0 T integer_pow2p +00000001201ffe80 S integer_type_node +00000001201ffd68 S integer_zero_node +0000000120042ac0 T integer_zerop +00000001200dd810 t integrate_decl_tree +00000001200dd710 t integrate_parm_decls +00000001201ffefc S integration_time +00000001200387c0 T interim_eh +0000000120200088 S interim_eh_hook +0000000120025d50 t internal_build_compound_expr +00000001200e87e0 t invalidate +00000001200f5710 t invalidate_for_call +00000001200f2dd0 t invalidate_from_clobbers +00000001200fb1e0 t invalidate_skipped_set +0000000120100fe0 T invariant_p +00000001200e4a60 T invert_exp +00000001200e6f60 T invert_jump +000000012004c250 T invert_truthvalue +0000000120200538 S ior_optab +0000000120044300 T is_attribute_p +0000000120006eb0 T is_class_name +000000012000b660 T is_reserved_word +00000001201ffea8 S iter_stack +000000012010d480 t iteration_info +000000012002ef90 T iterator_expand +000000012002ee60 T iterator_for_loop_end +000000012002ed40 T iterator_for_loop_start +00000001201feee8 s ixp_firstobj +0000000120201150 b ixp_obstack +00000001201fef28 S jump2_opt_dump +00000001201fffc8 S jump2_opt_dump_file +00000001200e3a30 t jump_back_p +00000001201ff318 s jump_chain +00000001201fef00 S jump_opt_dump +00000001201fffb0 S jump_opt_dump_file +00000001200e0140 T jump_optimize +0000000120200070 S jump_time +000000012007e7c0 T jumpif +000000012007e790 T jumpifnot +00000001201ffb38 s junk +00000001201fedec s keep_next_if_subblocks +00000001200164f0 T keep_next_level +00000001201fede8 s keep_next_level_flag +0000000120016510 T kept_level_p +00000001201222b0 t known_cond +00000001202034f8 b label.4 +00000001201ff0f8 s label_counter.3 +00000001201fedf0 s label_level_chain +00000001201ff2d0 s label_map +00000001201fec50 g label_num +000000012006e510 T label_rtx +00000001201ff628 s label_tick +00000001201ff14c s labelno.1 +00000001201ff150 s labelno.2 +0000000120200a30 S labelrefs +0000000120200a38 S labels +0000000120100f60 t labels_in_range_p +0000000120006de0 T lang_decode_option +00000001201fffa0 S lang_expand_expr +0000000120006e60 T lang_finish +0000000120006e70 T lang_identify +0000000120006e10 T lang_init +00000001201e7db0 D lang_options +00000001201fec00 G language_string +00000001201fff5c S larger_than_size +00000001201ffb78 s last_addr.2 +00000001202006d0 S last_assemble_variable_decl +00000001201ff0c8 s last_block_end_note +00000001201ff5d4 s last_call_cuid +00000001201ff558 s last_call_suid +000000012006f4d0 T last_cleanup_this_contour +00000001201fefd0 s last_error_function +00000001201fefec s last_error_tick +00000001201ff0b8 s last_expr_type +00000001201ff0c0 s last_expr_value +00000001201ff208 s last_filename +00000001201ff288 s last_filename +00000001201ffaf0 s last_filename +00000001201ffa98 s last_function_call +00000001201fed88 s last_function_parm_tags +00000001201fed80 s last_function_parms +00000001201ffac0 s last_ignored_compare +00000001201ff1f0 s last_insn +00000001201ff430 s last_jump_equiv_class +00000001201ff214 s last_label_num +00000001201ff268 s last_line_entry_num.0 +00000001201ff200 s last_linenum +00000001201ffae4 s last_linenum +00000001201ff540 s last_mem_set +00000001201ff048 s last_parm_insn +00000001201ffa90 s last_pending_memory_flush +00000001201ff198 s last_pool +00000001201ffaa8 s last_scheduled_insn +00000001201ff8ac s last_spill_reg +0000000120106ed0 t last_use_this_basic_block +00000001201ffbf0 S lastiddecl +00000001200144f0 t layout_array_type +00000001200478c0 T layout_decl +00000001200495d0 t layout_record +0000000120047db0 T layout_type +0000000120049bc0 t layout_union +00000001201ffe00 S ldouble_ftype_ldouble +00000001201ea470 d leaf.0 +00000001202009c8 S leaf_function +000000012016fa00 T leaf_function_p +0000000120200480 S ledf2_libfunc +0000000120191870 T legitimize_address +0000000120197110 T legitimize_operand +0000000120200330 S lehf2_libfunc +00000001202005c0 S lesf2_libfunc +0000000120200560 S letf2_libfunc +00000001202003d8 S lexf2_libfunc +00000001200fe070 t libcall_benefit +0000000120110c60 t libcall_dead_p +00000001200fdec0 t libcall_other_reg +000000012010eec0 t life_analysis +00000001201ffa00 s line_note +00000001201ffb20 s line_note_exists +00000001201ffa08 s line_note_head +00000001201feff0 s line_position +0000000120200094 S lineno +00000001200435d0 T list_length +00000001200436d0 T listify +0000000120130d90 T local_alloc +00000001201fff8c S local_alloc_time +00000001201fef1c S local_reg_dump +00000001201ffeb8 S local_reg_dump_file +0000000120206f90 b local_reg_live_length +0000000120206e90 b local_reg_n_refs +00000001202001e0 S local_vars_size +000000012005e850 T locate_and_pad_parm +00000001200d9aa0 t location_attribute +00000001200d78e0 t location_or_const_value_attribute +00000001201ffca0 S long_double_type_node +00000001201ffc88 S long_ftype_long +00000001201ffd50 S long_integer_type_node +00000001201ffe40 S long_long_integer_type_node +00000001201ffd18 S long_long_unsigned_type_node +00000001201ffe88 S long_unsigned_type_node +00000001200444f0 T lookup_attribute +000000012001a760 t lookup_field +00000001200cdce0 t lookup_filename +0000000120006ea0 T lookup_interface +0000000120016b90 T lookup_label +000000012000e4c0 T lookup_name +000000012000e500 T lookup_name_current_level +000000012000e560 T lookup_name_current_level_global +0000000120063370 T lookup_static_chain +00000001201ff470 s loop_continue +00000001201ff6a4 s loop_cost +00000001201ff538 s loop_depth +00000001201ff6a0 s loop_depth +00000001201ff770 s loop_depth +00000001201fef08 S loop_dump +0000000120200050 S loop_dump_file +0000000120200820 S loop_dump_stream +00000001201ff4f0 s loop_final_value +00000001201ff468 s loop_has_call +00000001201ff46c s loop_has_volatile +00000001201ff4e8 s loop_increment +00000001201ff4e0 s loop_initial_value +00000001201ff460 s loop_invalid +00000001201ff4d8 s loop_iteration_var +000000012010c720 T loop_iterations +0000000120200848 S loop_iv_list +0000000120200808 S loop_n_iterations +0000000120200840 S loop_number_exit_count +0000000120200810 S loop_number_exit_labels +00000001201ff458 s loop_number_loop_ends +00000001201ff450 s loop_number_loop_starts +00000001200fc370 T loop_optimize +0000000120200818 S loop_outer_loop +0000000120101da0 t loop_reg_used_before_p +00000001202002c0 S loop_stack +0000000120206608 b loop_store_mems +00000001201ff498 s loop_store_mems_idx +00000001201ffed0 S loop_time +00000001201ff4a8 s loops_enclosed +0000000120055f40 T lrotate_double +0000000120055db0 T lshift_double +000000012008cab0 t lshift_value +00000001202006c0 S lshr_optab +00000001202005a8 S ltdf2_libfunc +0000000120200548 S lthf2_libfunc +0000000120200518 S ltsf2_libfunc +0000000120200470 S lttf2_libfunc +0000000120200430 S ltxf2_libfunc +000000012001f0a0 T lvalue_or_else +000000012001eff0 T lvalue_p +00000001200c0300 t m16m +0000000120197de0 T m88k_begin_epilogue +0000000120197cd0 T m88k_begin_prologue +0000000120195430 T m88k_builtin_saveregs +0000000120200a08 S m88k_case_index +0000000120200a00 S m88k_compare_op0 +0000000120200a18 S m88k_compare_op1 +00000001202009e8 S m88k_compare_reg +00000001202009e0 S m88k_cpu +0000000120198220 T m88k_debugger_offset +0000000120197e80 T m88k_end_epilogue +0000000120197cf0 T m88k_end_prologue +0000000120198160 T m88k_expand_epilogue +0000000120194880 T m88k_expand_prologue +00000001201ffb4c S m88k_fp_offset +00000001201987f0 T m88k_function_arg +00000001201ffb48 S m88k_function_number +00000001201ffb40 S m88k_gp_threshold +0000000120194400 T m88k_layout_frame +00000001201fecd0 G m88k_pound_sign +00000001201ffb44 S m88k_prologue_done +0000000120200a10 S m88k_short_data +00000001201ffb50 S m88k_stack_size +00000001202009f0 S m88k_version +00000001202009f8 S m88k_volatile_code +00000001201eb4a8 d m_options +0000000120036b90 T main +0000000120200028 S main_input_filename +0000000120197800 T mak_mask_p +000000012011f8b0 t make_compound_operation +00000001200a1df0 T make_decl_rtl +000000012011ed90 t make_extraction +0000000120122800 t make_field_assignment +00000001200a1880 T make_function_rtl +00000001200b4bf0 T make_insn_raw +00000001200bb910 t make_nan +000000012003d170 T make_node +000000012000b790 T make_pointer_declarator +000000012015c790 t make_return_insns +00000001200b46f0 T make_safe_from +0000000120049170 T make_signed_type +0000000120091e70 T make_tree +000000012003e220 T make_tree_vec +00000001200492c0 T make_unsigned_type +00000001200a89c0 T make_var_volatile +000000012001f3c0 T mark_addressable +0000000120139ec0 T mark_elimination +000000012014b680 T mark_home_live +00000001200e3f10 t mark_jump_label +000000012010ecc0 t mark_label_ref +0000000120134950 t mark_life +0000000120100be0 t mark_loop_jump +00000001200e7250 t mark_modified_reg +0000000120152c40 t mark_not_eliminable +0000000120156280 t mark_referenced_resources +0000000120139030 t mark_reg_clobber +0000000120139220 t mark_reg_conflicts +0000000120139370 t mark_reg_death +00000001201394c0 t mark_reg_live_nc +00000001200b3d50 T mark_reg_pointer +0000000120138df0 t mark_reg_store +0000000120152e70 t mark_reload_reg_in_use +000000012014b750 t mark_scratch_live +000000012006a560 T mark_seen_cases +0000000120110e70 t mark_set_1 +0000000120110d50 t mark_set_regs +0000000120156860 t mark_set_resources +00000001200df8d0 T mark_stores +0000000120158370 t mark_target_live_regs +0000000120061e00 T mark_temp_addr_taken +0000000120111510 t mark_used_regs +000000012012a230 t mark_used_regs_combine +0000000120063640 T mark_varargs +000000012008c9c0 t mask_rtx +00000001201ff788 s max_allocno +00000001201ffb0c s max_block_depth +00000001201ff42c s max_elements_made +00000001201eb3f4 d max_from_align +00000001201ff320 s max_jump_chain +00000001200b3db0 T max_label_num +00000001201ff44c s max_loop_num +00000001201ff448 s max_luid +0000000120200930 S max_parallel +00000001201ff050 s max_parm_reg +00000001201ff2e8 s max_parm_reg +0000000120062d10 T max_parm_reg_num +00000001201ffab0 s max_priority +00000001201ff358 s max_qty +00000001201ff354 s max_reg +0000000120200830 S max_reg_before_loop +00000001200b3d90 T max_reg_num +00000001202008a4 S max_regno +0000000120200880 S max_scratch +0000000120200158 S max_stack_depth +00000001201ff408 s max_uid +00000001201ff978 s max_uid +00000001201ff5b8 s max_uid_cuid +00000001201ff4f8 s max_uid_for_flow +0000000120200868 S max_uid_for_loop +000000012020014c S maximum_field_alignment +00000001201fed24 s maxtoken +0000000120206c8c b may_move_cost +00000001201ff488 s may_not_optimize +00000001200aef80 T may_trap_p +0000000120016f60 T maybe_build_cleanup +0000000120006ef0 T maybe_building_objc_message_expr +0000000120106830 t maybe_eliminate_biv +00000001201069c0 t maybe_eliminate_biv_1 +0000000120006ec0 T maybe_objc_check_decl +0000000120006ed0 T maybe_objc_comptypes +0000000120006ee0 T maybe_objc_method_name +00000001202000c0 S maybepermanent_firstobj +000000012020bdf0 B maybepermanent_obstack +0000000120190250 t mem100_unit_blockage +000000012018c440 T mem100_unit_blockage_range +0000000120190b80 t mem100_unit_conflict_cost +000000012018c1d0 T mem100_unit_ready_cost +000000012018fca0 t mem110_unit_blockage +000000012018be80 T mem110_unit_blockage_range +000000012018bc10 T mem110_unit_ready_cost +00000001201ff5d0 s mem_last_set +0000000120200568 S memcmp_libfunc +0000000120200520 S memcpy_libfunc +0000000120207540 b memlocs +0000000120093c80 T memory_address +00000001200956f0 T memory_address_noforce +00000001201716e0 T memory_address_p +0000000120173730 T memory_operand +0000000120131600 t memref_referenced_p +0000000120160a20 t memrefs_conflict_p +0000000120200420 S memset_libfunc +00000001200e77c0 t mention_regs +00000001200f5390 t merge_equiv_classes +000000012012cba0 t merge_outer_ops +00000001201ff23c S merror +0000000120200a88 b message.0 +00000001201e740e d message.4 +000000012002d590 T min_precision +00000001201fee04 s missing_braces_mentioned +00000001200cee50 t mod_fund_type_attribute +00000001200cf2c0 t mod_u_d_type_attribute +00000001201e9488 D mode_class +0000000120173e40 T mode_dependent_address_p +0000000120049050 T mode_for_size +00000001201eb3d0 d mode_from_align +0000000120173e50 T mode_independent_operand +00000001201e93a0 D mode_name +00000001201e94fc D mode_size +000000012020bf38 B mode_to_const_map +000000012020bfac B mode_to_load_map +000000012020c094 B mode_to_store_map +00000001201e9570 D mode_unit_size +00000001201e95e4 D mode_wider_mode +000000012014ac70 t modes_equiv_for_class_p +00000001200ad550 T modified_between_p +00000001200ad830 T modified_in_p +00000001201ff340 s modified_mem +00000001201ff338 s modified_regs +00000001202000e0 S momentary_firstobj +00000001202000a8 S momentary_function_firstobj +000000012020bb28 B momentary_obstack +0000000120200118 S momentary_stack +00000001201928e0 T mostly_false_jump +0000000120156f70 t mostly_true_jump +0000000120200618 S mov_optab +0000000120082310 T move_block_from_reg +0000000120082240 T move_block_to_reg +0000000120082c80 t move_by_pieces +0000000120071640 t move_by_pieces_1 +0000000120071540 t move_by_pieces_ninsns +000000012006f470 T move_cleanups_up +0000000120206bc8 b move_cost +000000012012a4e0 t move_deaths +00000001200fef90 t move_movables +0000000120197240 T move_operand +00000001201ff490 s moved_once +000000012020c020 B movstr_optab +00000001202005e8 S movstrict_optab +00000001200bb870 t mtherr +00000001202039c8 b mul_cost +000000012004a0a0 T mul_double +0000000120203b24 b mul_highpart_cost +0000000120203ab0 b mul_widen_cost +00000001201ffbbc s n.3 +00000001202008b0 S n_basic_blocks +0000000120200958 S n_earlyclobbers +00000001201ff428 s n_elements_made +00000001201ff848 s n_memlocs +0000000120200900 S n_non_fixed_regs +00000001201ff668 s n_occurrences +0000000120145880 T n_occurrences +00000001202009a4 S n_regs_saved +00000001201ff830 s n_regs_set +0000000120200954 S n_reloads +00000001201ff844 s n_replacements +00000001201ff8a0 s n_spills +00000001201ff478 s n_times_set +00000001201ff480 s n_times_used +00000001201fed38 s name.2 +00000001201fedb0 s named_labels +00000001200a8700 T named_section +0000000120200388 S nedf2_libfunc +00000001201fefe8 s need_error_newline +0000000120055d70 T neg_double +00000001202005d0 S neg_optab +00000001201ff13c s negate_cost +0000000120093010 T negate_rtx +0000000120200690 S nehf2_libfunc +0000000120200680 S nesf2_libfunc +00000001202002b0 S nesting_depth +00000001202002a0 S nesting_stack +0000000120200350 S netf2_libfunc +00000001201ff8f8 s new_asm_operands_vec +00000001200f5100 t new_basic_block +00000001201feca8 g new_block +000000012016a0d0 t new_insn_dead_notes +000000012014ae20 t new_spill_reg +00000001201fed20 s newline_warning.1 +00000001201ff5ec s newpat_used_regs +00000001202004c8 S nexf2_libfunc +00000001200b4ab0 T next_active_insn +00000001202009a8 S next_block_index +00000001201ff254 s next_block_number +00000001201fec88 g next_block_number +00000001201ff004 s next_decl_uid +00000001200b4920 T next_insn +00000001200b4b90 T next_label +00000001200e6ed0 T next_nondeleted_insn +00000001200b49d0 T next_nonnote_insn +00000001201ff260 s next_pubname_number +00000001201ff35c s next_qty +00000001201ff6b0 s next_qty +00000001200b4a30 T next_real_insn +00000001201fec38 g next_type_uid +00000001201fec8c g next_unused_dienum +00000001201fec08 g nextchar +00000001201ff020 s nlab.0 +00000001201ffbb0 s nlab.0 +0000000120134bb0 t no_conflict_p +00000001201ff7f8 s no_global_alloc_regs +00000001200afdb0 T no_labels_between_p +00000001201ff21c s no_line_numbers +00000001200563a0 T non_lvalue +00000001201734b0 T nonimmediate_operand +00000001201ea570 d nonleaf.1 +00000001202001b0 S nonlocal_goto_handler_slot +0000000120200220 S nonlocal_goto_stack_level +0000000120062ae0 T nonlocal_label_rtx_list +0000000120200268 S nonlocal_labels +0000000120173540 T nonmemory_operand +0000000120123780 t nonzero_bits +00000001201ff638 s nonzero_bits_mode +00000001201ff648 s nonzero_sign_valid +00000001201078e0 t note_addr_stored +00000001201ff4b0 s note_insn +00000001201e9a70 D note_insn_name +00000001201ffa10 s note_list +00000001200f2a60 t note_mem_written +00000001200dfe50 t note_modified_parmregs +00000001200ae350 T note_stores +00000001201ffb80 s nregs +00000001200436a0 T nreverse +00000001201ffdc8 S null_pointer_node +0000000120197c50 T null_prologue +00000001201ffb30 s num_changes +000000012018d780 T num_delay_slots +00000001201ff8d0 s num_eliminable +0000000120209530 b num_filled_delays +0000000120209520 b num_insns_needing_delays +00000001201ff8e8 s num_labels +00000001201ff4a4 s num_mem_sets +00000001201ff4a0 s num_movables +00000001201ff8cc s num_not_at_initial_offset +00000001201ff330 s num_same_regs +00000001201ff510 s num_scratch +0000000120124310 t num_sign_bit_copies +0000000120173000 T num_validated_changes +00000001201ffb84 s nxregs +000000012003ca00 T oballoc +00000001201fef6c S obey_regdecls +0000000120042310 T obfree +00000001200423e0 T object_permanent_p +00000001202000d0 S obstack_stack +0000000120201200 b obstack_stack_obstack +0000000120197a60 T odd_relop +00000001201ff8e0 s offsets_at +00000001201ff8d8 s offsets_known_at +0000000120173b60 T offsettable_address_p +0000000120173a80 T offsettable_memref_p +0000000120173af0 T offsettable_nonstrict_memref_p +00000001201ff8f0 s old_asm_operands_vec +00000001201ffa28 s old_live_regs +0000000120200348 S one_cmpl_optab +0000000120206d50 b op_costs +000000012003b850 t open_dump_file +000000012004b950 T operand_equal_p +00000001200b1df0 T operand_subword +00000001200b41c0 T operand_subword_force +000000012013ce20 T operands_match_p +00000001201ec06c D optab_bit_and_expr +00000001201ec09c D optab_bit_ior_expr +00000001201ec544 D optab_bit_not_expr +00000001201ec0cc D optab_bit_xor_expr +00000001201ec41c D optab_eq_expr +00000001201ec2fc D optab_ge_expr +00000001201ec38c D optab_gt_expr +00000001201ec26c D optab_le_expr +00000001201ec0fc D optab_lshift_expr +00000001201ec1dc D optab_lt_expr +00000001201ebe9c D optab_minus_expr +00000001201ebf0c D optab_mult_expr +00000001201ec48c D optab_ne_expr +00000001201ec4fc D optab_negate_expr +00000001201ebe2c D optab_plus_expr +00000001201ec650 D optab_postdecrement_expr +00000001201ec6b8 D optab_postincrement_expr +00000001201ec580 D optab_predecrement_expr +00000001201ec5e8 D optab_preincrement_expr +00000001201ec02c D optab_rdiv_expr +00000001201ec14c D optab_rshift_expr +00000001201ebf8c D optab_trunc_div_expr +00000001201ebfdc D optab_trunc_mod_expr +00000001201ec19c D optab_truth_and_expr +00000001201ec568 D optab_truth_not_expr +00000001201ec1bc D optab_truth_or_expr +00000001201fec18 G optimize +000000012005c2c0 t optimize_bit_field +0000000120056ff0 t optimize_bit_field_compare +0000000120135250 t optimize_reg_copy_1 +0000000120135790 t optimize_reg_copy_2 +000000012015d5d0 t optimize_skip +000000012014d780 t order_regs_for_reload +00000001201ff2f0 s orig_asm_operands_vector +00000001201ff098 s out_arg_offset +00000001201eb388 d out_rcs_id +00000001202001b8 S outer_function_chain +00000001201ff1c0 s outfile +000000012017d430 t output_107 +000000012017d460 t output_108 +000000012017d1b0 t output_11 +000000012017d490 t output_114 +000000012017d4c0 t output_117 +000000012017d230 t output_12 +000000012017d4f0 t output_120 +000000012017d520 t output_121 +000000012017d550 t output_123 +000000012017d580 t output_126 +000000012017d5b0 t output_127 +000000012017d5e0 t output_129 +000000012017d610 t output_131 +000000012017d640 t output_132 +000000012017d670 t output_134 +000000012017d6a0 t output_147 +000000012017d6d0 t output_149 +000000012017d700 t output_151 +000000012017d730 t output_154 +000000012017d760 t output_156 +000000012017d790 t output_158 +000000012017d7c0 t output_169 +000000012017d7f0 t output_223 +000000012017d820 t output_225 +000000012017d960 t output_228 +000000012017d990 t output_230 +000000012017dad0 t output_233 +000000012017db00 t output_235 +000000012017dc40 t output_245 +000000012017dc70 t output_247 +000000012017dca0 t output_249 +000000012017dcd0 t output_252 +000000012017dd00 t output_254 +000000012017dd70 t output_256 +000000012017dde0 t output_257 +000000012017de50 t output_258 +000000012017dec0 t output_259 +000000012017dfb0 t output_261 +000000012017dfe0 t output_262 +000000012017e010 t output_264 +000000012017e040 t output_269 +000000012017e080 t output_271 +000000012017e0b0 t output_273 +000000012017e0e0 t output_281 +000000012017d2b0 t output_46 +000000012017d380 t output_58 +000000012017d3b0 t output_61 +000000012017d3e0 t output_94 +000000012016edc0 T output_addr_const +000000012016ed70 T output_address +00000001200a7340 t output_addressed_constants +0000000120196ed0 T output_and +00000001200cf650 t output_array_type_die +00000001201941b0 T output_ascii +000000012016e3b0 T output_asm_insn +000000012016ebc0 T output_asm_label +00000001200d6fa0 t output_block +0000000120198690 T output_block_profiler +00000001200d9460 t output_bound_representation +00000001201fef50 S output_bytecode +0000000120192610 T output_call +00000001200d3530 t output_compile_unit_die +00000001200a74b0 T output_constant +00000001200a5ff0 T output_constant_def +00000001200a6550 t output_constant_def_contents +00000001200a6ff0 T output_constant_pool +00000001200a79b0 t output_constructor +00000001200ca140 t output_decl +00000001200c9f60 t output_decls_for_scope +00000001200a94c0 T output_deferred_addressed_constants +0000000120164770 T output_dependence +00000001200d6db0 t output_die +00000001200d98c0 t output_enumeral_list +00000001200d0550 t output_enumeration_type_die +0000000120039010 T output_file_directive +0000000120192b90 T output_file_start +00000001200d0ad0 t output_formal_parameter_die +00000001201982d0 T output_function_block_profiler +0000000120195060 T output_function_profiler +00000001200d0f40 t output_global_subroutine_die +00000001200d1b20 t output_global_variable_die +0000000120026240 t output_init_element +00000001200df520 T output_inline_function +00000001200cfef0 t output_inlined_enumeration_type_die +00000001200d0110 t output_inlined_structure_type_die +00000001200d8fb0 t output_inlined_subroutine_die +00000001200d0330 t output_inlined_union_type_die +0000000120196f90 T output_ior +0000000120197be0 T output_label +00000001200d2050 t output_label_die +00000001200d8b40 t output_lexical_block_die +0000000120196c00 T output_load_const_dimode +0000000120196b00 T output_load_const_double +0000000120196a80 T output_load_const_float +0000000120196990 T output_load_const_int +00000001200d4cd0 t output_local_subroutine_die +00000001200d2540 t output_local_variable_die +00000001200c8e30 t output_mem_loc_descriptor +00000001200d2a60 t output_member_die +000000012016ecd0 t output_operand +000000012016f9b0 T output_operand_lossage +00000001200d6d60 t output_padded_null_die +0000000120023cd0 t output_pending_init_elements +00000001200d2fd0 t output_ptr_to_mbr_type_die +0000000120038f10 T output_quoted_string +00000001201ff86c s output_reloadnum +00000001200cfaa0 t output_set_type_die +000000012016e090 t output_source_line +00000001200d43b0 t output_string_type_die +00000001200d46e0 t output_structure_type_die +00000001200d58b0 t output_subroutine_type_die +00000001200c97e0 t output_type +00000001200d5e50 t output_typedef_die +00000001200d6370 t output_union_type_die +00000001200d6960 t output_unspecified_parameters_die +0000000120197020 T output_xor +000000012002cda0 T overflow_warning +00000001201febf8 g p.0 +000000012005ec10 t pad_below +000000012005eb40 t pad_to_arg_alignment +00000001201ff040 s parm_birth_insn +00000001201ff058 s parm_reg_stack_loc +00000001201ff2e0 s parmdecl_map +0000000120017070 T parmlist_tags_warning +000000012020006c S parse_time +000000012001bc20 T parser_build_binary_op +0000000120197960 T partial_ccmode_register_operand +00000001201eb678 d patterns.3 +0000000120197bc0 T pc_or_label_ref +0000000120200770 S pc_rtx +00000001201fef64 S pedantic +000000012001f1f0 t pedantic_lvalue_warning +0000000120200150 S pedantic_lvalues +0000000120056480 T pedantic_non_lvalue +0000000120031860 T pedwarn +0000000120021cf0 T pedwarn_init +0000000120031df0 T pedwarn_with_decl +0000000120032230 T pedwarn_with_file_and_line +00000001202156c8 B peep_operand +0000000120156270 T peephole +00000001201ffb10 s pending_blocks +00000001201ff110 s pending_chain +00000001201ff988 s pending_dead_regs +00000001201ffdd8 S pending_invalid_xref +00000001201ffdb8 S pending_invalid_xref_file +00000001201ffc60 S pending_invalid_xref_line +00000001201ffa78 s pending_lists_length +00000001201ffa58 s pending_read_insns +00000001201ffa60 s pending_read_mems +00000001201ff298 s pending_sibling_stack +00000001201ff2a0 s pending_siblings +00000001201ff2a4 s pending_siblings_allocated +00000001201ff018 s pending_sizes +00000001202002e0 S pending_stack_adjust +00000001201ff2b4 s pending_types +00000001201ff2b0 s pending_types_allocated +00000001201ff2a8 s pending_types_list +00000001201ffa68 s pending_write_insns +00000001201ffa70 s pending_write_mems +0000000120016e60 T pending_xref_error +000000012003cbe0 T perm_calloc +0000000120043860 T perm_tree_cons +000000012003caf0 T permalloc +000000012003c480 T permanent_allocation +000000012020bd98 B permanent_obstack +00000001200386e0 T pfatal_with_name +0000000120198a50 T pic_address_needs_scratch +0000000120200768 S pic_offset_table_rtx +0000000120039510 t pipe_closed +00000001201ff0f0 s placeholder_list.0 +00000001200c0440 t plain_type_1 +00000001200952f0 T plus_constant_for_output_wide +0000000120093810 T plus_constant_wide +000000012001e270 t pointer_diff +000000012001deb0 t pointer_int_sum +00000001201ff1a0 s pool_offset +0000000120017b10 T pop_c_function_context +0000000120038df0 T pop_float_handler +0000000120061c90 T pop_function_context +00000001200596f0 T pop_function_context_from +0000000120023580 T pop_init_level +000000012002f420 T pop_iterator_stack +000000012000d3d0 T pop_label_level +00000001200424e0 T pop_momentary +0000000120042570 T pop_momentary_nofree +0000000120042200 T pop_obstacks +0000000120062100 T pop_temp_slots +00000001200b63b0 T pop_topmost_sequence +000000012000cfb0 T poplevel +000000012000b9c0 T position_after_white_space +000000012014a6a0 t possible_group_p +0000000120134a40 t post_mark_life +0000000120161fb0 t potential_hazard +0000000120207ed0 b potential_reload_regs +0000000120109670 t precondition_loop_p +000000012007e2d0 t preexpand_calls +00000001201ff690 s prefclass +000000012019dce0 T preferred_typecode +00000001201fece8 s prefix_attributes +0000000120089940 T prepare_call_address +0000000120164c60 t prepare_unit +00000001201001f0 t prescan_loop +000000012003c6b0 T preserve_data +000000012003c790 T preserve_initializer +0000000120042420 T preserve_momentary +0000000120194ca0 t preserve_registers +0000000120061f10 T preserve_rtl_expr_result +000000012006f0c0 T preserve_subexpressions_p +000000012005a270 T preserve_temp_slots +00000001200b4b20 T prev_active_insn +00000001201fec94 g prev_file_entry_num.1 +00000001201ff3a0 s prev_insn +00000001200b4bc0 T prev_label +00000001201fecd8 g prev_lineno.1 +00000001200b4a00 T prev_nonnote_insn +00000001200b4a70 T prev_real_insn +00000001200b4970 T previous_insn +00000001201ff600 s previous_num_undos +00000001201ff280 s primary_filename +00000001201e7428 d print_char_table +00000001201fec28 G print_error_function +00000001200162f0 T print_lang_decl +0000000120016310 T print_lang_identifier +0000000120006e90 T print_lang_statistics +0000000120016300 T print_lang_type +00000001200458e0 T print_node +0000000120045560 T print_node_brief +000000012003cde0 T print_obstack_name +0000000120045470 T print_obstack_statistics +0000000120195a90 T print_operand +0000000120196430 T print_operand_address +00000001200ad020 T print_rtl +00000001200ac610 t print_rtx +0000000120038150 t print_switch_values +0000000120038570 T print_time +0000000120162160 t priority +00000001200240c0 T process_init_element +0000000120105c10 t product_cheap_p +00000001201fffec S profile_block_flag +00000001201fef60 S profile_flag +00000001202009b0 S profile_label_no +00000001201ffec0 S progname +00000001201ff0a0 s prologue +00000001201ffb98 s prologue_marked +0000000120095b10 T promote_mode +000000012010ff70 t propagate_block +0000000120070290 T protect_from_queue +00000001201377f0 t prune_preferences +00000001202006f0 S ptr_mode +00000001201ffcd0 S ptr_type_node +00000001201ffbd0 s ptrconsts +00000001201ffc58 S ptrdiff_type_node +00000001200434e0 T purpose_member +0000000120082740 T push_block +0000000120017a20 T push_c_function_context +0000000120038d60 T push_float_handler +0000000120061c70 T push_function_context +00000001200593c0 T push_function_context_to +0000000120022dd0 T push_init_level +000000012002ec40 T push_iterator_stack +0000000120016830 T push_label_level +000000012003d050 T push_momentary +000000012003c210 T push_obstacks +000000012003c360 T push_obstacks_nochange +00000001201736d0 T push_operand +0000000120016f70 T push_parm_decl +000000012013a430 t push_reload +0000000120145fe0 t push_secondary_reload +00000001200620e0 T push_temp_slots +00000001200b6220 T push_to_sequence +00000001200b62f0 T push_topmost_sequence +00000001200697b0 T pushcase +0000000120069ba0 T pushcase_range +000000012000d580 T pushdecl +00000001200169a0 T pushdecl_top_level +00000001200165f0 T pushlevel +00000001200168c0 T pushtag +0000000120048eb0 T put_pending_sizes +000000012005a830 t put_reg_into_stack +000000012005a5a0 T put_var_into_stack +00000001201ffba0 s pwd.0 +00000001201ff990 s q_ptr +00000001201ff994 s q_size +00000001201ff718 s qty_alternate_class +00000001201ff6f0 s qty_birth +00000001201ff728 s qty_changes_size +00000001201331b0 t qty_compare +0000000120135d80 t qty_compare_1 +00000001201ff388 s qty_comparison_code +00000001201ff390 s qty_comparison_const +00000001201ff398 s qty_comparison_qty +00000001201ff378 s qty_const +00000001201ff380 s qty_const_insn +00000001201ff6f8 s qty_death +00000001201ff360 s qty_first_reg +00000001201ff730 s qty_first_reg +00000001201ff368 s qty_last_reg +00000001201ff6e8 s qty_min_class +00000001201ff370 s qty_mode +00000001201ff708 s qty_mode +00000001201ff710 s qty_n_calls_crossed +00000001201ff6e0 s qty_n_refs +00000001201ff6c0 s qty_phys_copy_sugg +00000001201ff6d0 s qty_phys_num_copy_sugg +00000001201ff6d8 s qty_phys_num_sugg +00000001201ff6b8 s qty_phys_reg +00000001201ff6c8 s qty_phys_sugg +00000001201ff720 s qty_scratch_rtx +00000001201ff700 s qty_size +0000000120133350 t qty_sugg_compare +0000000120135b10 t qty_sugg_compare_1 +0000000120082bb0 t queued_subexp_p +00000001201fef70 S quiet_flag +0000000120058ff0 t range_test +00000001201690b0 t rank_for_schedule +0000000120205f6e b rbit +00000001201eb0d8 d rcs_id.0 +00000001201ff234 s re +0000000120164430 T read_dependence +00000001200ab100 T read_rtx +00000001200aaf00 T read_skip_spaces +000000012000bd20 t readescape +00000001200a8640 T readonly_data_section +000000012001f260 T readonly_warning +0000000120043160 T real_onep +00000001201978b0 T real_or_0_operand +0000000120197080 T real_power_of_2_operand +00000001200432e0 T real_twop +0000000120042870 T real_value_from_int_cst +0000000120056130 T real_value_truncate +0000000120043080 T real_zerop +0000000120043460 T really_constant_p +00000001200328e0 T really_sorry +00000001200229e0 T really_start_incremental_init +00000001201ff230 s rebit +000000012017a390 T recog +00000001201743e0 T recog_1 +0000000120174bf0 T recog_2 +0000000120175520 T recog_3 +0000000120175ca0 T recog_4 +0000000120176f90 T recog_5 +00000001201792d0 T recog_6 +0000000120215768 B recog_dup_loc +00000001202009d8 S recog_dup_num +00000001201260e0 t recog_for_combine +0000000120172e50 T recog_memoized +0000000120215718 B recog_operand +0000000120215778 B recog_operand_loc +0000000120006f00 T recognize_objc_keyword +000000012012f5f0 t record_address_regs +0000000120103860 t record_biv +0000000120138d10 t record_conflicts +00000001200aa180 t record_constant +00000001200a5640 t record_constant_1 +00000001200aa490 t record_constant_rtx +00000001201295b0 t record_dead_and_set_regs +000000012012cf60 t record_dead_and_set_regs_1 +00000001201ff670 s record_dead_insn +00000001200fdd00 T record_excess_regs +000000012002b190 T record_function_format +0000000120103a90 t record_giv +0000000120107a90 t record_initial +00000001200f1b10 t record_jump_cond +000000012013a2d0 t record_one_conflict +000000012012e7c0 t record_reg_classes +00000001201290e0 t record_value_for_reg +00000001201ff410 s recorded_label_ref +000000012000dfc0 t redeclaration_error_message +00000001200e4ec0 T redirect_exp +00000001200e7000 T redirect_jump +00000001200e5150 t redirect_tablejump +0000000120157570 t redundant_insn +0000000120143e80 T refers_to_mem_for_reload_p +00000001200e9f90 t refers_to_mem_p +00000001200e99e0 t refers_to_p +0000000120143900 T refers_to_regno_for_reload_p +00000001200adaa0 T refers_to_regno_p +00000001201ea138 D reg_alloc_order +00000001201ff790 s reg_allocno +0000000120130460 T reg_alternate_class +00000001202008b8 S reg_basic_block +000000012012ab60 t reg_bitfield_target_p +0000000120200870 S reg_biv_class +00000001202008d0 S reg_changes_size +0000000120213bb4 B reg_class_contents +00000001201ea6e8 d reg_class_names +00000001201ea7c8 d reg_class_names.0 +00000001201ea068 d reg_class_names.1 +0000000120213c2c B reg_class_size +00000001202137e8 B reg_class_subclasses +0000000120130720 T reg_class_subset_p +0000000120213af0 B reg_class_subunion +0000000120213c48 B reg_class_superclasses +00000001202138ac B reg_class_superunion +000000012012fde0 T reg_classes_intersect_p +000000012010d990 t reg_dead_after_loop +0000000120129fa0 t reg_dead_at_p +000000012012d120 t reg_dead_at_p_1 +00000001201ff67c s reg_dead_endregno +00000001201ff680 s reg_dead_flag +00000001201ff678 s reg_dead_regno +00000001201ea720 d reg_eliminate +0000000120200988 S reg_equiv_address +0000000120200990 S reg_equiv_constant +00000001201ff898 s reg_equiv_init +0000000120200970 S reg_equiv_mem +0000000120200968 S reg_equiv_memory_loc +0000000120173e80 T reg_fits_class_p +00000001201ff880 s reg_has_output_reload +00000001200fdf70 t reg_in_basic_block_p +00000001201ff3d0 s reg_in_table +0000000120133f10 t reg_is_born +00000001201ff888 s reg_is_output_reload +0000000120135f50 t reg_is_set +0000000120200828 S reg_iv_info +0000000120200838 S reg_iv_type +00000001201ffa48 s reg_known_equiv_p +00000001201ffa40 s reg_known_value +00000001201ffa50 s reg_known_value_size +00000001201ff5c0 s reg_last_death +00000001201ff878 s reg_last_reload_reg +00000001201ff5c8 s reg_last_set +00000001201ff620 s reg_last_set_invalid +00000001201ff610 s reg_last_set_label +00000001201ff650 s reg_last_set_mode +00000001201ff658 s reg_last_set_nonzero_bits +00000001201ff660 s reg_last_set_sign_bit_copies +00000001201ff618 s reg_last_set_table_tick +00000001201ff608 s reg_last_set_value +00000001201ff9b8 s reg_last_sets +00000001201ff9b0 s reg_last_uses +0000000120200888 S reg_live_length +00000001201ff2c8 s reg_map +00000001201ff890 s reg_max_ref_width +00000001201ff7b0 s reg_may_share +0000000120133d40 t reg_meets_class_p +00000001200ad0f0 T reg_mentioned_p +0000000120200898 S reg_n_calls_crossed +0000000120200890 S reg_n_deaths +00000001202008c0 S reg_n_refs +0000000120200918 S reg_n_sets +00000001201ea270 D reg_names +00000001201ff3b8 s reg_next_eqv +00000001201ff738 s reg_next_in_qty +00000001201ff518 s reg_next_use +00000001201ff630 s reg_nonzero_bits +00000001201e9ae0 D reg_note_name +00000001201ff748 s reg_offset +00000001201974e0 T reg_or_0_operand +0000000120197820 T reg_or_bbx_mask_operand +00000001201ff570 s reg_order +0000000120143cd0 T reg_overlap_mentioned_for_reload_p +00000001200ade60 T reg_overlap_mentioned_p +00000001201ff9c0 s reg_pending_sets +00000001201ff9c8 s reg_pending_sets_all +0000000120130430 T reg_preferred_class +00000001201ff3c0 s reg_prev_eqv +00000001201ff3b0 s reg_qty +00000001201ff740 s reg_qty +0000000120213970 B reg_raw_mode +00000001200aff00 T reg_referenced_between_p +00000001200ad320 T reg_referenced_p +00000001202076d0 b reg_reloaded_contents +00000001202077d0 b reg_reloaded_insn +0000000120200940 S reg_renumber +00000001202091b0 b reg_restore_code +00000001201fec48 G reg_rtx_no +0000000120208eb0 b reg_save_code +00000001201304c0 T reg_scan +000000012012f920 t reg_scan_mark_refs +00000001200afff0 T reg_set_between_p +00000001201ff1d0 s reg_set_flag +00000001200b0600 T reg_set_last +00000001200b0d20 t reg_set_last_1 +00000001201ff1e0 s reg_set_last_first_regno +00000001201ff1e4 s reg_set_last_last_regno +00000001201ff1d4 s reg_set_last_unknown +00000001201ff1d8 s reg_set_last_value +00000001200b0140 T reg_set_p +00000001200b0cc0 t reg_set_p_1 +00000001201ff1c8 s reg_set_reg +00000001201ff640 s reg_sign_bit_copies +00000001201ff3c8 s reg_tick +00000001200afdf0 T reg_used_between_p +00000001201ff568 s reg_where_born +00000001201ff560 s reg_where_dead +000000012012db20 T regclass +00000001201304a0 T regclass_init +00000001201731f0 T register_operand +0000000120112800 T regno_clobbered_at_setjmp +0000000120145180 T regno_clobbered_p +00000001202008f0 S regno_first_uid +00000001202008f8 S regno_last_note_uid +0000000120200908 S regno_last_uid +0000000120200738 S regno_pointer_flag +00000001202006f8 S regno_pointer_flag_length +0000000120200760 S regno_reg_rtx +00000001202088b0 b regno_save_mem +00000001202085b0 b regno_save_mode +0000000120112780 T regno_uninitialized +000000012016ac40 t regno_use_in +00000001201ff580 s regs_change_size +00000001202156d8 B regs_ever_live +0000000120207f50 b regs_explicitly_used +00000001201ff3e0 s regs_invalidated_by_call +00000001201ff578 s regs_live +00000001201ff750 s regs_live +00000001201ff758 s regs_live_at +00000001202008e0 S regs_live_at_setjmp +00000001202008a8 S regs_may_share +00000001201ff828 s regs_set +00000001201ff7f0 s regs_someone_prefers +00000001201ff800 s regs_used_so_far +00000001202008a0 S regset_bytes +00000001202008e8 S regset_size +00000001200e8e90 t rehash_using_reg +000000012000b8f0 T reinit_parse_for_function +000000012015ba10 t relax_delay_slots +0000000120147750 T reload +000000012014db60 t reload_as_needed +00000001202009d0 S reload_completed +0000000120214818 B reload_earlyclobbers +0000000120200960 S reload_first_uid +0000000120200980 S reload_firstobj +0000000120214200 B reload_in +0000000120215580 B reload_in_optab +00000001201ff870 S reload_in_progress +0000000120214e08 B reload_in_reg +0000000120214868 B reload_inc +00000001202153a0 B reload_inheritance_insn +0000000120214fe8 B reload_inherited +00000001202143e0 B reload_inmode +0000000120208290 b reload_mode +000000012020095c S reload_n_operands +00000001202147dc B reload_nocombine +0000000120208380 b reload_nregs +00000001202155f8 B reload_obstack +00000001202144d0 B reload_opnum +00000001202146b0 B reload_optional +0000000120215650 B reload_order +0000000120213e40 B reload_out +0000000120215024 B reload_out_optab +0000000120214020 B reload_outmode +00000001202151c0 B reload_override_in +0000000120214b38 B reload_reg_class +0000000120152d80 t reload_reg_class_lower +00000001201537f0 t reload_reg_free_before_p +00000001201531c0 t reload_reg_free_p +0000000120153c50 t reload_reg_reaches_end_p +0000000120214c28 B reload_reg_rtx +00000001201ff900 s reload_reg_used +00000001201ff928 s reload_reg_used_at_all +00000001201ff930 s reload_reg_used_for_inherit +0000000120208510 b reload_reg_used_in_input +0000000120208470 b reload_reg_used_in_input_addr +00000001201ff918 s reload_reg_used_in_insn +00000001201ff908 s reload_reg_used_in_op_addr +00000001201ff910 s reload_reg_used_in_op_addr_reload +00000001201ff920 s reload_reg_used_in_other_addr +0000000120208560 b reload_reg_used_in_output +00000001202084c0 b reload_reg_used_in_output_addr +0000000120214a48 B reload_secondary_in_icode +00000001202146ec B reload_secondary_in_reload +0000000120214958 B reload_secondary_out_icode +0000000120213d50 B reload_secondary_out_reload +0000000120214110 B reload_secondary_p +00000001202150d0 B reload_spill_index +00000001202145c0 B reload_when_needed +00000001201ea6a0 d reload_when_needed_name +000000012014e650 t reloads_conflict +00000001201979e0 T relop +0000000120197ac0 T relop_no_unsigned +000000012010cb90 t remap_split_bivs +000000012006f3d0 T remember_end_note +000000012000b820 T remember_protocol_qualifiers +000000012012be00 T remove_death +00000001200f5250 t remove_from_table +00000001200e8db0 t remove_invalid_refs +00000001200b0b00 T remove_note +000000012005f400 T reorder_blocks +00000001200b4cd0 T reorder_insns +00000001200b4d70 T reorder_insns_with_line_notes +00000001201ff97c s reorg_pass_number +00000001201581f0 t reorg_redirect_jump +00000001200af410 T replace_regs +00000001201ff840 s replace_reloads +00000001200b0b70 T replace_rtx +0000000120207090 b replacements +00000001200389c0 T report_error_function +00000001200617b0 T reposition_prologue_and_epilogue_notes +0000000120024f80 T require_complete_type +00000001201fee8c s require_constant_elements +00000001201fee88 s require_constant_value +0000000120134d50 t requires_inout +00000001200b27e0 T reset_used_flags +0000000120032ef0 T rest_of_compilation +0000000120032a40 T rest_of_decl_compilation +00000001200390c0 T rest_of_type_compilation +00000001200df230 t restore_constants +00000001200b4580 T restore_emit_status +0000000120082170 T restore_expr_status +0000000120200250 S restore_machine_status +0000000120155ac0 t restore_referenced_regs +00000001200b31a0 T restore_reg_data +00000001200b32b0 t restore_reg_data_1 +000000012006e3a0 T restore_stmt_status +00000001200495c0 T restore_storage_status +000000012003c060 T restore_tree_status +00000001200a9670 T restore_varasm_status +000000012018abe0 T result_ready_cost +00000001200425d0 T resume_momentary +0000000120042190 T resume_temporary_allocation +0000000120139db0 T retry_global_alloc +00000001202001a0 S return_label +00000001200b4280 T reverse_comparison +00000001200e3c20 T reverse_condition +00000001201ffb74 s reversep.1 +0000000120128fd0 t reversible_comparison_p +000000012020b920 B ridpointers +00000001201fec5c g rlast +00000001201ff22e s rmbit +00000001201ff22c s rmsk +00000001201fec58 G rndprc +00000001200cecf0 t root_type +0000000120200308 S rotl_optab +0000000120200600 S rotr_optab +0000000120095c80 T round_push +000000012005f1b0 t round_trampoline_addr +00000001200490d0 T round_up +0000000120056050 T rrotate_double +0000000120055ea0 T rshift_double +00000001201feef8 S rtl_dump +00000001201feefc S rtl_dump_and_exit +00000001201fffe0 S rtl_dump_file +0000000120200190 S rtl_expr_chain +00000001200422d0 T rtl_in_current_obstack +00000001200422f0 T rtl_in_saveable_obstack +00000001202000e8 S rtl_obstack +00000001200aa6a0 T rtvec_alloc +00000001200af9c0 T rtx_addr_can_trap_p +00000001200afad0 T rtx_addr_varies_p +00000001200ac4c0 T rtx_alloc +00000001201e99f8 D rtx_class +00000001200e7360 T rtx_cost +00000001200fe8c0 t rtx_equal_for_loop_p +00000001201604d0 t rtx_equal_for_memref_p +00000001200e6340 T rtx_equal_for_thread_p +00000001202006ec S rtx_equal_function_value_matters +00000001200ae090 T rtx_equal_p +00000001201e9658 D rtx_format +00000001200ac5a0 T rtx_free +0000000120213340 B rtx_length +00000001201e9000 D rtx_name +00000001200e5350 T rtx_renumbered_equal_p +00000001200960d0 T rtx_to_tree_code +00000001200af710 T rtx_unstable_p +00000001200af860 T rtx_varies_p +00000001201ff228 s rw +00000001201458d0 T safe_from_earlyclobber +0000000120074f60 t safe_from_p +00000001200e93d0 t safe_hash +00000001201ff328 s same_regs +00000001201fff58 S save_argc +00000001201fff50 S save_argv +0000000120155370 T save_call_clobbered_regs +00000001200db2e0 t save_constants +00000001200b44e0 T save_emit_status +0000000120043d00 T save_expr +0000000120200260 S save_expr_regs +00000001200820a0 T save_expr_status +00000001201feef0 s save_exprs +00000001200da5d0 T save_for_inline_copying +00000001200db060 T save_for_inline_nocopy +0000000120200278 S save_machine_status +0000000120083fb0 t save_noncopied_parts +0000000120209d78 b save_regs +000000012006e2e0 T save_stmt_status +00000001200495b0 T save_storage_status +000000012003bdd0 T save_tree_status +00000001200a9620 T save_varasm_status +00000001200421d0 T saveable_allocation +00000001202000f8 S saveable_obstack +0000000120043900 T saveable_tree_cons +000000012003ccf0 T savealloc +00000001201ff100 s saveregs_value +00000001201ff1b0 s sawclose +00000001201ffb60 s sb_high +00000001201ffb68 s sb_low +00000001201ffb58 s sb_name +00000001201ffad8 s sbb_head +00000001201ffae0 s sbb_label_num +00000001201fecc0 g sbb_tail +00000001201e7768 d scan_char_table +00000001200fc970 t scan_loop +000000012014d5a0 t scan_paradoxical_subregs +00000001201fef24 S sched2_dump +00000001201fff80 S sched2_dump_file +00000001201fff78 S sched2_time +00000001201689d0 t sched_analyze +0000000120165080 t sched_analyze_1 +0000000120162450 t sched_analyze_2 +000000012016a620 t sched_analyze_insn +00000001201ffaa0 s sched_before_next_call +00000001201fef18 S sched_dump +00000001201fff30 S sched_dump_file +0000000120168d80 t sched_note_set +00000001201ff9a8 s sched_reg_live_length +00000001201ff9a0 s sched_reg_n_calls_crossed +00000001201ff998 s sched_reg_n_deaths +00000001201fffa8 S sched_time +0000000120165a80 t schedule_block +0000000120169250 t schedule_insn +00000001201631a0 T schedule_insns +0000000120169560 t schedule_select +000000012016a480 t schedule_unit +0000000120200938 S scratch_block +00000001201ff760 s scratch_index +0000000120200948 S scratch_list +0000000120200950 S scratch_list_length +0000000120173270 T scratch_operand +00000001200a8380 T sdata_section +00000001201fec80 G sdb_begin_function_line +00000001202064f8 b sdb_dims +00000001201ff24c s sdb_n_dims +00000001201fec84 g sdb_type_size +00000001200c4ef0 T sdbout_begin_block +00000001200c5510 T sdbout_begin_function +00000001200c6170 t sdbout_block +00000001200c52e0 T sdbout_end_block +00000001200c5a10 T sdbout_end_epilogue +00000001200c5770 T sdbout_end_function +00000001200c6070 T sdbout_init +00000001200c5c90 T sdbout_label +00000001200c6150 T sdbout_mark_begin_function +00000001200c2ea0 t sdbout_one_type +00000001200c66d0 t sdbout_parms +00000001200c2e50 t sdbout_queue_anonymous_type +00000001200c7cb0 t sdbout_reg_parms +00000001200c0a30 T sdbout_symbol +00000001200c25d0 T sdbout_toplevel_data +00000001200c6250 t sdbout_type +00000001200c6080 T sdbout_types +00000001202006a0 S sdiv_optab +00000001201ff130 s sdiv_pow2_cheap +0000000120200610 S sdivmod_optab +00000001201ffbb4 s section +000000012019ced0 t seg_defsym +000000012019d0e0 t seg_refsym +0000000120019cb0 T self_promoting_args_p +0000000120019d90 t self_promoting_type_p +00000001201ff220 s sequence_element_free_list +0000000120205f28 b sequence_result +00000001201ff1f8 S sequence_rtl_expr +0000000120200728 S sequence_stack +00000001201ffb70 s sequencep.0 +00000001201ff010 S set_alignment +0000000120016810 T set_block +00000001200e0010 t set_block_abstract_flags +00000001200dfec0 t set_block_origin_self +00000001200df9e0 T set_decl_abstract_flags +00000001200dffa0 t set_decl_origin_self +0000000120038d10 T set_float_handler +0000000120042790 T set_identifier_size +0000000120025950 T set_init_index +0000000120025b30 T set_init_label +000000012014b7f0 t set_label_offsets +00000001200b4870 T set_last_insn +00000001200b4490 T set_new_first_and_last_insn +00000001200b44b0 T set_new_first_and_last_label_num +00000001200e9ba0 t set_nonvarying_address_components +000000012012bf70 t set_nonzero_bits_and_sign_copies +0000000120139550 t set_preference +0000000120156150 t set_reg_live +0000000120037fe0 T set_target_switch +000000012000bba0 T set_yydebug +0000000120213170 B setcc_gen_code +0000000120063180 T setjmp_args_warning +0000000120063220 T setjmp_protect +00000001200632e0 T setjmp_protect_args +00000001200e6eb0 T sets_cc0_p +00000001201143f0 t setup_incoming_promotions +0000000120154f30 T setup_save_areas +0000000120016d60 T shadow_label +0000000120016ed0 T shadow_tag +0000000120010760 T shadow_tag_warned +00000001201fedb8 s shadowed_labels +0000000120203848 b shift_cost +00000001202038c8 b shiftadd_cost +0000000120203948 b shiftsub_cost +00000001201ffd38 S short_integer_type_node +00000001201ffd70 S short_unsigned_type_node +00000001201fffd8 S shorten_branch_time +000000012016c150 T shorten_branches +000000012002b730 T shorten_compare +00000001200aedf0 T side_effects_p +00000001200a0bc0 T sign_expand_binop +00000001201ffdf0 S signed_char_type_node +00000001200e6b20 T signed_condition +000000012020ada0 b signed_mode_to_code_map +00000001200251f0 T signed_or_unsigned_type +00000001200250e0 T signed_type +00000001201ffcc0 S signed_wchar_type_node +00000001200bd3a0 T significand_size +0000000120040f40 T simple_cst_equal +0000000120044bb0 T simple_cst_list_equal +00000001200e6c70 T simplejump_p +0000000120123360 t simplify_and_const_int +00000001200eaff0 T simplify_binary_operation +0000000120126f90 t simplify_comparison +0000000120104be0 t simplify_giv_expr +000000012011b950 t simplify_if_then_else +000000012011d980 t simplify_logical +00000001200ecbf0 t simplify_plus_minus +00000001200ed5c0 T simplify_relational_operation +0000000120119230 t simplify_rtx +000000012011cb90 t simplify_set +0000000120124b80 t simplify_shift_const +00000001200a96c0 T simplify_subtraction +00000001200ee0b0 T simplify_ternary_operation +00000001200ea450 T simplify_unary_operation +00000001202004e0 S sin_optab +00000001200b0230 T single_set +00000001201fec40 g size.1 +00000001201fec44 g size.2 +00000001201fec14 g size.3 +00000001200562a0 T size_binop +00000001202006e0 S size_directive_output +0000000120043950 T size_in_bytes +000000012004b850 T size_int +0000000120200138 S size_one_node +00000001202031e0 b size_table.0 +0000000120200130 S size_zero_node +0000000120200140 S sizetype +00000001200fe130 t skip_consec_insns +000000012000bbc0 t skip_white_space +00000001201ff43c s skipped_writes_memory +0000000120200410 S smax_optab +0000000120200558 S smin_optab +00000001202004b0 S smod_optab +00000001201ff134 s smod_pow2_cheap +00000001202004a8 S smul_highpart_optab +0000000120200660 S smul_optab +0000000120200540 S smul_widen_optab +0000000120032770 T sorry +00000001201fef4c S sorrycount +00000001201fec7c g source_label_number +00000001201e9d60 D spaces +00000001201fee08 s spelling +00000001201fee10 s spelling_base +00000001201fee18 s spelling_size +000000012014ada0 t spill_failure +000000012014d130 t spill_hard_reg +00000001201ff8c8 s spill_indirect_levels +0000000120207dd0 b spill_reg_order +00000001202079d0 b spill_reg_rtx +0000000120207bd0 b spill_reg_store +0000000120207e50 b spill_regs +0000000120207f90 b spill_stack_slot +0000000120208190 b spill_stack_slot_width +000000012017ab80 T split_1 +000000012016f4e0 T split_double +0000000120169db0 t split_hard_reg_notes +000000012017bb60 T split_insns +0000000120056580 t split_tree +00000001201ff4c8 s splittable_regs +00000001201ff4d0 s splittable_regs_updates +0000000120205fd0 b sqrndbit +0000000120200550 S sqrt_optab +00000001200e31d0 T squeeze_notes +00000001200957d0 T stabilize +000000012003f560 T stabilize_reference +000000012003fa50 T stabilize_reference_1 +00000001202002f0 S stack_arg_under_construction +00000001202002b8 S stack_block_stack +00000001202001f4 S stack_depth +0000000120200748 S stack_pointer_rtx +00000001201fef34 S stack_reg_dump +00000001201fff00 S stack_reg_dump_file +00000001201ffedc S stack_reg_time +0000000120200238 S stack_slot_list +00000001201ff118 s stack_usage_map +00000001201e8968 D standard_tree_code_length +00000001201e8b60 D standard_tree_code_name +00000001201e8578 D standard_tree_code_type +0000000120010a80 T start_decl +00000001200177b0 T start_enum +0000000120014be0 T start_function +0000000120042770 T start_identifier_warnings +0000000120022750 T start_init +0000000120209508 b start_of_epilogue_needs +00000001200b60d0 T start_sequence +00000001200b6170 T start_sequence_for_rtl_expr +00000001200174a0 T start_struct +00000001201fed30 s state.0 +0000000120200710 S static_chain_incoming_rtx +0000000120200778 S static_chain_rtx +00000001201ffe28 S static_ctors +00000001201ffc68 S static_dtors +00000001201ff860 s static_reload_reg_p +0000000120043bf0 T staticp +000000012015feb0 t steal_delay_list_from_fallthrough +000000012015f680 t steal_delay_list_from_target +00000001201fecf0 s stmt_count +00000001201ff088 s stmt_expr_depth +000000012020bee0 B stmt_obstack +000000012008a440 T store_bit_field +0000000120082f80 t store_constructor +00000001200733f0 T store_expr +0000000120074000 t store_field +000000012008ab00 t store_fixed_bit_field +0000000120025700 T store_init_value +00000001200891e0 t store_one_arg +00000001200152a0 T store_parm_decls +000000012008afe0 t store_split_bit_field +0000000120101e80 t strength_reduce +000000012013c930 T strict_memory_address_p +0000000120084b90 t string_constant +00000001201ffe78 S string_ftype_ptr_ptr +00000001200d8790 t string_length_attribute +00000001201ffc28 S string_type_node +00000001201cf0c0 r strings_107.2 +00000001201cf110 r strings_108.3 +00000001201cf138 r strings_114.4 +00000001201cf158 r strings_117.5 +00000001201cf178 r strings_120.6 +00000001201cf188 r strings_121.7 +00000001201cf1c8 r strings_126.8 +00000001201cf1d8 r strings_127.9 +00000001201cf218 r strings_131.10 +00000001201cf228 r strings_132.11 +00000001201cf268 r strings_147.12 +00000001201cf280 r strings_149.13 +00000001201cf298 r strings_151.14 +00000001201cf2b0 r strings_154.15 +00000001201cf2d0 r strings_156.16 +00000001201cf2f0 r strings_158.17 +00000001201cf310 r strings_169.18 +00000001201cf320 r strings_228.19 +00000001201cf340 r strings_233.20 +00000001201cf358 r strings_245.21 +00000001201cf368 r strings_247.22 +00000001201cf378 r strings_249.23 +00000001201cf388 r strings_252.24 +00000001201cf398 r strings_261.25 +00000001201cf3a8 r strings_262.26 +00000001201cf3b8 r strings_264.27 +00000001201cf3c8 r strings_281.28 +00000001201cf080 r strings_58.0 +00000001201cf0a0 r strings_61.1 +0000000120058b80 t strip_compound_expr +0000000120038e50 T strip_off_ending +00000001202006a8 S strlen_optab +00000001202007a8 S struct_value_incoming_rtx +0000000120200790 S struct_value_rtx +0000000120113120 t stupid_find_reg +00000001201128c0 T stupid_life_analysis +0000000120113470 t stupid_mark_refs +0000000120113aa0 t stupid_reg_compare +0000000120200478 S sub_optab +00000001201ff238 s subflg +000000012020ba00 B sublevel_ixpansions +00000001200b4110 T subreg_lowpart_p +00000001200b3fc0 T subreg_realpart_p +00000001200d7a80 t subscript_data_attribute +00000001201188c0 t subst +00000001200de850 t subst_constants +0000000120142000 t subst_indexed_address +00000001201ff5d8 s subst_insn +00000001201ff5e8 s subst_low_cuid +00000001201ff5e0 s subst_prev_insn +0000000120141ec0 t subst_reg_equivs +00000001201ff868 s subst_reg_equivs_changed +0000000120143600 T subst_reloads +000000012003e4d0 T substitute_in_expr +000000012003e800 T substitute_in_type +00000001200425a0 T suspend_momentary +00000001200e69c0 T swap_condition +000000012019b560 T sym_lookup +0000000120197460 T symbolic_address_p +0000000120198ae0 T symbolic_operand +00000001201fff18 S symout_time +000000012008d240 t synth_mult +00000001201ff008 s table +0000000120206510 b table +00000001201e8fe0 d table.0 +0000000120067350 t tail_recursion_args +0000000120200200 S tail_recursion_label +0000000120200228 S tail_recursion_reentry +00000001202006e8 S target_flags +00000001201ff960 s target_hash_table +0000000120056170 T target_isinf +00000001200561d0 T target_isnan +0000000120056260 T target_negative +00000001201e8558 D target_options +00000001201e8388 D target_switches +00000001202002e8 S target_temp_slot_level +00000001200a8300 T tdesc_section +0000000120200128 S temp_decl_firstobj +00000001202011a8 b temp_decl_obstack +00000001202066a8 b temp_obstack +0000000120200174 S temp_slot_level +0000000120200180 S temp_slots +00000001200438b0 T temp_tree_cons +0000000120042110 T temporary_allocation +0000000120200120 S temporary_firstobj +000000012020be48 B temporary_obstack +00000001200e3e20 t tension_vector_labels +00000001200a84f0 T text_section +00000001201e79e8 d tfaff +00000001201ff604 s this_basic_block +00000001201ff078 s this_function_bytecode +00000001201ff080 s this_function_calldesc +00000001201ff070 s this_function_callinfo +00000001201ff068 s this_function_decl +00000001201ff3a8 s this_insn +00000001201ff768 s this_insn +00000001201ff850 s this_insn +00000001201ff858 s this_insn_is_asm +00000001201ff764 s this_insn_number +00000001201ffb00 s this_is_asm_operands +00000001200e58c0 T thread_jumps +00000001200613a0 T thread_prologue_and_epilogue_insns +00000001201eb3a5 d tm_rcs_id +00000001200be4f0 t toe113 +00000001200be8d0 t toe24 +00000001200b93d0 t toe53 +00000001200be680 t toe64 +00000001201ffbf8 S token_buffer +00000001202000b0 S toplev_inline_obstacks +00000001201ff5a0 s total_attempts +00000001201ff5a8 s total_extras +00000001201ff5a4 s total_merges +00000001201ff5ac s total_successes +0000000120200a20 S trampoline +000000012005ef80 T trampoline_address +00000001201ff038 s trampoline_list +0000000120145820 T transfer_replacements +0000000120200098 S tree_code_length +0000000120200100 S tree_code_name +00000001202000d8 S tree_code_type +000000012003e370 T tree_cons +0000000120040ed0 T tree_int_cst_equal +0000000120044ac0 T tree_int_cst_lt +0000000120044b70 T tree_int_cst_sgn +0000000120043670 T tree_last +000000012020bd58 B tree_node_counts +00000001201e8f50 D tree_node_kind_names +000000012020bea0 B tree_node_sizes +0000000120164460 T true_dependence +00000001200e7190 T true_regnum +0000000120200570 S truncdfsf2_libfunc +0000000120200450 S trunctfdf2_libfunc +0000000120200628 S trunctfsf2_libfunc +0000000120200640 S truncxfdf2_libfunc +0000000120200390 S truncxfsf2_libfunc +000000012002c1a0 T truthvalue_conversion +0000000120114730 t try_combine +00000001200de6e0 T try_constants +000000012015d8b0 t try_merge_delay_insns +00000001200b2940 T try_split +0000000120200300 S tst_optab +000000012004bce0 t twoval_comparison_p +00000001201fed34 s type.1 +00000001200c9400 t type_attribute +000000012002b270 T type_for_mode +000000012002d3e0 T type_for_size +0000000120044950 T type_hash_add +0000000120040880 T type_hash_canon +0000000120044780 T type_hash_list +00000001200447b0 T type_hash_lookup +000000012020bb80 B type_hash_table +00000001200cede0 t type_is_fundamental +0000000120044a00 T type_list_equal +0000000120019ab0 t type_lists_compatible_p +0000000120045220 T type_precision +00000001201ebdf8 D typecode_mode +0000000120200398 S ucmp_optab +0000000120200508 S udiv_optab +0000000120200620 S udivmod_optab +00000001201ff500 s uid_block_number +00000001201ff400 s uid_cuid +00000001201ff5b0 s uid_cuid +0000000120200850 S uid_loop_num +0000000120200860 S uid_luid +00000001201ff550 s uid_suid +00000001201ff970 s uid_to_ruid +00000001201ff508 s uid_volatile +0000000120200588 S umax_optab +0000000120200590 S umin_optab +00000001202005b8 S umod_optab +0000000120200578 S umul_highpart_optab +00000001202003c0 S umul_widen_optab +000000012001f100 t unary_complex_lvalue +00000001201fed18 s undeclared_variable_notice +0000000120117840 t undo_all +0000000120206700 b undobuf +00000001201ff950 s unfilled_firstobj +00000001202094b0 b unfilled_slots_obstack +0000000120062fe0 T uninitialized_vars_warning +0000000120209770 b unit_last_insn +00000001202097dc b unit_n_insns +00000001202097b8 b unit_tick +00000001201ff49c s unknown_address_altered +00000001201ff248 s unnamed_struct_number +000000012006f630 T unroll_block_trees +0000000120107ce0 T unroll_loop +00000001200b4660 T unshare_all_rtl +00000001201ffce0 S unsigned_char_type_node +00000001200e6a90 T unsigned_condition +000000012002cea0 T unsigned_conversion_warning +00000001201ffd00 S unsigned_intDI_type_node +00000001201ffe48 S unsigned_intHI_type_node +00000001201ffe68 S unsigned_intQI_type_node +00000001201ffcf0 S unsigned_intSI_type_node +000000012020ae18 b unsigned_mode_to_code_map +0000000120024fd0 T unsigned_type +00000001201ffd20 S unsigned_type_node +00000001201ffc70 S unsigned_wchar_type_node +00000001201ffa88 s unused_expr_list +00000001201ffa80 s unused_insn_list +0000000120158050 t update_block +00000001201317d0 t update_equiv_regs +0000000120167ad0 t update_flow_info +00000001201043c0 t update_giv_derive +0000000120159d50 t update_live_status +0000000120133de0 t update_qty_class +0000000120106f50 t update_reg_last_use +000000012012ce30 t update_table_tick +0000000120061cd0 T update_temp_slot_address +00000001201ff0d8 s use_cost_table +0000000120129d70 t use_crosses_set_p +00000001201fef40 S use_gnu_debug_info_extensions +00000001200824b0 T use_reg +0000000120082550 T use_regs +00000001200fc0a0 t use_related_value +0000000120062b70 T use_variable +0000000120062c40 T use_variable_after +000000012010eb40 t uses_reg_or_mem +0000000120039230 t v_message_with_decl +0000000120025ed0 t valid_compound_expr_initializer +0000000120103530 t valid_initial_value_p +00000001200442c0 T valid_machine_attribute +0000000120172eb0 T validate_change +00000001201351a0 t validate_equiv_mem_from_store +0000000120173020 T validate_replace_rtx +0000000120170180 t validate_replace_rtx_1 +0000000120095730 T validize_mem +00000001201fed40 s value.3 +00000001200434b0 T value_member +00000001202006e4 S var_labelno +00000001201ff090 s var_offset +00000001201fffd0 S varconst_time +00000001201ffb90 s variable_args_p +0000000120048ef0 T variable_size +00000001201fec30 G version_string +0000000120200740 S virtual_incoming_args_rtx +0000000120200758 S virtual_outgoing_args_rtx +00000001202007b0 S virtual_stack_dynamic_rtx +0000000120200720 S virtual_stack_vars_rtx +00000001201ff060 s virtuals_instantiated +00000001201ffd40 S void_ftype_ptr_int_int +00000001201ffc50 S void_ftype_ptr_ptr_int +00000001201ffd90 S void_type_node +00000001200aead0 T volatile_insn_p +00000001202009cc S volatile_ok +00000001200aec60 T volatile_refs_p +000000012016e310 t walk_alter_subreg +000000012005bec0 t walk_fixup_memory_subreg +00000001201fedc4 s warn_about_return_type +0000000120200044 S warn_aggregate_return +00000001201ffe24 S warn_bad_function_cast +0000000120200080 S warn_cast_align +00000001201ffd60 S warn_cast_qual +00000001201fed64 S warn_char_subscripts +00000001201ffd10 S warn_conversion +0000000120021280 t warn_for_assignment +00000001201ffe10 S warn_format +00000001201fffe8 S warn_id_clash +00000001200652c0 T warn_if_unused_value +00000001201ffc10 S warn_implicit +00000001201ffed4 S warn_inline +00000001201fff74 S warn_larger_than +00000001201ffc90 S warn_missing_braces +00000001201ffdec S warn_missing_declarations +00000001201ffde8 S warn_missing_prototypes +00000001201fed60 S warn_nested_externs +00000001201ffdfc S warn_parentheses +00000001201ffe30 S warn_pointer_arith +00000001201fed5c S warn_redundant_decls +0000000120200020 S warn_return_type +00000001201fff40 S warn_shadow +00000001201ffc84 S warn_strict_prototypes +00000001201fff70 S warn_switch +00000001201ffda8 S warn_traditional +00000001201fff64 S warn_uninitialized +00000001201ffee4 S warn_unused +00000001201ffc80 S warn_write_strings +0000000120031500 T warning +00000001200310d0 T warning_for_asm +0000000120025f70 t warning_init +00000001201fefd8 s warning_message.0 +0000000120030e20 T warning_with_decl +0000000120030ae0 T warning_with_file_and_line +00000001201fef48 S warningcount +00000001201fefc8 S warnings_are_errors +00000001201ffc20 S wchar_array_type_node +00000001201ffd28 S wchar_type_node +00000001201ff158 s weak_decls +00000001200a9be0 T weak_finish +00000001202009d4 S which_alternative +00000001201341f0 t wipe_dead_reg +00000001202007a0 S word_mode +00000001201e6a58 d wordlist +00000001200c8b80 t write_modifier_bytes +00000001201fef38 S write_symbols +0000000120205f80 b wstring +0000000120038bd0 T xmalloc +00000001202004d8 S xor_optab +0000000120038c30 T xrealloc +00000001200171f0 T xref_tag +00000001201ffbe8 S yychar +00000001201a35c0 r yycheck +00000001201ffbdc S yydebug +00000001201a18ac r yydefact +00000001201a1dd2 r yydefgoto +000000012000ba50 T yyerror +0000000120008e00 T yylex +00000001201ffbe0 S yylval +00000001201ffbd8 S yynerrs +00000001201a1ef2 r yypact +0000000120001ad0 T yyparse +00000001201a2418 r yypgoto +000000012019fc46 r yyprhs +000000012000b900 T yyprint +00000001201a12d0 r yyr1 +00000001201a15be r yyr2 +000000012019ff34 r yyrhs +00000001201a08b8 r yyrline +00000001201a2538 r yytable +00000001201a0ba8 r yytname +000000012019fb08 r yytranslate +00000001201ffbb8 s zero.2 +00000001201ff140 s zero_cost diff --git a/configs/boot/equake.rcS b/configs/boot/equake.rcS new file mode 100644 index 000000000..6b799aaf3 --- /dev/null +++ b/configs/boot/equake.rcS @@ -0,0 +1,12 @@ +#!/bin/sh + +cd /benchmarks/spec/equake00/ + +/sbin/m5 checkpoint 0 0 +/sbin/m5 checkpoint 100000000 200000000 + +/sbin/m5 loadsymbol + +/sbin/m5 resetstats +/benchmarks/spec/equake00/equake < lgred.in +/sbin/m5 exit diff --git a/configs/boot/equake.symbol b/configs/boot/equake.symbol new file mode 100644 index 000000000..4b28299c1 --- /dev/null +++ b/configs/boot/equake.symbol @@ -0,0 +1,94 @@ +000000012001a868 S ARCHcholeskylen +000000012001a878 S ARCHcoord +000000012001a930 S ARCHcorners +000000012001a938 S ARCHduration +000000012001a940 S ARCHelems +000000012001a8b0 S ARCHglobalelem +000000012001a8d0 S ARCHglobalelems +000000012001a8e8 S ARCHglobalnode +000000012001a8a8 S ARCHglobalnodes +000000012001a8d8 S ARCHmatrixcol +000000012001a898 S ARCHmatrixindex +000000012001a924 S ARCHmatrixlen +000000012001a8ac S ARCHmesh_dim +000000012001a8f8 S ARCHmine +000000012001a90c S ARCHnodes +000000012001a908 S ARCHpriv +000000012001a920 S ARCHsubdomains +000000012001a8b8 S ARCHvertex +000000012001a900 S C +000000012001a918 S C23 +000000012001a9a8 B Damp +000000012001a9c8 B Exc +000000012001a8a0 S K +000000012001a928 S M +000000012001a888 S M23 +000000012001a950 B Src +000000012001a890 S V23 +000000012001a388 D _DYNAMIC +000000012001a5f8 D _GLOBAL_OFFSET_TABLE_ +000000012001a848 G _IO_stdin_used +000000012001a550 T _PROCEDURE_LINKAGE_TABLE_ +000000012001a530 d __CTOR_END__ +000000012001a528 d __CTOR_LIST__ +000000012001a540 d __DTOR_END__ +000000012001a538 d __DTOR_LIST__ +000000012001a384 r __FRAME_END__ +000000012001a548 d __JCR_END__ +000000012001a548 d __JCR_LIST__ +000000012001a860 A __bss_start +000000012001a000 D __data_start +0000000120008c50 t __do_global_ctors_aux +00000001200008d0 t __do_global_dtors_aux +000000012001a850 G __dso_handle +000000012001a000 A __fini_array_end +000000012001a000 A __fini_array_start +000000012001a000 A __init_array_end +000000012001a000 A __init_array_start +0000000120008bb0 T __libc_csu_fini +0000000120008b00 T __libc_csu_init +0000000120000890 W __start +000000012001a860 A _edata +000000012001a9e0 A _end +0000000120008cb0 T _fini +0000000120000828 T _init +0000000120000890 T _start +00000001200049c4 T abe_matrix +00000001200056b8 T arch_bail +00000001200056e4 T arch_info +0000000120006584 T arch_init +00000001200057e0 T arch_parsecommandline +0000000120005bf4 T arch_readdouble +0000000120005ad0 T arch_readelemvector +00000001200059ac T arch_readnodevector +0000000120004530 T area_triangle +00000001200051e8 T centroid +000000012001a860 s completed.1 +000000012001a000 W data_start +000000012001a948 S disp +00000001200050bc T distance +0000000120003c70 T element_matrices +0000000120000970 t frame_dummy +00000001200036f8 T get_Enu +0000000120003820 T inv_J +00000001200009c0 T main +0000000120007a88 T mem_init +00000001200054b8 T mv12x12 +000000012001a8c0 S nodekind +000000012001a910 S nodekindf +000000012001a8f0 S options +000000012001a858 g p.0 +000000012001a8c8 S packfile +0000000120004bc4 T phi0 +0000000120004cc4 T phi1 +0000000120004d98 T phi2 +00000001200052e8 T point2fault +000000012001a870 S progname +0000000120005cd8 T readpackfile +000000012000360c T shape_ders +0000000120004e84 T slip +0000000120006604 T smvp +00000001200070f8 T smvp_opt +000000012001a880 S source_elms +000000012001a8e0 S vel +000000012000561c T vv12x12 diff --git a/configs/boot/gcc.rcS b/configs/boot/gcc.rcS new file mode 100644 index 000000000..6bcd7e03d --- /dev/null +++ b/configs/boot/gcc.rcS @@ -0,0 +1,12 @@ +#!/bin/sh + +cd /benchmarks/spec/gcc00/ + +/sbin/m5 checkpoint 0 0 +/sbin/m5 checkpoint 100000000 200000000 + +/sbin/m5 loadsymbol + +/sbin/m5 resetstats +./cc1 mdred.rtlanal.i +/sbin/m5 exit diff --git a/configs/boot/gzip.rcS b/configs/boot/gzip.rcS new file mode 100644 index 000000000..c7aca7e9b --- /dev/null +++ b/configs/boot/gzip.rcS @@ -0,0 +1,12 @@ +#!/bin/sh + +cd /benchmarks/spec/gzip00/ + +/sbin/m5 checkpoint 0 0 +/sbin/m5 checkpoint 100000000 200000000 + +/sbin/m5 loadsymbol + +/sbin/m5 resetstats +./gzip lgred.log 1 +/sbin/m5 exit diff --git a/configs/boot/gzip.symbol b/configs/boot/gzip.symbol new file mode 100644 index 000000000..d965c99a9 --- /dev/null +++ b/configs/boot/gzip.symbol @@ -0,0 +1,268 @@ +0000000120022c08 D _DYNAMIC +0000000120022fd0 D _GLOBAL_OFFSET_TABLE_ +0000000120023498 G _IO_stdin_used +0000000120022dc0 T _PROCEDURE_LINKAGE_TABLE_ +0000000120022da0 d __CTOR_END__ +0000000120022d98 d __CTOR_LIST__ +0000000120022db0 d __DTOR_END__ +0000000120022da8 d __DTOR_LIST__ +0000000120022c04 r __FRAME_END__ +0000000120022db8 d __JCR_END__ +0000000120022db8 d __JCR_LIST__ +00000001200234f8 A __bss_start +0000000120021030 D __data_start +000000012000fbc0 t __do_global_ctors_aux +00000001200012a0 t __do_global_dtors_aux +00000001200234a0 G __dso_handle +0000000120021030 A __fini_array_end +0000000120021030 A __fini_array_start +0000000120021030 A __init_array_end +0000000120021030 A __init_array_start +000000012000fb20 T __libc_csu_fini +000000012000fa70 T __libc_csu_init +0000000120001260 W __start +00000001200234f8 A _edata +0000000120073b10 A _end +000000012000fc20 T _fini +00000001200011f8 T _init +0000000120001260 T _start +0000000120004cf0 T abort_gzip +000000012000de80 T add_envopt +0000000120023550 S args +0000000120023520 S ascii +000000012002551c b base_dist +00000001200254a8 b base_length +0000000120023698 S bb +00000001200234fc s bi_buf +0000000120001ad0 T bi_init +0000000120001b20 T bi_reverse +0000000120023500 s bi_valid +00000001200015d0 T bi_windup +00000001200235b8 s bitbuf +00000001200235e0 s bitbuf +00000001200235c0 s bitcount +0000000120023690 S bk +0000000120024654 b bl_count +0000000120021830 d bl_desc +0000000120021858 d bl_order +00000001200245b8 b bl_tree +00000001200234ec G block_mode +0000000120023610 S block_start +00000001200235b4 s blocksize +0000000120021540 d border +0000000120009620 t build_tree +0000000120023650 S bytes_in +0000000120023668 S bytes_out +0000000120004740 t check_ofname +000000012000d5c0 T check_zipfile +000000012000e540 T clear_bufs +00000001200234f8 s completed.1 +0000000120023518 s compr_level +00000001200092e0 t compress_block +00000001200235a0 s compressed_len +0000000120021030 d configuration_table +000000012000e280 T copy +00000001200017d0 T copy_block +0000000120004ae0 t copy_stat +0000000120021644 d cpdext +0000000120021608 d cpdist +000000012002158c d cplens +00000001200215ca d cplext +00000001200235f8 s crc +00000001200234f0 g crc.0 +0000000120021870 D crc_32_tab +0000000120002b90 t create_outfile +0000000120008450 T ct_init +0000000120008f60 T ct_tally +000000012002ea20 B d_buf +0000000120021808 d d_desc +0000000120021030 W data_start +00000001200234e8 G dbglvl +00000001200234e4 G dbits +0000000120008440 T debug_time +000000012000a5e0 t decode +000000012000ad50 t decode_c +000000012000ab90 t decode_start +0000000120023528 S decompress +00000001200236c0 S decrypt +0000000120002250 T deflate +0000000120002770 t deflate_fast +0000000120024f68 b depth +000000012000ee70 T display_ratio +00000001200252a5 b dist_code +0000000120004c60 t do_exit +0000000120003f00 t do_list +0000000120023540 S do_lzw +00000001200235c8 s done +0000000120023fcc b dyn_dtree +00000001200236d8 b dyn_ltree +0000000120023678 S env +000000012002350c s eofile +000000012000e1c0 T error +0000000120023548 S exit_code +00000001200235f4 S ext_header +0000000120021794 d extra_blbits +000000012002171c d extra_dbits +00000001200216a8 d extra_lbits +00000001200236b8 S file_method +000000012000f9c0 T file_read +00000001200236b0 S file_type +000000012000e580 T fill_inbuf +0000000120002030 t fill_window +00000001200234d8 g first_time.2 +000000012002358d s flag_bit +0000000120025594 b flag_buf +000000012002358c s flags +0000000120008ba0 T flush_block +000000012000e730 T flush_outbuf +000000012000e860 T flush_window +000000012002352c S force +0000000120023640 S foreground +0000000120001340 t frame_dummy +000000012000a1a0 t gen_bitlen +0000000120008a80 t gen_codes +0000000120002dd0 t get_istat +00000001200032c0 T get_method +0000000120004d50 t get_suffix +0000000120023618 S good_match +000000012000ebf0 T gzipbasename +00000001200236d0 S header_bytes +0000000120024674 b heap +0000000120023578 s heap_len +000000012002357c s heap_max +00000001200214b8 d help_msg.5 +0000000120004ee0 T huft_build +0000000120005670 T huft_free +00000001200236a0 S hufts +00000001200235b0 s i.0 +0000000120023688 S ifd +0000000120023658 S ifile_size +000000012005eea8 B ifname +000000012002356c s in_exit.4 +00000001200269e0 B inbuf +0000000120006e00 T inflate +0000000120006bf0 T inflate_block +00000001200056d0 T inflate_codes +00000001200062b0 T inflate_dynamic +00000001200060f0 T inflate_fixed +0000000120005e10 T inflate_stored +0000000120008960 t init_block +0000000120023684 S inptr +00000001200235a8 s input_len +0000000120023508 s ins_h +0000000120023644 S insize +000000012003ea20 B istat +00000001200235c4 s j +00000001200236c8 S key +00000001200213f8 d known_suffixes.0 +00000001200217e0 d l_desc +0000000120023584 s last_dist +0000000120023588 s last_flags +0000000120023580 s last_lit +000000012002364c S last_member +00000001200234e0 G lbits +0000000120026910 b leaves +00000001200251a5 b length_code +00000001200234c8 G level +0000000120021080 d license_msg +0000000120023534 S list +00000001200268a8 b lit_base +00000001200267a8 b literal +0000000120001b60 T lm_init +0000000120001d90 T longest_match +00000001200210f8 D longopts +0000000120023510 s lookahead +0000000120006ed0 T lzw +0000000120007a80 T main +0000000120003040 t make_ofname +000000012000ec40 T make_simple_name +000000012000c130 t make_table +0000000120021680 D mask_bits +0000000120023624 S match_start +000000012002361c S max_chain_length +0000000120023514 s max_lazy_match +00000001200235d8 s max_len +00000001200234c0 G maxbits +00000001200234c4 G method +0000000120021470 d methods.3 +0000000120023570 s msg_done +0000000120004310 t name_too_long +0000000120023608 S nice_match +00000001200234b8 G no_name +00000001200234bc G no_time +0000000120023630 S ofd +000000012003eaa8 B ofname +0000000120023590 s opt_len +00000001200235d0 s orig_len +000000012005f2a8 B outbuf +0000000120023648 S outcnt +00000001200234a8 g p.0 +0000000120026978 b parents +0000000120023680 S part_nb +00000001200235dc s peek_bits +00000001200235f0 S pkzip +000000012003eea8 B prev +000000012002360c S prev_length +0000000120023628 S progname +0000000120026594 b pt_len +00000001200265a8 b pt_table +000000012002353c S quiet +00000001200080c0 T ran +0000000120023600 S read_buf +000000012000b8c0 t read_c_len +000000012000ed50 T read_error +000000012000b130 t read_pt_len +000000012000d2a0 t read_tree +0000000120023530 S recursive +0000000120023568 S remove_ofname +0000000120023660 S save_orig_name +0000000120009d90 t scan_tree +00000001200236a8 S seedi +0000000120001390 T send_bits +0000000120009f40 t send_tree +0000000120009540 t set_file_type +0000000120004420 t shorten_name +0000000120007f90 T spec_compress +0000000120073ac8 B spec_fd +0000000120007800 T spec_getc +0000000120006f70 T spec_init +0000000120007f40 T spec_initbufs +0000000120007430 T spec_load +0000000120008350 T spec_putc +0000000120007090 T spec_random_load +0000000120007670 T spec_read +00000001200081b0 T spec_reset +0000000120008190 T spec_rewind +0000000120008010 T spec_uncompress +0000000120007930 T spec_ungetc +0000000120008210 T spec_write +0000000120024540 b static_dtree +0000000120023598 s static_len +00000001200240c0 b static_ltree +000000012000eb20 T strlwr +0000000120023620 S strstart +00000001200235bc s subbitbuf +0000000120021440 d suffixes.1 +0000000120023544 S test +0000000120023638 S time_stamp +0000000120023524 S to_stdout +0000000120023558 S total_in +0000000120023560 S total_out +000000012000a510 T unlzh +000000012000c5c0 T unlzw +000000012000cde0 T unpack +000000012000d7a0 T unzip +000000012000e4c0 T updcrc +00000001200235e8 s valid +0000000120023538 S verbose +000000012000ecd0 T warn +0000000120063aa8 B window +00000001200234b0 G window_size +00000001200234d0 G work +000000012000ea20 T write_buf +000000012000ee00 T write_error +000000012000e220 T xmalloc +0000000120023670 S z_len +0000000120073aa8 B z_suffix +0000000120023504 s zfile +000000012000ef80 T zip diff --git a/configs/boot/halt.sh b/configs/boot/halt.sh new file mode 100644 index 000000000..b1332ebab --- /dev/null +++ b/configs/boot/halt.sh @@ -0,0 +1 @@ +m5 exit diff --git a/configs/boot/ls.rcS b/configs/boot/ls.rcS new file mode 100644 index 000000000..4cfe38d2b --- /dev/null +++ b/configs/boot/ls.rcS @@ -0,0 +1,18 @@ +ls +ls +ls +ls +cd bin +ls +ls +ls +ls +ls +ls +ls +ls +cd ../benchmarks +ls +ls +ls +ls diff --git a/configs/boot/mcf.rcS b/configs/boot/mcf.rcS new file mode 100644 index 000000000..864966dfc --- /dev/null +++ b/configs/boot/mcf.rcS @@ -0,0 +1,12 @@ +#!/bin/sh + +cd /benchmarks/spec/mcf00/ + +/sbin/m5 checkpoint 0 0 +/sbin/m5 checkpoint 100000000 200000000 + +/sbin/m5 loadsymbol + +/sbin/m5 resetstats +/benchmarks/spec/mcf00/mcf mdred.in +/sbin/m5 exit diff --git a/configs/boot/mcf.symbol b/configs/boot/mcf.symbol new file mode 100644 index 000000000..878f12961 --- /dev/null +++ b/configs/boot/mcf.symbol @@ -0,0 +1,65 @@ +0000000120014350 D _DYNAMIC +0000000120014608 D _GLOBAL_OFFSET_TABLE_ +0000000120014770 G _IO_stdin_used +0000000120014518 T _PROCEDURE_LINKAGE_TABLE_ +00000001200144f8 d __CTOR_END__ +00000001200144f0 d __CTOR_LIST__ +0000000120014508 d __DTOR_END__ +0000000120014500 d __DTOR_LIST__ +000000012001434c r __FRAME_END__ +0000000120014510 d __JCR_END__ +0000000120014510 d __JCR_LIST__ +0000000120014790 A __bss_start +0000000120014000 D __data_start +00000001200034d0 t __do_global_ctors_aux +0000000120000a40 t __do_global_dtors_aux +0000000120014778 G __dso_handle +0000000120014000 A __fini_array_end +0000000120014000 A __fini_array_start +0000000120014000 A __init_array_end +0000000120014000 A __init_array_start +0000000120003430 T __libc_csu_fini +0000000120003380 T __libc_csu_init +0000000120000a00 W __start +0000000120014790 A _edata +0000000120017c30 A _end +0000000120003530 T _fini +0000000120000998 T _init +0000000120000a00 T _start +00000001200147b0 b basket +0000000120014798 s basket_size +0000000120003320 T bea_compute_red_cost +0000000120003340 T bea_is_dual_infeasible +0000000120014790 s completed.1 +0000000120002410 T compute_red_cost +0000000120014000 W data_start +0000000120001480 T dual_feasible +0000000120001090 T flow_cost +00000001200011d0 T flow_org_cost +0000000120000ae0 t frame_dummy +00000001200015f0 T getfree +0000000120000e30 T global_opt +00000001200147a8 s group_pos +0000000120014788 g initialize +0000000120002420 T insert_new_arc +0000000120000b30 T main +00000001200179d0 B net +00000001200147a0 s nr_group +0000000120014780 g p.0 +0000000120016d48 b perm +0000000120001d20 T price_out_impl +0000000120003080 T primal_bea_mpp +0000000120001310 T primal_feasible +0000000120002a60 T primal_iminus +0000000120002c00 T primal_net_simplex +0000000120002510 T primal_start_artificial +0000000120002ba0 T primal_update_flow +00000001200016b0 T read_min +0000000120001580 T refresh_neighbour_lists +0000000120000fa0 T refresh_potential +0000000120001c10 T replace_weaker_arc +0000000120002310 T resize_prob +0000000120002f30 T sort_basket +00000001200021b0 T suspend_impl +00000001200027e0 T update_tree +0000000120002600 T write_circulations diff --git a/configs/boot/mesa.rcS b/configs/boot/mesa.rcS new file mode 100644 index 000000000..3e931a881 --- /dev/null +++ b/configs/boot/mesa.rcS @@ -0,0 +1,12 @@ +#!/bin/sh + +cd /benchmarks/spec/mesa00/ + +/sbin/m5 checkpoint 0 0 +/sbin/m5 checkpoint 100000000 200000000 + +/sbin/m5 loadsymbol + +/sbin/m5 resetstats +/benchmarks/spec/mesa00/mesa -frames 1 -meshfile lgred.in +/sbin/m5 exit diff --git a/configs/boot/mesa.symbol b/configs/boot/mesa.symbol new file mode 100644 index 000000000..6666dc819 --- /dev/null +++ b/configs/boot/mesa.symbol @@ -0,0 +1,1135 @@ +00000001200b93f0 S CC +00000001200b9428 s Current +00000001200b9410 s CurrentBlock +00000001200b9408 s CurrentListNum +00000001200b9400 s CurrentListPtr +00000001200b9418 s CurrentPos +000000012004b870 T DeleteHashTable +000000012004b6c0 T HashFindFreeKeyBlock +000000012004bbd0 T HashFirstEntry +000000012004ba60 T HashInsert +000000012004b950 T HashLookup +000000012004bc50 T HashPrint +000000012004b580 T HashRemove +00000001200aff60 d Identity +0000000120098be0 t Init +00000001200b9448 b InstSize +000000012004b830 T NewHashTable +00000001200b9434 s NumColumns +00000001200b9430 s NumRows +000000012005e400 T OSMesaCreateContext +000000012005e9b0 T OSMesaDestroyContext +000000012005eb70 T OSMesaGetCurrentContext +000000012005ed00 T OSMesaGetDepthBuffer +000000012005ec40 T OSMesaGetIntegerv +000000012005ea30 T OSMesaMakeCurrent +000000012005eb90 T OSMesaPixelStore +0000000120098520 t ReadMesh +0000000120098790 t Render +00000001200b93ec s Space +00000001200b9440 s SurfaceN +00000001200b9438 s SurfaceV +0000000120099030 t WriteImage +00000001200b93d4 g Xmax +00000001200b93d0 g Xmin +00000001200b93e0 g Xrot +00000001200b93dc g Ymax +00000001200b93d8 g Ymin +00000001200b93e4 g Yrot +00000001200b7a50 D _DYNAMIC +00000001200b7db0 D _GLOBAL_OFFSET_TABLE_ +00000001200b93a0 G _IO_stdin_used +00000001200b7c18 T _PROCEDURE_LINKAGE_TABLE_ +00000001200b7bf8 d __CTOR_END__ +00000001200b7bf0 d __CTOR_LIST__ +00000001200b7c08 d __DTOR_END__ +00000001200b7c00 d __DTOR_LIST__ +00000001200b7a4c r __FRAME_END__ +00000001200b7c10 d __JCR_END__ +00000001200b7c10 d __JCR_LIST__ +00000001200b93e8 A __bss_start +00000001200aff20 D __data_start +0000000120099390 t __do_global_ctors_aux +0000000120000ec0 t __do_global_dtors_aux +00000001200b93a8 G __dso_handle +00000001200aff20 A __fini_array_end +00000001200aff20 A __fini_array_start +00000001200aff20 A __init_array_end +00000001200aff20 A __init_array_start +00000001200992f0 T __libc_csu_fini +0000000120099240 T __libc_csu_init +0000000120000e80 W __start +00000001200b93e8 A _edata +00000001200b9fe8 A _end +00000001200993f0 T _fini +0000000120000e10 T _init +0000000120000e80 T _start +000000012001e060 t alloc_proxy_textures +000000012001d0a0 t alloc_shared_state +0000000120068840 t antialiased_rgba_points +0000000120073f40 t apply_stencil_op_to_pixels +0000000120073af0 t apply_stencil_op_to_span +000000012007f040 t apply_texture +00000001200affb0 d blue.1 +000000012005f340 t buffer_size +0000000120060230 t choose_line_function +000000012005efb0 t clear +000000012005ef70 t clear_color +000000012005dfd0 t clear_color_buffer_with_masking +000000012005de60 t clear_color_buffers +000000012005ef60 t clear_index +0000000120072360 t clip_span +00000001200b93e8 s completed.1 +000000012003bd60 t components +0000000120076630 t components_in_intformat +000000012005ed60 t compute_row_addresses +000000012001f550 t copy_ci_pixels +000000012001f8e0 t copy_depth_pixels +000000012001ec60 t copy_rgb_pixels +000000012001fd10 t copy_stencil_pixels +0000000120078d60 t copy_tex_sub_image +00000001200aff20 W data_start +000000012003aa90 t de_casteljau_surf +000000012001b530 t decode_internal_format +00000001200764c0 t decode_internal_format +0000000120069f90 t dist_atten_antialiased_rgba_points +0000000120069060 t dist_atten_general_ci_points +00000001200694b0 t dist_atten_general_rgba_points +00000001200699e0 t dist_atten_textured_rgba_points +00000001200166a0 t do_blend +0000000120032720 t draw_color_pixels +0000000120031d60 t draw_depth_pixels +0000000120031000 t draw_index_pixels +0000000120031810 t draw_stencil_pixels +0000000120030d40 t drawpixels +0000000120030690 t enum_string +0000000120022040 t execute_list +00000001200b93c8 g extensions.3 +000000012004f6c0 t feedback_line +00000001200675b0 t feedback_points +0000000120083ac0 t feedback_triangle +0000000120062050 t flat_blend_color_line +0000000120062360 t flat_blend_color_z_line +00000001200627b0 t flat_blend_color_z_line_write +000000012004fc60 t flat_ci_line +0000000120084040 t flat_ci_triangle +000000012004ff10 t flat_ci_z_line +0000000120061aa0 t flat_color_line +0000000120061ce0 t flat_color_z_line +0000000120061280 t flat_color_z_triangle +0000000120050270 t flat_rgba_line +0000000120085190 t flat_rgba_triangle +0000000120050590 t flat_rgba_z_line +00000001200557b0 t flat_textured_line +0000000120000f60 t frame_dummy +0000000120067c60 t general_ci_points +00000001200527c0 t general_flat_ci_line +0000000120054ac0 t general_flat_rgba_line +0000000120067fe0 t general_rgba_points +00000001200519d0 t general_smooth_ci_line +0000000120053450 t general_smooth_rgba_line +0000000120087f50 t general_textured_triangle +0000000120083090 t get_1d_texel +0000000120083300 t get_2d_texel +00000001200835b0 t get_3d_texel +00000001200036f0 T glAccum +00000001200037a0 T glAlphaFunc +0000000120003850 T glAreTexturesResident +0000000120011bc0 T glAreTexturesResidentEXT +0000000120003900 T glArrayElement +0000000120011a80 T glArrayElementEXT +00000001200039a0 T glBegin +0000000120003a40 T glBindTexture +0000000120011bf0 T glBindTextureEXT +0000000120002f80 T glBitmap +0000000120011560 T glBlendColorEXT +00000001200114c0 T glBlendEquationEXT +0000000120003ae0 T glBlendFunc +0000000120003b80 T glCallList +0000000120003c20 T glCallLists +0000000120003cc0 T glClear +0000000120003d60 T glClearAccum +0000000120003ec0 T glClearColor +0000000120003f80 T glClearDepth +0000000120003e20 T glClearIndex +0000000120004020 T glClearStencil +00000001200040c0 T glClipPlane +00000001200041a0 T glColor3b +0000000120004d10 T glColor3bv +0000000120004240 T glColor3d +0000000120004de0 T glColor3dv +0000000120004290 T glColor3f +0000000120004e40 T glColor3fv +00000001200042d0 T glColor3i +0000000120004e80 T glColor3iv +0000000120004370 T glColor3s +0000000120004f20 T glColor3sv +0000000120004410 T glColor3ub +0000000120004ff0 T glColor3ubv +0000000120004460 T glColor3ui +0000000120005050 T glColor3uiv +00000001200045a0 T glColor3us +0000000120005190 T glColor3usv +00000001200046d0 T glColor4b +00000001200052d0 T glColor4bv +0000000120004780 T glColor4d +00000001200053d0 T glColor4dv +00000001200047e0 T glColor4f +0000000120005430 T glColor4fv +0000000120004830 T glColor4i +0000000120005480 T glColor4iv +00000001200048e0 T glColor4s +0000000120005540 T glColor4sv +0000000120004990 T glColor4ub +0000000120005640 T glColor4ubv +00000001200049e0 T glColor4ui +0000000120005680 T glColor4uiv +0000000120004b80 T glColor4us +0000000120005830 T glColor4usv +00000001200059f0 T glColorMask +0000000120005aa0 T glColorMaterial +0000000120005b40 T glColorPointer +0000000120011760 T glColorPointerEXT +0000000120005d00 T glColorSubTableEXT +0000000120005bf0 T glColorTableEXT +0000000120005e10 T glCopyPixels +0000000120005ec0 T glCopyTexImage1D +0000000120005f80 T glCopyTexImage2D +0000000120006050 T glCopyTexSubImage1D +0000000120006110 T glCopyTexSubImage2D +0000000120011d50 T glCopyTexSubImage3DEXT +00000001200061e0 T glCullFace +0000000120006460 T glDeleteLists +0000000120006500 T glDeleteTextures +0000000120011c20 T glDeleteTexturesEXT +0000000120006280 T glDepthFunc +0000000120006320 T glDepthMask +00000001200063c0 T glDepthRange +00000001200065a0 T glDisable +0000000120006640 T glDisableClientState +00000001200066e0 T glDrawArrays +0000000120011b20 T glDrawArraysEXT +0000000120006780 T glDrawBuffer +0000000120006820 T glDrawElements +00000001200068d0 T glDrawPixels +0000000120007310 T glEdgeFlag +0000000120007450 T glEdgeFlagPointer +0000000120011940 T glEdgeFlagPointerEXT +00000001200073b0 T glEdgeFlagv +0000000120006980 T glEnable +0000000120006a20 T glEnableClientState +0000000120006ac0 T glEnd +0000000120006b60 T glEndList +0000000120006c00 T glEvalCoord1d +0000000120006d40 T glEvalCoord1dv +0000000120006ca0 T glEvalCoord1f +0000000120006df0 T glEvalCoord1fv +0000000120006e90 T glEvalCoord2d +0000000120006fe0 T glEvalCoord2dv +0000000120006f40 T glEvalCoord2f +0000000120007090 T glEvalCoord2fv +0000000120007270 T glEvalMesh1 +00000001200074f0 T glEvalMesh2 +0000000120007130 T glEvalPoint1 +00000001200071d0 T glEvalPoint2 +00000001200075a0 T glFeedbackBuffer +0000000120007640 T glFinish +00000001200076e0 T glFlush +0000000120007780 T glFogf +00000001200078e0 T glFogfv +0000000120007820 T glFogi +00000001200031c0 T glFogiv +0000000120007980 T glFrontFace +0000000120007a20 T glFrustum +0000000120007ae0 T glGenLists +0000000120007b80 T glGenTextures +0000000120011c50 T glGenTexturesEXT +0000000120007c20 T glGetBooleanv +0000000120007cc0 T glGetClipPlane +0000000120007d60 T glGetColorTableEXT +0000000120007eb0 T glGetColorTableParameterfvEXT +0000000120007e10 T glGetColorTableParameterivEXT +0000000120007f80 T glGetDoublev +0000000120008020 T glGetError +0000000120008070 T glGetFloatv +0000000120008110 T glGetIntegerv +00000001200081b0 T glGetLightfv +0000000120008250 T glGetLightiv +00000001200082f0 T glGetMapdv +0000000120008390 T glGetMapfv +0000000120008430 T glGetMapiv +00000001200084d0 T glGetMaterialfv +0000000120008570 T glGetMaterialiv +0000000120008610 T glGetPixelMapfv +00000001200086b0 T glGetPixelMapuiv +0000000120008750 T glGetPixelMapusv +00000001200087f0 T glGetPointerv +00000001200119e0 T glGetPointervEXT +0000000120008890 T glGetPolygonStipple +0000000120008930 T glGetString +00000001200089c0 T glGetTexEnvfv +0000000120008a60 T glGetTexEnviv +0000000120008ba0 T glGetTexGendv +0000000120008c40 T glGetTexGenfv +0000000120008b00 T glGetTexGeniv +0000000120008ce0 T glGetTexImage +0000000120008d90 T glGetTexLevelParameterfv +0000000120008e40 T glGetTexLevelParameteriv +0000000120008ef0 T glGetTexParameterfv +0000000120008f90 T glGetTexParameteriv +0000000120009030 T glHint +0000000120009370 T glIndexMask +00000001200093b0 T glIndexPointer +0000000120011800 T glIndexPointerEXT +00000001200090d0 T glIndexd +0000000120009210 T glIndexdv +0000000120009110 T glIndexf +0000000120009260 T glIndexfv +0000000120009150 T glIndexi +00000001200092a0 T glIndexiv +0000000120009190 T glIndexs +00000001200092e0 T glIndexsv +00000001200091d0 T glIndexub +0000000120009330 T glIndexubv +00000001200094f0 T glInitNames +0000000120009450 T glInterleavedArrays +000000012000e330 T glIsEnabled +0000000120009590 T glIsList +0000000120009640 T glIsTexture +0000000120011c80 T glIsTextureEXT +0000000120009910 T glLightModelf +0000000120009a70 T glLightModelfv +00000001200099b0 T glLightModeli +0000000120009b10 T glLightModeliv +00000001200096f0 T glLightf +0000000120009860 T glLightfv +00000001200097a0 T glLighti +0000000120003330 T glLightiv +0000000120009d10 T glLineStipple +0000000120009c70 T glLineWidth +0000000120009db0 T glListBase +0000000120009e50 T glLoadIdentity +0000000120009ef0 T glLoadMatrixd +0000000120009fd0 T glLoadMatrixf +000000012000a070 T glLoadName +000000012000a110 T glLogicOp +000000012000a1b0 T glMap1d +000000012000a2e0 T glMap1f +000000012000a410 T glMap2d +000000012000a580 T glMap2f +000000012000a6e0 T glMapGrid1d +000000012000a7a0 T glMapGrid1f +000000012000a850 T glMapGrid2d +000000012000a920 T glMapGrid2f +000000012000a9d0 T glMaterialf +000000012000ab40 T glMaterialfv +000000012000aa80 T glMateriali +0000000120003520 T glMaterialiv +000000012000abe0 T glMatrixMode +000000012000ac80 T glMultMatrixd +000000012000ad60 T glMultMatrixf +000000012000ae00 T glNewList +000000012000aea0 T glNormal3b +000000012000b250 T glNormal3bv +000000012000af40 T glNormal3d +000000012000b320 T glNormal3dv +000000012000b070 T glNormal3f +000000012000b460 T glNormal3fv +000000012000b110 T glNormal3i +000000012000b500 T glNormal3iv +000000012000b1b0 T glNormal3s +000000012000b5a0 T glNormal3sv +000000012000b670 T glNormalPointer +00000001200116c0 T glNormalPointerEXT +000000012000bae0 T glOrtho +000000012000bba0 T glPassThrough +000000012000bc40 T glPixelMapfv +000000012000b710 T glPixelMapuiv +000000012000b8f0 T glPixelMapusv +000000012000bce0 T glPixelStoref +000000012000bd90 T glPixelStorei +000000012000be30 T glPixelTransferf +000000012000bee0 T glPixelTransferi +000000012000bfa0 T glPixelZoom +00000001200120f0 T glPointParameterfEXT +0000000120012190 T glPointParameterfvEXT +000000012000c040 T glPointSize +000000012000c0e0 T glPolygonMode +000000012000c180 T glPolygonOffset +000000012000c220 T glPolygonOffsetEXT +000000012000c2e0 T glPolygonStipple +000000012000c380 T glPopAttrib +000000012000c420 T glPopClientAttrib +000000012000c4c0 T glPopMatrix +000000012000c560 T glPopName +000000012000c600 T glPrioritizeTextures +0000000120011cb0 T glPrioritizeTexturesEXT +000000012000e3e0 T glPushAttrib +000000012000e480 T glPushClientAttrib +000000012000c6a0 T glPushMatrix +000000012000e520 T glPushName +000000012000c740 T glRasterPos2d +000000012000d090 T glRasterPos2dv +000000012000c800 T glRasterPos2f +000000012000d160 T glRasterPos2fv +000000012000c8b0 T glRasterPos2i +000000012000d220 T glRasterPos2iv +000000012000c980 T glRasterPos2s +000000012000d2f0 T glRasterPos2sv +000000012000ca50 T glRasterPos3d +000000012000d3e0 T glRasterPos3dv +000000012000cb20 T glRasterPos3f +000000012000d4a0 T glRasterPos3fv +000000012000cbd0 T glRasterPos3i +000000012000d550 T glRasterPos3iv +000000012000cca0 T glRasterPos3s +000000012000d620 T glRasterPos3sv +000000012000cd70 T glRasterPos4d +000000012000d730 T glRasterPos4dv +000000012000ce30 T glRasterPos4f +000000012000d7f0 T glRasterPos4fv +000000012000cef0 T glRasterPos4i +000000012000d8a0 T glRasterPos4iv +000000012000cfc0 T glRasterPos4s +000000012000d970 T glRasterPos4sv +000000012000da90 T glReadBuffer +000000012000db30 T glReadPixels +000000012000dc00 T glRectd +000000012000df20 T glRectdv +000000012000dcc0 T glRectf +000000012000dfe0 T glRectfv +000000012000dd80 T glRecti +000000012000e090 T glRectiv +000000012000de50 T glRects +000000012000e160 T glRectsv +000000012000e5c0 T glRenderMode +0000000120013510 T glResizeBuffersMESA +000000012000e660 T glRotated +000000012000e720 T glRotatef +000000012000e880 T glScaled +000000012000e930 T glScalef +000000012000e280 T glScissor +000000012000e7e0 T glSelectBuffer +000000012000e9e0 T glShadeModel +000000012000ea80 T glStencilFunc +000000012000eb20 T glStencilMask +000000012000ebc0 T glStencilOp +000000012000ec60 T glTexCoord1d +000000012000f210 T glTexCoord1dv +000000012000ecb0 T glTexCoord1f +000000012000f270 T glTexCoord1fv +000000012000ed00 T glTexCoord1i +000000012000f2c0 T glTexCoord1iv +000000012000ed60 T glTexCoord1s +000000012000f320 T glTexCoord1sv +000000012000edc0 T glTexCoord2d +000000012000f390 T glTexCoord2dv +000000012000ee10 T glTexCoord2f +000000012000f3e0 T glTexCoord2fv +000000012000ee50 T glTexCoord2i +000000012000f420 T glTexCoord2iv +000000012000eea0 T glTexCoord2s +000000012000f480 T glTexCoord2sv +000000012000eef0 T glTexCoord3d +000000012000f500 T glTexCoord3dv +000000012000ef50 T glTexCoord3f +000000012000f560 T glTexCoord3fv +000000012000efa0 T glTexCoord3i +000000012000f5b0 T glTexCoord3iv +000000012000f010 T glTexCoord3s +000000012000f620 T glTexCoord3sv +000000012000f080 T glTexCoord4d +000000012000f6c0 T glTexCoord4dv +000000012000f0e0 T glTexCoord4f +000000012000f720 T glTexCoord4fv +000000012000f130 T glTexCoord4i +000000012000f770 T glTexCoord4iv +000000012000f1a0 T glTexCoord4s +000000012000f7e0 T glTexCoord4sv +000000012000f8a0 T glTexCoordPointer +00000001200118a0 T glTexCoordPointerEXT +000000012000fde0 T glTexEnvf +000000012000ff60 T glTexEnvfv +000000012000fe90 T glTexEnvi +0000000120010000 T glTexEnviv +000000012000f950 T glTexGend +000000012000fb70 T glTexGendv +000000012000fa00 T glTexGenf +000000012000fd40 T glTexGenfv +000000012000fab0 T glTexGeni +000000012000fc50 T glTexGeniv +0000000120010140 T glTexImage1D +0000000120010280 T glTexImage2D +0000000120011e30 T glTexImage3DEXT +00000001200103c0 T glTexParameterf +0000000120010540 T glTexParameterfv +0000000120010470 T glTexParameteri +00000001200105e0 T glTexParameteriv +0000000120010750 T glTexSubImage1D +0000000120010880 T glTexSubImage2D +0000000120011f90 T glTexSubImage3DEXT +00000001200109c0 T glTranslated +0000000120010a70 T glTranslatef +0000000120010b20 T glVertex2d +0000000120010f30 T glVertex2dv +0000000120010b70 T glVertex2f +0000000120010f80 T glVertex2fv +0000000120010bb0 T glVertex2i +0000000120010fc0 T glVertex2iv +0000000120010c00 T glVertex2s +0000000120011020 T glVertex2sv +0000000120010c50 T glVertex3d +00000001200110a0 T glVertex3dv +0000000120010ca0 T glVertex3f +0000000120011100 T glVertex3fv +0000000120010ce0 T glVertex3i +0000000120011140 T glVertex3iv +0000000120010d40 T glVertex3s +00000001200111a0 T glVertex3sv +0000000120010da0 T glVertex4d +0000000120011240 T glVertex4dv +0000000120010e00 T glVertex4f +00000001200112a0 T glVertex4fv +0000000120010e50 T glVertex4i +00000001200112f0 T glVertex4iv +0000000120010ec0 T glVertex4s +0000000120011360 T glVertex4sv +0000000120011420 T glVertexPointer +0000000120011620 T glVertexPointerEXT +0000000120011470 T glViewport +0000000120012520 T glWindowPos2dMESA +0000000120012830 T glWindowPos2dvMESA +0000000120012470 T glWindowPos2fMESA +0000000120012780 T glWindowPos2fvMESA +00000001200122f0 T glWindowPos2iMESA +00000001200125e0 T glWindowPos2ivMESA +00000001200123b0 T glWindowPos2sMESA +00000001200126a0 T glWindowPos2svMESA +0000000120012b40 T glWindowPos3dMESA +0000000120012e70 T glWindowPos3dvMESA +0000000120012a90 T glWindowPos3fMESA +0000000120012dc0 T glWindowPos3fvMESA +00000001200128f0 T glWindowPos3iMESA +0000000120012c00 T glWindowPos3ivMESA +00000001200129c0 T glWindowPos3sMESA +0000000120012cc0 T glWindowPos3svMESA +00000001200130d0 T glWindowPos4dMESA +0000000120013440 T glWindowPos4dvMESA +0000000120012230 T glWindowPos4fMESA +0000000120013390 T glWindowPos4fvMESA +0000000120012f30 T glWindowPos4iMESA +0000000120013190 T glWindowPos4ivMESA +0000000120013000 T glWindowPos4sMESA +0000000120013270 T glWindowPos4svMESA +0000000120000fb0 T gl_Accum +0000000120002660 T gl_AlphaFunc +0000000120079e90 T gl_AreTexturesResident +000000012008ba30 T gl_ArrayElement +000000012008e8e0 T gl_Begin +0000000120079a30 T gl_BindTexture +0000000120015e40 T gl_Bitmap +00000001200163a0 T gl_BlendColor +00000001200162a0 T gl_BlendEquation +0000000120016160 T gl_BlendFunc +000000012002faf0 T gl_CallList +000000012002fb50 T gl_CallLists +000000012005dc40 T gl_Clear +0000000120002200 T gl_ClearAccum +000000012005da80 T gl_ClearColor +0000000120021400 T gl_ClearDepth +000000012005d9e0 T gl_ClearIndex +0000000120073640 T gl_ClearStencil +000000012001a5e0 T gl_ClipPlane +000000012008ed20 T gl_Color3f +000000012008ef20 T gl_Color3fv +000000012008f120 T gl_Color4f +000000012008f390 T gl_Color4fv +000000012008f600 T gl_Color4ub +000000012008f730 T gl_Color4ub8bit +000000012008f780 T gl_Color4ubv +000000012008f8d0 T gl_Color4ubv8bit +000000012005a770 T gl_ColorMask +000000012008f900 T gl_ColorMat3f +000000012008fb20 T gl_ColorMat3fv +000000012008fd60 T gl_ColorMat4f +0000000120090010 T gl_ColorMat4fv +00000001200902d0 T gl_ColorMat4ub +00000001200904c0 T gl_ColorMat4ubv +000000012004e190 T gl_ColorMaterial +000000012008b750 T gl_ColorPointer +000000012001b3e0 T gl_ColorSubTable +000000012001b010 T gl_ColorTable +000000012001e8d0 T gl_CopyPixels +0000000120075a90 T gl_CopyTexImage1D +0000000120075c50 T gl_CopyTexImage2D +0000000120075e50 T gl_CopyTexSubImage1D +0000000120075f80 T gl_CopyTexSubImage2D +0000000120076110 T gl_CopyTexSubImage3DEXT +000000012006ab20 T gl_CullFace +000000012002f860 T gl_DeleteLists +0000000120079820 T gl_DeleteTextures +0000000120021490 T gl_DepthFunc +0000000120021520 T gl_DepthMask +00000001200215a0 T gl_DepthRange +0000000120034b10 T gl_Disable +0000000120034dd0 T gl_DisableClientState +000000012008d0d0 T gl_DrawArrays +000000012005d6c0 T gl_DrawBuffer +000000012008d990 T gl_DrawElements +0000000120030830 T gl_DrawPixels +0000000120090710 T gl_EdgeFlag +000000012008e1f0 T gl_EdgeFlagPointer +0000000120034b00 T gl_Enable +0000000120034c50 T gl_EnableClientState +00000001200908e0 T gl_End +000000012002f920 T gl_EndList +00000001200388a0 T gl_EvalCoord1f +0000000120038d40 T gl_EvalCoord2f +0000000120039690 T gl_EvalMesh1 +0000000120039830 T gl_EvalMesh2 +000000012003a440 T gl_EvalPoint1 +0000000120039530 T gl_EvalPoint2 +000000012003bdd0 T gl_FeedbackBuffer +000000012005dd80 T gl_Finish +000000012005ddf0 T gl_Flush +000000012003ca70 T gl_Fogfv +000000012006abc0 T gl_FrontFace +000000012005aae0 T gl_Frustum +0000000120023540 T gl_GenLists +0000000120079fc0 T gl_GenTextures +000000012003e2d0 T gl_GetBooleanv +000000012001a6b0 T gl_GetClipPlane +000000012001b420 T gl_GetColorTable +000000012001b4e0 T gl_GetColorTableParameterfv +000000012001b280 T gl_GetColorTableParameteriv +00000001200419d0 T gl_GetDoublev +000000012001d050 T gl_GetError +0000000120045800 T gl_GetFloatv +00000001200492e0 T gl_GetIntegerv +000000012004d830 T gl_GetLightfv +000000012004da80 T gl_GetLightiv +00000001200367e0 T gl_GetMapdv +0000000120037060 T gl_GetMapfv +0000000120037930 T gl_GetMapiv +000000012004e390 T gl_GetMaterialfv +000000012004e5b0 T gl_GetMaterialiv +0000000120065190 T gl_GetPixelMapfv +0000000120065350 T gl_GetPixelMapuiv +0000000120065790 T gl_GetPixelMapusv +000000012004b460 T gl_GetPointerv +000000012006ad10 T gl_GetPolygonStipple +000000012005d420 T gl_GetString +000000012007bb80 T gl_GetTexEnvfv +000000012007bc70 T gl_GetTexEnviv +000000012007b420 T gl_GetTexGendv +000000012007b680 T gl_GetTexGenfv +000000012007b920 T gl_GetTexGeniv +00000001200763a0 T gl_GetTexImage +000000012007bd60 T gl_GetTexLevelParameterfv +000000012007a6d0 T gl_GetTexLevelParameteriv +000000012007a990 T gl_GetTexParameterfv +000000012007ad00 T gl_GetTexParameteriv +000000012005d5d0 T gl_Hint +000000012005a700 T gl_IndexMask +000000012008b860 T gl_IndexPointer +000000012008ecc0 T gl_Indexf +000000012008ecf0 T gl_Indexi +000000012003c620 T gl_InitNames +000000012008dcf0 T gl_InterleavedArrays +00000001200344c0 T gl_IsEnabled +00000001200234e0 T gl_IsList +000000012007a0a0 T gl_IsTexture +000000012004f2e0 T gl_LightModelfv +000000012004d340 T gl_Lightfv +000000012004f620 T gl_LineStipple +000000012004f5a0 T gl_LineWidth +00000001200237c0 T gl_ListBase +000000012005b3e0 T gl_LoadIdentity +000000012005c980 T gl_LoadMatrixf +000000012003c1d0 T gl_LoadName +0000000120057ab0 T gl_LogicOp +0000000120035d40 T gl_Map1f +0000000120036220 T gl_Map2f +000000012003a320 T gl_MapGrid1f +000000012003a3a0 T gl_MapGrid2f +000000012004e290 T gl_Materialfv +000000012005c900 T gl_MatrixMode +000000012005b6f0 T gl_MultMatrixf +0000000120023690 T gl_NewList +000000012008ec50 T gl_Normal3f +000000012008ec80 T gl_Normal3fv +000000012008b670 T gl_NormalPointer +000000012005aca0 T gl_Ortho +000000012003c470 T gl_PassThrough +0000000120064bc0 T gl_PixelMapfv +00000001200648a0 T gl_PixelStorei +0000000120065ce0 T gl_PixelTransferf +0000000120066320 T gl_PixelZoom +0000000120067160 T gl_PointParameterfvEXT +0000000120067530 T gl_PointSize +000000012006aa00 T gl_PolygonMode +000000012006ad20 T gl_PolygonOffset +000000012006ac30 T gl_PolygonStipple +0000000120014560 T gl_PopAttrib +00000001200156b0 T gl_PopClientAttrib +000000012005b0e0 T gl_PopMatrix +000000012003c7f0 T gl_PopName +0000000120079d50 T gl_PrioritizeTextures +00000001200135b0 T gl_PushAttrib +0000000120015470 T gl_PushClientAttrib +000000012005adf0 T gl_PushMatrix +000000012003c710 T gl_PushName +000000012006ae90 T gl_RasterPos4f +000000012005d860 T gl_ReadBuffer +000000012006b910 T gl_ReadPixels +000000012006e450 T gl_Rectf +000000012003c2b0 T gl_RenderMode +000000012001c560 T gl_ResizeBuffersMESA +000000012005cbf0 T gl_Rotatef +000000012005bd30 T gl_Scalef +000000012006e580 T gl_Scissor +000000012003c530 T gl_SelectBuffer +000000012004f240 T gl_ShadeModel +00000001200736c0 T gl_StencilFunc +0000000120073790 T gl_StencilMask +0000000120072410 T gl_StencilOp +0000000120090830 T gl_TexCoord2f +0000000120090840 T gl_TexCoord2f4 +0000000120090870 T gl_TexCoord4f +000000012008b930 T gl_TexCoordPointer +000000012007a130 T gl_TexEnvfv +000000012007b0b0 T gl_TexGenfv +0000000120074530 T gl_TexImage1D +00000001200747e0 T gl_TexImage2D +0000000120074a90 T gl_TexImage3DEXT +000000012007a330 T gl_TexParameterfv +0000000120074d70 T gl_TexSubImage1D +0000000120075090 T gl_TexSubImage2D +00000001200754f0 T gl_TexSubImage3DEXT +000000012005bec0 T gl_Translatef +000000012008b570 T gl_VertexPointer +000000012005cc40 T gl_Viewport +00000001200979a0 T gl_WindowPos4fMESA +0000000120002140 T gl_alloc_accum_buffer +0000000120002740 T gl_alloc_alpha_buffers +0000000120021b40 T gl_alloc_depth_buffer +0000000120063ad0 T gl_alloc_pb +00000001200738f0 T gl_alloc_stencil_buffer +00000001200762f0 T gl_alloc_texture_image +00000001200792d0 T gl_alloc_texture_object +000000012008e270 T gl_alloc_vb +0000000120002330 T gl_alpha_test +000000012005c080 T gl_analyze_modelview_matrix +000000012005c3f0 T gl_analyze_projection_matrix +000000012005c6a0 T gl_analyze_texture_matrix +0000000120016550 T gl_blend_pixels +0000000120016460 T gl_blend_span +0000000120001da0 T gl_clear_accum_buffer +00000001200028e0 T gl_clear_alpha_buffers +00000001200210d0 T gl_clear_depth_buffer +00000001200739d0 T gl_clear_stencil_buffer +0000000120034b20 T gl_client_state +000000012006e780 T gl_color_shade_vertices +000000012006f180 T gl_color_shade_vertices_fast +000000012004d210 T gl_components_in_format +000000012004eaf0 T gl_compute_material_shine_table +000000012004e9c0 T gl_compute_spot_exp_table +000000012001bd80 T gl_copy_context +0000000120039f40 T gl_copy_map_points1d +0000000120039e50 T gl_copy_map_points1f +000000012003a1a0 T gl_copy_map_points2d +000000012003a030 T gl_copy_map_points2f +000000012001b9f0 T gl_create_context +000000012001ce30 T gl_create_framebuffer +000000012001b670 T gl_create_visual +0000000120073450 T gl_depth_stencil_pixels +0000000120072b50 T gl_depth_stencil_span +0000000120020790 T gl_depth_test_pixels_generic +00000001200218d0 T gl_depth_test_pixels_greater +0000000120021810 T gl_depth_test_pixels_less +0000000120020000 T gl_depth_test_span_generic +0000000120021760 T gl_depth_test_span_greater +00000001200216b0 T gl_depth_test_span_less +000000012001cc60 T gl_destroy_context +000000012001bc70 T gl_destroy_framebuffer +0000000120021c00 T gl_destroy_list +000000012001cc30 T gl_destroy_visual +0000000120034f00 t gl_enable +000000012001c1d0 T gl_error +000000012008e670 T gl_eval_vertex +000000012003bf70 T gl_feedback_vertex +000000012004d020 T gl_flip_bytes +0000000120062c40 T gl_flush_pb +000000012003d4d0 T gl_fog_color_pixels +000000012003cbb0 T gl_fog_color_vertices +000000012003dd90 T gl_fog_index_pixels +000000012003d140 T gl_fog_index_vertices +0000000120035b70 T gl_free_control_points +000000012004d2d0 T gl_free_image +0000000120076330 T gl_free_texture_image +0000000120079420 T gl_free_texture_object +000000012001cef0 T gl_get_current_context +000000012006f6b0 T gl_index_shade_vertices +00000001200664a0 T gl_init_api_function_pointers +0000000120039e30 T gl_init_eval +0000000120021e00 T gl_init_lists +000000012005e3c0 T gl_init_math +0000000120023820 T gl_list_index +0000000120058140 T gl_logicop_ci_pixels +0000000120057b40 T gl_logicop_ci_span +00000001200595d0 T gl_logicop_rgba_pixels +0000000120058740 T gl_logicop_rgba_span +000000012001ce90 T gl_make_current +000000012005a540 T gl_mask_color_pixels +000000012005a800 T gl_mask_color_span +000000012005aa20 T gl_mask_index_pixels +000000012005a960 T gl_mask_index_span +000000012004dd90 T gl_material_bitmask +000000012004bd20 T gl_pixel_addr_in_image +000000012001cf60 T gl_problem +0000000120002ef0 T gl_read_alpha_pixels +0000000120002e80 T gl_read_alpha_span +0000000120071ff0 T gl_read_color_span +0000000120021990 T gl_read_depth_span_float +0000000120021aa0 T gl_read_depth_span_int +0000000120072220 T gl_read_index_span +0000000120073810 T gl_read_stencil_span +00000001200159f0 T gl_render_bitmap +0000000120091e80 T gl_render_vb +0000000120092c40 T gl_reset_vb +000000012005bae0 T gl_rotation_matrix +0000000120023840 T gl_save_Accum +00000001200239c0 T gl_save_AlphaFunc +000000012008c820 T gl_save_ArrayElement +0000000120023b40 T gl_save_Begin +0000000120023cb0 T gl_save_BindTexture +0000000120023e30 T gl_save_Bitmap +0000000120024300 T gl_save_BlendColor +0000000120024010 T gl_save_BlendEquation +0000000120024180 T gl_save_BlendFunc +00000001200244b0 T gl_save_CallList +0000000120024620 T gl_save_CallLists +00000001200247e0 T gl_save_Clear +0000000120024950 T gl_save_ClearAccum +0000000120024b00 T gl_save_ClearColor +0000000120024cb0 T gl_save_ClearDepth +0000000120024e30 T gl_save_ClearIndex +0000000120024fa0 T gl_save_ClearStencil +0000000120025110 T gl_save_ClipPlane +00000001200252b0 T gl_save_Color3f +0000000120025450 T gl_save_Color3fv +00000001200255d0 T gl_save_Color4f +0000000120025780 T gl_save_Color4fv +0000000120025910 T gl_save_Color4ub +0000000120025ae0 T gl_save_Color4ubv +0000000120025cc0 T gl_save_ColorMask +0000000120025e90 T gl_save_ColorMaterial +00000001200261c0 T gl_save_ColorSubTable +0000000120026010 T gl_save_ColorTable +0000000120026370 T gl_save_CopyPixels +0000000120026520 T gl_save_CopyTexImage1D +0000000120026700 T gl_save_CopyTexImage2D +00000001200268f0 T gl_save_CopyTexSubImage1D +0000000120026ab0 T gl_save_CopyTexSubImage2D +0000000120026ca0 T gl_save_CopyTexSubImage3DEXT +0000000120026eb0 T gl_save_CullFace +0000000120027020 T gl_save_DepthFunc +0000000120027190 T gl_save_DepthMask +0000000120027310 T gl_save_DepthRange +00000001200274a0 T gl_save_Disable +000000012008d8a0 T gl_save_DrawArrays +0000000120027610 T gl_save_DrawBuffer +000000012008db60 T gl_save_DrawElements +0000000120027780 T gl_save_DrawPixels +00000001200278f0 T gl_save_EdgeFlag +0000000120027a70 T gl_save_Enable +0000000120027be0 T gl_save_End +0000000120027d40 T gl_save_EvalCoord1f +0000000120027eb0 T gl_save_EvalCoord2f +0000000120028030 T gl_save_EvalMesh1 +00000001200281c0 T gl_save_EvalMesh2 +0000000120028370 T gl_save_EvalPoint1 +00000001200284e0 T gl_save_EvalPoint2 +0000000120028660 T gl_save_Fogfv +0000000120028800 T gl_save_FrontFace +0000000120028970 T gl_save_Frustum +0000000120028b60 T gl_save_Hint +0000000120028fd0 T gl_save_IndexMask +0000000120028e50 T gl_save_Indexf +0000000120028ce0 T gl_save_Indexi +0000000120029140 T gl_save_InitNames +000000012008e260 T gl_save_InterleavedArrays +0000000120029460 T gl_save_LightModelfv +00000001200292a0 T gl_save_Lightfv +0000000120029600 T gl_save_LineStipple +0000000120029790 T gl_save_LineWidth +0000000120029900 T gl_save_ListBase +0000000120029a70 T gl_save_LoadIdentity +0000000120029bd0 T gl_save_LoadMatrixf +0000000120029d70 T gl_save_LoadName +0000000120029ee0 T gl_save_LogicOp +000000012002a050 T gl_save_Map1f +000000012002a220 T gl_save_Map2f +000000012002a440 T gl_save_MapGrid1f +000000012002a5e0 T gl_save_MapGrid2f +000000012002a7b0 T gl_save_Materialfv +000000012002a960 T gl_save_MatrixMode +000000012002aad0 T gl_save_MultMatrixf +000000012002ac70 T gl_save_NewList +000000012002ae30 T gl_save_Normal3f +000000012002acb0 T gl_save_Normal3fv +000000012002afd0 T gl_save_Ortho +000000012002ca10 T gl_save_PassThrough +000000012002b1c0 T gl_save_PixelMapfv +000000012002b390 T gl_save_PixelTransferf +000000012002b510 T gl_save_PixelZoom +000000012002b690 T gl_save_PointParameterfvEXT +000000012002b830 T gl_save_PointSize +000000012002b9a0 T gl_save_PolygonMode +000000012002bcc0 T gl_save_PolygonOffset +000000012002bb20 T gl_save_PolygonStipple +000000012002be40 T gl_save_PopAttrib +000000012002bfa0 T gl_save_PopMatrix +000000012002c100 T gl_save_PopName +000000012002c260 T gl_save_PrioritizeTextures +000000012002c420 T gl_save_PushAttrib +000000012002c590 T gl_save_PushMatrix +000000012002c6f0 T gl_save_PushName +000000012002c860 T gl_save_RasterPos4f +000000012002cb80 T gl_save_ReadBuffer +000000012002ccf0 T gl_save_Rectf +000000012002cea0 T gl_save_Rotatef +000000012002cf00 T gl_save_Scalef +000000012002d0a0 T gl_save_Scissor +000000012002d240 T gl_save_ShadeModel +000000012002d3b0 T gl_save_StencilFunc +000000012002d540 T gl_save_StencilMask +000000012002d6b0 T gl_save_StencilOp +000000012002d840 T gl_save_TexCoord2f +000000012002d9c0 T gl_save_TexCoord4f +000000012002db70 T gl_save_TexEnvfv +000000012002dd20 T gl_save_TexGenfv +000000012002e080 T gl_save_TexImage1D +000000012002e280 T gl_save_TexImage2D +000000012002e4a0 T gl_save_TexImage3DEXT +000000012002ded0 T gl_save_TexParameterfv +000000012002e6c0 T gl_save_TexSubImage1D +000000012002e8b0 T gl_save_TexSubImage2D +000000012002ead0 T gl_save_TexSubImage3DEXT +000000012002ed20 T gl_save_Translatef +000000012002eec0 T gl_save_Vertex2f +000000012002f040 T gl_save_Vertex3f +000000012002f390 T gl_save_Vertex3fv +000000012002f1e0 T gl_save_Vertex4f +000000012002f510 T gl_save_Viewport +000000012002f6b0 T gl_save_WindowPos4fMESA +000000012006e6e0 T gl_scissor_pixels +000000012006e620 T gl_scissor_span +000000012001cf10 T gl_set_api_table +000000012008e570 T gl_set_color_function +000000012004f430 T gl_set_line_function +000000012004de80 T gl_set_material +00000001200673e0 T gl_set_point_function +000000012006ad80 T gl_set_quad_function +000000012007c950 T gl_set_texture_sampler +00000001200838a0 T gl_set_triangle_function +000000012008e3c0 T gl_set_vertex_function +000000012004d180 T gl_sizeof_type +000000012005e370 T gl_sqrt +0000000120072d40 T gl_stencil_pixels +0000000120072510 T gl_stencil_span +000000012004d0c0 T gl_swap2 +000000012004d120 T gl_swap4 +0000000120079540 T gl_test_texture_object_completeness +000000012007be80 T gl_texgen +000000012007cb00 T gl_texture_pixels +0000000120095710 T gl_transform_vb_part1 +00000001200952a0 T gl_transform_vb_part2 +0000000120098180 T gl_transform_vector +0000000120016120 T gl_unpack_bitmap +000000012004d290 T gl_unpack_image +000000012004bf80 T gl_unpack_image3D +0000000120065f90 T gl_unpack_pixels +00000001200763e0 T gl_unpack_texsubimage +000000012003c6b0 T gl_update_hitflag +000000012004eb30 T gl_update_lighting +000000012001c690 T gl_update_state +000000012007bdb0 T gl_update_texture_state +0000000120019bc0 T gl_userclip_line +000000012001a800 T gl_userclip_point +0000000120019fe0 T gl_userclip_polygon +00000001200907b0 T gl_vertex2f_nop +0000000120090770 T gl_vertex3f_nop +00000001200907f0 T gl_vertex3fv_nop +0000000120090730 T gl_vertex4f_nop +0000000120017660 T gl_viewclip_line +000000012001a770 T gl_viewclip_point +0000000120018340 T gl_viewclip_polygon +000000012001cfd0 T gl_warning +000000012006b500 T gl_windowpos +0000000120002c50 T gl_write_alpha_pixels +0000000120002ac0 T gl_write_alpha_span +0000000120070780 T gl_write_color_span +000000012006fd10 T gl_write_index_span +0000000120002d70 T gl_write_mono_alpha_pixels +0000000120002ba0 T gl_write_mono_alpha_span +0000000120070f00 T gl_write_monocolor_span +00000001200701b0 T gl_write_monoindex_span +0000000120073880 T gl_write_stencil_span +0000000120071840 T gl_write_texture_span +0000000120063b50 T gl_write_zoomed_color_span +00000001200640c0 T gl_write_zoomed_index_span +00000001200644e0 T gl_write_zoomed_stencil_span +0000000120097ea0 T gl_xform_normals_3fv +0000000120097c90 T gl_xform_points_3fv +00000001200979d0 T gl_xform_points_4fv +00000001200b0020 d grayblue.8 +00000001200b0010 d graygreen.7 +00000001200b0000 d grayred.6 +000000012003a500 t horner_bezier_curve +000000012003a720 t horner_bezier_surf +00000001200aff20 d identity.0 +0000000120076780 t image_to_texture +0000000120066b90 t init_dlist_pointers +00000001200665c0 t init_exec_pointers +00000001200b93f8 s init_flag.0 +00000001200b9420 s init_flag.0 +000000012001e7c0 t init_light +000000012001d270 t initialize_context +00000001200b9424 s initialized.0 +000000012001a8c0 t interpolate_aux +000000012005cda0 t invert_matrix +000000012005d130 t invert_matrix_general +00000001200897a0 t lambda_textured_triangle +0000000120098270 T main +0000000120077d40 t make_null_texture +000000012002fc30 T mesa_print_display_list +0000000120057aa0 t null_line +0000000120069050 t null_points +000000012006ae80 t null_quad +000000012008b560 t null_triangle +000000012007e110 t opt_sample_rgb_2d +000000012007e2c0 t opt_sample_rgba_2d +000000012005e7c0 t osmesa_setup_DD_pointers +00000001200b93b0 g p.0 +0000000120082df0 t palette_sample +00000001200afff0 d posblue.5 +00000001200affe0 d posgreen.4 +00000001200affd0 d posred.3 +000000012002fdd0 t print_list +00000001200963f0 t project_and_cliptest +000000012006ade0 t quad +0000000120030ae0 t quickdraw_rgb +0000000120078780 t read_color_image +000000012005fa40 t read_color_pixels +000000012006ce90 t read_color_pixels +00000001200600f0 t read_color_pixels3 +000000012005f8e0 t read_color_span +000000012005fff0 t read_color_span3 +000000012006c140 t read_depth_pixels +000000012005f9c0 t read_index_pixels +000000012006bae0 t read_index_pixels +000000012005f890 t read_index_span +000000012006c880 t read_stencil_pixels +0000000120093ac0 t render_clipped_line +0000000120094390 t render_clipped_polygon +0000000120093f70 t render_polygon +0000000120094d40 t render_quad +0000000120094a70 t render_triangle +00000001200b9a00 b renderer.0 +0000000120061a80 t renderer_string +00000001200807d0 t sample_1d_linear +00000001200804c0 t sample_1d_nearest +0000000120081060 t sample_2d_linear +0000000120080c70 t sample_2d_nearest +0000000120081dd0 t sample_3d_linear +0000000120081920 t sample_3d_nearest +000000012007cd70 t sample_lambda_1d +000000012007d7d0 t sample_lambda_2d +000000012007e680 t sample_lambda_3d +000000012007ccb0 t sample_linear_1d +000000012007d700 t sample_linear_2d +000000012007e5a0 t sample_linear_3d +000000012007cbf0 t sample_nearest_1d +000000012007d630 t sample_nearest_2d +000000012007e4c0 t sample_nearest_3d +000000012004fbb0 t select_line +0000000120067950 t select_points +0000000120083f60 t select_triangle +000000012005ef50 t set_buffer +000000012005f300 t set_color +000000012005f2f0 t set_index +0000000120096f30 t shade_vertices +0000000120086820 t simple_textured_triangle +0000000120087250 t simple_z_textured_triangle +0000000120067280 T size1_ci_points +0000000120067a30 t size1_rgba_points +0000000120050960 t smooth_ci_line +0000000120084850 t smooth_ci_triangle +0000000120050bc0 t smooth_ci_z_line +0000000120060460 t smooth_color_z_triangle +0000000120050f00 t smooth_rgba_line +0000000120085a20 t smooth_rgba_triangle +00000001200513f0 t smooth_rgba_z_line +0000000120056630 t smooth_textured_line +00000001200b9de8 b sqrttab +00000001200affa0 d texPlane.0 +0000000120078040 t texture_1d_error_check +0000000120078250 t texture_2d_error_check +00000001200784a0 t texture_3d_error_check +00000001200683e0 t textured_rgba_points +00000001200b9618 b tmp +0000000120095830 t transform_points3 +0000000120095c40 t transform_points4 +00000001200960b0 t transform_texcoords +000000012002fc50 t translate_id +0000000120095020 t unfilled_polygon +000000012001e720 t update_clipmask +0000000120097630 t update_material +000000012001e320 t update_pixel_logic +000000012001e3f0 t update_pixel_masking +000000012001e520 t update_rasterflags +0000000120096b10 t userclip_vertices +00000001200b93b8 g vendor.1 +00000001200b93c0 g version.2 +00000001200916b0 t vertex2f_color +0000000120091500 t vertex2f_color_tex2 +00000001200915d0 t vertex2f_color_tex4 +0000000120090b20 t vertex2f_feedback +0000000120091770 t vertex2f_index +0000000120091440 t vertex2f_normal +0000000120091250 t vertex2f_normal_color_tex2 +0000000120091340 t vertex2f_normal_color_tex4 +00000001200910d0 t vertex3f_color +0000000120090f20 t vertex3f_color_tex2 +0000000120090ff0 t vertex3f_color_tex4 +0000000120090b00 t vertex3f_feedback +0000000120091190 t vertex3f_index +0000000120090e60 t vertex3f_normal +0000000120090c70 t vertex3f_normal_color_tex2 +0000000120090d60 t vertex3f_normal_color_tex4 +0000000120091ce0 t vertex3fv_color +0000000120091b10 t vertex3fv_color_tex2 +0000000120091bf0 t vertex3fv_color_tex4 +0000000120090b40 t vertex3fv_feedback +0000000120091db0 t vertex3fv_index +0000000120091a40 t vertex3fv_normal +0000000120091830 t vertex3fv_normal_color_tex2 +0000000120091930 t vertex3fv_normal_color_tex4 +0000000120090b60 t vertex4 +00000001200909f0 t vertex4f_feedback +0000000120096c50 t viewport_map_vertices +00000001200affc0 d white.2 +000000012005f520 t write_color_pixels +000000012005fde0 t write_color_pixels3 +000000012005f360 t write_color_span +000000012005fb50 t write_color_span3 +000000012003c8c0 t write_hit_record +000000012005f780 t write_index_pixels +000000012005f6a0 t write_index_span +000000012005f630 t write_monocolor_pixels +000000012005fef0 t write_monocolor_pixels3 +000000012005f4d0 t write_monocolor_span +000000012005fcf0 t write_monocolor_span3 +000000012005f810 t write_monoindex_pixels +000000012005f710 t write_monoindex_span diff --git a/configs/boot/micro_tlblat2.rcS b/configs/boot/micro_tlblat2.rcS new file mode 100644 index 000000000..ab05fd9ff --- /dev/null +++ b/configs/boot/micro_tlblat2.rcS @@ -0,0 +1,3 @@ +/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_2MB 2 8192 +m5 exit + diff --git a/configs/boot/micro_tlblat3.rcS b/configs/boot/micro_tlblat3.rcS new file mode 100644 index 000000000..fd5fd53c1 --- /dev/null +++ b/configs/boot/micro_tlblat3.rcS @@ -0,0 +1,3 @@ +/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_2MB 20 8192 +m5 exit + diff --git a/src/arch/alpha/ev5.cc b/src/arch/alpha/ev5.cc index 796ed07de..7595423c3 100644 --- a/src/arch/alpha/ev5.cc +++ b/src/arch/alpha/ev5.cc @@ -554,6 +554,7 @@ AlphaISA::MiscRegFile::setIpr(int idx, uint64_t val, ThreadContext *tc) return NoFault; } + void AlphaISA::copyIprs(ThreadContext *src, ThreadContext *dest) { @@ -562,6 +563,7 @@ AlphaISA::copyIprs(ThreadContext *src, ThreadContext *dest) } } + /** * Check for special simulator handling of specific PAL calls. * If return value is false, actual PAL call will be suppressed. diff --git a/src/arch/alpha/freebsd/system.cc b/src/arch/alpha/freebsd/system.cc index 8d50e1612..99be25057 100644 --- a/src/arch/alpha/freebsd/system.cc +++ b/src/arch/alpha/freebsd/system.cc @@ -105,6 +105,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(FreebsdAlphaSystem) Param boot_osflags; Param readfile; + Param symbolfile; Param init_param; Param system_type; @@ -124,6 +125,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(FreebsdAlphaSystem) INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot", "a"), INIT_PARAM_DFLT(readfile, "file to read startup script from", ""), + INIT_PARAM_DFLT(symbolfile, "file to read symbols from", ""), INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0), INIT_PARAM_DFLT(system_type, "Type of system we are emulating", 34), INIT_PARAM_DFLT(system_rev, "Revision of system we are emulating", 1<<10) @@ -143,6 +145,7 @@ CREATE_SIM_OBJECT(FreebsdAlphaSystem) p->boot_osflags = boot_osflags; p->init_param = init_param; p->readfile = readfile; + p->symbolfile = symbolfile; p->system_type = system_type; p->system_rev = system_rev; return new FreebsdAlphaSystem(p); diff --git a/src/arch/alpha/isa/decoder.isa b/src/arch/alpha/isa/decoder.isa index 30959c72e..4fc9da3f3 100644 --- a/src/arch/alpha/isa/decoder.isa +++ b/src/arch/alpha/isa/decoder.isa @@ -779,10 +779,10 @@ decode OPCODE default Unknown::unknown() { }}, IsNonSpeculative, IsQuiesce); 0x03: quiesceCycles({{ AlphaPseudo::quiesceCycles(xc->tcBase(), R16); - }}, IsNonSpeculative, IsQuiesce); + }}, IsNonSpeculative, IsQuiesce, IsUnverifiable); 0x04: quiesceTime({{ R0 = AlphaPseudo::quiesceTime(xc->tcBase()); - }}, IsNonSpeculative); + }}, IsNonSpeculative, IsUnverifiable); 0x10: ivlb({{ AlphaPseudo::ivlb(xc->tcBase()); }}, No_OpClass, IsNonSpeculative); @@ -795,6 +795,9 @@ decode OPCODE default Unknown::unknown() { 0x21: m5exit({{ AlphaPseudo::m5exit(xc->tcBase(), R16); }}, No_OpClass, IsNonSpeculative); + 0x31: loadsymbol({{ + AlphaPseudo::loadsymbol(xc->tcBase()); + }}, No_OpClass, IsNonSpeculative); 0x30: initparam({{ Ra = xc->tcBase()->getCpuPtr()->system->init_param; }}); 0x40: resetstats({{ AlphaPseudo::resetstats(xc->tcBase(), R16, R17); diff --git a/src/arch/alpha/isa/mem.isa b/src/arch/alpha/isa/mem.isa index a5dda7fc6..fe69c36a5 100644 --- a/src/arch/alpha/isa/mem.isa +++ b/src/arch/alpha/isa/mem.isa @@ -528,7 +528,7 @@ def template MiscInitiateAcc {{ Fault %(class_name)s::initiateAcc(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const { - panic("Misc instruction does not support split access method!"); + warn("Misc instruction does not support split access method!"); return NoFault; } }}; @@ -539,7 +539,7 @@ def template MiscCompleteAcc {{ %(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const { - panic("Misc instruction does not support split access method!"); + warn("Misc instruction does not support split access method!"); return NoFault; } diff --git a/src/arch/alpha/isa_traits.hh b/src/arch/alpha/isa_traits.hh index 4f439b8df..c59d93238 100644 --- a/src/arch/alpha/isa_traits.hh +++ b/src/arch/alpha/isa_traits.hh @@ -42,190 +42,10 @@ class StaticInstPtr; namespace AlphaISA { - using namespace LittleEndianGuest; - // These enumerate all the registers for dependence tracking. - enum DependenceTags { - // 0..31 are the integer regs 0..31 - // 32..63 are the FP regs 0..31, i.e. use (reg + FP_Base_DepTag) - FP_Base_DepTag = 40, - Ctrl_Base_DepTag = 72, - Fpcr_DepTag = 72, // floating point control register - Uniq_DepTag = 73, - Lock_Flag_DepTag = 74, - Lock_Addr_DepTag = 75, - IPR_Base_DepTag = 76 - }; - - StaticInstPtr decodeInst(ExtMachInst); - - // Alpha Does NOT have a delay slot - #define ISA_HAS_DELAY_SLOT 0 - - const Addr PageShift = 13; - const Addr PageBytes = ULL(1) << PageShift; - const Addr PageMask = ~(PageBytes - 1); - const Addr PageOffset = PageBytes - 1; - -#if FULL_SYSTEM - - //////////////////////////////////////////////////////////////////////// - // - // Translation stuff - // - - const Addr PteShift = 3; - const Addr NPtePageShift = PageShift - PteShift; - const Addr NPtePage = ULL(1) << NPtePageShift; - const Addr PteMask = NPtePage - 1; - - // User Virtual - const Addr USegBase = ULL(0x0); - const Addr USegEnd = ULL(0x000003ffffffffff); - - // Kernel Direct Mapped - const Addr K0SegBase = ULL(0xfffffc0000000000); - const Addr K0SegEnd = ULL(0xfffffdffffffffff); - - // Kernel Virtual - const Addr K1SegBase = ULL(0xfffffe0000000000); - const Addr K1SegEnd = ULL(0xffffffffffffffff); - - // For loading... XXX This maybe could be USegEnd?? --ali - const Addr LoadAddrMask = ULL(0xffffffffff); - - //////////////////////////////////////////////////////////////////////// - // - // Interrupt levels - // - enum InterruptLevels - { - INTLEVEL_SOFTWARE_MIN = 4, - INTLEVEL_SOFTWARE_MAX = 19, - - INTLEVEL_EXTERNAL_MIN = 20, - INTLEVEL_EXTERNAL_MAX = 34, - - INTLEVEL_IRQ0 = 20, - INTLEVEL_IRQ1 = 21, - INTINDEX_ETHERNET = 0, - INTINDEX_SCSI = 1, - INTLEVEL_IRQ2 = 22, - INTLEVEL_IRQ3 = 23, - - INTLEVEL_SERIAL = 33, - - NumInterruptLevels = INTLEVEL_EXTERNAL_MAX - }; - - - // EV5 modes - enum mode_type - { - mode_kernel = 0, // kernel - mode_executive = 1, // executive (unused by unix) - mode_supervisor = 2, // supervisor (unused by unix) - mode_user = 3, // user mode - mode_number // number of modes - }; - -#endif - -#if FULL_SYSTEM - //////////////////////////////////////////////////////////////////////// - // - // Internal Processor Reigsters - // - enum md_ipr_names - { - IPR_ISR = 0x100, // interrupt summary register - IPR_ITB_TAG = 0x101, // ITLB tag register - IPR_ITB_PTE = 0x102, // ITLB page table entry register - IPR_ITB_ASN = 0x103, // ITLB address space register - IPR_ITB_PTE_TEMP = 0x104, // ITLB page table entry temp register - IPR_ITB_IA = 0x105, // ITLB invalidate all register - IPR_ITB_IAP = 0x106, // ITLB invalidate all process register - IPR_ITB_IS = 0x107, // ITLB invalidate select register - IPR_SIRR = 0x108, // software interrupt request register - IPR_ASTRR = 0x109, // asynchronous system trap request register - IPR_ASTER = 0x10a, // asynchronous system trap enable register - IPR_EXC_ADDR = 0x10b, // exception address register - IPR_EXC_SUM = 0x10c, // exception summary register - IPR_EXC_MASK = 0x10d, // exception mask register - IPR_PAL_BASE = 0x10e, // PAL base address register - IPR_ICM = 0x10f, // instruction current mode - IPR_IPLR = 0x110, // interrupt priority level register - IPR_INTID = 0x111, // interrupt ID register - IPR_IFAULT_VA_FORM = 0x112, // formatted faulting virtual addr register - IPR_IVPTBR = 0x113, // virtual page table base register - IPR_HWINT_CLR = 0x115, // H/W interrupt clear register - IPR_SL_XMIT = 0x116, // serial line transmit register - IPR_SL_RCV = 0x117, // serial line receive register - IPR_ICSR = 0x118, // instruction control and status register - IPR_IC_FLUSH = 0x119, // instruction cache flush control - IPR_IC_PERR_STAT = 0x11a, // inst cache parity error status register - IPR_PMCTR = 0x11c, // performance counter register - - // PAL temporary registers... - // register meanings gleaned from osfpal.s source code - IPR_PALtemp0 = 0x140, // local scratch - IPR_PALtemp1 = 0x141, // local scratch - IPR_PALtemp2 = 0x142, // entUna - IPR_PALtemp3 = 0x143, // CPU specific impure area pointer - IPR_PALtemp4 = 0x144, // memory management temp - IPR_PALtemp5 = 0x145, // memory management temp - IPR_PALtemp6 = 0x146, // memory management temp - IPR_PALtemp7 = 0x147, // entIF - IPR_PALtemp8 = 0x148, // intmask - IPR_PALtemp9 = 0x149, // entSys - IPR_PALtemp10 = 0x14a, // ?? - IPR_PALtemp11 = 0x14b, // entInt - IPR_PALtemp12 = 0x14c, // entArith - IPR_PALtemp13 = 0x14d, // reserved for platform specific PAL - IPR_PALtemp14 = 0x14e, // reserved for platform specific PAL - IPR_PALtemp15 = 0x14f, // reserved for platform specific PAL - IPR_PALtemp16 = 0x150, // scratch / whami<7:0> / mces<4:0> - IPR_PALtemp17 = 0x151, // sysval - IPR_PALtemp18 = 0x152, // usp - IPR_PALtemp19 = 0x153, // ksp - IPR_PALtemp20 = 0x154, // PTBR - IPR_PALtemp21 = 0x155, // entMM - IPR_PALtemp22 = 0x156, // kgp - IPR_PALtemp23 = 0x157, // PCBB - - IPR_DTB_ASN = 0x200, // DTLB address space number register - IPR_DTB_CM = 0x201, // DTLB current mode register - IPR_DTB_TAG = 0x202, // DTLB tag register - IPR_DTB_PTE = 0x203, // DTLB page table entry register - IPR_DTB_PTE_TEMP = 0x204, // DTLB page table entry temporary register - - IPR_MM_STAT = 0x205, // data MMU fault status register - IPR_VA = 0x206, // fault virtual address register - IPR_VA_FORM = 0x207, // formatted virtual address register - IPR_MVPTBR = 0x208, // MTU virtual page table base register - IPR_DTB_IAP = 0x209, // DTLB invalidate all process register - IPR_DTB_IA = 0x20a, // DTLB invalidate all register - IPR_DTB_IS = 0x20b, // DTLB invalidate single register - IPR_ALT_MODE = 0x20c, // alternate mode register - IPR_CC = 0x20d, // cycle counter register - IPR_CC_CTL = 0x20e, // cycle counter control register - IPR_MCSR = 0x20f, // MTU control register - - IPR_DC_FLUSH = 0x210, - IPR_DC_PERR_STAT = 0x212, // Dcache parity error status register - IPR_DC_TEST_CTL = 0x213, // Dcache test tag control register - IPR_DC_TEST_TAG = 0x214, // Dcache test tag register - IPR_DC_TEST_TAG_TEMP = 0x215, // Dcache test tag temporary register - IPR_DC_MODE = 0x216, // Dcache mode register - IPR_MAF_MODE = 0x217, // miss address file mode register - - NumInternalProcRegs // number of IPR registers - }; -#else - const int NumInternalProcRegs = 0; -#endif - - // Constants Related to the number of registers + typedef uint32_t MachInst; + typedef uint64_t ExtMachInst; + typedef uint8_t RegIndex; const int NumIntArchRegs = 32; const int NumPALShadowRegs = 8; @@ -233,15 +53,6 @@ namespace AlphaISA // @todo: Figure out what this number really should be. const int NumMiscArchRegs = 32; - const int NumIntRegs = NumIntArchRegs + NumPALShadowRegs; - const int NumFloatRegs = NumFloatArchRegs; - const int NumMiscRegs = NumMiscArchRegs; - - const int TotalNumRegs = NumIntRegs + NumFloatRegs + - NumMiscRegs + NumInternalProcRegs; - - const int TotalDataRegs = NumIntRegs + NumFloatRegs; - // Static instruction parameters const int MaxInstSrcRegs = 3; const int MaxInstDestRegs = 2; @@ -265,23 +76,270 @@ namespace AlphaISA const int SyscallPseudoReturnReg = ArgumentReg4; const int SyscallSuccessReg = 19; + + const int LogVMPageSize = 13; // 8K bytes const int VMPageSize = (1 << LogVMPageSize); const int BranchPredAddrShiftAmt = 2; // instructions are 4-byte aligned - const int MachineBytes = 8; const int WordBytes = 4; const int HalfwordBytes = 2; const int ByteBytes = 1; + + const int NumIntRegs = NumIntArchRegs + NumPALShadowRegs; + const int NumFloatRegs = NumFloatArchRegs; + const int NumMiscRegs = NumMiscArchRegs; + + // These enumerate all the registers for dependence tracking. + enum DependenceTags { + // 0..31 are the integer regs 0..31 + // 32..63 are the FP regs 0..31, i.e. use (reg + FP_Base_DepTag) + FP_Base_DepTag = 40, + Ctrl_Base_DepTag = 72, + Fpcr_DepTag = 72, // floating point control register + Uniq_DepTag = 73, + Lock_Flag_DepTag = 74, + Lock_Addr_DepTag = 75, + IPR_Base_DepTag = 76 + }; + + typedef uint64_t IntReg; + typedef IntReg IntRegFile[NumIntRegs]; + + // floating point register file entry type + typedef union { + uint64_t q; + double d; + } FloatReg; + + typedef union { + uint64_t q[NumFloatRegs]; // integer qword view + double d[NumFloatRegs]; // double-precision floating point view + + void clear() + { bzero(d, sizeof(d)); } + } FloatRegFile; + +extern const Addr PageShift; +extern const Addr PageBytes; +extern const Addr PageMask; +extern const Addr PageOffset; + +// redirected register map, really only used for the full system case. +extern const int reg_redir[NumIntRegs]; + +#if FULL_SYSTEM + + typedef uint64_t InternalProcReg; + +#include "arch/alpha/isa_fullsys_traits.hh" + +#else + const int NumInternalProcRegs = 0; +#endif + + // control register file contents + typedef uint64_t MiscReg; + class MiscRegFile { + protected: + uint64_t fpcr; // floating point condition codes + uint64_t uniq; // process-unique register + bool lock_flag; // lock flag for LL/SC + Addr lock_addr; // lock address for LL/SC + + public: + MiscReg readReg(int misc_reg); + + //These functions should be removed once the simplescalar cpu model + //has been replaced. + int getInstAsid(); + int getDataAsid(); + + MiscReg readRegWithEffect(int misc_reg, Fault &fault, ExecContext *xc); + + Fault setReg(int misc_reg, const MiscReg &val); + + Fault setRegWithEffect(int misc_reg, const MiscReg &val, + ExecContext *xc); + + void serialize(std::ostream &os); + + void unserialize(Checkpoint *cp, const std::string §ion); + + void clear() + { + fpcr = uniq = 0; + lock_flag = 0; + lock_addr = 0; + } + +#if FULL_SYSTEM + protected: + InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs + + private: + MiscReg readIpr(int idx, Fault &fault, ExecContext *xc); + + Fault setIpr(int idx, uint64_t val, ExecContext *xc); + + void copyIprs(ExecContext *xc); +#endif + friend class RegFile; + }; + + const int TotalNumRegs = NumIntRegs + NumFloatRegs + + NumMiscRegs + NumInternalProcRegs; + + const int TotalDataRegs = NumIntRegs + NumFloatRegs; + + typedef union { + IntReg intreg; + FloatReg fpreg; + MiscReg ctrlreg; + } AnyReg; + + struct RegFile { + IntRegFile intRegFile; // (signed) integer register file + FloatRegFile floatRegFile; // floating point register file + MiscRegFile miscRegs; // control register file + Addr pc; // program counter + Addr npc; // next-cycle program counter + Addr nnpc; + +#if FULL_SYSTEM + int intrflag; // interrupt flag + inline int instAsid() + { return EV5::ITB_ASN_ASN(miscRegs.ipr[IPR_ITB_ASN]); } + inline int dataAsid() + { return EV5::DTB_ASN_ASN(miscRegs.ipr[IPR_DTB_ASN]); } +#endif // FULL_SYSTEM + + void serialize(std::ostream &os); + void unserialize(Checkpoint *cp, const std::string §ion); + + void clear() + { + bzero(intRegFile, sizeof(intRegFile)); + floatRegFile.clear(); + miscRegs.clear(); + } + }; + + static inline ExtMachInst makeExtMI(MachInst inst, const uint64_t &pc); + + StaticInstPtr decodeInst(ExtMachInst); + + // Alpha Does NOT have a delay slot + #define ISA_HAS_DELAY_SLOT 0 + // return a no-op instruction... used for instruction fetch faults - // Alpha UNOP (ldq_u r31,0(r0)) - const ExtMachInst NoopMachInst = 0x2ffe0000; + extern const ExtMachInst NoopMachInst; - // redirected register map, really only used for the full system case. - extern const int reg_redir[NumIntRegs]; + enum annotes { + ANNOTE_NONE = 0, + // An impossible number for instruction annotations + ITOUCH_ANNOTE = 0xffffffff, + }; + static inline bool isCallerSaveIntegerRegister(unsigned int reg) { + panic("register classification not implemented"); + return (reg >= 1 && reg <= 8 || reg >= 22 && reg <= 25 || reg == 27); + } + + static inline bool isCalleeSaveIntegerRegister(unsigned int reg) { + panic("register classification not implemented"); + return (reg >= 9 && reg <= 15); + } + + static inline bool isCallerSaveFloatRegister(unsigned int reg) { + panic("register classification not implemented"); + return false; + } + + static inline bool isCalleeSaveFloatRegister(unsigned int reg) { + panic("register classification not implemented"); + return false; + } + + static inline Addr alignAddress(const Addr &addr, + unsigned int nbytes) { + return (addr & ~(nbytes - 1)); + } + + // Instruction address compression hooks + static inline Addr realPCToFetchPC(const Addr &addr) { + return addr; + } + + static inline Addr fetchPCToRealPC(const Addr &addr) { + return addr; + } + + // the size of "fetched" instructions (not necessarily the size + // of real instructions for PISA) + static inline size_t fetchInstSize() { + return sizeof(MachInst); + } + + static inline MachInst makeRegisterCopy(int dest, int src) { + panic("makeRegisterCopy not implemented"); + return 0; + } + + // Machine operations + + void saveMachineReg(AnyReg &savereg, const RegFile ®_file, + int regnum); + + void restoreMachineReg(RegFile ®s, const AnyReg ®, + int regnum); + +#if 0 + static void serializeSpecialRegs(const Serializable::Proxy &proxy, + const RegFile ®s); + + static void unserializeSpecialRegs(const IniFile *db, + const std::string &category, + ConfigNode *node, + RegFile ®s); +#endif + + /** + * Function to insure ISA semantics about 0 registers. + * @param xc The execution context. + */ + template + void zeroRegisters(XC *xc); + + const Addr MaxAddr = (Addr)-1; + +#if !FULL_SYSTEM + static inline void setSyscallReturn(SyscallReturn return_value, RegFile *regs) + { + // check for error condition. Alpha syscall convention is to + // indicate success/failure in reg a3 (r19) and put the + // return value itself in the standard return value reg (v0). + if (return_value.successful()) { + // no error + regs->intRegFile[SyscallSuccessReg] = 0; + regs->intRegFile[ReturnValueReg] = return_value.value(); + } else { + // got an error, return details + regs->intRegFile[SyscallSuccessReg] = (IntReg) -1; + regs->intRegFile[ReturnValueReg] = -return_value.value(); + } + } +#endif + + void copyRegs(ExecContext *src, ExecContext *dest); + + void copyMiscRegs(ExecContext *src, ExecContext *dest); + +#if FULL_SYSTEM + void copyIprs(ExecContext *src, ExecContext *dest); +#endif }; #endif // __ARCH_ALPHA_ISA_TRAITS_HH__ diff --git a/src/arch/alpha/linux/system.cc b/src/arch/alpha/linux/system.cc index ef4e18cb5..7cf234eeb 100644 --- a/src/arch/alpha/linux/system.cc +++ b/src/arch/alpha/linux/system.cc @@ -199,6 +199,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(LinuxAlphaSystem) Param boot_osflags; Param readfile; + Param symbolfile; Param init_param; Param system_type; @@ -218,6 +219,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(LinuxAlphaSystem) INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot", "a"), INIT_PARAM_DFLT(readfile, "file to read startup script from", ""), + INIT_PARAM_DFLT(symbolfile, "file to read symbols from", ""), INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0), INIT_PARAM_DFLT(system_type, "Type of system we are emulating", 34), INIT_PARAM_DFLT(system_rev, "Revision of system we are emulating", 1<<10) @@ -237,6 +239,7 @@ CREATE_SIM_OBJECT(LinuxAlphaSystem) p->boot_osflags = boot_osflags; p->init_param = init_param; p->readfile = readfile; + p->symbolfile = symbolfile; p->system_type = system_type; p->system_rev = system_rev; return new LinuxAlphaSystem(p); diff --git a/src/arch/alpha/system.cc b/src/arch/alpha/system.cc index a7e615531..5597eaedc 100644 --- a/src/arch/alpha/system.cc +++ b/src/arch/alpha/system.cc @@ -229,6 +229,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(AlphaSystem) Param boot_osflags; Param readfile; + Param symbolfile; Param init_param; Param system_type; @@ -248,6 +249,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(AlphaSystem) INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot", "a"), INIT_PARAM_DFLT(readfile, "file to read startup script from", ""), + INIT_PARAM_DFLT(symbolfile, "file to read symbols from", ""), INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0), INIT_PARAM_DFLT(system_type, "Type of system we are emulating", 34), INIT_PARAM_DFLT(system_rev, "Revision of system we are emulating", 1<<10) @@ -267,6 +269,7 @@ CREATE_SIM_OBJECT(AlphaSystem) p->boot_osflags = boot_osflags; p->init_param = init_param; p->readfile = readfile; + p->symbolfile = symbolfile; p->system_type = system_type; p->system_rev = system_rev; return new AlphaSystem(p); diff --git a/src/arch/alpha/tru64/system.cc b/src/arch/alpha/tru64/system.cc index 3ef1e4d3c..00918bda4 100644 --- a/src/arch/alpha/tru64/system.cc +++ b/src/arch/alpha/tru64/system.cc @@ -103,6 +103,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(Tru64AlphaSystem) Param boot_osflags; Param readfile; + Param symbolfile; Param init_param; Param system_type; @@ -122,6 +123,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(Tru64AlphaSystem) INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot", "a"), INIT_PARAM_DFLT(readfile, "file to read startup script from", ""), + INIT_PARAM_DFLT(symbolfile, "file to read symbols from", ""), INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0), INIT_PARAM_DFLT(system_type, "Type of system we are emulating", 12), INIT_PARAM_DFLT(system_rev, "Revision of system we are emulating", 2<<1) @@ -141,6 +143,7 @@ CREATE_SIM_OBJECT(Tru64AlphaSystem) p->boot_osflags = boot_osflags; p->init_param = init_param; p->readfile = readfile; + p->symbolfile = symbolfile; p->system_type = system_type; p->system_rev = system_rev; diff --git a/src/cpu/base.cc b/src/cpu/base.cc index ce440aeff..f00dad7d6 100644 --- a/src/cpu/base.cc +++ b/src/cpu/base.cc @@ -48,6 +48,9 @@ #include "base/trace.hh" +// Hack +#include "sim/stat_control.hh" + using namespace std; vector BaseCPU::cpuList; @@ -57,6 +60,30 @@ vector BaseCPU::cpuList; // been initialized int maxThreadsPerCPU = 1; +void +CPUProgressEvent::process() +{ + Counter temp = cpu->totalInstructions(); +#ifndef NDEBUG + double ipc = double(temp - lastNumInst) / (interval / cpu->cycles(1)); + + DPRINTFN("%s progress event, instructions committed: %lli, IPC: %0.8d\n", + cpu->name(), temp - lastNumInst, ipc); + ipc = 0.0; +#else + cprintf("%lli: %s progress event, instructions committed: %lli\n", + curTick, cpu->name(), temp - lastNumInst); +#endif + lastNumInst = temp; + schedule(curTick + interval); +} + +const char * +CPUProgressEvent::description() +{ + return "CPU Progress event"; +} + #if FULL_SYSTEM BaseCPU::BaseCPU(Params *p) : MemObject(p->name), clock(p->clock), checkInterrupts(true), @@ -67,6 +94,7 @@ BaseCPU::BaseCPU(Params *p) number_of_threads(p->numberOfThreads), system(p->system) #endif { +// currentTick = curTick; DPRINTF(FullCPU, "BaseCPU: Creating object, mem address %#x.\n", this); // add self to global list of CPUs @@ -128,6 +156,12 @@ BaseCPU::BaseCPU(Params *p) p->max_loads_all_threads, *counter); } + if (p->stats_reset_inst != 0) { + Stats::SetupEvent(Stats::Reset, p->stats_reset_inst, 0, comInstEventQueue[0]); + cprintf("Stats reset event scheduled for %lli insts\n", + p->stats_reset_inst); + } + #if FULL_SYSTEM memset(interrupts, 0, sizeof(interrupts)); intstatus = 0; @@ -153,7 +187,6 @@ BaseCPU::BaseCPU(Params *p) if (params->profile) profileEvent = new ProfileEvent(this, params->profile); #endif - } BaseCPU::Params::Params() @@ -188,6 +221,11 @@ BaseCPU::startup() if (!params->deferRegistration && profileEvent) profileEvent->schedule(curTick); #endif + + if (params->progress_interval) { + new CPUProgressEvent(&mainEventQueue, params->progress_interval, + this); + } } @@ -238,7 +276,11 @@ BaseCPU::registerThreadContexts() void BaseCPU::switchOut() { - panic("This CPU doesn't support sampling!"); +// panic("This CPU doesn't support sampling!"); +#if FULL_SYSTEM + if (profileEvent && profileEvent->scheduled()) + profileEvent->deschedule(); +#endif } void @@ -261,18 +303,22 @@ BaseCPU::takeOverFrom(BaseCPU *oldCPU) assert(newTC->getProcessPtr() == oldTC->getProcessPtr()); newTC->getProcessPtr()->replaceThreadContext(newTC, newTC->readCpuId()); #endif + +// TheISA::compareXCs(oldXC, newXC); } #if FULL_SYSTEM for (int i = 0; i < TheISA::NumInterruptLevels; ++i) interrupts[i] = oldCPU->interrupts[i]; intstatus = oldCPU->intstatus; + checkInterrupts = oldCPU->checkInterrupts; for (int i = 0; i < threadContexts.size(); ++i) threadContexts[i]->profileClear(); - if (profileEvent) - profileEvent->schedule(curTick); + // The Sampler must take care of this! +// if (profileEvent) +// profileEvent->schedule(curTick); #endif } diff --git a/src/cpu/base.hh b/src/cpu/base.hh index 2be6e4e81..2a3fd9b56 100644 --- a/src/cpu/base.hh +++ b/src/cpu/base.hh @@ -46,6 +46,23 @@ class ThreadContext; class System; class Port; +class CPUProgressEvent : public Event +{ + protected: + Tick interval; + Counter lastNumInst; + BaseCPU *cpu; + + public: + CPUProgressEvent(EventQueue *q, Tick ival, BaseCPU *_cpu) + : Event(q, Event::Stat_Event_Pri), interval(ival), lastNumInst(0), cpu(_cpu) + { schedule(curTick + interval); } + + void process(); + + virtual const char *description(); +}; + class BaseCPU : public MemObject { protected: @@ -53,6 +70,7 @@ class BaseCPU : public MemObject Tick clock; public: +// Tick currentTick; inline Tick frequency() const { return Clock::Frequency / clock; } inline Tick cycles(int numCycles) const { return clock * numCycles; } inline Tick curCycle() const { return curTick / clock; } @@ -120,6 +138,7 @@ class BaseCPU : public MemObject Counter max_insts_all_threads; Counter max_loads_any_thread; Counter max_loads_all_threads; + Counter stats_reset_inst; Tick clock; bool functionTrace; Tick functionTraceStart; @@ -128,6 +147,7 @@ class BaseCPU : public MemObject int cpu_id; Tick profile; #endif + Tick progress_interval; BaseCPU *checker; Params(); diff --git a/src/cpu/base_dyn_inst.hh b/src/cpu/base_dyn_inst.hh index 3158aa9cf..926bfcbb2 100644 --- a/src/cpu/base_dyn_inst.hh +++ b/src/cpu/base_dyn_inst.hh @@ -197,7 +197,7 @@ class BaseDynInst : public FastAlloc, public RefCounted union Result { uint64_t integer; - float fp; +// float fp; double dbl; }; @@ -394,7 +394,7 @@ class BaseDynInst : public FastAlloc, public RefCounted uint64_t readIntResult() { return instResult.integer; } /** Returns the result of a floating point instruction. */ - float readFloatResult() { return instResult.fp; } + float readFloatResult() { return (float)instResult.dbl; } /** Returns the result of a floating point (double) instruction. */ double readDoubleResult() { return instResult.dbl; } @@ -419,7 +419,8 @@ class BaseDynInst : public FastAlloc, public RefCounted /** Records an fp register being set to a value. */ void setFloatReg(const StaticInst *si, int idx, FloatReg val) { - instResult.fp = val; +// instResult.fp = val; + instResult.dbl = (double)val; } /** Records an fp register being set to an integer value. */ diff --git a/src/cpu/checker/cpu.hh b/src/cpu/checker/cpu.hh index 6d6ae1e0a..737b4b5d4 100644 --- a/src/cpu/checker/cpu.hh +++ b/src/cpu/checker/cpu.hh @@ -102,6 +102,7 @@ class CheckerCPU : public BaseCPU Process *process; #endif bool exitOnError; + bool updateOnError; bool warnOnlyOnLoadError; }; @@ -148,7 +149,7 @@ class CheckerCPU : public BaseCPU union Result { uint64_t integer; - float fp; +// float fp; double dbl; }; @@ -269,7 +270,7 @@ class CheckerCPU : public BaseCPU { int reg_idx = si->destRegIdx(idx) - TheISA::FP_Base_DepTag; thread->setFloatReg(reg_idx, val); - result.fp = val; + result.dbl = (double)val; } void setFloatRegBits(const StaticInst *si, int idx, FloatRegBits val, @@ -318,7 +319,7 @@ class CheckerCPU : public BaseCPU return thread->setMiscRegWithEffect(misc_reg, val); } - void recordPCChange(uint64_t val) { changedPC = true; } + void recordPCChange(uint64_t val) { changedPC = true; newPC = val; } void recordNextPCChange(uint64_t val) { changedNextPC = true; } bool translateInstReq(Request *req); @@ -360,6 +361,7 @@ class CheckerCPU : public BaseCPU uint64_t newPC; bool changedNextPC; bool exitOnError; + bool updateOnError; bool warnOnlyOnLoadError; InstSeqNum youngestSN; @@ -376,7 +378,7 @@ class Checker : public CheckerCPU { public: Checker(Params *p) - : CheckerCPU(p) + : CheckerCPU(p), updateThisCycle(false), unverifiedInst(NULL) { } void switchOut(); @@ -393,12 +395,19 @@ class Checker : public CheckerCPU private: void handleError(DynInstPtr &inst) { - if (exitOnError) + if (exitOnError) { dumpAndExit(inst); + } else if (updateOnError) { + updateThisCycle = true; + } } void dumpAndExit(DynInstPtr &inst); + bool updateThisCycle; + + DynInstPtr unverifiedInst; + std::list instList; typedef typename std::list::iterator InstListIt; void dumpInsts(); diff --git a/src/cpu/checker/cpu_impl.hh b/src/cpu/checker/cpu_impl.hh index 81f97726c..3bb81c4b9 100644 --- a/src/cpu/checker/cpu_impl.hh +++ b/src/cpu/checker/cpu_impl.hh @@ -94,6 +94,8 @@ Checker::verify(DynInstPtr &completed_inst) } } + unverifiedInst = inst; + // Try to check all instructions that are completed, ending if we // run out of instructions to check or if an instruction is not // yet completed. @@ -171,7 +173,7 @@ Checker::verify(DynInstPtr &completed_inst) thread->setPC(thread->readNextPC()); thread->setNextPC(thread->readNextPC() + sizeof(MachInst)); - return; + break; } else { // The instruction is carrying an ITB fault. Handle // the fault and see if our results match the CPU on @@ -220,7 +222,8 @@ Checker::verify(DynInstPtr &completed_inst) thread->funcExeInst++; - fault = curStaticInst->execute(this, NULL); + if (!inst->isUnverifiable()) + fault = curStaticInst->execute(this, NULL); // Checks to make sure instrution results are correct. validateExecution(inst); @@ -289,6 +292,7 @@ Checker::verify(DynInstPtr &completed_inst) break; } } + unverifiedInst = NULL; } template @@ -395,6 +399,23 @@ template void Checker::validateState() { + if (updateThisCycle) { + warn("%lli: Instruction PC %#x results didn't match up, copying all " + "registers from main CPU", curTick, unverifiedInst->readPC()); + // Heavy-weight copying of all registers + cpuXC->copyArchRegs(unverifiedInst->xcBase()); + // Also advance the PC. Hopefully no PC-based events happened. +#if THE_ISA != MIPS_ISA + // go to the next instruction + cpuXC->setPC(cpuXC->readNextPC()); + cpuXC->setNextPC(cpuXC->readNextPC() + sizeof(MachInst)); +#else + // go to the next instruction + cpuXC->setPC(cpuXC->readNextPC()); + cpuXC->setNextPC(cpuXC->readNextNPC()); + cpuXC->setNextNPC(cpuXC->readNextNPC() + sizeof(MachInst)); +#endif + updateThisCycle = false; } template diff --git a/src/cpu/o3/alpha/cpu_builder.cc b/src/cpu/o3/alpha/cpu_builder.cc index 5e767655d..fbf1f342c 100644 --- a/src/cpu/o3/alpha/cpu_builder.cc +++ b/src/cpu/o3/alpha/cpu_builder.cc @@ -56,6 +56,7 @@ SimObjectParam system; Param cpu_id; SimObjectParam itb; SimObjectParam dtb; +Param profile; #else SimObjectVectorParam workload; #endif // FULL_SYSTEM @@ -68,6 +69,8 @@ Param max_insts_any_thread; Param max_insts_all_threads; Param max_loads_any_thread; Param max_loads_all_threads; +Param stats_reset_inst; +Param progress_interval; Param cachePorts; @@ -162,6 +165,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivO3CPU) INIT_PARAM(cpu_id, "processor ID"), INIT_PARAM(itb, "Instruction translation buffer"), INIT_PARAM(dtb, "Data translation buffer"), + INIT_PARAM(profile, ""), #else INIT_PARAM(workload, "Processes to run"), #endif // FULL_SYSTEM @@ -184,6 +188,10 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivO3CPU) "Terminate when all threads have reached this load" "count", 0), + INIT_PARAM_DFLT(stats_reset_inst, + "blah", + 0), + INIT_PARAM_DFLT(progress_interval, "Progress interval", 0), INIT_PARAM_DFLT(cachePorts, "Cache Ports", 200), @@ -305,6 +313,7 @@ CREATE_SIM_OBJECT(DerivO3CPU) params->cpu_id = cpu_id; params->itb = itb; params->dtb = dtb; + params->profile = profile; #else params->workload = workload; #endif // FULL_SYSTEM @@ -317,6 +326,8 @@ CREATE_SIM_OBJECT(DerivO3CPU) params->max_insts_all_threads = max_insts_all_threads; params->max_loads_any_thread = max_loads_any_thread; params->max_loads_all_threads = max_loads_all_threads; + params->stats_reset_inst = stats_reset_inst; + params->progress_interval = progress_interval; // // Caches diff --git a/src/cpu/o3/checker_builder.cc b/src/cpu/o3/checker_builder.cc index 782d963b0..ad83ec57a 100644 --- a/src/cpu/o3/checker_builder.cc +++ b/src/cpu/o3/checker_builder.cc @@ -64,6 +64,8 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(O3Checker) Param max_insts_all_threads; Param max_loads_any_thread; Param max_loads_all_threads; + Param stats_reset_inst; + Param progress_interval; #if FULL_SYSTEM SimObjectParam itb; @@ -78,6 +80,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(O3Checker) Param defer_registration; Param exitOnError; + Param updateOnError; Param warnOnlyOnLoadError; Param function_trace; Param function_trace_start; @@ -94,6 +97,9 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(O3Checker) "terminate when any thread reaches this load count"), INIT_PARAM(max_loads_all_threads, "terminate when all threads have reached this load count"), + INIT_PARAM(stats_reset_inst, + "blah"), + INIT_PARAM_DFLT(progress_interval, "CPU Progress Interval", 0), #if FULL_SYSTEM INIT_PARAM(itb, "Instruction TLB"), @@ -109,6 +115,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(O3Checker) INIT_PARAM(defer_registration, "defer system registration (for sampling)"), INIT_PARAM(exitOnError, "exit on error"), + INIT_PARAM(updateOnError, "Update the checker with the main CPU's state on error"), INIT_PARAM_DFLT(warnOnlyOnLoadError, "warn, but don't exit, if a load " "result errors", false), INIT_PARAM(function_trace, "Enable function trace"), @@ -126,7 +133,9 @@ CREATE_SIM_OBJECT(O3Checker) params->max_insts_all_threads = 0; params->max_loads_any_thread = 0; params->max_loads_all_threads = 0; + params->stats_reset_inst = 0; params->exitOnError = exitOnError; + params->updateOnError = updateOnError; params->warnOnlyOnLoadError = warnOnlyOnLoadError; params->deferRegistration = defer_registration; params->functionTrace = function_trace; @@ -139,6 +148,10 @@ CREATE_SIM_OBJECT(O3Checker) temp = max_insts_all_threads; temp = max_loads_any_thread; temp = max_loads_all_threads; + temp = stats_reset_inst; + Tick temp2 = progress_interval; + params->progress_interval = 0; + temp2++; #if FULL_SYSTEM params->itb = itb; diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh index 34f487e2c..6ae01ae67 100644 --- a/src/cpu/o3/commit_impl.hh +++ b/src/cpu/o3/commit_impl.hh @@ -1083,12 +1083,26 @@ DefaultCommit::commitHead(DynInstPtr &head_inst, unsigned inst_num) // Generate trap squash event. generateTrapEvent(tid); - +// warn("%lli fault (%d) handled @ PC %08p", curTick, inst_fault->name(), head_inst->readPC()); return false; } updateComInstStats(head_inst); +#if FULL_SYSTEM + if (thread[tid]->profile) { +// bool usermode = +// (cpu->readMiscReg(AlphaISA::IPR_DTB_CM, tid) & 0x18) != 0; +// thread[tid]->profilePC = usermode ? 1 : head_inst->readPC(); + thread[tid]->profilePC = head_inst->readPC(); + ProfileNode *node = thread[tid]->profile->consume(thread[tid]->getXCProxy(), + head_inst->staticInst); + + if (node) + thread[tid]->profileNode = node; + } +#endif + if (head_inst->traceData) { head_inst->traceData->setFetchSeq(head_inst->seqNum); head_inst->traceData->setCPSeq(thread[tid]->numInst); @@ -1102,6 +1116,9 @@ DefaultCommit::commitHead(DynInstPtr &head_inst, unsigned inst_num) head_inst->renamedDestRegIdx(i)); } + if (head_inst->isCopy()) + panic("Should not commit any copy instructions!"); + // Finally clear the head ROB entry. rob->retireHead(tid); diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc index 19ab7f4c5..4279df6f7 100644 --- a/src/cpu/o3/cpu.cc +++ b/src/cpu/o3/cpu.cc @@ -33,6 +33,7 @@ #include "config/use_checker.hh" #if FULL_SYSTEM +#include "cpu/quiesce_event.hh" #include "sim/system.hh" #else #include "sim/process.hh" @@ -793,6 +794,8 @@ template unsigned int FullO3CPU::drain(Event *drain_event) { + DPRINTF(O3CPU, "Switching out\n"); + BaseCPU::switchOut(_sampler); drainCount = 0; fetch.drain(); decode.drain(); @@ -863,6 +866,7 @@ FullO3CPU::switchOut() { fetch.switchOut(); rename.switchOut(); + iew.switchOut(); commit.switchOut(); instList.clear(); while (!removeList.empty()) { @@ -930,6 +934,45 @@ FullO3CPU::takeOverFrom(BaseCPU *oldCPU) tickEvent.schedule(curTick); } +template +void +FullO3CPU::serialize(std::ostream &os) +{ + BaseCPU::serialize(os); + nameOut(os, csprintf("%s.tickEvent", name())); + tickEvent.serialize(os); + + // Use SimpleThread's ability to checkpoint to make it easier to + // write out the registers. Also make this static so it doesn't + // get instantiated multiple times (causes a panic in statistics). + static CPUExecContext temp; + + for (int i = 0; i < thread.size(); i++) { + nameOut(os, csprintf("%s.xc.%i", name(), i)); + temp.copyXC(thread[i]->getXCProxy()); + temp.serialize(os); + } +} + +template +void +FullO3CPU::unserialize(Checkpoint *cp, const std::string §ion) +{ + BaseCPU::unserialize(cp, section); + tickEvent.unserialize(cp, csprintf("%s.tickEvent", section)); + + // Use SimpleThread's ability to checkpoint to make it easier to + // read in the registers. Also make this static so it doesn't + // get instantiated multiple times (causes a panic in statistics). + static CPUExecContext temp; + + for (int i = 0; i < thread.size(); i++) { + temp.copyXC(thread[i]->getXCProxy()); + temp.unserialize(cp, csprintf("%s.xc.%i", section, i)); + thread[i]->getXCProxy()->copyArchRegs(temp.getProxy()); + } +} + template uint64_t FullO3CPU::readIntReg(int reg_idx) diff --git a/src/cpu/o3/fetch_impl.hh b/src/cpu/o3/fetch_impl.hh index 1e080181c..2d447bfe5 100644 --- a/src/cpu/o3/fetch_impl.hh +++ b/src/cpu/o3/fetch_impl.hh @@ -442,6 +442,7 @@ DefaultFetch::takeOverFrom() wroteToTimeBuffer = false; _status = Inactive; switchedOut = false; + interruptPending = false; branchPred.takeOverFrom(); } @@ -563,7 +564,7 @@ DefaultFetch::fetchCacheLine(Addr fetch_PC, Fault &ret_fault, unsigned tid unsigned flags = 0; #endif // FULL_SYSTEM - if (cacheBlocked || (interruptPending && flags == 0)) { + if (cacheBlocked || isSwitchedOut() || (interruptPending && flags == 0)) { // Hold off fetch from getting new instructions when: // Cache is blocked, or // while an interrupt is pending and we're not in PAL mode, or @@ -1152,8 +1153,8 @@ DefaultFetch::fetch(bool &status_change) fetch_PC = next_PC; if (instruction->isQuiesce()) { - warn("cycle %lli: Quiesce instruction encountered, halting fetch!", - curTick); +// warn("%lli: Quiesce instruction encountered, halting fetch!", +// curTick); fetchStatus[tid] = QuiescePending; ++numInst; status_change = true; @@ -1268,7 +1269,7 @@ DefaultFetch::fetch(bool &status_change) fetchStatus[tid] = TrapPending; status_change = true; - warn("cycle %lli: fault (%s) detected @ PC %08p", curTick, fault->name(), PC[tid]); +// warn("%lli fault (%d) detected @ PC %08p", curTick, fault, PC[tid]); #else // !FULL_SYSTEM warn("cycle %lli: fault (%s) detected @ PC %08p", curTick, fault->name(), PC[tid]); #endif // FULL_SYSTEM diff --git a/src/cpu/o3/iew.hh b/src/cpu/o3/iew.hh index 76fa008ee..a400c9fa8 100644 --- a/src/cpu/o3/iew.hh +++ b/src/cpu/o3/iew.hh @@ -216,6 +216,7 @@ class DefaultIEW if (++wbOutstanding == wbMax) ableToIssue = false; DPRINTF(IEW, "wbOutstanding: %i\n", wbOutstanding); + assert(wbOutstanding <= wbMax); #ifdef DEBUG wbList.insert(sn); #endif @@ -226,6 +227,7 @@ class DefaultIEW if (wbOutstanding-- == wbMax) ableToIssue = true; DPRINTF(IEW, "wbOutstanding: %i\n", wbOutstanding); + assert(wbOutstanding >= 0); #ifdef DEBUG assert(wbList.find(sn) != wbList.end()); wbList.erase(sn); @@ -450,7 +452,9 @@ class DefaultIEW unsigned wbCycle; /** Number of instructions in flight that will writeback. */ - unsigned wbOutstanding; + + /** Number of instructions in flight that will writeback. */ + int wbOutstanding; /** Writeback width. */ unsigned wbWidth; @@ -507,6 +511,8 @@ class DefaultIEW Stats::Scalar<> iewExecutedInsts; /** Stat for total number of executed load instructions. */ Stats::Vector<> iewExecLoadInsts; + /** Stat for total number of executed store instructions. */ +// Stats::Scalar<> iewExecStoreInsts; /** Stat for total number of squashed instructions skipped at execute. */ Stats::Scalar<> iewExecSquashedInsts; /** Number of executed software prefetches. */ diff --git a/src/cpu/o3/iew_impl.hh b/src/cpu/o3/iew_impl.hh index e9b24a6d4..c82f6dd21 100644 --- a/src/cpu/o3/iew_impl.hh +++ b/src/cpu/o3/iew_impl.hh @@ -162,17 +162,17 @@ DefaultIEW::regStats() branchMispredicts = predictedTakenIncorrect + predictedNotTakenIncorrect; iewExecutedInsts - .name(name() + ".EXEC:insts") + .name(name() + ".iewExecutedInsts") .desc("Number of executed instructions"); iewExecLoadInsts .init(cpu->number_of_threads) - .name(name() + ".EXEC:loads") + .name(name() + ".iewExecLoadInsts") .desc("Number of load instructions executed") .flags(total); iewExecSquashedInsts - .name(name() + ".EXEC:squashedInsts") + .name(name() + ".iewExecSquashedInsts") .desc("Number of squashed instructions skipped in execute"); iewExecutedSwp @@ -372,6 +372,8 @@ DefaultIEW::switchOut() { // Clear any state. switchedOut = true; + assert(insts[0].empty()); + assert(skidBuffer[0].empty()); instQueue.switchOut(); ldstQueue.switchOut(); @@ -410,7 +412,6 @@ DefaultIEW::takeOverFrom() updateLSQNextCycle = false; - // @todo: Fix hardcoded number for (int i = 0; i < issueToExecQueue.getSize(); ++i) { issueToExecQueue.advance(); } @@ -611,9 +612,11 @@ DefaultIEW::instToCommit(DynInstPtr &inst) wbNumInst = 0; } - assert((wbCycle * wbWidth + wbNumInst) < wbMax); + assert((wbCycle * wbWidth + wbNumInst) <= wbMax); } + DPRINTF(IEW, "Current wb cycle: %i, width: %i, numInst: %i\nwbActual:%i\n", + wbCycle, wbWidth, wbNumInst, wbCycle * wbWidth + wbNumInst); // Add finished instruction to queue to commit. (*iewQueue)[wbCycle].insts[wbNumInst] = inst; (*iewQueue)[wbCycle].size++; @@ -901,6 +904,22 @@ DefaultIEW::emptyRenameInsts(unsigned tid) } } +template +void +DefaultIEW::emptyRenameInsts(unsigned tid) +{ + while (!insts[tid].empty()) { + if (insts[tid].front()->isLoad() || + insts[tid].front()->isStore() ) { + toRename->iewInfo[tid].dispatchedToLSQ++; + } + + toRename->iewInfo[tid].dispatched++; + + insts[tid].pop(); + } +} + template void DefaultIEW::wakeCPU() @@ -1273,13 +1292,23 @@ DefaultIEW::executeInsts() // event adds the instruction to the queue to commit fault = ldstQueue.executeLoad(inst); } else if (inst->isStore()) { - ldstQueue.executeStore(inst); + fault = ldstQueue.executeStore(inst); // If the store had a fault then it may not have a mem req - if (inst->req && !(inst->req->getFlags() & LOCKED)) { + if (!inst->isStoreConditional() && fault == NoFault) { inst->setExecuted(); instToCommit(inst); + } else if (fault != NoFault) { + // If the instruction faulted, then we need to send it along to commit + // without the instruction completing. + + // Send this instruction to commit, also make sure iew stage + // realizes there is activity. + inst->setExecuted(); + + instToCommit(inst); + activityThisCycle(); } // Store conditionals will mark themselves as @@ -1404,7 +1433,7 @@ DefaultIEW::writebackInsts() // E.g. Uncached loads have not actually executed when they // are first sent to commit. Instead commit must tell the LSQ // when it's ready to execute the uncached load. - if (!inst->isSquashed() && inst->isExecuted()) { + if (!inst->isSquashed() && inst->isExecuted() && inst->getFault() == NoFault) { int dependents = instQueue.wakeDependents(inst); for (int i = 0; i < inst->numDestRegs(); i++) { diff --git a/src/cpu/o3/inst_queue.hh b/src/cpu/o3/inst_queue.hh index d745faf7b..3dd4dc658 100644 --- a/src/cpu/o3/inst_queue.hh +++ b/src/cpu/o3/inst_queue.hh @@ -479,13 +479,13 @@ class InstructionQueue /** Distribution of number of instructions in the queue. * @todo: Need to create struct to track the entry time for each * instruction. */ - Stats::VectorDistribution<> queueResDist; +// Stats::VectorDistribution<> queueResDist; /** Distribution of the number of instructions issued. */ Stats::Distribution<> numIssuedDist; /** Distribution of the cycles it takes to issue an instruction. * @todo: Need to create struct to track the ready time for each * instruction. */ - Stats::VectorDistribution<> issueDelayDist; +// Stats::VectorDistribution<> issueDelayDist; /** Number of times an instruction could not be issued because a * FU was busy. diff --git a/src/cpu/o3/inst_queue_impl.hh b/src/cpu/o3/inst_queue_impl.hh index 47634f645..6edb528a9 100644 --- a/src/cpu/o3/inst_queue_impl.hh +++ b/src/cpu/o3/inst_queue_impl.hh @@ -230,7 +230,7 @@ InstructionQueue::regStats() .name(name() + ".iqSquashedNonSpecRemoved") .desc("Number of squashed non-spec instructions that were removed") .prereq(iqSquashedNonSpecRemoved); - +/* queueResDist .init(Num_OpClasses, 0, 99, 2) .name(name() + ".IQ:residence:") @@ -240,6 +240,7 @@ InstructionQueue::regStats() for (int i = 0; i < Num_OpClasses; ++i) { queueResDist.subname(i, opClassStrings[i]); } +*/ numIssuedDist .init(0,totalWidth,1) .name(name() + ".ISSUE:issued_per_cycle") @@ -268,7 +269,7 @@ InstructionQueue::regStats() // // How long did instructions for a particular FU type wait prior to issue // - +/* issueDelayDist .init(Num_OpClasses,0,99,2) .name(name() + ".ISSUE:") @@ -281,7 +282,7 @@ InstructionQueue::regStats() subname << opClassStrings[i] << "_delay"; issueDelayDist.subname(i, subname.str()); } - +*/ issueRate .name(name() + ".ISSUE:rate") .desc("Inst issue rate") @@ -385,8 +386,16 @@ template void InstructionQueue::switchOut() { +/* + if (!instList[0].empty() || (numEntries != freeEntries) || + !readyInsts[0].empty() || !nonSpecInsts.empty() || !listOrder.empty()) { + dumpInsts(); +// assert(0); + } +*/ resetState(); dependGraph.reset(); + instsToExecute.clear(); switchedOut = true; for (int i = 0; i < numThreads; ++i) { memDepUnit[i].switchOut(); @@ -642,9 +651,12 @@ template void InstructionQueue::processFUCompletion(DynInstPtr &inst, int fu_idx) { + DPRINTF(IQ, "Processing FU completion [sn:%lli]\n", inst->seqNum); // The CPU could have been sleeping until this op completed (*extremely* // long latency op). Wake it if it was. This may be overkill. if (isSwitchedOut()) { + DPRINTF(IQ, "FU completion not processed, IQ is switched out [sn:%lli]\n", + inst->seqNum); return; } @@ -1036,6 +1048,10 @@ InstructionQueue::doSquash(unsigned tid) (squashed_inst->isMemRef() && !squashed_inst->memOpDone)) { + DPRINTF(IQ, "[tid:%i]: Instruction [sn:%lli] PC %#x " + "squashed.\n", + tid, squashed_inst->seqNum, squashed_inst->readPC()); + // Remove the instruction from the dependency list. if (!squashed_inst->isNonSpeculative() && !squashed_inst->isStoreConditional() && @@ -1066,7 +1082,7 @@ InstructionQueue::doSquash(unsigned tid) ++iqSquashedOperandsExamined; } - } else { + } else if (!squashed_inst->isStoreConditional() || !squashed_inst->isCompleted()) { NonSpecMapIt ns_inst_it = nonSpecInsts.find(squashed_inst->seqNum); assert(ns_inst_it != nonSpecInsts.end()); @@ -1093,10 +1109,6 @@ InstructionQueue::doSquash(unsigned tid) count[squashed_inst->threadNumber]--; ++freeEntries; - - DPRINTF(IQ, "[tid:%i]: Instruction [sn:%lli] PC %#x " - "squashed.\n", - tid, squashed_inst->seqNum, squashed_inst->readPC()); } instList[tid].erase(squash_it--); diff --git a/src/cpu/o3/lsq_impl.hh b/src/cpu/o3/lsq_impl.hh index 2bbab71f0..a1ac5adb8 100644 --- a/src/cpu/o3/lsq_impl.hh +++ b/src/cpu/o3/lsq_impl.hh @@ -165,6 +165,16 @@ LSQ::regStats() } } +template +void +LSQ::regStats() +{ + //Initialize LSQs + for (int tid=0; tid < numThreads; tid++) { + thread[tid].regStats(); + } +} + template void LSQ::setActiveThreads(std::list *at_ptr) diff --git a/src/cpu/o3/lsq_unit.hh b/src/cpu/o3/lsq_unit.hh index 1358a3699..8537e9dd7 100644 --- a/src/cpu/o3/lsq_unit.hh +++ b/src/cpu/o3/lsq_unit.hh @@ -407,20 +407,9 @@ class LSQUnit { // Will also need how many read/write ports the Dcache has. Or keep track // of that in stage that is one level up, and only call executeLoad/Store // the appropriate number of times. - /** Total number of loads forwaded from LSQ stores. */ Stats::Scalar<> lsqForwLoads; - /** Total number of loads ignored due to invalid addresses. */ - Stats::Scalar<> invAddrLoads; - - /** Total number of squashed loads. */ - Stats::Scalar<> lsqSquashedLoads; - - /** Total number of responses from the memory system that are - * ignored due to the instruction already being squashed. */ - Stats::Scalar<> lsqIgnoredResponses; - /** Total number of squashed stores. */ Stats::Scalar<> lsqSquashedStores; diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh index fa716c712..2922b81bd 100644 --- a/src/cpu/o3/lsq_unit_impl.hh +++ b/src/cpu/o3/lsq_unit_impl.hh @@ -180,6 +180,10 @@ LSQUnit::regStats() .name(name() + ".ignoredResponses") .desc("Number of memory responses ignored because the instruction is squashed"); + lsqMemOrderViolation + .name(name() + ".memOrderViolation") + .desc("Number of memory ordering violations"); + lsqSquashedStores .name(name() + ".squashedStores") .desc("Number of stores squashed"); @@ -220,8 +224,10 @@ void LSQUnit::switchOut() { switchedOut = true; - for (int i = 0; i < loadQueue.size(); ++i) + for (int i = 0; i < loadQueue.size(); ++i) { + assert(!loadQueue[i]); loadQueue[i] = NULL; + } assert(storesToWB == 0); } @@ -408,6 +414,11 @@ LSQUnit::executeLoad(DynInstPtr &inst) if (load_fault != NoFault) { // Send this instruction to commit, also make sure iew stage // realizes there is activity. + // Mark it as executed unless it is an uncached load that + // needs to hit the head of commit. + if (!(inst->req->flags & UNCACHEABLE) || inst->isAtCommit()) { + inst->setExecuted(); + } iewStage->instToCommit(inst); iewStage->activityThisCycle(); } @@ -467,6 +478,7 @@ LSQUnit::executeStore(DynInstPtr &store_inst) // A load incorrectly passed this store. Squash and refetch. // For now return a fault to show that it was unsuccessful. memDepViolator = loadQueue[load_idx]; + ++lsqMemOrderViolation; return genMachineCheckFault(); } diff --git a/src/cpu/o3/mem_dep_unit_impl.hh b/src/cpu/o3/mem_dep_unit_impl.hh index 16f67a4e0..c649ca385 100644 --- a/src/cpu/o3/mem_dep_unit_impl.hh +++ b/src/cpu/o3/mem_dep_unit_impl.hh @@ -109,6 +109,9 @@ template void MemDepUnit::switchOut() { + assert(instList[0].empty()); + assert(instsToReplay.empty()); + assert(memDepHash.empty()); // Clear any state. for (int i = 0; i < Impl::MaxThreads; ++i) { instList[i].clear(); diff --git a/src/cpu/o3/rename.hh b/src/cpu/o3/rename.hh index ba26a01dd..177b9cb87 100644 --- a/src/cpu/o3/rename.hh +++ b/src/cpu/o3/rename.hh @@ -417,6 +417,8 @@ class DefaultRename /** The maximum skid buffer size. */ unsigned skidBufferMax; + PhysRegIndex maxPhysicalRegs; + /** Enum to record the source of a structure full stall. Can come from * either ROB, IQ, LSQ, and it is priortized in that order. */ diff --git a/src/cpu/o3/rename_impl.hh b/src/cpu/o3/rename_impl.hh index 782c0fe5f..248d7deb6 100644 --- a/src/cpu/o3/rename_impl.hh +++ b/src/cpu/o3/rename_impl.hh @@ -41,7 +41,8 @@ DefaultRename::DefaultRename(Params *params) commitToRenameDelay(params->commitToRenameDelay), renameWidth(params->renameWidth), commitWidth(params->commitWidth), - numThreads(params->numberOfThreads) + numThreads(params->numberOfThreads), + maxPhysicalRegs(params->numPhysIntRegs + params->numPhysFloatRegs) { _status = Inactive; @@ -286,6 +287,11 @@ DefaultRename::switchOut() // Put the renamed physical register back on the free list. freeList->addReg(hb_it->newPhysReg); + // Be sure to mark its register as ready if it's a misc register. + if (hb_it->newPhysReg >= maxPhysicalRegs) { + scoreboard->setReg(hb_it->newPhysReg); + } + historyBuffer[i].erase(hb_it++); } insts[i].clear(); @@ -889,6 +895,11 @@ DefaultRename::doSquash(const InstSeqNum &squashed_seq_num, unsigned tid) // Put the renamed physical register back on the free list. freeList->addReg(hb_it->newPhysReg); + // Be sure to mark its register as ready if it's a misc register. + if (hb_it->newPhysReg >= maxPhysicalRegs) { + scoreboard->setReg(hb_it->newPhysReg); + } + historyBuffer[tid].erase(hb_it++); ++renameUndoneMaps; diff --git a/src/cpu/o3/thread_state.hh b/src/cpu/o3/thread_state.hh index b6f2e14c0..0247deb52 100644 --- a/src/cpu/o3/thread_state.hh +++ b/src/cpu/o3/thread_state.hh @@ -31,8 +31,11 @@ #ifndef __CPU_O3_THREAD_STATE_HH__ #define __CPU_O3_THREAD_STATE_HH__ +#include "base/callback.hh" +#include "base/output.hh" #include "cpu/thread_context.hh" #include "cpu/thread_state.hh" +#include "sim/sim_exit.hh" class Event; class Process; @@ -75,8 +78,22 @@ struct O3ThreadState : public ThreadState { #if FULL_SYSTEM O3ThreadState(O3CPU *_cpu, int _thread_num) : ThreadState(-1, _thread_num), - inSyscall(0), trapPending(0) - { } + cpu(_cpu), inSyscall(0), trapPending(0) + { + if (cpu->params->profile) { + profile = new FunctionProfile(cpu->params->system->kernelSymtab); + Callback *cb = + new MakeCallback(this); + registerExitCallback(cb); + } + + // let's fill with a dummy node for now so we don't get a segfault + // on the first cycle when there's no node available. + static ProfileNode dummyNode; + profileNode = &dummyNode; + profilePC = 3; + } #else O3ThreadState(O3CPU *_cpu, int _thread_num, Process *_process, int _asid, MemObject *mem) @@ -95,6 +112,14 @@ struct O3ThreadState : public ThreadState { /** Handles the syscall. */ void syscall(int64_t callnum) { process->syscall(callnum, tc); } #endif + +#if FULL_SYSTEM + void dumpFuncProfile() + { + std::ostream *os = simout.create(csprintf("profile.%s.dat", cpu->name())); + profile->dump(xcProxy, *os); + } +#endif }; #endif // __CPU_O3_THREAD_STATE_HH__ diff --git a/src/cpu/o3/tournament_pred.cc b/src/cpu/o3/tournament_pred.cc index 7cf78dcb1..ffb941c77 100644 --- a/src/cpu/o3/tournament_pred.cc +++ b/src/cpu/o3/tournament_pred.cc @@ -62,6 +62,8 @@ TournamentBP::TournamentBP(unsigned _localPredictorSize, for (int i = 0; i < localPredictorSize; ++i) localCtrs[i].setBits(localCtrBits); + localPredictorMask = floorPow2(localPredictorSize) - 1; + if (!isPowerOf2(localHistoryTableSize)) { fatal("Invalid local history table size!\n"); } @@ -158,7 +160,7 @@ TournamentBP::lookup(Addr &branch_addr, void * &bp_history) //Lookup in the local predictor to get its branch prediction local_history_idx = calcLocHistIdx(branch_addr); local_predictor_idx = localHistoryTable[local_history_idx] - & localHistoryMask; + & localPredictorMask; local_prediction = localCtrs[local_predictor_idx].read() > threshold; //Lookup in the global predictor to get its branch prediction @@ -176,7 +178,8 @@ TournamentBP::lookup(Addr &branch_addr, void * &bp_history) bp_history = (void *)history; assert(globalHistory < globalPredictorSize && - local_history_idx < localPredictorSize); + local_history_idx < localHistoryTableSize && + local_predictor_idx < localPredictorSize); // Commented code is for doing speculative update of counters and // all histories. @@ -234,7 +237,7 @@ TournamentBP::update(Addr &branch_addr, bool taken, void *bp_history) // Get the local predictor's current prediction local_history_idx = calcLocHistIdx(branch_addr); local_predictor_hist = localHistoryTable[local_history_idx]; - local_predictor_idx = local_predictor_hist & localHistoryMask; + local_predictor_idx = local_predictor_hist & localPredictorMask; // Update the choice predictor to tell it which one was correct if // there was a prediction. @@ -256,6 +259,7 @@ TournamentBP::update(Addr &branch_addr, bool taken, void *bp_history) } assert(globalHistory < globalPredictorSize && + local_history_idx < localHistoryTableSize && local_predictor_idx < localPredictorSize); // Update the counters and local history with the proper diff --git a/src/cpu/o3/tournament_pred.hh b/src/cpu/o3/tournament_pred.hh index 66b4aaae2..472944910 100644 --- a/src/cpu/o3/tournament_pred.hh +++ b/src/cpu/o3/tournament_pred.hh @@ -159,6 +159,9 @@ class TournamentBP /** Size of the local predictor. */ unsigned localPredictorSize; + /** Mask to get the proper index bits into the predictor. */ + unsigned localPredictorMask; + /** Number of bits of the local predictor's counters. */ unsigned localCtrBits; diff --git a/src/cpu/ozone/checker_builder.cc b/src/cpu/ozone/checker_builder.cc index c372e51d6..99ba3e308 100644 --- a/src/cpu/ozone/checker_builder.cc +++ b/src/cpu/ozone/checker_builder.cc @@ -65,6 +65,8 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(OzoneChecker) Param max_insts_all_threads; Param max_loads_any_thread; Param max_loads_all_threads; + Param stats_reset_inst; + Param progress_interval; #if FULL_SYSTEM SimObjectParam itb; @@ -79,6 +81,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(OzoneChecker) Param defer_registration; Param exitOnError; + Param updateOnError; Param warnOnlyOnLoadError; Param function_trace; Param function_trace_start; @@ -95,6 +98,9 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(OzoneChecker) "terminate when any thread reaches this load count"), INIT_PARAM(max_loads_all_threads, "terminate when all threads have reached this load count"), + INIT_PARAM(stats_reset_inst, + "blah"), + INIT_PARAM_DFLT(progress_interval, "CPU Progress Interval", 0), #if FULL_SYSTEM INIT_PARAM(itb, "Instruction TLB"), @@ -110,6 +116,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(OzoneChecker) INIT_PARAM(defer_registration, "defer system registration (for sampling)"), INIT_PARAM(exitOnError, "exit on error"), + INIT_PARAM(updateOnError, "Update the checker with the main CPU's state on error"), INIT_PARAM_DFLT(warnOnlyOnLoadError, "warn, but don't exit, if a load " "result errors", false), INIT_PARAM(function_trace, "Enable function trace"), @@ -127,7 +134,9 @@ CREATE_SIM_OBJECT(OzoneChecker) params->max_insts_all_threads = 0; params->max_loads_any_thread = 0; params->max_loads_all_threads = 0; + params->stats_reset_inst = 0; params->exitOnError = exitOnError; + params->updateOnError = updateOnError; params->warnOnlyOnLoadError = warnOnlyOnLoadError; params->deferRegistration = defer_registration; params->functionTrace = function_trace; @@ -140,6 +149,10 @@ CREATE_SIM_OBJECT(OzoneChecker) temp = max_insts_all_threads; temp = max_loads_any_thread; temp = max_loads_all_threads; + temp = stats_reset_inst; + Tick temp2 = progress_interval; + temp2++; + params->progress_interval = 0; #if FULL_SYSTEM params->itb = itb; diff --git a/src/cpu/ozone/cpu.hh b/src/cpu/ozone/cpu.hh index e411c12bd..ece68282f 100644 --- a/src/cpu/ozone/cpu.hh +++ b/src/cpu/ozone/cpu.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005 The Regents of The University of Michigan + * Copyright (c) 2006 The Regents of The University of Michigan * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -81,13 +81,13 @@ template class Checker; /** - * Declaration of Out-of-Order CPU class. Basically it is a SimpleCPU with - * simple out-of-order capabilities added to it. It is still a 1 CPI machine - * (?), but is capable of handling cache misses. Basically it models having - * a ROB/IQ by only allowing a certain amount of instructions to execute while - * the cache miss is outstanding. + * Light weight out of order CPU model that approximates an out of + * order CPU. It is separated into a front end and a back end, with + * the template parameter Impl describing the classes used for each. + * The goal is to be able to specify through the Impl the class to use + * for the front end and back end, with different classes used to + * model different levels of detail. */ - template class OzoneCPU : public BaseCPU { @@ -273,6 +273,7 @@ class OzoneCPU : public BaseCPU typedef OzoneThreadState ImplState; private: + // Committed thread state for the OzoneCPU. OzoneThreadState thread; public: @@ -310,12 +311,6 @@ class OzoneCPU : public BaseCPU tickEvent.squash(); } - private: - Trace::InstRecord *traceData; - - template - void trace_data(T data); - public: enum Status { Running, @@ -326,8 +321,6 @@ class OzoneCPU : public BaseCPU Status _status; public: - bool checkInterrupts; - void post_interrupt(int int_num, int index); void zero_fill_64(Addr addr) { @@ -379,6 +372,7 @@ class OzoneCPU : public BaseCPU FrontEnd *frontEnd; BackEnd *backEnd; + private: Status status() const { return _status; } void setStatus(Status new_status) { _status = new_status; } @@ -410,12 +404,11 @@ class OzoneCPU : public BaseCPU // number of idle cycles Stats::Average<> notIdleFraction; Stats::Formula idleFraction; - public: + public: virtual void serialize(std::ostream &os); virtual void unserialize(Checkpoint *cp, const std::string §ion); - #if FULL_SYSTEM /** Translates instruction requestion. */ Fault translateInstReq(RequestPtr &req, OzoneThreadState *thread) @@ -582,12 +575,9 @@ class OzoneCPU : public BaseCPU Fault copy(Addr dest); - InstSeqNum globalSeqNum; - public: void squashFromTC(); - // @todo: This can be a useful debug function. Implement it. void dumpInsts() { frontEnd->dumpInsts(); } #if FULL_SYSTEM @@ -605,7 +595,6 @@ class OzoneCPU : public BaseCPU ThreadContext *tcBase() { return tc; } - bool decoupledFrontEnd; struct CommStruct { InstSeqNum doneSeqNum; InstSeqNum nonSpecSeqNum; @@ -614,8 +603,13 @@ class OzoneCPU : public BaseCPU bool stall; }; + + InstSeqNum globalSeqNum; + TimeBuffer comm; + bool decoupledFrontEnd; + bool lockFlag; Stats::Scalar<> quiesceCycles; diff --git a/src/cpu/ozone/cpu_builder.cc b/src/cpu/ozone/cpu_builder.cc index e239b7a94..e3e4ec433 100644 --- a/src/cpu/ozone/cpu_builder.cc +++ b/src/cpu/ozone/cpu_builder.cc @@ -63,6 +63,7 @@ SimObjectParam system; Param cpu_id; SimObjectParam itb; SimObjectParam dtb; +Param profile; #else SimObjectVectorParam workload; //SimObjectParam page_table; @@ -76,16 +77,19 @@ Param max_insts_any_thread; Param max_insts_all_threads; Param max_loads_any_thread; Param max_loads_all_threads; +Param stats_reset_inst; +Param progress_interval; //SimObjectParam icache; //SimObjectParam dcache; Param cachePorts; Param width; +Param frontEndLatency; Param frontEndWidth; +Param backEndLatency; Param backEndWidth; Param backEndSquashLatency; -Param backEndLatency; Param maxInstBufferSize; Param numPhysicalRegs; Param maxOutstandingMemOps; @@ -140,6 +144,7 @@ Param RASSize; Param LQEntries; Param SQEntries; +Param lsqLimits; Param LFSTSize; Param SSITSize; @@ -181,6 +186,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivOzoneCPU) INIT_PARAM(cpu_id, "processor ID"), INIT_PARAM(itb, "Instruction translation buffer"), INIT_PARAM(dtb, "Data translation buffer"), + INIT_PARAM(profile, ""), #else INIT_PARAM(workload, "Processes to run"), // INIT_PARAM(page_table, "Page table"), @@ -204,16 +210,21 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivOzoneCPU) "Terminate when all threads have reached this load" "count", 0), + INIT_PARAM_DFLT(stats_reset_inst, + "blah", + 0), + INIT_PARAM_DFLT(progress_interval, "Progress interval", 0), // INIT_PARAM_DFLT(icache, "L1 instruction cache", NULL), // INIT_PARAM_DFLT(dcache, "L1 data cache", NULL), INIT_PARAM_DFLT(cachePorts, "Cache Ports", 200), INIT_PARAM_DFLT(width, "Width", 1), + INIT_PARAM_DFLT(frontEndLatency, "Front end latency", 1), INIT_PARAM_DFLT(frontEndWidth, "Front end width", 1), + INIT_PARAM_DFLT(backEndLatency, "Back end latency", 1), INIT_PARAM_DFLT(backEndWidth, "Back end width", 1), INIT_PARAM_DFLT(backEndSquashLatency, "Back end squash latency", 1), - INIT_PARAM_DFLT(backEndLatency, "Back end latency", 1), INIT_PARAM_DFLT(maxInstBufferSize, "Maximum instruction buffer size", 16), INIT_PARAM(numPhysicalRegs, "Number of physical registers"), INIT_PARAM_DFLT(maxOutstandingMemOps, "Maximum outstanding memory operations", 4), @@ -274,6 +285,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DerivOzoneCPU) INIT_PARAM(LQEntries, "Number of load queue entries"), INIT_PARAM(SQEntries, "Number of store queue entries"), + INIT_PARAM_DFLT(lsqLimits, "LSQ size limits dispatch", true), INIT_PARAM(LFSTSize, "Last fetched store table size"), INIT_PARAM(SSITSize, "Store set ID table size"), @@ -336,6 +348,7 @@ CREATE_SIM_OBJECT(DerivOzoneCPU) params->cpu_id = cpu_id; params->itb = itb; params->dtb = dtb; + params->profile = profile; #else params->workload = workload; // params->pTable = page_table; @@ -347,6 +360,8 @@ CREATE_SIM_OBJECT(DerivOzoneCPU) params->max_insts_all_threads = max_insts_all_threads; params->max_loads_any_thread = max_loads_any_thread; params->max_loads_all_threads = max_loads_all_threads; + params->stats_reset_inst = stats_reset_inst; + params->progress_interval = progress_interval; // // Caches @@ -357,6 +372,7 @@ CREATE_SIM_OBJECT(DerivOzoneCPU) params->width = width; params->frontEndWidth = frontEndWidth; + params->frontEndLatency = frontEndLatency; params->backEndWidth = backEndWidth; params->backEndSquashLatency = backEndSquashLatency; params->backEndLatency = backEndLatency; @@ -414,6 +430,7 @@ CREATE_SIM_OBJECT(DerivOzoneCPU) params->LQEntries = LQEntries; params->SQEntries = SQEntries; + params->lsqLimits = lsqLimits; params->SSITSize = SSITSize; params->LFSTSize = LFSTSize; diff --git a/src/cpu/ozone/cpu_impl.hh b/src/cpu/ozone/cpu_impl.hh index 80f18434c..5c8b5001d 100644 --- a/src/cpu/ozone/cpu_impl.hh +++ b/src/cpu/ozone/cpu_impl.hh @@ -50,7 +50,6 @@ #include "arch/alpha/types.hh" #include "arch/vtophys.hh" #include "base/callback.hh" -//#include "base/remote_gdb.hh" #include "cpu/profile.hh" #include "kern/kernel_stats.hh" #include "sim/faults.hh" @@ -67,15 +66,6 @@ using namespace TheISA; -template -template -void -OzoneCPU::trace_data(T data) { - if (traceData) { - traceData->setData(data); - } -} - template OzoneCPU::TickEvent::TickEvent(OzoneCPU *c, int w) : Event(&mainEventQueue, CPU_Tick_Pri), cpu(c), width(w) @@ -112,7 +102,7 @@ OzoneCPU::OzoneCPU(Params *p) _status = Idle; if (p->checker) { -#if USE_CHECKER + BaseCPU *temp_checker = p->checker; checker = dynamic_cast *>(temp_checker); checker->setMemory(mem); @@ -126,6 +116,8 @@ OzoneCPU::OzoneCPU(Params *p) panic("Checker enabled but not compiled in!"); #endif } else { + // If checker is not being used, then the xcProxy points + // directly to the CPU's ExecContext. checker = NULL; thread.tc = &ozoneTC; tc = &ozoneTC; @@ -138,7 +130,7 @@ OzoneCPU::OzoneCPU(Params *p) thread.setStatus(ThreadContext::Suspended); #if FULL_SYSTEM - /***** All thread state stuff *****/ + // Setup thread state stuff. thread.cpu = this; thread.setTid(0); @@ -187,12 +179,15 @@ OzoneCPU::OzoneCPU(Params *p) frontEnd->setBackEnd(backEnd); backEnd->setFrontEnd(frontEnd); - decoupledFrontEnd = p->decoupledFrontEnd; - globalSeqNum = 1; +#if FULL_SYSTEM checkInterrupts = false; +#endif + lockFlag = 0; + + // Setup rename table, initializing all values to ready. for (int i = 0; i < TheISA::TotalNumRegs; ++i) { thread.renameTable[i] = new DynInst(this); thread.renameTable[i]->setResultReady(); @@ -233,8 +228,6 @@ OzoneCPU::OzoneCPU(Params *p) thread.setVirtPort(virt_port); #endif - lockFlag = 0; - DPRINTF(OzoneCPU, "OzoneCPU: Created Ozone cpu object.\n"); } @@ -247,6 +240,7 @@ template void OzoneCPU::switchOut() { + BaseCPU::switchOut(_sampler); switchCount = 0; // Front end needs state from back end, so switch out the back end first. backEnd->switchOut(); @@ -257,6 +251,8 @@ template void OzoneCPU::signalSwitched() { + // Only complete the switchout when both the front end and back + // end have signalled they are ready to switch. if (++switchCount == 2) { backEnd->doSwitchOut(); frontEnd->doSwitchOut(); @@ -266,6 +262,17 @@ OzoneCPU::signalSwitched() #endif _status = SwitchedOut; +#ifndef NDEBUG + // Loop through all registers + for (int i = 0; i < AlphaISA::TotalNumRegs; ++i) { + assert(thread.renameTable[i] == frontEnd->renameTable[i]); + + assert(thread.renameTable[i] == backEnd->renameTable[i]); + + DPRINTF(OzoneCPU, "Checking if register %i matches.\n", i); + } +#endif + if (tickEvent.scheduled()) tickEvent.squash(); } @@ -278,13 +285,25 @@ OzoneCPU::takeOverFrom(BaseCPU *oldCPU) { BaseCPU::takeOverFrom(oldCPU); + thread.trapPending = false; + thread.inSyscall = false; + backEnd->takeOverFrom(); frontEnd->takeOverFrom(); + frontEnd->renameTable.copyFrom(thread.renameTable); + backEnd->renameTable.copyFrom(thread.renameTable); assert(!tickEvent.scheduled()); +#ifndef NDEBUG + // Check rename table. + for (int i = 0; i < TheISA::TotalNumRegs; ++i) { + assert(thread.renameTable[i]->isResultReady()); + } +#endif + // @todo: Fix hardcoded number // Clear out any old information in time buffer. - for (int i = 0; i < 6; ++i) { + for (int i = 0; i < 15; ++i) { comm.advance(); } @@ -316,6 +335,10 @@ OzoneCPU::activateContext(int thread_num, int delay) notIdleFraction++; scheduleTickEvent(delay); _status = Running; +#if FULL_SYSTEM + if (thread.quiesceEvent && thread.quiesceEvent->scheduled()) + thread.quiesceEvent->deschedule(); +#endif thread.setStatus(ThreadContext::Active); frontEnd->wakeFromQuiesce(); } @@ -393,7 +416,7 @@ template void OzoneCPU::resetStats() { - startNumInst = numInst; +// startNumInst = numInst; notIdleFraction = (_status != Idle); } @@ -441,6 +464,15 @@ OzoneCPU::serialize(std::ostream &os) ozoneTC.serialize(os); nameOut(os, csprintf("%s.tickEvent", name())); tickEvent.serialize(os); + + // Use SimpleThread's ability to checkpoint to make it easier to + // write out the registers. Also make this static so it doesn't + // get instantiated multiple times (causes a panic in statistics). + static CPUExecContext temp; + + nameOut(os, csprintf("%s.xc.0", name())); + temp.copyXC(thread.getXCProxy()); + temp.serialize(os); } template @@ -451,6 +483,15 @@ OzoneCPU::unserialize(Checkpoint *cp, const std::string §ion) UNSERIALIZE_ENUM(_status); ozoneTC.unserialize(cp, csprintf("%s.tc", section)); tickEvent.unserialize(cp, csprintf("%s.tickEvent", section)); + + // Use SimpleThread's ability to checkpoint to make it easier to + // read in the registers. Also make this static so it doesn't + // get instantiated multiple times (causes a panic in statistics). + static CPUExecContext temp; + + temp.copyXC(thread.getXCProxy()); + temp.unserialize(cp, csprintf("%s.xc.0", section)); + thread.getXCProxy()->copyArchRegs(temp.getProxy()); } template @@ -810,7 +851,9 @@ OzoneCPU::OzoneTC::halt() template void OzoneCPU::OzoneTC::dumpFuncProfile() -{ } +{ + thread->dumpFuncProfile(); +} #endif template @@ -829,6 +872,7 @@ OzoneCPU::OzoneTC::takeOverFrom(ThreadContext *old_context) copyArchRegs(old_context); setCpuId(old_context->readCpuId()); + thread->inst = old_context->getInst(); #if !FULL_SYSTEM setFuncExeInst(old_context->readFuncExeInst()); #else @@ -842,6 +886,7 @@ OzoneCPU::OzoneTC::takeOverFrom(ThreadContext *old_context) thread->quiesceEvent->tc = this; } + // Copy kernel stats pointer from old context. thread->kernelStats = old_context->getKernelStats(); // storeCondFailures = 0; cpu->lockFlag = false; @@ -863,7 +908,11 @@ OzoneCPU::OzoneTC::regStats(const std::string &name) template void OzoneCPU::OzoneTC::serialize(std::ostream &os) -{ } +{ + // Once serialization is added, serialize the quiesce event and + // kernel stats. Will need to make sure there aren't multiple + // things that serialize them. +} template void @@ -896,16 +945,14 @@ template void OzoneCPU::OzoneTC::profileClear() { - if (thread->profile) - thread->profile->clear(); + thread->profileClear(); } template void OzoneCPU::OzoneTC::profileSample() { - if (thread->profile) - thread->profile->sample(thread->profileNode, thread->profilePC); + thread->profileSample(); } #endif @@ -916,7 +963,6 @@ OzoneCPU::OzoneTC::getThreadNum() return thread->readTid(); } -// Also somewhat obnoxious. Really only used for the TLB fault. template TheISA::MachInst OzoneCPU::OzoneTC::getInst() @@ -934,14 +980,20 @@ OzoneCPU::OzoneTC::copyArchRegs(ThreadContext *tc) cpu->frontEnd->setPC(thread->PC); cpu->frontEnd->setNextPC(thread->nextPC); - for (int i = 0; i < TheISA::TotalNumRegs; ++i) { - if (i < TheISA::FP_Base_DepTag) { - thread->renameTable[i]->setIntResult(tc->readIntReg(i)); - } else if (i < (TheISA::FP_Base_DepTag + TheISA::NumFloatRegs)) { - int fp_idx = i - TheISA::FP_Base_DepTag; - thread->renameTable[i]->setDoubleResult( - tc->readFloatReg(fp_idx, 64)); - } + // First loop through the integer registers. + for (int i = 0; i < TheISA::NumIntRegs; ++i) { +/* DPRINTF(OzoneCPU, "Copying over register %i, had data %lli, " + "now has data %lli.\n", + i, thread->renameTable[i]->readIntResult(), + tc->readIntReg(i)); +*/ + thread->renameTable[i]->setIntResult(tc->readIntReg(i)); + } + + // Then loop through the floating point registers. + for (int i = 0; i < TheISA::NumFloatRegs; ++i) { + int fp_idx = i + TheISA::FP_Base_DepTag; + thread->renameTable[fp_idx]->setIntResult(tc->readFloatRegBits(i)); } #if !FULL_SYSTEM diff --git a/src/cpu/ozone/front_end.hh b/src/cpu/ozone/front_end.hh index 3ed3c4d18..5ffd3666e 100644 --- a/src/cpu/ozone/front_end.hh +++ b/src/cpu/ozone/front_end.hh @@ -34,6 +34,7 @@ #include #include "arch/utility.hh" +#include "base/timebuf.hh" #include "cpu/inst_seq.hh" #include "cpu/o3/bpred_unit.hh" #include "cpu/ozone/rename_table.hh" @@ -246,15 +247,21 @@ class FrontEnd void dumpInsts(); private: + TimeBuffer numInstsReady; + typedef typename std::deque InstBuff; typedef typename InstBuff::iterator InstBuffIt; + InstBuff feBuffer; + InstBuff instBuffer; int instBufferSize; int maxInstBufferSize; + int latency; + int width; int freeRegs; diff --git a/src/cpu/ozone/front_end_impl.hh b/src/cpu/ozone/front_end_impl.hh index 1b120460a..d34716de6 100644 --- a/src/cpu/ozone/front_end_impl.hh +++ b/src/cpu/ozone/front_end_impl.hh @@ -92,8 +92,10 @@ FrontEnd::FrontEnd(Params *params) : branchPred(params), icachePort(this), mem(params->mem), + numInstsReady(params->frontEndLatency, 0), instBufferSize(0), maxInstBufferSize(params->maxInstBufferSize), + latency(params->frontEndLatency), width(params->frontEndWidth), freeRegs(params->numPhysicalRegs), numPhysRegs(params->numPhysicalRegs), @@ -326,6 +328,18 @@ FrontEnd::tick() if (switchedOut) return; + for (int insts_to_queue = numInstsReady[-latency]; + !instBuffer.empty() && insts_to_queue; + --insts_to_queue) + { + DPRINTF(FE, "Transferring instruction [sn:%lli] to the feBuffer\n", + instBuffer.front()->seqNum); + feBuffer.push_back(instBuffer.front()); + instBuffer.pop_front(); + } + + numInstsReady.advance(); + // @todo: Maybe I want to just have direct communication... if (fromCommit->doneSeqNum) { branchPred.update(fromCommit->doneSeqNum, 0); @@ -339,8 +353,8 @@ FrontEnd::tick() cacheBlkValid = true; status = Running; - if (barrierInst) - status = SerializeBlocked; +// if (barrierInst) +// status = SerializeBlocked; if (freeRegs <= 0) status = RenameBlocked; checkBE(); @@ -414,11 +428,12 @@ FrontEnd::tick() // latency instBuffer.push_back(inst); ++instBufferSize; + numInstsReady[0]++; ++num_inst; #if FULL_SYSTEM if (inst->isQuiesce()) { - warn("%lli: Quiesce instruction encountered, halting fetch!", curTick); +// warn("%lli: Quiesce instruction encountered, halting fetch!", curTick); status = QuiescePending; break; } @@ -572,10 +587,10 @@ FrontEnd::processBarriers(DynInstPtr &inst) // Change status over to SerializeBlocked so that other stages know // what this is blocked on. - status = SerializeBlocked; +// status = SerializeBlocked; - barrierInst = inst; - return true; +// barrierInst = inst; +// return true; } else if ((inst->isStoreConditional() || inst->isSerializeAfter()) && !inst->isSerializeHandled()) { DPRINTF(FE, "Serialize after instruction encountered.\n"); @@ -620,6 +635,7 @@ FrontEnd::handleFault(Fault &fault) instruction->fault = fault; instruction->setCanIssue(); instBuffer.push_back(instruction); + numInstsReady[0]++; ++instBufferSize; } @@ -649,6 +665,21 @@ FrontEnd::squash(const InstSeqNum &squash_num, const Addr &next_PC, freeRegs+= inst->numDestRegs(); } + while (!feBuffer.empty() && + feBuffer.back()->seqNum > squash_num) { + DynInstPtr inst = feBuffer.back(); + + DPRINTF(FE, "Squashing instruction [sn:%lli] PC %#x\n", + inst->seqNum, inst->readPC()); + + inst->clearDependents(); + + feBuffer.pop_back(); + --instBufferSize; + + freeRegs+= inst->numDestRegs(); + } + // Copy over rename table from the back end. renameTable.copyFrom(backEnd->renameTable); @@ -666,12 +697,12 @@ FrontEnd::squash(const InstSeqNum &squash_num, const Addr &next_PC, DPRINTF(FE, "Squashing outstanding Icache access.\n"); memReq = NULL; } - +/* if (status == SerializeBlocked) { assert(barrierInst->seqNum > squash_num); barrierInst = NULL; } - +*/ // Unless this squash originated from the front end, we're probably // in running mode now. // Actually might want to make this latency dependent. @@ -683,13 +714,22 @@ template typename Impl::DynInstPtr FrontEnd::getInst() { - if (instBufferSize == 0) { + if (feBuffer.empty()) { return NULL; } - DynInstPtr inst = instBuffer.front(); + DynInstPtr inst = feBuffer.front(); - instBuffer.pop_front(); + if (inst->isSerializeBefore() || inst->isIprAccess()) { + DPRINTF(FE, "Back end is getting a serialize before inst\n"); + if (!backEnd->robEmpty()) { + DPRINTF(FE, "Rob is not empty yet, not returning inst\n"); + return NULL; + } + inst->clearSerializeBefore(); + } + + feBuffer.pop_front(); --instBufferSize; @@ -784,11 +824,11 @@ FrontEnd::updateStatus() } if (status == BEBlocked && !be_block) { - if (barrierInst) { - status = SerializeBlocked; - } else { +// if (barrierInst) { +// status = SerializeBlocked; +// } else { status = Running; - } +// } ret_val = true; } return ret_val; @@ -810,6 +850,7 @@ template typename Impl::DynInstPtr FrontEnd::getInstFromCacheline() { +/* if (status == SerializeComplete) { DynInstPtr inst = barrierInst; status = Running; @@ -817,7 +858,7 @@ FrontEnd::getInstFromCacheline() inst->clearSerializeBefore(); return inst; } - +*/ InstSeqNum inst_seq; MachInst inst; // @todo: Fix this magic number used here to handle word offset (and @@ -932,6 +973,7 @@ FrontEnd::doSwitchOut() squash(0, 0); instBuffer.clear(); instBufferSize = 0; + feBuffer.clear(); status = Idle; } diff --git a/src/cpu/ozone/inorder_back_end_impl.hh b/src/cpu/ozone/inorder_back_end_impl.hh index 701fc0ee9..16ebac163 100644 --- a/src/cpu/ozone/inorder_back_end_impl.hh +++ b/src/cpu/ozone/inorder_back_end_impl.hh @@ -284,7 +284,7 @@ InorderBackEnd::executeInsts() } inst->setExecuted(); - inst->setCompleted(); + inst->setResultReady(); inst->setCanCommit(); instList.pop_front(); diff --git a/src/cpu/ozone/inst_queue_impl.hh b/src/cpu/ozone/inst_queue_impl.hh index f2d80e621..32a940241 100644 --- a/src/cpu/ozone/inst_queue_impl.hh +++ b/src/cpu/ozone/inst_queue_impl.hh @@ -850,13 +850,13 @@ template void InstQueue::addReadyMemInst(DynInstPtr &ready_inst) { - OpClass op_class = ready_inst->opClass(); +// OpClass op_class = ready_inst->opClass(); readyInsts.push(ready_inst); DPRINTF(IQ, "Instruction is ready to issue, putting it onto " "the ready list, PC %#x opclass:%i [sn:%lli].\n", - ready_inst->readPC(), op_class, ready_inst->seqNum); + ready_inst->readPC(), ready_inst->opClass(), ready_inst->seqNum); } /* template @@ -1177,11 +1177,11 @@ InstQueue::addIfReady(DynInstPtr &inst) return; } - OpClass op_class = inst->opClass(); +// OpClass op_class = inst->opClass(); DPRINTF(IQ, "Instruction is ready to issue, putting it onto " "the ready list, PC %#x opclass:%i [sn:%lli].\n", - inst->readPC(), op_class, inst->seqNum); + inst->readPC(), inst->opClass(), inst->seqNum); readyInsts.push(inst); } diff --git a/src/cpu/ozone/lw_back_end.hh b/src/cpu/ozone/lw_back_end.hh index d836ceebd..49c6a1ae2 100644 --- a/src/cpu/ozone/lw_back_end.hh +++ b/src/cpu/ozone/lw_back_end.hh @@ -80,7 +80,7 @@ class LWBackEnd TimeBuffer i2e; typename TimeBuffer::wire instsToExecute; TimeBuffer e2c; - TimeBuffer numInstsToWB; + TimeBuffer numInstsToWB; TimeBuffer *comm; typename TimeBuffer::wire toIEW; @@ -139,7 +139,7 @@ class LWBackEnd Tick lastCommitCycle; - bool robEmpty() { return instList.empty(); } + bool robEmpty() { return numInsts == 0; } bool isFull() { return numInsts >= numROBEntries; } bool isBlocked() { return status == Blocked || dispatchStatus == Blocked; } @@ -194,6 +194,7 @@ class LWBackEnd } void instToCommit(DynInstPtr &inst); + void readyInstsForCommit(); void switchOut(); void doSwitchOut(); @@ -255,12 +256,13 @@ class LWBackEnd RenameTable renameTable; private: + int latency; + // General back end width. Used if the more specific isn't given. int width; // Dispatch width. int dispatchWidth; - int numDispatchEntries; int dispatchSize; int waitingInsts; @@ -285,6 +287,7 @@ class LWBackEnd int numROBEntries; int numInsts; + bool lsqLimits; std::set waitingMemOps; typedef std::set::iterator MemIt; @@ -295,9 +298,6 @@ class LWBackEnd InstSeqNum squashSeqNum; Addr squashNextPC; - Fault faultFromFetch; - bool fetchHasFault; - bool switchedOut; bool switchPending; @@ -321,8 +321,6 @@ class LWBackEnd std::list replayList; std::list writeback; - int latency; - int squashLatency; bool exactFullStall; @@ -331,37 +329,39 @@ class LWBackEnd /* Stats::Scalar<> dcacheStallCycles; Counter lastDcacheStall; */ - Stats::Vector<> rob_cap_events; - Stats::Vector<> rob_cap_inst_count; - Stats::Vector<> iq_cap_events; - Stats::Vector<> iq_cap_inst_count; + Stats::Vector<> robCapEvents; + Stats::Vector<> robCapInstCount; + Stats::Vector<> iqCapEvents; + Stats::Vector<> iqCapInstCount; // total number of instructions executed - Stats::Vector<> exe_inst; - Stats::Vector<> exe_swp; - Stats::Vector<> exe_nop; - Stats::Vector<> exe_refs; - Stats::Vector<> exe_loads; - Stats::Vector<> exe_branches; + Stats::Vector<> exeInst; + Stats::Vector<> exeSwp; + Stats::Vector<> exeNop; + Stats::Vector<> exeRefs; + Stats::Vector<> exeLoads; + Stats::Vector<> exeBranches; - Stats::Vector<> issued_ops; + Stats::Vector<> issuedOps; // total number of loads forwaded from LSQ stores - Stats::Vector<> lsq_forw_loads; + Stats::Vector<> lsqForwLoads; // total number of loads ignored due to invalid addresses - Stats::Vector<> inv_addr_loads; + Stats::Vector<> invAddrLoads; // total number of software prefetches ignored due to invalid addresses - Stats::Vector<> inv_addr_swpfs; + Stats::Vector<> invAddrSwpfs; // ready loads blocked due to memory disambiguation - Stats::Vector<> lsq_blocked_loads; + Stats::Vector<> lsqBlockedLoads; Stats::Scalar<> lsqInversion; - Stats::Vector<> n_issued_dist; - Stats::VectorDistribution<> issue_delay_dist; + Stats::Vector<> nIssuedDist; +/* + Stats::VectorDistribution<> issueDelayDist; - Stats::VectorDistribution<> queue_res_dist; + Stats::VectorDistribution<> queueResDist; +*/ /* Stats::Vector<> stat_fu_busy; Stats::Vector2d<> stat_fuBusy; @@ -379,37 +379,37 @@ class LWBackEnd Stats::Formula commit_ipb; Stats::Formula lsq_inv_rate; */ - Stats::Vector<> writeback_count; - Stats::Vector<> producer_inst; - Stats::Vector<> consumer_inst; - Stats::Vector<> wb_penalized; + Stats::Vector<> writebackCount; + Stats::Vector<> producerInst; + Stats::Vector<> consumerInst; + Stats::Vector<> wbPenalized; - Stats::Formula wb_rate; - Stats::Formula wb_fanout; - Stats::Formula wb_penalized_rate; + Stats::Formula wbRate; + Stats::Formula wbFanout; + Stats::Formula wbPenalizedRate; // total number of instructions committed - Stats::Vector<> stat_com_inst; - Stats::Vector<> stat_com_swp; - Stats::Vector<> stat_com_refs; - Stats::Vector<> stat_com_loads; - Stats::Vector<> stat_com_membars; - Stats::Vector<> stat_com_branches; + Stats::Vector<> statComInst; + Stats::Vector<> statComSwp; + Stats::Vector<> statComRefs; + Stats::Vector<> statComLoads; + Stats::Vector<> statComMembars; + Stats::Vector<> statComBranches; - Stats::Distribution<> n_committed_dist; + Stats::Distribution<> nCommittedDist; - Stats::Scalar<> commit_eligible_samples; - Stats::Vector<> commit_eligible; + Stats::Scalar<> commitEligibleSamples; + Stats::Vector<> commitEligible; Stats::Vector<> squashedInsts; Stats::Vector<> ROBSquashedInsts; - Stats::Scalar<> ROB_fcount; - Stats::Formula ROB_full_rate; + Stats::Scalar<> ROBFcount; + Stats::Formula ROBFullRate; - Stats::Vector<> ROB_count; // cumulative ROB occupancy - Stats::Formula ROB_occ_rate; - Stats::VectorDistribution<> ROB_occ_dist; + Stats::Vector<> ROBCount; // cumulative ROB occupancy + Stats::Formula ROBOccRate; +// Stats::VectorDistribution<> ROBOccDist; public: void dumpInsts(); diff --git a/src/cpu/ozone/lw_back_end_impl.hh b/src/cpu/ozone/lw_back_end_impl.hh index a4f1d805e..f87a2bc57 100644 --- a/src/cpu/ozone/lw_back_end_impl.hh +++ b/src/cpu/ozone/lw_back_end_impl.hh @@ -141,13 +141,14 @@ LWBackEnd::replayMemInst(DynInstPtr &inst) template LWBackEnd::LWBackEnd(Params *params) - : d2i(5, 5), i2e(5, 5), e2c(5, 5), numInstsToWB(5, 5), + : d2i(5, 5), i2e(5, 5), e2c(5, 5), numInstsToWB(params->backEndLatency, 0), trapSquash(false), tcSquash(false), - width(params->backEndWidth), exactFullStall(true) + latency(params->backEndLatency), + width(params->backEndWidth), lsqLimits(params->lsqLimits), + exactFullStall(true) { numROBEntries = params->numROBEntries; numInsts = 0; - numDispatchEntries = 32; maxOutstandingMemOps = params->maxOutstandingMemOps; numWaitingMemOps = 0; waitingInsts = 0; @@ -184,78 +185,79 @@ void LWBackEnd::regStats() { using namespace Stats; - rob_cap_events + LSQ.regStats(); + + robCapEvents .init(cpu->number_of_threads) .name(name() + ".ROB:cap_events") .desc("number of cycles where ROB cap was active") .flags(total) ; - rob_cap_inst_count + robCapInstCount .init(cpu->number_of_threads) .name(name() + ".ROB:cap_inst") .desc("number of instructions held up by ROB cap") .flags(total) ; - iq_cap_events + iqCapEvents .init(cpu->number_of_threads) .name(name() +".IQ:cap_events" ) .desc("number of cycles where IQ cap was active") .flags(total) ; - iq_cap_inst_count + iqCapInstCount .init(cpu->number_of_threads) .name(name() + ".IQ:cap_inst") .desc("number of instructions held up by IQ cap") .flags(total) ; - - exe_inst + exeInst .init(cpu->number_of_threads) .name(name() + ".ISSUE:count") .desc("number of insts issued") .flags(total) ; - exe_swp + exeSwp .init(cpu->number_of_threads) .name(name() + ".ISSUE:swp") .desc("number of swp insts issued") .flags(total) ; - exe_nop + exeNop .init(cpu->number_of_threads) .name(name() + ".ISSUE:nop") .desc("number of nop insts issued") .flags(total) ; - exe_refs + exeRefs .init(cpu->number_of_threads) .name(name() + ".ISSUE:refs") .desc("number of memory reference insts issued") .flags(total) ; - exe_loads + exeLoads .init(cpu->number_of_threads) .name(name() + ".ISSUE:loads") .desc("number of load insts issued") .flags(total) ; - exe_branches + exeBranches .init(cpu->number_of_threads) .name(name() + ".ISSUE:branches") .desc("Number of branches issued") .flags(total) ; - issued_ops + issuedOps .init(cpu->number_of_threads) .name(name() + ".ISSUE:op_count") .desc("number of insts issued") @@ -272,28 +274,28 @@ LWBackEnd::regStats() // // Other stats // - lsq_forw_loads + lsqForwLoads .init(cpu->number_of_threads) .name(name() + ".LSQ:forw_loads") .desc("number of loads forwarded via LSQ") .flags(total) ; - inv_addr_loads + invAddrLoads .init(cpu->number_of_threads) .name(name() + ".ISSUE:addr_loads") .desc("number of invalid-address loads") .flags(total) ; - inv_addr_swpfs + invAddrSwpfs .init(cpu->number_of_threads) .name(name() + ".ISSUE:addr_swpfs") .desc("number of invalid-address SW prefetches") .flags(total) ; - lsq_blocked_loads + lsqBlockedLoads .init(cpu->number_of_threads) .name(name() + ".LSQ:blocked_loads") .desc("number of ready loads not issued due to memory disambiguation") @@ -305,51 +307,52 @@ LWBackEnd::regStats() .desc("Number of times LSQ instruction issued early") ; - n_issued_dist + nIssuedDist .init(issueWidth + 1) .name(name() + ".ISSUE:issued_per_cycle") .desc("Number of insts issued each cycle") .flags(total | pdf | dist) ; - issue_delay_dist +/* + issueDelayDist .init(Num_OpClasses,0,99,2) .name(name() + ".ISSUE:") .desc("cycles from operands ready to issue") .flags(pdf | cdf) ; - queue_res_dist + queueResDist .init(Num_OpClasses, 0, 99, 2) .name(name() + ".IQ:residence:") .desc("cycles from dispatch to issue") .flags(total | pdf | cdf ) ; for (int i = 0; i < Num_OpClasses; ++i) { - queue_res_dist.subname(i, opClassStrings[i]); + queueResDist.subname(i, opClassStrings[i]); } - - writeback_count +*/ + writebackCount .init(cpu->number_of_threads) .name(name() + ".WB:count") .desc("cumulative count of insts written-back") .flags(total) ; - producer_inst + producerInst .init(cpu->number_of_threads) .name(name() + ".WB:producers") .desc("num instructions producing a value") .flags(total) ; - consumer_inst + consumerInst .init(cpu->number_of_threads) .name(name() + ".WB:consumers") .desc("num instructions consuming a value") .flags(total) ; - wb_penalized + wbPenalized .init(cpu->number_of_threads) .name(name() + ".WB:penalized") .desc("number of instrctions required to write to 'other' IQ") @@ -357,71 +360,71 @@ LWBackEnd::regStats() ; - wb_penalized_rate + wbPenalizedRate .name(name() + ".WB:penalized_rate") .desc ("fraction of instructions written-back that wrote to 'other' IQ") .flags(total) ; - wb_penalized_rate = wb_penalized / writeback_count; + wbPenalizedRate = wbPenalized / writebackCount; - wb_fanout + wbFanout .name(name() + ".WB:fanout") .desc("average fanout of values written-back") .flags(total) ; - wb_fanout = producer_inst / consumer_inst; + wbFanout = producerInst / consumerInst; - wb_rate + wbRate .name(name() + ".WB:rate") .desc("insts written-back per cycle") .flags(total) ; - wb_rate = writeback_count / cpu->numCycles; + wbRate = writebackCount / cpu->numCycles; - stat_com_inst + statComInst .init(cpu->number_of_threads) .name(name() + ".COM:count") .desc("Number of instructions committed") .flags(total) ; - stat_com_swp + statComSwp .init(cpu->number_of_threads) .name(name() + ".COM:swp_count") .desc("Number of s/w prefetches committed") .flags(total) ; - stat_com_refs + statComRefs .init(cpu->number_of_threads) .name(name() + ".COM:refs") .desc("Number of memory references committed") .flags(total) ; - stat_com_loads + statComLoads .init(cpu->number_of_threads) .name(name() + ".COM:loads") .desc("Number of loads committed") .flags(total) ; - stat_com_membars + statComMembars .init(cpu->number_of_threads) .name(name() + ".COM:membars") .desc("Number of memory barriers committed") .flags(total) ; - stat_com_branches + statComBranches .init(cpu->number_of_threads) .name(name() + ".COM:branches") .desc("Number of branches committed") .flags(total) ; - n_committed_dist + nCommittedDist .init(0,commitWidth,1) .name(name() + ".COM:committed_per_cycle") .desc("Number of insts commited each cycle") @@ -441,14 +444,14 @@ LWBackEnd::regStats() // -> The standard deviation is computed only over cycles where // we reached the BW limit // - commit_eligible + commitEligible .init(cpu->number_of_threads) .name(name() + ".COM:bw_limited") .desc("number of insts not committed due to BW limits") .flags(total) ; - commit_eligible_samples + commitEligibleSamples .name(name() + ".COM:bw_lim_events") .desc("number cycles where commit BW limit reached") ; @@ -465,37 +468,38 @@ LWBackEnd::regStats() .desc("Number of instructions removed from inst list when they reached the head of the ROB") ; - ROB_fcount + ROBFcount .name(name() + ".ROB:full_count") .desc("number of cycles where ROB was full") ; - ROB_count + ROBCount .init(cpu->number_of_threads) .name(name() + ".ROB:occupancy") .desc(name() + ".ROB occupancy (cumulative)") .flags(total) ; - ROB_full_rate + ROBFullRate .name(name() + ".ROB:full_rate") .desc("ROB full per cycle") ; - ROB_full_rate = ROB_fcount / cpu->numCycles; + ROBFullRate = ROBFcount / cpu->numCycles; - ROB_occ_rate + ROBOccRate .name(name() + ".ROB:occ_rate") .desc("ROB occupancy rate") .flags(total) ; - ROB_occ_rate = ROB_count / cpu->numCycles; - - ROB_occ_dist + ROBOccRate = ROBCount / cpu->numCycles; +/* + ROBOccDist .init(cpu->number_of_threads,0,numROBEntries,2) .name(name() + ".ROB:occ_dist") .desc("ROB Occupancy per cycle") .flags(total | cdf) ; +*/ } template @@ -588,18 +592,22 @@ LWBackEnd::tick() { DPRINTF(BE, "Ticking back end\n"); + // Read in any done instruction information and update the IQ or LSQ. + updateStructures(); + if (switchPending && robEmpty() && !LSQ.hasStoresToWB()) { cpu->signalSwitched(); return; } - ROB_count[0]+= numInsts; + readyInstsForCommit(); + + numInstsToWB.advance(); + + ROBCount[0]+= numInsts; wbCycle = 0; - // Read in any done instruction information and update the IQ or LSQ. - updateStructures(); - #if FULL_SYSTEM checkInterrupts(); #endif @@ -674,6 +682,10 @@ LWBackEnd::dispatchInsts() while (numInsts < numROBEntries && numWaitingMemOps < maxOutstandingMemOps) { // Get instruction from front of time buffer + if (lsqLimits && LSQ.isFull()) { + break; + } + DynInstPtr inst = frontEnd->getInst(); if (!inst) { break; @@ -732,6 +744,7 @@ LWBackEnd::dispatchInsts() inst->setIssued(); inst->setExecuted(); inst->setCanCommit(); + numInstsToWB[0]++; } else { DPRINTF(BE, "Instruction [sn:%lli] ready, addding to " "exeList.\n", @@ -866,8 +879,17 @@ LWBackEnd::executeInsts() if (inst->isLoad()) { LSQ.executeLoad(inst); } else if (inst->isStore()) { - LSQ.executeStore(inst); - if (inst->req && !(inst->req->getFlags() & LOCKED)) { + Fault fault = LSQ.executeStore(inst); + + if (!inst->isStoreConditional() && fault == NoFault) { + inst->setExecuted(); + + instToCommit(inst); + } else if (fault != NoFault) { + // If the instruction faulted, then we need to send it along to commit + // without the instruction completing. + // Send this instruction to commit, also make sure iew stage + // realizes there is activity. inst->setExecuted(); instToCommit(inst); @@ -908,36 +930,54 @@ LWBackEnd::executeInsts() } } - issued_ops[0]+= num_executed; - n_issued_dist[num_executed]++; + issuedOps[0]+= num_executed; + nIssuedDist[num_executed]++; } template void LWBackEnd::instToCommit(DynInstPtr &inst) { - DPRINTF(BE, "Sending instructions to commit [sn:%lli] PC %#x.\n", inst->seqNum, inst->readPC()); if (!inst->isSquashed()) { - DPRINTF(BE, "Writing back instruction [sn:%lli] PC %#x.\n", - inst->seqNum, inst->readPC()); - - inst->setCanCommit(); - if (inst->isExecuted()) { inst->setResultReady(); int dependents = wakeDependents(inst); if (dependents) { - producer_inst[0]++; - consumer_inst[0]+= dependents; + producerInst[0]++; + consumerInst[0]+= dependents; } } } - writeback_count[0]++; + writeback.push_back(inst); + + numInstsToWB[0]++; + + writebackCount[0]++; } + +template +void +LWBackEnd::readyInstsForCommit() +{ + for (int i = numInstsToWB[-latency]; + !writeback.empty() && i; + --i) + { + DynInstPtr inst = writeback.front(); + writeback.pop_front(); + if (!inst->isSquashed()) { + DPRINTF(BE, "Writing back instruction [sn:%lli] PC %#x.\n", + inst->seqNum, inst->readPC()); + + inst->setCanCommit(); + } + } +} + #if 0 template void @@ -1010,7 +1050,7 @@ LWBackEnd::commitInst(int inst_num) // or store inst. Signal backwards that it should be executed. if (!inst->isExecuted()) { if (inst->isNonSpeculative() || - inst->isStoreConditional() || + (inst->isStoreConditional() && inst->getFault() == NoFault) || inst->isMemBarrier() || inst->isWriteBarrier()) { #if !FULL_SYSTEM @@ -1151,6 +1191,20 @@ LWBackEnd::commitInst(int inst_num) ++freed_regs; } +#if FULL_SYSTEM + if (thread->profile) { +// bool usermode = +// (xc->readMiscReg(AlphaISA::IPR_DTB_CM) & 0x18) != 0; +// thread->profilePC = usermode ? 1 : inst->readPC(); + thread->profilePC = inst->readPC(); + ProfileNode *node = thread->profile->consume(thread->getXCProxy(), + inst->staticInst); + + if (node) + thread->profileNode = node; + } +#endif + if (inst->traceData) { inst->traceData->setFetchSeq(inst->seqNum); inst->traceData->setCPSeq(thread->numInst); @@ -1158,6 +1212,9 @@ LWBackEnd::commitInst(int inst_num) inst->traceData = NULL; } + if (inst->isCopy()) + panic("Should not commit any copy instructions!"); + inst->clearDependents(); frontEnd->addFreeRegs(freed_regs); @@ -1207,9 +1264,9 @@ LWBackEnd::commitInsts() while (!instList.empty() && inst_num < commitWidth) { if (instList.back()->isSquashed()) { instList.back()->clearDependents(); + ROBSquashedInsts[instList.back()->threadNumber]++; instList.pop_back(); --numInsts; - ROBSquashedInsts[instList.back()->threadNumber]++; continue; } @@ -1221,7 +1278,7 @@ LWBackEnd::commitInsts() break; } } - n_committed_dist.sample(inst_num); + nCommittedDist.sample(inst_num); } template @@ -1231,10 +1288,10 @@ LWBackEnd::squash(const InstSeqNum &sn) LSQ.squash(sn); int freed_regs = 0; - InstListIt waiting_list_end = waitingList.end(); + InstListIt insts_end_it = waitingList.end(); InstListIt insts_it = waitingList.begin(); - while (insts_it != waiting_list_end && (*insts_it)->seqNum > sn) + while (insts_it != insts_end_it && (*insts_it)->seqNum > sn) { if ((*insts_it)->isSquashed()) { ++insts_it; @@ -1260,6 +1317,7 @@ LWBackEnd::squash(const InstSeqNum &sn) while (!instList.empty() && (*insts_it)->seqNum > sn) { if ((*insts_it)->isSquashed()) { + panic("Instruction should not be already squashed and on list!"); ++insts_it; continue; } @@ -1291,18 +1349,6 @@ LWBackEnd::squash(const InstSeqNum &sn) --numInsts; } - insts_it = waitingList.begin(); - while (!waitingList.empty() && insts_it != waitingList.end()) { - if ((*insts_it)->seqNum < sn) { - ++insts_it; - continue; - } - assert((*insts_it)->isSquashed()); - - waitingList.erase(insts_it++); - waitingInsts--; - } - while (memBarrier && memBarrier->seqNum > sn) { DPRINTF(BE, "[sn:%lli] Memory barrier squashed (or previously " "squashed)\n", memBarrier->seqNum); @@ -1320,6 +1366,18 @@ LWBackEnd::squash(const InstSeqNum &sn) } } + insts_it = replayList.begin(); + insts_end_it = replayList.end(); + while (!replayList.empty() && insts_it != insts_end_it) { + if ((*insts_it)->seqNum < sn) { + ++insts_it; + continue; + } + assert((*insts_it)->isSquashed()); + + replayList.erase(insts_it++); + } + frontEnd->addFreeRegs(freed_regs); } @@ -1390,14 +1448,6 @@ LWBackEnd::squashDueToMemBlocked(DynInstPtr &inst) frontEnd->squash(inst->seqNum - 1, inst->readPC()); } -template -void -LWBackEnd::fetchFault(Fault &fault) -{ - faultFromFetch = fault; - fetchHasFault = true; -} - template void LWBackEnd::switchOut() @@ -1416,17 +1466,25 @@ LWBackEnd::doSwitchOut() // yet written back. assert(robEmpty()); assert(!LSQ.hasStoresToWB()); + writeback.clear(); + for (int i = 0; i < numInstsToWB.getSize() + 1; ++i) + numInstsToWB.advance(); +// squash(0); + assert(waitingList.empty()); + assert(instList.empty()); + assert(replayList.empty()); + assert(writeback.empty()); LSQ.switchOut(); - - squash(0); } template void LWBackEnd::takeOverFrom(ThreadContext *old_tc) { - switchedOut = false; + assert(!squashPending); + squashSeqNum = 0; + squashNextPC = 0; tcSquash = false; trapSquash = false; @@ -1451,27 +1509,27 @@ LWBackEnd::updateExeInstStats(DynInstPtr &inst) // #ifdef TARGET_ALPHA if (inst->isDataPrefetch()) - exe_swp[thread_number]++; + exeSwp[thread_number]++; else - exe_inst[thread_number]++; + exeInst[thread_number]++; #else - exe_inst[thread_number]++; + exeInst[thread_number]++; #endif // // Control operations // if (inst->isControl()) - exe_branches[thread_number]++; + exeBranches[thread_number]++; // // Memory operations // if (inst->isMemRef()) { - exe_refs[thread_number]++; + exeRefs[thread_number]++; if (inst->isLoad()) - exe_loads[thread_number]++; + exeLoads[thread_number]++; } } @@ -1491,33 +1549,33 @@ LWBackEnd::updateComInstStats(DynInstPtr &inst) // #ifdef TARGET_ALPHA if (inst->isDataPrefetch()) { - stat_com_swp[tid]++; + statComSwp[tid]++; } else { - stat_com_inst[tid]++; + statComInst[tid]++; } #else - stat_com_inst[tid]++; + statComInst[tid]++; #endif // // Control Instructions // if (inst->isControl()) - stat_com_branches[tid]++; + statComBranches[tid]++; // // Memory references // if (inst->isMemRef()) { - stat_com_refs[tid]++; + statComRefs[tid]++; if (inst->isLoad()) { - stat_com_loads[tid]++; + statComLoads[tid]++; } } if (inst->isMemBarrier()) { - stat_com_membars[tid]++; + statComMembars[tid]++; } } @@ -1569,6 +1627,45 @@ LWBackEnd::dumpInsts() ++num; } + inst_list_it = --(writeback.end()); + + cprintf("Writeback list size: %i\n", writeback.size()); + + while (inst_list_it != writeback.end()) + { + cprintf("Instruction:%i\n", + num); + if (!(*inst_list_it)->isSquashed()) { + if (!(*inst_list_it)->isIssued()) { + ++valid_num; + cprintf("Count:%i\n", valid_num); + } else if ((*inst_list_it)->isMemRef() && + !(*inst_list_it)->memOpDone) { + // Loads that have not been marked as executed still count + // towards the total instructions. + ++valid_num; + cprintf("Count:%i\n", valid_num); + } + } + + cprintf("PC:%#x\n[sn:%lli]\n[tid:%i]\n" + "Issued:%i\nSquashed:%i\n", + (*inst_list_it)->readPC(), + (*inst_list_it)->seqNum, + (*inst_list_it)->threadNumber, + (*inst_list_it)->isIssued(), + (*inst_list_it)->isSquashed()); + + if ((*inst_list_it)->isMemRef()) { + cprintf("MemOpDone:%i\n", (*inst_list_it)->memOpDone); + } + + cprintf("\n"); + + inst_list_it--; + ++num; + } + cprintf("Waiting list size: %i\n", waitingList.size()); inst_list_it = --(waitingList.end()); diff --git a/src/cpu/ozone/lw_lsq.hh b/src/cpu/ozone/lw_lsq.hh index 9a21a9d01..6640a9f34 100644 --- a/src/cpu/ozone/lw_lsq.hh +++ b/src/cpu/ozone/lw_lsq.hh @@ -84,6 +84,8 @@ class OzoneLWLSQ { /** Returns the name of the LSQ unit. */ std::string name() const; + void regStats(); + /** Sets the CPU pointer. */ void setCPU(OzoneCPU *cpu_ptr); @@ -179,7 +181,7 @@ class OzoneLWLSQ { int numLoads() { return loads; } /** Returns the number of stores in the SQ. */ - int numStores() { return stores; } + int numStores() { return stores + storesInFlight; } /** Returns if either the LQ or SQ is full. */ bool isFull() { return lqFull() || sqFull(); } @@ -188,7 +190,7 @@ class OzoneLWLSQ { bool lqFull() { return loads >= (LQEntries - 1); } /** Returns if the SQ is full. */ - bool sqFull() { return stores >= (SQEntries - 1); } + bool sqFull() { return (stores + storesInFlight) >= (SQEntries - 1); } /** Debugging function to dump instructions in the LSQ. */ void dumpInsts(); @@ -223,7 +225,9 @@ class OzoneLWLSQ { void storePostSend(Packet *pkt, DynInstPtr &inst); /** Completes the store at the specified index. */ - void completeStore(int store_idx); + void completeStore(DynInstPtr &inst); + + void removeStore(int store_idx); /** Handles doing the retry. */ void recvRetry(); @@ -394,6 +398,10 @@ class OzoneLWLSQ { int storesToWB; + public: + int storesInFlight; + + private: /// @todo Consider moving to a more advanced model with write vs read ports /** The number of cache ports available each cycle. */ int cachePorts; @@ -403,6 +411,9 @@ class OzoneLWLSQ { //list mshrSeqNums; + /** Tota number of memory ordering violations. */ + Stats::Scalar<> lsqMemOrderViolation; + //Stats::Scalar<> dcacheStallCycles; Counter lastDcacheStall; @@ -525,7 +536,7 @@ OzoneLWLSQ::read(RequestPtr req, T &data, int load_idx) store_size = (*sq_it).size; - if (store_size == 0) { + if (store_size == 0 || (*sq_it).committed) { sq_it++; continue; } diff --git a/src/cpu/ozone/lw_lsq_impl.hh b/src/cpu/ozone/lw_lsq_impl.hh index 7eef4b11f..31ffa9d67 100644 --- a/src/cpu/ozone/lw_lsq_impl.hh +++ b/src/cpu/ozone/lw_lsq_impl.hh @@ -132,7 +132,7 @@ OzoneLWLSQ::completeDataAccess(PacketPtr pkt) template OzoneLWLSQ::OzoneLWLSQ() : switchedOut(false), dcachePort(this), loads(0), stores(0), - storesToWB(0), stalled(false), isStoreBlocked(false), + storesToWB(0), storesInFlight(0), stalled(false), isStoreBlocked(false), isLoadBlocked(false), loadBlockedHandled(false) { } @@ -173,6 +173,11 @@ OzoneLWLSQ::name() const template void +OzoneLWLSQ::regStats() +{ + lsqMemOrderViolation + .name(name() + ".memOrderViolation") + .desc("Number of memory ordering violations"); OzoneLWLSQ::setCPU(OzoneCPU *cpu_ptr) { cpu = cpu_ptr; @@ -321,7 +326,7 @@ unsigned OzoneLWLSQ::numFreeEntries() { unsigned free_lq_entries = LQEntries - loads; - unsigned free_sq_entries = SQEntries - stores; + unsigned free_sq_entries = SQEntries - (stores + storesInFlight); // Both the LQ and SQ entries have an extra dummy entry to differentiate // empty/full conditions. Subtract 1 from the free entries. @@ -385,6 +390,9 @@ OzoneLWLSQ::executeLoad(DynInstPtr &inst) // Actually probably want the oldest faulting load if (load_fault != NoFault) { DPRINTF(OzoneLSQ, "Load [sn:%lli] has a fault\n", inst->seqNum); + if (!(inst->req->flags & UNCACHEABLE && !inst->isAtCommit())) { + inst->setExecuted(); + } // Maybe just set it as can commit here, although that might cause // some other problems with sending traps to the ROB too quickly. be->instToCommit(inst); @@ -461,6 +469,7 @@ OzoneLWLSQ::executeStore(DynInstPtr &store_inst) // A load incorrectly passed this store. Squash and refetch. // For now return a fault to show that it was unsuccessful. memDepViolator = (*lq_it); + ++lsqMemOrderViolation; return TheISA::genMachineCheckFault(); } @@ -553,8 +562,8 @@ OzoneLWLSQ::writebackStores() if ((*sq_it).size == 0 && !(*sq_it).completed) { sq_it--; - completeStore(inst->sqIdx); - + removeStore(inst->sqIdx); + completeStore(inst); continue; } @@ -626,6 +635,8 @@ OzoneLWLSQ::writebackStores() inst->sqIdx,inst->readPC(), req->paddr, *(req->data), inst->seqNum); + DPRINTF(OzoneLSQ, "StoresInFlight: %i\n", + storesInFlight + 1); if (dcacheInterface) { assert(!req->completionEvent); @@ -687,6 +698,8 @@ OzoneLWLSQ::writebackStores() } sq_it--; } + ++storesInFlight; +// removeStore(inst->sqIdx); } else { panic("Must HAVE DCACHE!!!!!\n"); } @@ -704,7 +717,7 @@ void OzoneLWLSQ::squash(const InstSeqNum &squashed_num) { DPRINTF(OzoneLSQ, "Squashing until [sn:%lli]!" - "(Loads:%i Stores:%i)\n",squashed_num,loads,stores); + "(Loads:%i Stores:%i)\n",squashed_num,loads,stores+storesInFlight); LQIt lq_it = loadQueue.begin(); @@ -881,7 +894,7 @@ OzoneLWLSQ::writeback(DynInstPtr &inst, PacketPtr pkt) template void -OzoneLWLSQ::completeStore(int store_idx) +OzoneLWLSQ::removeStore(int store_idx) { SQHashIt sq_hash_it = SQItHash.find(store_idx); assert(sq_hash_it != SQItHash.end()); @@ -891,8 +904,6 @@ OzoneLWLSQ::completeStore(int store_idx) (*sq_it).completed = true; DynInstPtr inst = (*sq_it).inst; - --storesToWB; - if (isStalled() && inst->seqNum == stallingStoreIsn) { DPRINTF(OzoneLSQ, "Unstalling, stalling store [sn:%lli] " @@ -910,6 +921,13 @@ OzoneLWLSQ::completeStore(int store_idx) SQItHash.erase(sq_hash_it); SQIndices.push(inst->sqIdx); storeQueue.erase(sq_it); +} + +template +void +OzoneLWLSQ::completeStore(DynInstPtr &inst) +{ + --storesToWB; --stores; inst->setCompleted(); @@ -935,9 +953,14 @@ OzoneLWLSQ::switchOut() switchedOut = true; // Clear the queue to free up resources + assert(stores == 0); + assert(storeQueue.empty()); + assert(loads == 0); + assert(loadQueue.empty()); + assert(storesInFlight == 0); storeQueue.clear(); loadQueue.clear(); - loads = stores = storesToWB = 0; + loads = stores = storesToWB = storesInFlight = 0; } template diff --git a/src/cpu/ozone/simple_params.hh b/src/cpu/ozone/simple_params.hh index 11cee716f..3f63d2e1d 100644 --- a/src/cpu/ozone/simple_params.hh +++ b/src/cpu/ozone/simple_params.hh @@ -71,10 +71,11 @@ class SimpleParams : public BaseCPU::Params unsigned cachePorts; unsigned width; + unsigned frontEndLatency; unsigned frontEndWidth; + unsigned backEndLatency; unsigned backEndWidth; unsigned backEndSquashLatency; - unsigned backEndLatency; unsigned maxInstBufferSize; unsigned numPhysicalRegs; unsigned maxOutstandingMemOps; @@ -150,6 +151,7 @@ class SimpleParams : public BaseCPU::Params // unsigned LQEntries; unsigned SQEntries; + bool lsqLimits; // // Memory dependence diff --git a/src/cpu/ozone/thread_state.hh b/src/cpu/ozone/thread_state.hh index 8234cf938..adaa8e71b 100644 --- a/src/cpu/ozone/thread_state.hh +++ b/src/cpu/ozone/thread_state.hh @@ -34,9 +34,12 @@ #include "arch/faults.hh" #include "arch/types.hh" #include "arch/regfile.hh" +#include "base/callback.hh" +#include "base/output.hh" #include "cpu/thread_context.hh" #include "cpu/thread_state.hh" #include "sim/process.hh" +#include "sim/sim_exit.hh" class Event; //class Process; @@ -65,8 +68,21 @@ struct OzoneThreadState : public ThreadState { #if FULL_SYSTEM OzoneThreadState(CPUType *_cpu, int _thread_num) : ThreadState(-1, _thread_num), - intrflag(0), inSyscall(0), trapPending(0) + cpu(_cpu), intrflag(0), inSyscall(0), trapPending(0) { + if (cpu->params->profile) { + profile = new FunctionProfile(cpu->params->system->kernelSymtab); + Callback *cb = + new MakeCallback(this); + registerExitCallback(cb); + } + + // let's fill with a dummy node for now so we don't get a segfault + // on the first cycle when there's no node available. + static ProfileNode dummyNode; + profileNode = &dummyNode; + profilePC = 3; miscRegFile.clear(); } #else @@ -130,6 +146,14 @@ struct OzoneThreadState : public ThreadState { void setNextPC(uint64_t val) { nextPC = val; } + +#if FULL_SYSTEM + void dumpFuncProfile() + { + std::ostream *os = simout.create(csprintf("profile.%s.dat", cpu->name())); + profile->dump(xcProxy, *os); + } +#endif }; #endif // __CPU_OZONE_THREAD_STATE_HH__ diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc index f801b93fa..522fe79aa 100644 --- a/src/cpu/simple/base.cc +++ b/src/cpu/simple/base.cc @@ -170,7 +170,7 @@ BaseSimpleCPU::regStats() void BaseSimpleCPU::resetStats() { - startNumInst = numInst; +// startNumInst = numInst; // notIdleFraction = (_status != Idle); } diff --git a/src/cpu/simple_thread.cc b/src/cpu/simple_thread.cc index 5f86cf2b7..4fc47c982 100644 --- a/src/cpu/simple_thread.cc +++ b/src/cpu/simple_thread.cc @@ -162,6 +162,11 @@ SimpleThread::takeOverFrom(ThreadContext *oldContext) if (quiesceEvent) { quiesceEvent->tc = tc; } + + Kernel::Statistics *stats = oldContext->getKernelStats(); + if (stats) { + kernelStats = stats; + } #endif storeCondFailures = 0; diff --git a/src/cpu/thread_state.hh b/src/cpu/thread_state.hh index 6e985054f..5479f8478 100644 --- a/src/cpu/thread_state.hh +++ b/src/cpu/thread_state.hh @@ -32,6 +32,7 @@ #define __CPU_THREAD_STATE_HH__ #include "arch/types.hh" +#include "cpu/profile.hh" #include "cpu/thread_context.hh" #if !FULL_SYSTEM @@ -191,6 +192,21 @@ struct ThreadState { // simulation only; all functional memory accesses should use // one of the FunctionalMemory pointers above. short asid; + +#endif + +#if FULL_SYSTEM + void profileClear() + { + if (profile) + profile->clear(); + } + + void profileSample() + { + if (profile) + profile->sample(profileNode, profilePC); + } #endif /** Current instruction the thread is committing. Only set and diff --git a/src/dev/ide_disk.hh b/src/dev/ide_disk.hh index 0bc0b73ab..2ed860013 100644 --- a/src/dev/ide_disk.hh +++ b/src/dev/ide_disk.hh @@ -242,6 +242,10 @@ class IdeDisk : public SimObject Stats::Scalar<> dmaWriteFullPages; Stats::Scalar<> dmaWriteBytes; Stats::Scalar<> dmaWriteTxs; + Stats::Formula rdBandwidth; + Stats::Formula wrBandwidth; + Stats::Formula totBandwidth; + Stats::Formula totBytes; public: /** diff --git a/src/python/m5/objects/BaseCPU.py b/src/python/m5/objects/BaseCPU.py index 3dd0bda01..05ccbca6a 100644 --- a/src/python/m5/objects/BaseCPU.py +++ b/src/python/m5/objects/BaseCPU.py @@ -26,6 +26,9 @@ class BaseCPU(SimObject): "terminate when all threads have reached this load count") max_loads_any_thread = Param.Counter(0, "terminate when any thread reaches this load count") + stats_reset_inst = Param.Counter(0, + "reset stats once this many instructions are committed") + progress_interval = Param.Tick(0, "interval to print out the progress message") defer_registration = Param.Bool(False, "defer registration with system (for sampling)") diff --git a/src/python/m5/objects/O3CPU.py b/src/python/m5/objects/O3CPU.py index 5100c7ccb..59b40c6e8 100644 --- a/src/python/m5/objects/O3CPU.py +++ b/src/python/m5/objects/O3CPU.py @@ -9,6 +9,8 @@ class DerivO3CPU(BaseCPU): activity = Param.Unsigned(0, "Initial count") numThreads = Param.Unsigned(1, "number of HW thread contexts") + if build_env['FULL_SYSTEM']: + profile = Param.Latency('0ns', "trace the kernel stack") if build_env['USE_CHECKER']: if not build_env['FULL_SYSTEM']: checker = Param.BaseCPU(O3Checker(workload=Parent.workload, diff --git a/src/python/m5/objects/OzoneCPU.py b/src/python/m5/objects/OzoneCPU.py index 8f25d77ed..0913e044c 100644 --- a/src/python/m5/objects/OzoneCPU.py +++ b/src/python/m5/objects/OzoneCPU.py @@ -8,12 +8,15 @@ class DerivOzoneCPU(BaseCPU): numThreads = Param.Unsigned("number of HW thread contexts") checker = Param.BaseCPU("Checker CPU") + if build_env['FULL_SYSTEM']: + profile = Param.Latency('0ns', "trace the kernel stack") icache_port = Port("Instruction Port") dcache_port = Port("Data Port") width = Param.Unsigned("Width") frontEndWidth = Param.Unsigned("Front end width") + frontEndLatency = Param.Unsigned("Front end latency") backEndWidth = Param.Unsigned("Back end width") backEndSquashLatency = Param.Unsigned("Back end squash latency") backEndLatency = Param.Unsigned("Back end latency") @@ -76,6 +79,7 @@ class DerivOzoneCPU(BaseCPU): LQEntries = Param.Unsigned("Number of load queue entries") SQEntries = Param.Unsigned("Number of store queue entries") + lsqLimits = Param.Bool(True, "LSQ size limits dispatch") LFSTSize = Param.Unsigned("Last fetched store table size") SSITSize = Param.Unsigned("Store set ID table size") diff --git a/src/python/m5/objects/Root.py b/src/python/m5/objects/Root.py index f01fc06c4..8e8d87f6d 100644 --- a/src/python/m5/objects/Root.py +++ b/src/python/m5/objects/Root.py @@ -1,6 +1,7 @@ from m5.SimObject import SimObject from m5.params import * from Serialize import Serialize +from Serialize import Statreset from Statistics import Statistics from Trace import Trace from ExeTrace import ExecutionTrace diff --git a/src/python/m5/objects/System.py b/src/python/m5/objects/System.py index bc2a002cb..e7dd1bc60 100644 --- a/src/python/m5/objects/System.py +++ b/src/python/m5/objects/System.py @@ -16,6 +16,7 @@ class System(SimObject): boot_osflags = Param.String("a", "boot flags to pass to the kernel") kernel = Param.String("file that contains the kernel code") readfile = Param.String("", "file to read startup script from") + symbolfile = Param.String("", "file to get the symbols from") class AlphaSystem(System): type = 'AlphaSystem' diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index 430473df3..537bfb918 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -46,6 +46,7 @@ #include "sim/host.hh" // for Tick #include "base/fast_alloc.hh" +#include "base/misc.hh" #include "base/trace.hh" #include "sim/serialize.hh" @@ -135,7 +136,7 @@ class Event : public Serializable, public FastAlloc /// same cycle (after unscheduling the old CPU's tick event). /// The switch needs to come before any tick events to make /// sure we don't tick both CPUs in the same cycle. - CPU_Switch_Pri = 31, + CPU_Switch_Pri = -31, /// Serailization needs to occur before tick events also, so /// that a serialize/unserialize is identical to an on-line @@ -351,7 +352,8 @@ inline void Event::schedule(Tick t) { assert(!scheduled()); - assert(t >= curTick); +// if (t < curTick) +// warn("t is less than curTick, ensure you don't want cycles"); setFlags(Scheduled); #if TRACING_ON diff --git a/src/sim/pseudo_inst.cc b/src/sim/pseudo_inst.cc index bd26e9dc5..aae2f6021 100644 --- a/src/sim/pseudo_inst.cc +++ b/src/sim/pseudo_inst.cc @@ -148,6 +148,54 @@ namespace AlphaPseudo exitSimLoop(when, "m5_exit instruction encountered"); } + void + loadsymbol(ExecContext *xc) + { + const string &filename = xc->getCpuPtr()->system->params()->symbolfile; + if (filename.empty()) { + return; + } + + std::string buffer; + ifstream file(filename.c_str()); + + if (!file) + fatal("file error: Can't open symbol table file %s\n", filename); + + while (!file.eof()) { + getline(file, buffer); + + if (buffer.empty()) + continue; + + int idx = buffer.find(' '); + if (idx == string::npos) + continue; + + string address = "0x" + buffer.substr(0, idx); + eat_white(address); + if (address.empty()) + continue; + + // Skip over letter and space + string symbol = buffer.substr(idx + 3); + eat_white(symbol); + if (symbol.empty()) + continue; + + Addr addr; + if (!to_number(address, addr)) + continue; + + if (!xc->getSystemPtr()->kernelSymtab->insert(addr, symbol)) + continue; + + + DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr); + } + file.close(); + } + void resetstats(ThreadContext *tc, Tick delay, Tick period) { diff --git a/src/sim/pseudo_inst.hh b/src/sim/pseudo_inst.hh index da2fb4ee3..d211de44e 100644 --- a/src/sim/pseudo_inst.hh +++ b/src/sim/pseudo_inst.hh @@ -51,6 +51,7 @@ namespace AlphaPseudo void ivle(ThreadContext *tc); void m5exit(ThreadContext *tc, Tick delay); void m5exit_old(ThreadContext *tc); + void loadsymbol(ThreadContext *xc); void resetstats(ThreadContext *tc, Tick delay, Tick period); void dumpstats(ThreadContext *tc, Tick delay, Tick period); void dumpresetstats(ThreadContext *tc, Tick delay, Tick period); diff --git a/src/sim/serialize.cc b/src/sim/serialize.cc index 6a1d084b7..941f0b1c6 100644 --- a/src/sim/serialize.cc +++ b/src/sim/serialize.cc @@ -52,6 +52,9 @@ #include "sim/sim_exit.hh" #include "sim/sim_object.hh" +// For stat reset hack +#include "sim/stat_control.hh" + using namespace std; int Serializable::ckptMaxCount = 0; @@ -404,3 +407,36 @@ Checkpoint::sectionExists(const std::string §ion) { return db->sectionExists(section); } + +/** Hacked stat reset event */ + +class StatresetParamContext : public ParamContext +{ + public: + StatresetParamContext(const string §ion); + ~StatresetParamContext(); + void startup(); +}; + +StatresetParamContext statParams("statsreset"); + +Param reset_cycle(&statParams, "reset_cycle", + "Cycle to reset stats on", 0); + +StatresetParamContext::StatresetParamContext(const string §ion) + : ParamContext(section) +{ } + +StatresetParamContext::~StatresetParamContext() +{ +} + +void +StatresetParamContext::startup() +{ + if (reset_cycle > 0) { + Stats::SetupEvent(Stats::Reset, curTick + reset_cycle, 0); + cprintf("Stats reset event scheduled for %lli\n", + curTick + reset_cycle); + } +} diff --git a/src/sim/stat_control.cc b/src/sim/stat_control.cc index 041830ab7..dfed2a0c8 100644 --- a/src/sim/stat_control.cc +++ b/src/sim/stat_control.cc @@ -160,13 +160,13 @@ class StatEvent : public Event Tick repeat; public: - StatEvent(int _flags, Tick _when, Tick _repeat); + StatEvent(EventQueue *queue, int _flags, Tick _when, Tick _repeat); virtual void process(); virtual const char *description(); }; -StatEvent::StatEvent(int _flags, Tick _when, Tick _repeat) - : Event(&mainEventQueue, Stat_Event_Pri), +StatEvent::StatEvent(EventQueue *queue, int _flags, Tick _when, Tick _repeat) + : Event(queue, Stat_Event_Pri), flags(_flags), repeat(_repeat) { setFlags(AutoDelete); @@ -185,8 +185,10 @@ StatEvent::process() if (flags & Stats::Dump) DumpNow(); - if (flags & Stats::Reset) + if (flags & Stats::Reset) { + cprintf("Resetting stats!\n"); reset(); + } if (repeat) schedule(curTick + repeat); @@ -214,9 +216,12 @@ DumpNow() } void -SetupEvent(int flags, Tick when, Tick repeat) +SetupEvent(int flags, Tick when, Tick repeat, EventQueue *queue) { - new StatEvent(flags, when, repeat); + if (queue == NULL) + queue = &mainEventQueue; + + new StatEvent(queue, flags, when, repeat); } /* namespace Stats */ } diff --git a/src/sim/stat_control.hh b/src/sim/stat_control.hh index fb369f640..67f7cc491 100644 --- a/src/sim/stat_control.hh +++ b/src/sim/stat_control.hh @@ -34,6 +34,8 @@ #include #include +class EventQueue; + namespace Stats { enum { @@ -45,7 +47,7 @@ class Output; extern std::list OutputList; void DumpNow(); -void SetupEvent(int flags, Tick when, Tick repeat = 0); +void SetupEvent(int flags, Tick when, Tick repeat = 0, EventQueue *queue = NULL); void InitSimStats(); diff --git a/src/sim/system.hh b/src/sim/system.hh index 11f4f0c90..3ab1d81f2 100644 --- a/src/sim/system.hh +++ b/src/sim/system.hh @@ -182,6 +182,7 @@ class System : public SimObject std::string kernel_path; std::string readfile; + std::string symbolfile; #endif }; diff --git a/util/batch/batch.py b/util/batch/batch.py new file mode 100644 index 000000000..91d354e97 --- /dev/null +++ b/util/batch/batch.py @@ -0,0 +1,249 @@ +# Copyright (c) 2006 The Regents of The University of Michigan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Kevin Lim + +import os, popen2, re, sys + +class MyPOpen(object): + def __init__(self, cmd, input = None, output = None, bufsize = -1): + self.status = -1 + + if input is None: + p2c_read, p2c_write = os.pipe() + self.tochild = os.fdopen(p2c_write, 'w', bufsize) + else: + p2c_write = None + if isinstance(input, file): + p2c_read = input.fileno() + elif isinstance(input, str): + input = file(input, 'r') + p2c_read = input.fileno() + elif isinstance(input, int): + p2c_read = input + else: + raise AttributeError + + if output is None: + c2p_read, c2p_write = os.pipe() + self.fromchild = os.fdopen(c2p_read, 'r', bufsize) + else: + c2p_read = None + if isinstance(output, file): + c2p_write = output.fileno() + elif isinstance(output, str): + output = file(output, 'w') + c2p_write = output.fileno() + elif isinstance(output, int): + c2p_write = output + else: + raise AttributeError + + self.pid = os.fork() + if self.pid == 0: + os.dup2(p2c_read, sys.stdin.fileno()) + os.dup2(c2p_write, sys.stdout.fileno()) + os.dup2(c2p_write, sys.stderr.fileno()) + try: + os.execvp(cmd[0], cmd) + finally: + os._exit(1) + + os.close(p2c_read) + os.close(c2p_write) + + def poll(self): + if self.status < 0: + pid, status = os.waitpid(self.pid, os.WNOHANG) + if pid == self.pid: + self.status = status + return self.status + + def wait(self): + if self.status < 0: + pid, status = os.waitpid(self.pid, 0) + if pid == self.pid: + self.status = status + return self.status + + +class oarsub: + def __init__(self): + self.walltime = None + self.queue = None + self.properties = None + + # OAR 2.0 parameters only! + self.name = None + self.afterok = None + self.notify = None + self.stderr = None + self.stdout = None + + + self.oarhost = None + self.oarsub = 'oarsub' + + self.jobid = re.compile('IdJob = (\S+)') + #self.outfile = open("jobnames.dat", "a+") + + def build(self, script, args = []): + self.cmd = [ self.oarsub ] + + print "args:", args + print "script:", script + if self.properties: + self.cmd.append('-p"%s"' % self.properties ) + + if self.queue: + self.cmd.append('-q "%s"' % self.queue) + + if self.walltime: + self.cmd.append('-l walltime=%s' % self.walltime) + + if script[0] != "/": + self.script = os.getcwd() + else: + self.script = script + + self.cmd.extend(args) + self.cmd.append(self.script) + #cmd = [ 'ssh', '-x', self.oarhost, '"cd %s; %s"' % (os.getcwd(), self.command) ] + self.command = ' '.join(self.cmd) + + print "command: [%s]" % self.command + + def do(self): + oar = MyPOpen(self.cmd) + self.result = oar.fromchild.read() + ec = oar.wait() + + if ec != 0 and self.oarhost: + pstdin, pstdout = os.popen4(self.command) + self.result = pstdout.read() + + jobid = self.jobid.match(self.result) + if jobid == None: + print "Couldn't get jobid from [%s]" % self.result + sys.exit(1) + else: + #self.outfile.write("%d %s\n" %(int(jobid.group(1)), self.name)); + #self.outfile.flush() + self.result = jobid.group(1) + + return 0 + +class qsub: + def __init__(self): + self.afterok = None + self.hold = False + self.join = False + self.keep_stdout = False + self.keep_stderr = False + self.node_type = None + self.mail_abort = False + self.mail_begin = False + self.mail_end = False + self.name = None + self.stdout = None + self.priority = None + self.queue = None + self.pbshost = None + self.qsub = 'qsub' + self.env = {} + + def build(self, script, args = []): + self.cmd = [ self.qsub ] + + if self.env: + arg = '-v' + arg += ','.join([ '%s=%s' % i for i in self.env.iteritems() ]) + self.cmd.append(arg) + + if self.hold: + self.cmd.append('-h') + + if self.stdout: + self.cmd.append('-olocalhost:' + self.stdout) + + if self.keep_stdout and self.keep_stderr: + self.cmd.append('-koe') + elif self.keep_stdout: + self.cmd.append('-ko') + elif self.keep_stderr: + self.cmd.append('-ke') + else: + self.cmd.append('-kn') + + if self.join: + self.cmd.append('-joe') + + if self.node_type: + self.cmd.append('-lnodes=' + self.node_type) + + if self.mail_abort or self.mail_begin or self.mail_end: + flags = '' + if self.mail_abort: + flags.append('a') + if self.mail_begin: + flags.append('b') + if self.mail_end: + flags.append('e') + if len(flags): + self.cmd.append('-m ' + flags) + else: + self.cmd.append('-mn') + + if self.name: + self.cmd.append("-N%s" % self.name) + + if self.priority: + self.cmd.append('-p' + self.priority) + + if self.queue: + self.cmd.append('-q' + self.queue) + + if self.afterok: + self.cmd.append('-Wdepend=afterok:%s' % self.afterok) + + self.cmd.extend(args) + self.script = script + self.command = ' '.join(self.cmd + [ self.script ]) + + def do(self): + pbs = MyPOpen(self.cmd + [ self.script ]) + self.result = pbs.fromchild.read() + ec = pbs.wait() + + if ec != 0 and self.pbshost: + cmd = ' '.join(self.cmd + [ '-' ]) + cmd = [ 'ssh', '-x', self.pbshost, cmd ] + self.command = ' '.join(cmd) + ssh = MyPOpen(cmd, input = self.script) + self.result = ssh.fromchild.read() + ec = ssh.wait() + + return ec diff --git a/util/batch/job.py b/util/batch/job.py new file mode 100755 index 000000000..9d7ecca8c --- /dev/null +++ b/util/batch/job.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python +# Copyright (c) 2006 The Regents of The University of Michigan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Kevin Lim + +import os, os.path, shutil, signal, socket, sys +from os import environ as env +from os.path import join as joinpath, expanduser + +def date(): + import time + return time.strftime('%a %b %e %H:%M:%S %Z %Y', time.localtime()) + +def cleandir(dir): + for root, dirs, files in os.walk(dir, False): + for name in files: + os.remove(joinpath(root, name)) + for name in dirs: + os.rmdir(joinpath(root, name)) + +class rsync: + def __init__(self): + self.sudo = False + self.rsync = 'rsync' + self.compress = False + self.archive = True + self.delete = False + self.options = '' + + def do(self, src, dst): + args = [] + if self.sudo: + args.append('sudo') + + args.append(self.rsync) + if (self.archive): + args.append('-a') + if (self.compress): + args.append('-z') + if (self.delete): + args.append('--delete') + if len(self.options): + args.append(self.options) + args.append(src) + args.append(dst) + + return os.spawnvp(os.P_WAIT, args[0], args) + +class JobDir(object): + def __init__(self, dir): + self.dir = dir + + def file(self, filename): + return joinpath(self.dir, filename) + + def create(self): + if os.path.exists(self.dir): + if not os.path.isdir(self.dir): + sys.exit('%s is not a directory. Cannot build job' % self.dir) + else: + os.mkdir(self.dir) + + def exists(self): + return os.path.isdir(self.dir) + + def clean(self): + cleandir(self.dir) + + def hasfile(self, filename): + return os.path.isfile(self.file(filename)) + + def echofile(self, filename, string): + filename = self.file(filename) + try: + f = file(filename, 'w') + print >>f, string + f.flush() + f.close() + except IOError,e: + sys.exit(e) + + def rmfile(self, filename): + filename = self.file(filename) + if os.path.isfile(filename): + os.unlink(filename) + + def readval(self, filename): + filename = self.file(filename) + f = file(filename, 'r') + value = f.readline().strip() + f.close() + return value + + def setstatus(self, string): + filename = self.file('.status') + try: + f = file(filename, 'a') + print >>f, string + f.flush() + f.close() + except IOError,e: + sys.exit(e) + + def getstatus(self): + filename = self.file('.status') + try: + f = file(filename, 'r') + except IOError, e: + return 'none' + + # fast forward to the end + for line in f: pass + + # the first word on the last line is the status + return line.split(' ')[0] + + def __str__(self): + return self.dir + +if __name__ == '__main__': + import platform + binaries = { 'i686' : 'm5.i386', + 'x86_64' : 'm5.amd64' } + binary = binaries[platform.machine()] + + cwd = os.getcwd() + rootdir = env.setdefault('ROOTDIR', os.path.dirname(cwd)) + oar_jobid = int(env['OAR_JOBID']) + oar_jobname = os.path.basename(cwd) + #pbs_jobname = env['PBS_JOBNAME'] + basedir = joinpath(rootdir, 'Base') + jobname = env.setdefault('JOBNAME', oar_jobname) + jobfile = env.setdefault('JOBFILE', joinpath(rootdir, 'Test.py')) + outdir = env.setdefault('OUTPUT_DIR', cwd) + env['POOLJOB'] = 'True' + + if os.path.isdir("/work"): + workbase = "/work" + else: + workbase = "/tmp/" + + workdir = joinpath(workbase, '%s.%s' % (env['USER'], oar_jobid)) + host = socket.gethostname() + + os.umask(0022) + + jobdir = JobDir(outdir) + + started = date() + jobdir.echofile('.running', started) + jobdir.rmfile('.queued') + jobdir.echofile('.host', host) + + jobdir.setstatus('running on %s on %s' % (host, started)) + + if os.path.isdir(workdir): + cleandir(workdir) + else: + os.mkdir(workdir) + + if False and os.path.isdir('/z/dist'): + sync = rsync() + sync.delete = True + sync.sudo = True + sync.do('poolfs::dist/m5/', '/z/dist/m5/') + + try: + os.chdir(workdir) + except OSError,e: + sys.exit(e) + + os.symlink(jobdir.file('output'), 'status.out') + + args = [ joinpath(basedir, binary), joinpath(basedir, 'run.py') ] + if not len(args): + sys.exit("no arguments") + + print 'starting job... %s' % started + print ' '.join(args) + print + sys.stdout.flush() + + childpid = os.fork() + if not childpid: + # Execute command + sys.stdin.close() + fd = os.open(jobdir.file("output"), + os.O_WRONLY | os.O_CREAT | os.O_TRUNC) + os.dup2(fd, sys.stdout.fileno()) + os.dup2(fd, sys.stderr.fileno()) + os.execvp(args[0], args) + + def handler(signum, frame): + if childpid != 0: + os.kill(childpid, signum) + + signal.signal(signal.SIGHUP, handler) + signal.signal(signal.SIGINT, handler) + signal.signal(signal.SIGQUIT, handler) + signal.signal(signal.SIGTERM, handler) + signal.signal(signal.SIGCONT, handler) + signal.signal(signal.SIGUSR1, handler) + signal.signal(signal.SIGUSR2, handler) + + done = 0 + while not done: + try: + thepid,ec = os.waitpid(childpid, 0) + if ec: + print 'Exit code ', ec + status = 'failure' + else: + status = 'success' + done = 1 + except OSError: + pass + + complete = date() + print '\njob complete... %s' % complete + jobdir.echofile('.%s' % status, complete) + jobdir.rmfile('.running') + jobdir.setstatus('%s on %s' % (status, complete)) diff --git a/util/batch/jobfile.py b/util/batch/jobfile.py new file mode 100644 index 000000000..b78d7f3e1 --- /dev/null +++ b/util/batch/jobfile.py @@ -0,0 +1,539 @@ +# Copyright (c) 2006 The Regents of The University of Michigan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Kevin Lim + +import sys + +class ternary(object): + def __new__(cls, *args): + if len(args) > 1: + raise TypeError, \ + '%s() takes at most 1 argument (%d given)' % \ + (cls.__name__, len(args)) + + if args: + if not isinstance(args[0], (bool, ternary)): + raise TypeError, \ + '%s() argument must be True, False, or Any' % \ + cls.__name__ + return args[0] + return super(ternary, cls).__new__(cls) + + def __bool__(self): + return True + + def __neg__(self): + return self + + def __eq__(self, other): + return True + + def __ne__(self, other): + return False + + def __str__(self): + return 'Any' + + def __repr__(self): + return 'Any' + +Any = ternary() + +class Flags(dict): + def __init__(self, *args, **kwargs): + super(Flags, self).__init__() + self.update(*args, **kwargs) + + def __getattr__(self, attr): + return self[attr] + + def __setattr__(self, attr, value): + self[attr] = value + + def __setitem__(self, item, value): + return super(Flags, self).__setitem__(item, ternary(value)) + + def __getitem__(self, item): + if item not in self: + return False + return super(Flags, self).__getitem__(item) + + def update(self, *args, **kwargs): + for arg in args: + if isinstance(arg, Flags): + super(Flags, self).update(arg) + elif isinstance(arg, dict): + for key,val in kwargs.iteritems(): + self[key] = val + else: + raise AttributeError, \ + 'flags not of type %s or %s, but %s' % \ + (Flags, dict, type(arg)) + + for key,val in kwargs.iteritems(): + self[key] = val + + def match(self, *args, **kwargs): + match = Flags(*args, **kwargs) + + for key,value in match.iteritems(): + if self[key] != value: + return False + + return True + +def crossproduct(items): + if not isinstance(items, (list, tuple)): + raise AttributeError, 'crossproduct works only on sequences' + + if not items: + yield None + return + + current = items[0] + remainder = items[1:] + + if not hasattr(current, '__iter__'): + current = [ current ] + + for item in current: + for rem in crossproduct(remainder): + data = [ item ] + if rem: + data += rem + yield data + +def flatten(items): + if not isinstance(items, (list, tuple)): + yield items + return + + for item in items: + for flat in flatten(item): + yield flat + +class Data(object): + def __init__(self, name, desc, **kwargs): + self.name = name + self.desc = desc + self.system = None + self.flags = Flags() + self.env = {} + for k,v in kwargs.iteritems(): + setattr(self, k, v) + + def update(self, obj): + if not isinstance(obj, Data): + raise AttributeError, "can only update from Data object" + + self.env.update(obj.env) + self.flags.update(obj.flags) + if obj.system: + if self.system and self.system != obj.system: + raise AttributeError, \ + "conflicting values for system: '%s'/'%s'" % \ + (self.system, obj.system) + self.system = obj.system + + def printinfo(self): + if self.name: + print 'name: %s' % self.name + if self.desc: + print 'desc: %s' % self.desc + if self.system: + print 'system: %s' % self.system + + def printverbose(self): + print 'flags:' + keys = self.flags.keys() + keys.sort() + for key in keys: + print ' %s = %s' % (key, self.flags[key]) + print 'env:' + keys = self.env.keys() + keys.sort() + for key in keys: + print ' %s = %s' % (key, self.env[key]) + print + + def __str__(self): + return self.name + +class Job(Data): + def __init__(self, options): + super(Job, self).__init__('', '') + self.setoptions(options) + + self.checkpoint = False + opts = [] + for opt in options: + cpt = opt.group.checkpoint + if not cpt: + self.checkpoint = True + continue + if isinstance(cpt, Option): + opt = cpt.clone(suboptions=False) + else: + opt = opt.clone(suboptions=False) + + opts.append(opt) + + if not opts: + self.checkpoint = False + + if self.checkpoint: + self.checkpoint = Job(opts) + + def clone(self): + return Job(self.options) + + def __getattribute__(self, attr): + if attr == 'name': + names = [ ] + for opt in self.options: + if opt.name: + names.append(opt.name) + return ':'.join(names) + + if attr == 'desc': + descs = [ ] + for opt in self.options: + if opt.desc: + descs.append(opt.desc) + return ', '.join(descs) + + return super(Job, self).__getattribute__(attr) + + def setoptions(self, options): + config = options[0].config + for opt in options: + if opt.config != config: + raise AttributeError, \ + "All options are not from the same Configuration" + + self.config = config + self.groups = [ opt.group for opt in options ] + self.options = options + + self.update(self.config) + for group in self.groups: + self.update(group) + + for option in self.options: + self.update(option) + if option._suboption: + self.update(option._suboption) + + def printinfo(self): + super(Job, self).printinfo() + if self.checkpoint: + print 'checkpoint: %s' % self.checkpoint.name + print 'config: %s' % self.config.name + print 'groups: %s' % [ g.name for g in self.groups ] + print 'options: %s' % [ o.name for o in self.options ] + super(Job, self).printverbose() + +class SubOption(Data): + def __init__(self, name, desc, **kwargs): + super(SubOption, self).__init__(name, desc, **kwargs) + self.number = None + +class Option(Data): + def __init__(self, name, desc, **kwargs): + super(Option, self).__init__(name, desc, **kwargs) + self._suboptions = [] + self._suboption = None + self.number = None + + def __getattribute__(self, attr): + if attr == 'name': + name = self.__dict__[attr] + if self._suboption is not None: + name = '%s:%s' % (name, self._suboption.name) + return name + + if attr == 'desc': + desc = [ self.__dict__[attr] ] + if self._suboption is not None and self._suboption.desc: + desc.append(self._suboption.desc) + return ', '.join(desc) + + + return super(Option, self).__getattribute__(attr) + + def suboption(self, name, desc, **kwargs): + subo = SubOption(name, desc, **kwargs) + subo.config = self.config + subo.group = self.group + subo.option = self + subo.number = len(self._suboptions) + self._suboptions.append(subo) + return subo + + def clone(self, suboptions=True): + option = Option(self.__dict__['name'], self.__dict__['desc']) + option.update(self) + option.group = self.group + option.config = self.config + option.number = self.number + if suboptions: + option._suboptions.extend(self._suboptions) + option._suboption = self._suboption + return option + + def subopts(self): + if not self._suboptions: + return [ self ] + + subopts = [] + for subo in self._suboptions: + option = self.clone() + option._suboption = subo + subopts.append(option) + + return subopts + + def printinfo(self): + super(Option, self).printinfo() + print 'config: %s' % self.config.name + super(Option, self).printverbose() + +class Group(Data): + def __init__(self, name, desc, **kwargs): + super(Group, self).__init__(name, desc, **kwargs) + self._options = [] + self.checkpoint = False + self.number = None + + def option(self, name, desc, **kwargs): + opt = Option(name, desc, **kwargs) + opt.config = self.config + opt.group = self + opt.number = len(self._options) + self._options.append(opt) + return opt + + def options(self): + return self._options + + def subopts(self): + subopts = [] + for opt in self._options: + for subo in opt.subopts(): + subopts.append(subo) + return subopts + + def printinfo(self): + super(Group, self).printinfo() + print 'config: %s' % self.config.name + print 'options: %s' % [ o.name for o in self._options ] + super(Group, self).printverbose() + +class Configuration(Data): + def __init__(self, name, desc, **kwargs): + super(Configuration, self).__init__(name, desc, **kwargs) + self._groups = [] + self._posfilters = [] + self._negfilters = [] + + def group(self, name, desc, **kwargs): + grp = Group(name, desc, **kwargs) + grp.config = self + grp.number = len(self._groups) + self._groups.append(grp) + return grp + + def groups(self, flags=Flags(), sign=True): + if not flags: + return self._groups + + return [ grp for grp in self._groups if sign ^ grp.flags.match(flags) ] + + def checkchildren(self, kids): + for kid in kids: + if kid.config != self: + raise AttributeError, "child from the wrong configuration" + + def sortgroups(self, groups): + groups = [ (grp.number, grp) for grp in groups ] + groups.sort() + return [ grp[1] for grp in groups ] + + def options(self, groups = None, checkpoint = False): + if groups is None: + groups = self._groups + self.checkchildren(groups) + groups = self.sortgroups(groups) + if checkpoint: + groups = [ grp for grp in groups if grp.checkpoint ] + optgroups = [ g.options() for g in groups ] + else: + optgroups = [ g.subopts() for g in groups ] + for options in crossproduct(optgroups): + for opt in options: + cpt = opt.group.checkpoint + if not isinstance(cpt, bool) and cpt != opt: + if checkpoint: + break + else: + yield options + else: + if checkpoint: + yield options + + def addfilter(self, filt, pos=True): + import re + filt = re.compile(filt) + if pos: + self._posfilters.append(filt) + else: + self._negfilters.append(filt) + + def jobfilter(self, job): + for filt in self._negfilters: + if filt.match(job.name): + return False + + if not self._posfilters: + return True + + for filt in self._posfilters: + if filt.match(job.name): + return True + + return False + + def checkpoints(self, groups = None): + for options in self.options(groups, True): + job = Job(options) + if self.jobfilter(job): + yield job + + def jobs(self, groups = None): + for options in self.options(groups, False): + job = Job(options) + if self.jobfilter(job): + yield job + + def alljobs(self, groups = None): + for options in self.options(groups, True): + yield Job(options) + for options in self.options(groups, False): + yield Job(options) + + def find(self, jobname): + for job in self.alljobs(): + if job.name == jobname: + return job + else: + raise AttributeError, "job '%s' not found" % jobname + + def job(self, options): + self.checkchildren(options) + options = [ (opt.group.number, opt) for opt in options ] + options.sort() + options = [ opt[1] for opt in options ] + job = Job(options) + return job + + def printinfo(self): + super(Configuration, self).printinfo() + print 'groups: %s' % [ g.name for g in self._grouips ] + super(Configuration, self).printverbose() + +def JobFile(jobfile): + from os.path import expanduser, isfile, join as joinpath + filename = expanduser(jobfile) + + # Can't find filename in the current path, search sys.path + if not isfile(filename): + for path in sys.path: + testname = joinpath(path, filename) + if isfile(testname): + filename = testname + break + else: + raise AttributeError, \ + "Could not find file '%s'" % jobfile + + data = {} + execfile(filename, data) + if 'conf' not in data: + raise ImportError, 'cannot import name conf from %s' % jobfile + conf = data['conf'] + import jobfile + if not isinstance(conf, Configuration): + raise AttributeError, \ + 'conf in jobfile: %s (%s) is not type %s' % \ + (jobfile, type(conf), Configuration) + return conf + +if __name__ == '__main__': + from jobfile import * + import sys + + usage = 'Usage: %s [-b] [-c] [-v] ' % sys.argv[0] + + try: + import getopt + opts, args = getopt.getopt(sys.argv[1:], '-bcv') + except getopt.GetoptError: + sys.exit(usage) + + if len(args) != 1: + raise AttributeError, usage + + both = False + checkpoint = False + verbose = False + for opt,arg in opts: + if opt == '-b': + both = True + checkpoint = True + if opt == '-c': + checkpoint = True + if opt == '-v': + verbose = True + + jobfile = args[0] + conf = JobFile(jobfile) + + if both: + gen = conf.alljobs() + elif checkpoint: + gen = conf.checkpoints() + else: + gen = conf.jobs() + + for job in gen: + if not verbose: + cpt = '' + if job.checkpoint: + cpt = job.checkpoint.name + print job.name, cpt + else: + job.printinfo() diff --git a/util/batch/send.py b/util/batch/send.py new file mode 100755 index 000000000..e7bf1958f --- /dev/null +++ b/util/batch/send.py @@ -0,0 +1,306 @@ +#!/usr/bin/env python +# Copyright (c) 2006 The Regents of The University of Michigan +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Kevin Lim + +import os, os.path, re, socket, sys +from os import environ as env, listdir +from os.path import basename, isdir, isfile, islink, join as joinpath, normpath +from filecmp import cmp as filecmp +from shutil import copy + +def nfspath(dir): + if dir.startswith('/.automount/'): + dir = '/n/%s' % dir[12:] + elif not dir.startswith('/n/'): + dir = '/n/%s%s' % (socket.gethostname().split('.')[0], dir) + return dir + +def syncdir(srcdir, destdir): + srcdir = normpath(srcdir) + destdir = normpath(destdir) + if not isdir(destdir): + sys.exit('destination directory "%s" does not exist' % destdir) + + for root, dirs, files in os.walk(srcdir): + root = normpath(root) + prefix = os.path.commonprefix([root, srcdir]) + root = root[len(prefix):] + if root.startswith('/'): + root = root[1:] + for rem in [ d for d in dirs if d.startswith('.') or d == 'SCCS']: + dirs.remove(rem) + + for entry in dirs: + newdir = joinpath(destdir, root, entry) + if not isdir(newdir): + os.mkdir(newdir) + print 'mkdir', newdir + + for i,d in enumerate(dirs): + if islink(joinpath(srcdir, root, d)): + dirs[i] = joinpath(d, '.') + + for entry in files: + dest = normpath(joinpath(destdir, root, entry)) + src = normpath(joinpath(srcdir, root, entry)) + if not isfile(dest) or not filecmp(src, dest): + print 'copy %s %s' % (dest, src) + copy(src, dest) + +progpath = nfspath(sys.path[0]) +progname = basename(sys.argv[0]) +usage = """\ +Usage: + %(progname)s [-c] [-e] [-f] [-j ] [-q queue] [-v] + -c clean directory if job can be run + -C submit the checkpointing runs + -d Make jobs be dependent on the completion of the checkpoint runs + -e only echo pbs command info, don't actually send the job + -f force the job to run regardless of state + -q submit job to the named queue + -j specify the jobfile (default is /Test.py) + -v be verbose + + %(progname)s [-j ] -l [-v] + -j specify the jobfile (default is /Test.py) + -l list job names, don't submit + -v be verbose (list job parameters) + + %(progname)s -h + -h display this help +""" % locals() + +try: + import getopt + opts, args = getopt.getopt(sys.argv[1:], '-Ccdefhj:lnq:Rt:v') +except getopt.GetoptError: + sys.exit(usage) + +depend = False +clean = False +onlyecho = False +exprs = [] +force = False +listonly = False +queue = '' +verbose = False +jfile = 'Test.py' +docpts = False +doruns = True +runflag = False +node_type = 'FAST' +update = True + +for opt,arg in opts: + if opt == '-C': + docpts = True + if opt == '-c': + clean = True + if opt == '-d': + depend = True + if opt == '-e': + onlyecho = True + if opt == '-f': + force = True + if opt == '-h': + print usage + sys.exit(0) + if opt == '-j': + jfile = arg + if opt == '-l': + listonly = True + if opt == '-n': + update = False + if opt == '-q': + queue = arg + if opt == '-R': + runflag = True + if opt == '-t': + node_type = arg + if opt == '-v': + verbose = True + +if docpts: + doruns = runflag + +for arg in args: + exprs.append(re.compile(arg)) + +import jobfile, batch +from job import JobDir, date + +conf = jobfile.JobFile(jfile) + +if update and not listonly and not onlyecho and isdir(conf.linkdir): + if verbose: + print 'Checking for outdated files in Link directory' + if not isdir(conf.basedir): + os.mkdir(conf.basedir) + syncdir(conf.linkdir, conf.basedir) + +jobnames = {} +joblist = [] + +if docpts and doruns: + gen = conf.alljobs() +elif docpts: + gen = conf.checkpoints() +elif doruns: + gen = conf.jobs() + +for job in gen: + if job.name in jobnames: + continue + + if exprs: + for expr in exprs: + if expr.match(job.name): + joblist.append(job) + break + else: + joblist.append(job) + +if listonly: + if verbose: + for job in joblist: + job.printinfo() + else: + for job in joblist: + print job.name + sys.exit(0) + +if not onlyecho: + newlist = [] + for job in joblist: + jobdir = JobDir(joinpath(conf.rootdir, job.name)) + if jobdir.exists(): + if not force: + status = jobdir.getstatus() + if status == 'queued': + continue + + if status == 'running': + continue + + if status == 'success': + continue + + if not clean: + sys.exit('job directory %s not clean!' % jobdir) + + jobdir.clean() + newlist.append(job) + joblist = newlist + +class NameHack(object): + def __init__(self, host='pbs.pool', port=24465): + self.host = host + self.port = port + self.socket = None + + def setname(self, jobid, jobname): + try: + jobid = int(jobid) + except ValueError: + jobid = int(jobid.strip().split('.')[0]) + + jobname = jobname.strip() + # since pbs can handle jobnames of 15 characters or less, + # don't use the raj hack. + if len(jobname) <= 15: + return + + if self.socket is None: + import socket + self.socket = socket.socket() + # Connect to pbs.pool and send the jobid/jobname pair to port + # 24465 (Raj didn't realize that there are only 64k ports and + # setup inetd to point to port 90001) + self.socket.connect((self.host, self.port)) + + self.socket.send("%s %s\n" % (jobid, jobname)) + +namehack = NameHack() + +rootdir = conf.rootdir +script = joinpath(rootdir, 'Base', 'job.py') + +for job in joblist: + jobdir = JobDir(joinpath(rootdir, job.name)) + if depend: + cptdir = JobDir(joinpath(rootdir, job.checkpoint.name)) + path = str(cptdir) + if not isdir(path) or not isfile(joinpath(path, '.success')): + continue + + cptjob = cptdir.readval('.batch_jobid') + + if not onlyecho: + jobdir.create() + os.chdir(str(jobdir)) + os.environ['PWD'] = str(jobdir) + + print 'Job name: %s' % job.name + print 'Job directory: %s' % jobdir + + + qsub = batch.oarsub() + qsub.oarhost = 'poolfs.eecs.umich.edu' + #qsub.stdout = jobdir.file('jobout') + qsub.name = job.name + qsub.walltime = '50' + #qsub.join = True + #qsub.node_type = node_type + #qsub.env['ROOTDIR'] = conf.rootdir + #qsub.env['JOBNAME'] = job.name + #if depend: + # qsub.afterok = cptjob + #if queue: + # qsub.queue = queue + qsub.properties = "64bit = 'Yes' or 64bit = 'No'" + qsub.build(script) + + if verbose: + print 'cwd: %s' % qsub.command + print 'PBS Command: %s' % qsub.command + + if not onlyecho: + ec = qsub.do() + if ec == 0: + jobid = qsub.result + print 'OAR Jobid: %s' % jobid + #namehack.setname(jobid, job.name) + queued = date() + jobdir.echofile('.batch_jobid', jobid) + jobdir.echofile('.batch_jobname', job.name) + jobdir.echofile('.queued', queued) + jobdir.setstatus('queued on %s' % queued) + else: + print 'OAR Failed' + print + print diff --git a/util/m5/m5.c b/util/m5/m5.c index 193c0e329..23401aea5 100644 --- a/util/m5/m5.c +++ b/util/m5/m5.c @@ -169,6 +169,22 @@ main(int argc, char *argv[]) } } + if (COMPARE("readfile")) { + char buf[256*1024]; + int offset = 0; + int len; + + if (argc != 2) + usage(); + + while ((len = m5_readfile(buf, sizeof(buf), offset)) > 0) { + write(STDOUT_FILENO, buf, len); + offset += len; + } + + return 0; + } + if (COMPARE("checkpoint")) { switch (argc) { case 4: @@ -186,6 +202,9 @@ main(int argc, char *argv[]) return 0; } + if (COMPARE("loadsymbol")) { + m5_loadsymbol(arg1); + return 0; if (COMPARE("readfile")) { char buf[256*1024]; int offset = 0; diff --git a/util/m5/m5op.S b/util/m5/m5op.S index 5c0212189..a19113e62 100644 --- a/util/m5/m5op.S +++ b/util/m5/m5op.S @@ -41,6 +41,7 @@ #define exit_old_func 0x20 // deprectated! #define exit_func 0x21 #define initparam_func 0x30 +#define loadsymbol_func 0x31 #define resetstats_func 0x40 #define dumpstats_func 0x41 #define dumprststats_func 0x42 @@ -77,6 +78,7 @@ func: #define IVLE(reg) INST(m5_op, reg, 0, ivle_func) #define M5EXIT(reg) INST(m5_op, reg, 0, exit_func) #define INITPARAM(reg) INST(m5_op, reg, 0, initparam_func) +#define LOADSYMBOL(reg) INST(m5_op, reg, 0, loadsymbol_func) #define RESET_STATS(r1, r2) INST(m5_op, r1, r2, resetstats_func) #define DUMP_STATS(r1, r2) INST(m5_op, r1, r2, dumpstats_func) #define DUMPRST_STATS(r1, r2) INST(m5_op, r1, r2, dumprststats_func) @@ -146,6 +148,12 @@ LEAF(m5_initparam) RET END(m5_initparam) + .align 4 +LEAF(m5_loadsymbol) + LOADSYMBOL(0) + RET +END(m5_loadsymbol) + .align 4 LEAF(m5_reset_stats) RESET_STATS(16, 17)