Configure.xcc

Benoit Dupont de Dinechin (Benoit.Dupont-de-Dinechin@st.com).

Copyright 2002 - 2007 STMicroelectronics. Copyright 1995 - 1998 Commissariat a l'Energie Atomique.

This program is free software; you can redistribute it and/or modify it under the terms of either (at your option): the GNU General Public License (GPL) version 2; the GNU Lesser General Public License (LGPL) version 2.1; any later version of these licences as published by the Free Software Foundation.

ConfigureCompensation— Enumeration of the code compensation levels.

Code compensation results from code motion down a branch.

typedef enum {
  ConfigureCompensation_None,           // No code compensation.
  ConfigureCompensation_Local,          // Local code compensation.
  ConfigureCompensation_Global,         // Global code compensation.
  ConfigureCompensation__
} enum_ConfigureCompensation;
typedef uint8_t ConfigureCompensation;
extern const char *
ConfigureCompensation_name_(ConfigureCompensation this);
ConfigureSpeculation— Enumeration of the control speculation levels.

Speculation is the execution of code under a more general condition than original.

typedef enum {
  ConfigureSpeculation_None,            // No control speculation.
  ConfigureSpeculation_SafeArith,       // Speculation of safe arithmetic operations.
  ConfigureSpeculation_SafeAccess,      // Speculation of safe memory accesses.
  ConfigureSpeculation_SafeVariant,     // Speculation of operations with safe variant.
  ConfigureSpeculation_MayExcept,       // Speculation of may be excepting operations.
  ConfigureSpeculation__
} enum_ConfigureSpeculation;
typedef uint8_t ConfigureSpeculation;
extern const char *
ConfigureSpeculation_name_(ConfigureSpeculation this);
ConfigureRelaxation— Enumeration of the inductive relaxation levels.

Inductive relaxation enables to relax dependences on simple induction variables.

typedef enum {
  ConfigureRelaxation_None,             // No inductive relaxation.
  ConfigureRelaxation_Local,            // Local inductive relaxation.
  ConfigureRelaxation_Global,           // Global inductive relaxation.
  ConfigureRelaxation__
} enum_ConfigureRelaxation;
typedef uint8_t ConfigureRelaxation;
extern const char *
ConfigureRelaxation_name_(ConfigureRelaxation this);
ConfigureRenaming— Enumeration of the register renaming levels.
typedef enum {
  ConfigureRenaming_None,               // No register renaming.
  ConfigureRenaming_Normal,             // Normal register renaming.
  ConfigureRenaming_Local,              // Local register modulo renaming.
  ConfigureRenaming_Global,             // Global register modulo renaming.
  ConfigureRenaming_Shuffle,            // Suffle global registers.
  ConfigureRenaming__
} enum_ConfigureRenaming;
typedef uint8_t ConfigureRenaming;
extern const char *
ConfigureRenaming_name_(ConfigureRenaming this);
ConfigureBoosting— Enumeration of the operation boosting levels.

Boosting is the enabling of control speculation by code predication.

typedef enum {
  ConfigureBoosting_None,               // No operation boosting.
  ConfigureBoosting_Reuse,              // Reuse branch predicates.
  ConfigureBoosting_Combine,            // Combine branch predicates.
  ConfigureBoosting__
} enum_ConfigureBoosting;
typedef uint8_t ConfigureBoosting;
extern const char *
ConfigureBoosting_name_(ConfigureBoosting this);
ConfigureAliasing— Memory aliasing level.

Enumerate how memory aliasing inside a loop can be overridden.

typedef enum {
  ConfigureAliasing_Serial,             // Serialize all memory accesses.
  ConfigureAliasing_Normal,             // Normal aliasing of memory accesses.
  ConfigureAliasing_Vector,             // Assume vector loop memory aliasing.
  ConfigureAliasing_Parallel,           // Assume parallel loop memory aliasing.
  ConfigureAliasing_Liberal,            // Assume no alias of variant memory accesses.
  ConfigureAliasing__
} enum_ConfigureAliasing;
typedef uint8_t ConfigureAliasing;
extern const char *
ConfigureAliasing_name_(ConfigureAliasing this);
ConfigurePreLoading— Memory pre-loading level.
typedef enum {
  ConfigurePreLoading_None,             // Disable pre-loading.
  ConfigurePreLoading_Simple,           // Pre-loading of simple induction LOADs.
  ConfigurePreLoading_Variant,          // Pre-loading of variant address LOADs.
  ConfigurePreLoading_Indirect,         // Pre-loading of indirect LOADs.
  ConfigurePreLoading_NonSpill,         // Pre-loading of non-spill LOADs.
  ConfigurePreLoading__
} enum_ConfigurePreLoading;
typedef uint8_t ConfigurePreLoading;
extern const char *
ConfigurePreLoading_name_(ConfigurePreLoading this);
ConfigureItem— Enumerate the Configure items.

Each ConfigureItem can have a negative value, meaning that the value is undefined.

typedef enum {
  ConfigureItem_Processor,              // Processor in use.
  ConfigureItem_Compensation,           // See ConfigureCompensation.
  ConfigureItem_Speculation,            // See ConfigureSpeculation.
  ConfigureItem_Relaxation,             // See ConfigureRelaxation.
  ConfigureItem_Renaming,               // See ConfigureRenaming.
  ConfigureItem_Boosting,               // See ConfigureBoosting.
  ConfigureItem_Aliasing,               // See ConfigureAliasing.
  ConfigureItem_TripModulus,            // Modulus of loop trip count.
  ConfigureItem_TripResidue,            // Residue of loop trip count.
  ConfigureItem_Pipelining,             // Software pipelining level.
    // 0 => cyclic instruction schedule,
    // 1 => software pipelining with overlap 1,
    // n => software pipelining with overlap (1<<n)-1.
  ConfigureItem_PreLoading,             // See ConfigurePreLoading.
  ConfigureItem_L1MissExtra,            // Extra latency of L1 miss.
  ConfigureItem__
} enum_ConfigureItem;
typedef uint8_t ConfigureItem;
extern const char *
ConfigureItem_name_(ConfigureItem this);
Configure— Array of ConfigureItem values.
struct Configure_ {
  //@args
  int8_t ITEMS[ConfigureItem__];
  //@access PROCESSOR   (*Configure__PROCESSOR(this) + 0)
  //@mutate PROCESSOR   (Configure_ITEMS(this) + ConfigureItem_Processor)
  //@access COMPENSATION        (*Configure__COMPENSATION(this) + 0)
  //@mutate COMPENSATION        (Configure_ITEMS(this) + ConfigureItem_Compensation)
  //@access SPECULATION (*Configure__SPECULATION(this) + 0)
  //@mutate SPECULATION (Configure_ITEMS(this) + ConfigureItem_Speculation)
  //@access RELAXATION  (*Configure__RELAXATION(this) + 0)
  //@mutate RELAXATION  (Configure_ITEMS(this) + ConfigureItem_Relaxation)
  //@access RENAMING    (*Configure__RENAMING(this) + 0)
  //@mutate RENAMING    (Configure_ITEMS(this) + ConfigureItem_Renaming)
  //@access BOOSTING    (*Configure__BOOSTING(this) + 0)
  //@mutate BOOSTING    (Configure_ITEMS(this) + ConfigureItem_Boosting)
  //@access ALIASING    (*Configure__ALIASING(this) + 0)
  //@mutate ALIASING    (Configure_ITEMS(this) + ConfigureItem_Aliasing)
  //@access TRIPMODULUS (*Configure__TRIPMODULUS(this) + 0)
  //@mutate TRIPMODULUS (Configure_ITEMS(this) + ConfigureItem_TripModulus)
  //@access TRIPRESIDUE (*Configure__TRIPRESIDUE(this) + 0)
  //@mutate TRIPRESIDUE (Configure_ITEMS(this) + ConfigureItem_TripResidue)
  //@access PIPELINING  (*Configure__PIPELINING(this) + 0)
  //@mutate PIPELINING  (Configure_ITEMS(this) + ConfigureItem_Pipelining)
  //@access PRELOADING  (*Configure__PRELOADING(this) + 0)
  //@mutate PRELOADING  (Configure_ITEMS(this) + ConfigureItem_PreLoading)
  //@access L1MISSEXTRA (*Configure__L1MISSEXTRA(this) + 0)
  //@mutate L1MISSEXTRA (Configure_ITEMS(this) + ConfigureItem_L1MissExtra)
  //@access OVERLAP     ((1<<Configure_PIPELINING(this)) - 1)
};
Configure_pretty— Print this Configure item values.
bool
Configure_pretty(const_Configure this, FILE *file);
Configure_loadVA— Load this Configure from a va_list.
void
Configure_loadVA(Configure this, int item, va_list va);
Configure_load— Load this Configure from variable arguments.
void
Configure_load(Configure this, ConfigureItem item, ...);
Configure_print— Print this Configure item values.
bool
Configure_print(Configure this, FILE *file);
Configure_merge— Merge that Configure items into this Configure items.

The item values of that Configure override the item values of this Configure, unless for the values of that Configure that are negative.

void
Configure_merge(Configure this, Configure that);