diff options
Diffstat (limited to 'gcc/config/i386/i386.h')
-rw-r--r-- | gcc/config/i386/i386.h | 120 |
1 files changed, 1 insertions, 119 deletions
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index d4abbbf..a7d7702 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1678,124 +1678,6 @@ typedef struct ix86_args { } \ } - -/* There are three profiling modes for basic blocks available. - The modes are selected at compile time by using the options - -a or -ax of the gnu compiler. - The variable `profile_block_flag' will be set according to the - selected option. - - profile_block_flag == 0, no option used: - - No profiling done. - - profile_block_flag == 1, -a option used. - - Count frequency of execution of every basic block. - - profile_block_flag == 2, -ax option used. - - Generate code to allow several different profiling modes at run time. - Available modes are: - Produce a trace of all basic blocks. - Count frequency of jump instructions executed. - In every mode it is possible to start profiling upon entering - certain functions and to disable profiling of some other functions. - - The result of basic-block profiling will be written to a file `bb.out'. - If the -ax option is used parameters for the profiling will be read - from file `bb.in'. - -*/ - -/* The following macro shall output assembler code to FILE - to initialize basic-block profiling. */ - -#undef FUNCTION_BLOCK_PROFILER -#define FUNCTION_BLOCK_PROFILER(FILE, BLOCK_OR_LABEL) \ - ix86_output_function_block_profiler (FILE, BLOCK_OR_LABEL) - -/* The following macro shall output assembler code to FILE - to increment a counter associated with basic block number BLOCKNO. */ - -#define BLOCK_PROFILER(FILE, BLOCKNO) \ - ix86_output_block_profiler (FILE, BLOCKNO) - -/* The following macro shall output rtl for the epilogue - to indicate a return from function during basic-block profiling. - - If profiling_block_flag == 2: - - Output assembler code to call function `__bb_trace_ret'. - - Note that function `__bb_trace_ret' must not change the - machine state, especially the flag register. To grant - this, you must output code to save and restore registers - either in this macro or in the macros MACHINE_STATE_SAVE - and MACHINE_STATE_RESTORE. The last two macros will be - used in the function `__bb_trace_ret', so you must make - sure that the function prologue does not change any - register prior to saving it with MACHINE_STATE_SAVE. - - else if profiling_block_flag != 0: - - The macro will not be used, so it need not distinguish - these cases. -*/ - -#define FUNCTION_BLOCK_PROFILER_EXIT \ -emit_call_insn (gen_call (gen_rtx_MEM (QImode, \ - gen_rtx_SYMBOL_REF (VOIDmode, "__bb_trace_ret")), \ - const0_rtx, constm1_rtx)) - -/* The function `__bb_trace_func' is called in every basic block - and is not allowed to change the machine state. Saving (restoring) - the state can either be done in the BLOCK_PROFILER macro, - before calling function (rsp. after returning from function) - `__bb_trace_func', or it can be done inside the function by - defining the macros: - - MACHINE_STATE_SAVE(ID) - MACHINE_STATE_RESTORE(ID) - - In the latter case care must be taken, that the prologue code - of function `__bb_trace_func' does not already change the - state prior to saving it with MACHINE_STATE_SAVE. - - The parameter `ID' is a string identifying a unique macro use. - - On the i386 the initialization code at the begin of - function `__bb_trace_func' contains a `sub' instruction - therefore we handle save and restore of the flag register - in the BLOCK_PROFILER macro. - - Note that ebx, esi, and edi are callee-save, so we don't have to - preserve them explicitly. */ - -#define MACHINE_STATE_SAVE(ID) \ -do { \ - register int eax_ __asm__("eax"); \ - register int ecx_ __asm__("ecx"); \ - register int edx_ __asm__("edx"); \ - __asm__ __volatile__ ("\ -push{l} %0\n\t\ -push{l} %1\n\t\ -push{l} %2" \ - : : "r"(eax_), "r"(ecx_), "r"(edx_)); \ -} while (0); - -#define MACHINE_STATE_RESTORE(ID) \ -do { \ - register int eax_ __asm__("eax"); \ - register int ecx_ __asm__("ecx"); \ - register int edx_ __asm__("edx"); \ - __asm__ __volatile__ ("\ -pop{l} %2\n\t\ -pop{l} %1\n\t\ -pop{l} %0" \ - : "=r"(eax_), "=r"(ecx_), "=r"(edx_)); \ -} while (0); - /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in functions that have frame pointers. @@ -2315,7 +2197,7 @@ while (0) #define FINALIZE_PIC \ do \ { \ - current_function_uses_pic_offset_table |= profile_flag | profile_block_flag; \ + current_function_uses_pic_offset_table |= profile_flag; \ } \ while (0) |