// We rank extensions in the following order:
// -Single letter extensions in canonical order.
// -Unknown single letter extensions in alphabetical order.
-// -Multi-letter extensions starting with 's' in alphabetical order.
// -Multi-letter extensions starting with 'z' sorted by canonical order of
// the second letter then sorted alphabetically.
+// -Multi-letter extensions starting with 's' in alphabetical order.
+// -(TODO) Multi-letter extensions starting with 'zxm' in alphabetical order.
// -X extensions in alphabetical order.
// These flags are used to indicate the category. The first 6 bits store the
// single letter extension rank for single letter and multi-letter extensions
// starting with 'z'.
enum RankFlags {
- RF_S_EXTENSION = 1 << 6,
- RF_Z_EXTENSION = 1 << 7,
+ RF_Z_EXTENSION = 1 << 6,
+ RF_S_EXTENSION = 1 << 7,
RF_X_EXTENSION = 1 << 8,
};
for (const auto &Ext : Exts)
ExtNames.push_back(Ext.first);
- // FIXME: z* extensions should be ordered before s* extensions. The current
- // ordering matches what is documented in RISCVISAInfo, but this doesn't
- // match the ISA manual.
// FIXME: 'l' and 'y' should be ordered after 'i', 'm', 'c'.
EXPECT_THAT(ExtNames,
- ElementsAre("i", "m", "l", "c", "y", "sbar", "sfoo", "zicsr",
- "zmfoo", "zfinx", "zzfoo", "xbar", "xfoo"));
+ ElementsAre("i", "m", "l", "c", "y", "zicsr", "zmfoo", "zfinx",
+ "zzfoo", "sbar", "sfoo", "xbar", "xfoo"));
}