X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firarch.h;h=7465fdc57eef42940769a91104531312b2cec610;hb=969f52a3743dd60803f8fd5122aa8c714d17ae32;hp=bacbf2bfc247443d311b7d7e16fbc5948963f6f9;hpb=e7ba741cdd9599ce05d7989bff60a1c6137ee0b5;p=libfirm diff --git a/include/libfirm/irarch.h b/include/libfirm/irarch.h index bacbf2bfc..7465fdc57 100644 --- a/include/libfirm/irarch.h +++ b/include/libfirm/irarch.h @@ -29,6 +29,29 @@ #include "firm_types.h" +/** + * The Multiplication replacement can consist of the following instructions. + */ +typedef enum instr { + LEA, /**< the LEA instruction */ + SHIFT, /**< the SHIFT instruction */ + SUB, /**< the SUB instruction */ + ADD, /**< the ADD instruction */ + ZERO, /**< creates a ZERO constant */ + MUL, /**< the original MUL instruction */ + ROOT, /**< the ROOT value that is multiplied */ +} insn_kind; + +/** + * A Callback for evaluating the costs of an instruction. + * + * @param kind the instruction + * @param tv for MUL instruction, the multiplication constant + * + * @return the costs of this instruction + */ +typedef int (*evaluate_costs_func)(insn_kind kind, tarval *tv); + /** * A parameter structure that drives the machine dependent Firm * optimizations. @@ -40,6 +63,7 @@ struct ir_settings_arch_dep_t { unsigned highest_shift_amount; /**< The highest shift amount you want to tolerate. Muls which would require a higher shift constant are left. */ + evaluate_costs_func evaluate; /**< Evaluate the costs of a generated instruction. */ /* Div/Mod optimization */ unsigned allow_mulhs : 1; /**< Use the Mulhs operation for division by constant */