X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firarch.h;h=79071db40d4f78afefa701c093761d892052c09b;hb=fa9c992b5f23e7a059ac91fdd04b409b951ebcc4;hp=bacbf2bfc247443d311b7d7e16fbc5948963f6f9;hpb=e7ba741cdd9599ce05d7989bff60a1c6137ee0b5;p=libfirm diff --git a/include/libfirm/irarch.h b/include/libfirm/irarch.h index bacbf2bfc..79071db40 100644 --- a/include/libfirm/irarch.h +++ b/include/libfirm/irarch.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -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. @@ -36,15 +59,16 @@ struct ir_settings_arch_dep_t { /* Mul optimization */ unsigned also_use_subs : 1; /**< Use also Subs when resolving Muls to shifts */ - int maximum_shifts; /**< The maximum number of shifts that shall be inserted for a mul. */ + unsigned maximum_shifts; /**< The maximum number of shifts that shall be inserted for a mul. */ 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 */ unsigned allow_mulhu : 1; /**< Use the Mulhu operation for division by constant */ - int max_bits_for_mulh; /**< Maximum number of bits the Mulh operation can take. + unsigned max_bits_for_mulh; /**< Maximum number of bits the Mulh operation can take. Modes with higher amount of bits will use Mulh */ };