+
+ if (d1->alignment[cpt] != d2->alignment[cpt]) {
+ DEBUG5("ddt_cmp: %s->alignment=%ld != %s->alignment=%ld (on %s)",
+ d1->name,d1->alignment[cpt],d2->name,d2->alignment[cpt],
+ gras_arches[cpt].name);
+ return d1->alignment[cpt] > d2->alignment[cpt] ? 1 : -1;
+ }
+
+ if (d1->aligned_size[cpt] != d2->aligned_size[cpt]) {
+ DEBUG5("ddt_cmp: %s->aligned_size=%ld != %s->aligned_size=%ld (on %s)",
+ d1->name,d1->aligned_size[cpt],d2->name,d2->aligned_size[cpt],
+ gras_arches[cpt].name);
+ return d1->aligned_size[cpt] > d2->aligned_size[cpt] ? 1 : -1;
+ }
+ }
+
+ if (d1->category_code != d2->category_code) {
+ DEBUG4("ddt_cmp: %s->cat=%s != %s->cat=%s",
+ d1->name,gras_datadesc_cat_names[d1->category_code],
+ d2->name,gras_datadesc_cat_names[d2->category_code]);
+ return d1->category_code > d2->category_code ? 1 : -1;
+ }
+
+ if (d1->send != d2->send) {
+ DEBUG4("ddt_cmp: %s->send=%p != %s->send=%p",
+ d1->name,(void*)d1->send, d2->name,(void*)d2->send);
+ return 1; /* ISO C forbids ordered comparisons of pointers to functions */
+ }
+
+ if (d1->recv != d2->recv) {
+ DEBUG4("ddt_cmp: %s->recv=%p != %s->recv=%p",
+ d1->name,(void*)d1->recv, d2->name,(void*)d2->recv);
+ return 1; /* ISO C forbids ordered comparisons of pointers to functions */
+ }
+
+ switch (d1->category_code) {
+ case e_gras_datadesc_type_cat_scalar:
+ if (d1->category.scalar_data.encoding != d2->category.scalar_data.encoding)
+ return d1->category.scalar_data.encoding > d2->category.scalar_data.encoding ? 1 : -1 ;