}
}
+static const char *
+bi_special_op_name(enum bi_special_op op)
+{
+ switch (op) {
+ case BI_SPECIAL_FRCP: return "frcp";
+ case BI_SPECIAL_FRSQ: return "frsq";
+ case BI_SPECIAL_FATAN: return "fatan";
+ case BI_SPECIAL_FSIN: return "fsin";
+ case BI_SPECIAL_FCOS: return "fcos";
+ case BI_SPECIAL_FEXP: return "fexp";
+ case BI_SPECIAL_FLOG2: return "flog2";
+ case BI_SPECIAL_FLOGE: return "flog";
+ default: return "invalid";
+ }
+}
+
static void
bi_print_load_vary(struct bi_load_vary *load, FILE *fp)
{
fprintf(fp, "%s", bi_bitwise_op_name(ins->op.bitwise));
else if (ins->type == BI_ROUND)
fprintf(fp, ins->op.round == BI_ROUND_MODE ? "roundMode": "round");
+ else if (ins->type == BI_SPECIAL)
+ fprintf(fp, "%s", bi_special_op_name(ins->op.special));
else
fprintf(fp, "%s", bi_class_name(ins->type));
BI_ROUND_ROUND /* i.e.: fround() */
};
+enum bi_special_op {
+ BI_SPECIAL_FRCP,
+ BI_SPECIAL_FRSQ,
+ BI_SPECIAL_FATAN,
+ BI_SPECIAL_FSIN,
+ BI_SPECIAL_FCOS,
+ BI_SPECIAL_FEXP,
+ BI_SPECIAL_FLOG2,
+ BI_SPECIAL_FLOGE
+};
+
typedef struct {
struct list_head link; /* Must be first */
enum bi_class type;
enum bi_minmax_op minmax;
enum bi_bitwise_op bitwise;
enum bi_round_op round;
+ enum bi_special_op special;
} op;
/* Union for class-specific information */