-/**
- * Checks if node is a Store or xStore/vfStore.
- */
-int is_ia32_St(const ir_node *node) {
- int op = get_ia32_irn_opcode(node);
- return op == iro_ia32_Store || op == iro_ia32_xStore || op == iro_ia32_vfst || op == iro_ia32_fst || op == iro_ia32_fstp;
+/***************************************************************************************
+ * _ _ _
+ * | | | | | |
+ * _ __ ___ __| | ___ ___ ___ _ __ ___| |_ _ __ _ _ ___| |_ ___ _ __ ___
+ * | '_ \ / _ \ / _` |/ _ \ / __/ _ \| '_ \/ __| __| '__| | | |/ __| __/ _ \| '__/ __|
+ * | | | | (_) | (_| | __/ | (_| (_) | | | \__ \ |_| | | |_| | (__| || (_) | | \__ \
+ * |_| |_|\___/ \__,_|\___| \___\___/|_| |_|___/\__|_| \__,_|\___|\__\___/|_| |___/
+ *
+ ***************************************************************************************/
+
+/* default compare operation to compare attributes */
+int ia32_compare_attr(const ia32_attr_t *a, const ia32_attr_t *b) {
+ if (a->data.tp != b->data.tp)
+ return 1;
+
+ if (a->data.am_scale != b->data.am_scale
+ || a->data.am_sc_sign != b->data.am_sc_sign
+ || a->am_offs != b->am_offs
+ || a->am_sc != b->am_sc
+ || a->ls_mode != b->ls_mode)
+ return 1;
+
+ /* nodes with not yet assigned entities shouldn't be CSEd (important for
+ * unsigned int -> double conversions */
+ if(a->data.use_frame && a->frame_ent == NULL)
+ return 1;
+ if(b->data.use_frame && b->frame_ent == NULL)
+ return 1;
+
+ if (a->data.use_frame != b->data.use_frame
+ || a->frame_ent != b->frame_ent)
+ return 1;
+
+ if (a->data.tp != b->data.tp)
+ return 1;
+
+ if (a->data.has_except_label != b->data.has_except_label)
+ return 1;
+
+ if (a->data.ins_permuted != b->data.ins_permuted
+ || a->data.cmp_unsigned != b->data.cmp_unsigned)
+ return 1;
+
+ return 0;