//===- CSKYTargetParser.def - CSKY target parsing defines -------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file provides defines to build up the CSKY target parser's logic.
//
//===----------------------------------------------------------------------===//

// NOTE: NO INCLUDE GUARD DESIRED!

#ifndef CSKY_FPU
#define CSKY_FPU(NAME, KIND, VERSION)
#endif
CSKY_FPU("invalid", FK_INVALID, FPUVersion::NONE)
CSKY_FPU("auto", FK_AUTO, FPUVersion::FPV2)
CSKY_FPU("fpv2", FK_FPV2, FPUVersion::FPV2)
CSKY_FPU("fpv2_divd", FK_FPV2_DIVD, FPUVersion::FPV2)
CSKY_FPU("fpv2_sf", FK_FPV2_SF, FPUVersion::FPV2)
CSKY_FPU("fpv3", FK_FPV3, FPUVersion::FPV3)
CSKY_FPU("fpv3_hf", FK_FPV3_HF, FPUVersion::FPV3)
CSKY_FPU("fpv3_hsf", FK_FPV3_HSF, FPUVersion::FPV3)
CSKY_FPU("fpv3_sdf", FK_FPV3_SDF, FPUVersion::FPV3)

#undef CSKY_FPU

#ifndef CSKY_ARCH
#define CSKY_ARCH(NAME, ID, ARCH_BASE_EXT)
#endif
CSKY_ARCH("invalid", INVALID, CSKY::AEK_INVALID)
CSKY_ARCH("ck801", CK801, CSKY::MAEK_E1 | CSKY::AEK_TRUST)
CSKY_ARCH("ck802", CK802, CSKY::MAEK_E2 | CSKY::AEK_TRUST | CSKY::AEK_NVIC)
CSKY_ARCH("ck803", CK803,
          CSKY::MAEK_2E3 | CSKY::AEK_MP | CSKY::AEK_TRUST | CSKY::AEK_NVIC |
              CSKY::AEK_HWDIV)
CSKY_ARCH("ck803s", CK803S,
          CSKY::MAEK_2E3 | CSKY::AEK_MP | CSKY::AEK_TRUST | CSKY::AEK_NVIC |
              CSKY::AEK_HWDIV)
CSKY_ARCH("ck804", CK804,
          CSKY::MAEK_2E3 | CSKY::AEK_MP | CSKY::AEK_TRUST | CSKY::AEK_NVIC |
              CSKY::AEK_HWDIV | CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3)
CSKY_ARCH("ck805", CK805,
          CSKY::MAEK_2E3 | CSKY::AEK_MP | CSKY::AEK_TRUST | CSKY::AEK_NVIC |
              CSKY::AEK_HWDIV | CSKY::AEK_HIGHREG | CSKY::MAEK_3E3R2 |
              CSKY::AEK_3E3R3 | CSKY::AEK_VDSPV2 | CSKY::AEK_VDSP2E3)
CSKY_ARCH("ck807", CK807,
          CSKY::MAEK_3E7 | CSKY::MAEK_MP | CSKY::MAEK_MP1E2 | CSKY::AEK_TRUST |
              CSKY::AEK_HWDIV | CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 |
              CSKY::AEK_DSPE60 | CSKY::AEK_HIGHREG | CSKY::AEK_HARDTP |
              CSKY::AEK_NVIC | CSKY::AEK_CACHE)
CSKY_ARCH("ck810", CK810,
          CSKY::MAEK_7E10 | CSKY::MAEK_MP | CSKY::MAEK_MP1E2 | CSKY::AEK_TRUST |
              CSKY::AEK_HWDIV | CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 |
              CSKY::AEK_DSPE60 | CSKY::AEK_HIGHREG | CSKY::AEK_HARDTP |
              CSKY::AEK_NVIC | CSKY::AEK_CACHE)
CSKY_ARCH("ck810v", CK810V,
          CSKY::MAEK_7E10 | CSKY::MAEK_MP | CSKY::MAEK_MP1E2 | CSKY::AEK_TRUST |
              CSKY::AEK_HWDIV | CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 |
              CSKY::AEK_DSPE60 | CSKY::AEK_HIGHREG | CSKY::AEK_HARDTP |
              CSKY::AEK_NVIC | CSKY::AEK_CACHE | CSKY::AEK_VDSPV1)
CSKY_ARCH("ck860", CK860,
          CSKY::MAEK_10E60 | CSKY::MAEK_MP | CSKY::MAEK_MP1E2 |
              CSKY::AEK_TRUST | CSKY::AEK_HWDIV | CSKY::AEK_DSPE60 |
              CSKY::AEK_HIGHREG | CSKY::AEK_HARDTP | CSKY::AEK_NVIC |
              CSKY::AEK_CACHE | CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3)
CSKY_ARCH("ck860v", CK860V,
          CSKY::MAEK_10E60 | CSKY::MAEK_MP | CSKY::MAEK_MP1E2 |
              CSKY::AEK_TRUST | CSKY::AEK_HWDIV | CSKY::AEK_DSPE60 |
              CSKY::AEK_HIGHREG | CSKY::AEK_HARDTP | CSKY::AEK_NVIC |
              CSKY::AEK_CACHE | CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 |
              CSKY::AEK_VDSPV2 | CSKY::AEK_VDSP2E60F)
#undef CSKY_ARCH

#ifndef CSKY_ARCH_EXT_NAME
#define CSKY_ARCH_EXT_NAME(NAME, ID, FEATURE, NEGFEATURE)
#endif
CSKY_ARCH_EXT_NAME("invalid", CSKY::AEK_INVALID, nullptr, nullptr)
CSKY_ARCH_EXT_NAME("none", CSKY::AEK_NONE, nullptr, nullptr)
CSKY_ARCH_EXT_NAME("fpuv2_sf", CSKY::AEK_FPUV2SF, "+fpuv2_sf", "-fpuv2_sf")
CSKY_ARCH_EXT_NAME("fpuv2_df", CSKY::AEK_FPUV2DF, "+fpuv2_df", "-fpuv2_df")
CSKY_ARCH_EXT_NAME("fdivdu", CSKY::AEK_FDIVDU, "+fdivdu", "-fdivdu")
CSKY_ARCH_EXT_NAME("fpuv3_hi", CSKY::AEK_FPUV3HI, "+fpuv3_hi", "-fpuv3_hi")
CSKY_ARCH_EXT_NAME("fpuv3_hf", CSKY::AEK_FPUV3HF, "+fpuv3_hf", "-fpuv3_hf")
CSKY_ARCH_EXT_NAME("fpuv3_sf", CSKY::AEK_FPUV3SF, "+fpuv3_sf", "-fpuv3_sf")
CSKY_ARCH_EXT_NAME("fpuv3_df", CSKY::AEK_FPUV3DF, "+fpuv3_df", "-fpuv3_df")
CSKY_ARCH_EXT_NAME("floate1", CSKY::AEK_FLOATE1, "+floate1", "-floate1")
CSKY_ARCH_EXT_NAME("float1e2", CSKY::AEK_FLOAT1E2, "+float1e2", "-float1e2")
CSKY_ARCH_EXT_NAME("float1e3", CSKY::AEK_FLOAT1E3, "+float1e3", "-float1e3")
CSKY_ARCH_EXT_NAME("float3e4", CSKY::AEK_FLOAT3E4, "+float3e4", "-float3e4")
CSKY_ARCH_EXT_NAME("float7e60", CSKY::AEK_FLOAT7E60, "+float7e60", "-float7e60")
CSKY_ARCH_EXT_NAME("hwdiv", CSKY::AEK_HWDIV, "+hwdiv", "-hwdiv")
CSKY_ARCH_EXT_NAME("multiple_stld", CSKY::AEK_STLD, "+multiple_stld",
                   "-multiple_stld")
CSKY_ARCH_EXT_NAME("pushpop", CSKY::AEK_PUSHPOP, "+pushpop", "-pushpop")
CSKY_ARCH_EXT_NAME("edsp", CSKY::AEK_EDSP, "+edsp", "-edsp")
CSKY_ARCH_EXT_NAME("dsp1e2", CSKY::AEK_DSP1E2, "+dsp1e2", "-dsp1e2")
CSKY_ARCH_EXT_NAME("dspe60", CSKY::AEK_DSPE60, "+dspe60", "-dspe60")
CSKY_ARCH_EXT_NAME("dspv2", CSKY::AEK_DSPV2, "+dspv2", "-dspv2")
CSKY_ARCH_EXT_NAME("dsp_silan", CSKY::AEK_DSPSILAN, "+dsp_silan", "-dsp_silan")
CSKY_ARCH_EXT_NAME("elrw", CSKY::AEK_ELRW, "+elrw", "-elrw")
CSKY_ARCH_EXT_NAME("trust", CSKY::AEK_TRUST, "+trust", "-trust")
CSKY_ARCH_EXT_NAME("java", CSKY::AEK_JAVA, "+java", "-java")
CSKY_ARCH_EXT_NAME("cache", CSKY::AEK_CACHE, "+cache", "-cache")
CSKY_ARCH_EXT_NAME("nvic", CSKY::AEK_NVIC, "+nvic", "-nvic")
CSKY_ARCH_EXT_NAME("doloop", CSKY::AEK_DOLOOP, "+doloop", "-doloop")
CSKY_ARCH_EXT_NAME("high-registers", CSKY::AEK_HIGHREG, "+high-registers",
                   "-high-registers")
CSKY_ARCH_EXT_NAME("smart", CSKY::AEK_SMART, "+smart", "-smart")
CSKY_ARCH_EXT_NAME("vdsp2e3", CSKY::AEK_VDSP2E3, "+vdsp2e3", "-vdsp2e3")
CSKY_ARCH_EXT_NAME("vdsp2e60f", CSKY::AEK_VDSP2E60F, "+vdsp2e60f", "-vdsp2e60f")
CSKY_ARCH_EXT_NAME("vdspv2", CSKY::AEK_VDSPV2, "+vdspv2", "-vdspv2")
CSKY_ARCH_EXT_NAME("hard-tp", CSKY::AEK_HARDTP, "+hard-tp", "-hard-tp")
CSKY_ARCH_EXT_NAME("soft-tp", CSKY::AEK_SOFTTP, "+soft-tp", "-soft-tp")
CSKY_ARCH_EXT_NAME("istack", CSKY::AEK_ISTACK, "+istack", "-istack")
CSKY_ARCH_EXT_NAME("constpool", CSKY::AEK_CONSTPOOL, "+constpool", "-constpool")
CSKY_ARCH_EXT_NAME("stack-size", CSKY::AEK_STACKSIZE, "+stack-size",
                   "-stack-size")
CSKY_ARCH_EXT_NAME("ccrt", CSKY::AEK_CCRT, "+ccrt", "-ccrt")
CSKY_ARCH_EXT_NAME("vdspv1", CSKY::AEK_VDSPV1, "+vdspv1", "-vdspv1")

CSKY_ARCH_EXT_NAME("e1", CSKY::AEK_E1, "+e1", "-e1")
CSKY_ARCH_EXT_NAME("e2", CSKY::AEK_E2, "+e2", "-e2")
CSKY_ARCH_EXT_NAME("2e3", CSKY::AEK_2E3, "+2e3", "-2e3")
CSKY_ARCH_EXT_NAME("mp", CSKY::AEK_MP, "+mp", "-mp")
CSKY_ARCH_EXT_NAME("3e3r1", CSKY::AEK_3E3R1, "+3e3r1", "-3e3r1")
CSKY_ARCH_EXT_NAME("3e3r2", CSKY::AEK_3E3R2, "+3e3r2", "-3e3r2")
CSKY_ARCH_EXT_NAME("3e3r3", CSKY::AEK_3E3R3, "+3e3r3", "-3e3r3")
CSKY_ARCH_EXT_NAME("3e7", CSKY::AEK_3E7, "+3e7", "-3e7")
CSKY_ARCH_EXT_NAME("mp1e2", CSKY::AEK_MP1E2, "+mp1e2", "-mp1e2")
CSKY_ARCH_EXT_NAME("7e10", CSKY::AEK_7E10, "+7e10", "-7e10")
CSKY_ARCH_EXT_NAME("10e60", CSKY::AEK_10E60, "+10e60", "-10e60")

#undef CSKY_ARCH_EXT_NAME

#ifndef CSKY_CPU_NAME
#define CSKY_CPU_NAME(NAME, ARCH_ID, DEFAULT_EXT)
#endif

CSKY_CPU_NAME("ck801", CK801, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck801t", CK801, CSKY::AEK_NONE)
CSKY_CPU_NAME("e801", CK801, CSKY::AEK_NONE)

CSKY_CPU_NAME("ck802", CK802, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck802t", CK802, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck802j", CK802, CSKY::AEK_JAVA)
CSKY_CPU_NAME("e802", CK802, CSKY::AEK_NONE)
CSKY_CPU_NAME("e802t", CK802, CSKY::AEK_NONE)
CSKY_CPU_NAME("s802", CK802, CSKY::AEK_NONE)
CSKY_CPU_NAME("s802t", CK802, CSKY::AEK_NONE)

CSKY_CPU_NAME("ck803", CK803, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck803h", CK803, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck803t", CK803, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck803ht", CK803, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck803f", CK803,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803fh", CK803,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803e", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60)
CSKY_CPU_NAME("ck803eh", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60)
CSKY_CPU_NAME("ck803et", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60)
CSKY_CPU_NAME("ck803eht", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60)
CSKY_CPU_NAME("ck803ef", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803efh", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803ft", CK803,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803eft", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803efht", CK803,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803r1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803r2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803r3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803hr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803hr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803hr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803tr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803tr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803tr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803htr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803htr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803htr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2)
CSKY_CPU_NAME("ck803fr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803fr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803fr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803fhr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803fhr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803fhr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803er1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803er2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803er3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ehr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ehr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ehr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803etr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803etr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803etr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ehtr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ehtr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ehtr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efhr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efhr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efhr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803ftr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803ftr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803ftr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803eftr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803eftr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803eftr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efhtr1", CK803,
              CSKY::MAEK_3E3R1 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efhtr2", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck803efhtr3", CK803,
              CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3 | CSKY::AEK_DSPV2 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("s803", CK803, CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3)
CSKY_CPU_NAME("s803t", CK803, CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3)
CSKY_CPU_NAME("e803", CK803, CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3)
CSKY_CPU_NAME("e803t", CK803, CSKY::MAEK_3E3R2 | CSKY::AEK_3E3R3)

CSKY_CPU_NAME("ck803s", CK803S, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck803st", CK803S, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck803se", CK803S,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60)
CSKY_CPU_NAME("ck803sf", CK803S,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803sef", CK803S,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck803seft", CK803S,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)

CSKY_CPU_NAME("ck804", CK804, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck804h", CK804, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck804t", CK804, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck804ht", CK804, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck804f", CK804,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck804fh", CK804,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck804e", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804eh", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804et", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804eht", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804ef", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804efh", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804ft", CK804,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck804eft", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("ck804efht", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("e804d", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("e804dt", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("e804f", CK804,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("e804ft", CK804,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("e804df", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_HIGHREG)
CSKY_CPU_NAME("e804dft", CK804,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_HIGHREG)

CSKY_CPU_NAME("ck805", CK805, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck805e", CK805,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3)
CSKY_CPU_NAME("ck805f", CK805,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck805t", CK805, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck805ef", CK805,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck805et", CK805,
              CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3)
CSKY_CPU_NAME("ck805ft", CK805,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)
CSKY_CPU_NAME("ck805eft", CK805,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_DSPV2 | CSKY::AEK_3E3R1 | CSKY::AEK_3E3R3)
CSKY_CPU_NAME("i805", CK805, CSKY::AEK_NONE)
CSKY_CPU_NAME("i805f", CK805,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E3)

CSKY_CPU_NAME("ck807", CK807, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck807e", CK807,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60)
CSKY_CPU_NAME("ck807f", CK807,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_FLOAT3E4)
CSKY_CPU_NAME("ck807ef", CK807,
              CSKY::AEK_EDSP | CSKY::AEK_DSP1E2 | CSKY::AEK_DSPE60 |
                  CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_FLOAT3E4)
CSKY_CPU_NAME("c807", CK807, CSKY::AEK_NONE)
CSKY_CPU_NAME("c807f", CK807,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_FLOAT3E4)
CSKY_CPU_NAME("r807", CK807, CSKY::AEK_NONE)
CSKY_CPU_NAME("r807f", CK807,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2 | CSKY::AEK_FLOAT1E3 |
                  CSKY::AEK_FLOAT3E4)

CSKY_CPU_NAME("ck810e", CK810, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810et", CK810, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810ef", CK810,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("ck810eft", CK810,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("ck810", CK810, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810f", CK810,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("ck810t", CK810, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810ft", CK810,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("c810", CK810,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("c810t", CK810,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)

CSKY_CPU_NAME("ck810v", CK810V, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810ev", CK810V, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810tv", CK810V, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck810etv", CK810V, CSKY::AEK_NONE)
CSKY_CPU_NAME("c810v", CK810V,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("ck810fv", CK810V,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("ck810efv", CK810V,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("ck810ftv", CK810V,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("c810tv", CK810V,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)
CSKY_CPU_NAME("c810eftv", CK810V,
              CSKY::AEK_FPUV2SF | CSKY::AEK_FPUV2DF | CSKY::AEK_FDIVDU |
                  CSKY::AEK_FLOATE1 | CSKY::AEK_FLOAT1E2)

CSKY_CPU_NAME("ck860", CK860, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck860f", CK860,
              CSKY::AEK_FPUV3HI | CSKY::AEK_FPUV3HF | CSKY::AEK_FPUV3SF |
                  CSKY::AEK_FPUV3DF | CSKY::AEK_FLOAT7E60)
CSKY_CPU_NAME("c860", CK860,
              CSKY::AEK_FPUV3HI | CSKY::AEK_FPUV3HF | CSKY::AEK_FPUV3SF |
                  CSKY::AEK_FPUV3DF | CSKY::AEK_FLOAT7E60)

CSKY_CPU_NAME("ck860v", CK860V, CSKY::AEK_NONE)
CSKY_CPU_NAME("ck860fv", CK860V,
              CSKY::AEK_FPUV3HI | CSKY::AEK_FPUV3HF | CSKY::AEK_FPUV3SF |
                  CSKY::AEK_FPUV3DF | CSKY::AEK_FLOAT7E60)
CSKY_CPU_NAME("c860v", CK860V,
              CSKY::AEK_FPUV3HI | CSKY::AEK_FPUV3HF | CSKY::AEK_FPUV3SF |
                  CSKY::AEK_FPUV3DF | CSKY::AEK_FLOAT7E60)
// Invalid CPU
CSKY_CPU_NAME("invalid", INVALID, CSKY::AEK_INVALID)
#undef CSKY_CPU_NAME
