1 #ifndef FIRM_OPT_H 2 #define FIRM_OPT_H 3 4 #include <stdio.h> 5 #include <libfirm/firm_types.h> 6 #include <libfirm/dbginfo.h> 7 8 enum rts_names { 9 rts_debugbreak, /**< the name of the __debugbreak() intrinsic */ 10 rts_abort, /**< the name of the abort() function */ 11 rts_abs, /**< the name of the abs() function */ 12 rts_alloca, /**< the name of the alloca() function */ 13 rts_labs, /**< the name of the labs() function */ 14 rts_llabs, /**< the name of the llabs() function */ 15 rts_imaxabs, /**< the name of the imaxabs() function */ 16 17 /* double -> double functions */ 18 rts_fabs, /**< the name of the fabs() function */ 19 rts_sqrt, /**< the name of the sqrt() function */ 20 rts_cbrt, /**< the name of the cbrt() function */ 21 rts_pow, /**< the name of the pow() function */ 22 rts_exp, /**< the name of the exp() function */ 23 rts_exp2, /**< the name of the exp2() function */ 24 rts_exp10, /**< the name of the exp10() function */ 25 rts_log, /**< the name of the log() function */ 26 rts_log2, /**< the name of the log2() function */ 27 rts_log10, /**< the name of the log10() function */ 28 rts_sin, /**< the name of the sin() function */ 29 rts_cos, /**< the name of the cos() function */ 30 rts_tan, /**< the name of the tan() function */ 31 rts_asin, /**< the name of the asin() function */ 32 rts_acos, /**< the name of the acos() function */ 33 rts_atan, /**< the name of the atan() function */ 34 rts_sinh, /**< the name of the sinh() function */ 35 rts_cosh, /**< the name of the cosh() function */ 36 rts_tanh, /**< the name of the tanh() function */ 37 38 /* float -> float functions */ 39 rts_fabsf, /**< the name of the fabsf() function */ 40 rts_sqrtf, /**< the name of the sqrtf() function */ 41 rts_cbrtf, /**< the name of the cbrtf() function */ 42 rts_powf, /**< the name of the powf() function */ 43 rts_expf, /**< the name of the expf() function */ 44 rts_exp2f, /**< the name of the exp2f() function */ 45 rts_exp10f, /**< the name of the exp10f() function */ 46 rts_logf, /**< the name of the logf() function */ 47 rts_log2f, /**< the name of the log2f() function */ 48 rts_log10f, /**< the name of the log10f() function */ 49 rts_sinf, /**< the name of the sinf() function */ 50 rts_cosf, /**< the name of the cosf() function */ 51 rts_tanf, /**< the name of the tanf() function */ 52 rts_asinf, /**< the name of the asinf() function */ 53 rts_acosf, /**< the name of the acosf() function */ 54 rts_atanf, /**< the name of the atanf() function */ 55 rts_sinhf, /**< the name of the sinhf() function */ 56 rts_coshf, /**< the name of the coshf() function */ 57 rts_tanhf, /**< the name of the tanhf() function */ 58 59 /* long double -> long double functions */ 60 rts_fabsl, /**< the name of the fabsl() function */ 61 rts_sqrtl, /**< the name of the sqrtl() function */ 62 rts_cbrtl, /**< the name of the cbrtl() function */ 63 rts_powl, /**< the name of the powl() function */ 64 rts_expl, /**< the name of the expl() function */ 65 rts_exp2l, /**< the name of the exp2l() function */ 66 rts_exp10l, /**< the name of the exp10l() function */ 67 rts_logl, /**< the name of the log() function */ 68 rts_log2l, /**< the name of the log2() function */ 69 rts_log10l, /**< the name of the log10() function */ 70 rts_sinl, /**< the name of the sinl() function */ 71 rts_cosl, /**< the name of the cosl() function */ 72 rts_tanl, /**< the name of the tanl() function */ 73 rts_asinl, /**< the name of the asinl() function */ 74 rts_acosl, /**< the name of the acosl() function */ 75 rts_atanl, /**< the name of the atanl() function */ 76 rts_sinhl, /**< the name of the sinhl() function */ 77 rts_coshl, /**< the name of the coshl() function */ 78 rts_tanhl, /**< the name of the tanhl() function */ 79 80 /* string functions */ 81 rts_strcmp, /**< the name of the strcmp() function */ 82 rts_strncmp, /**< the name of the strncmp() function */ 83 rts_strcpy, /**< the name of the strcpy() function */ 84 rts_strlen, /**< the name of the strlen() function */ 85 rts_memcpy, /**< the name of the memcpy() function */ 86 rts_mempcpy, /**< the name of the mempcpy() function */ 87 rts_memmove, /**< the name of the memmove() function */ 88 rts_memset, /**< the name of the memset() function */ 89 rts_memcmp, /**< the name of the memcmp() function */ 90 91 rts_max 92 }; 93 94 extern ir_entity *rts_entities[rts_max]; 95 96 /** Initialize for the Firm-generating back end. */ 97 void gen_firm_init(void); 98 99 /** free resources hold by firm-generating back end */ 100 void gen_firm_finish(void); 101 102 /** 103 * Transform, optimize and generate code 104 * 105 * @param out a file handle for the output, may be NULL 106 * @param input_filename the name of the (main) source file 107 */ 108 void generate_code(FILE *out, const char *input_filename); 109 110 /** process optimization commandline option */ 111 int firm_option(const char *opt); 112 113 typedef void (*print_option_help_func)(const char *name, const char *description); 114 115 void firm_option_help(print_option_help_func func); 116 117 /** Choose an optimization level. (Typically used to interpret the -O compiler 118 * switches) */ 119 void choose_optimization_pack(int level); 120 121 /** 122 * Initialize implicit optimization settings in firm. Frontends should call this 123 * before starting graph construction 124 */ 125 void init_implicit_optimizations(void); 126 127 #endif 128