import "RV32I.core_desc"
import "RV64I.core_desc"
import "RVM.core_desc"
import "RVA.core_desc"
import "RVC.core_desc"
import "RVF.core_desc"
import "RVD.core_desc"

Core RV32IMAC provides RV32I, RV32M, RV32A, RV32IC {
    constants {
        XLEN:=32;
        PCLEN:=32;
        // definitions for the architecture wrapper
        //          XL    ZYXWVUTSRQPONMLKJIHGFEDCBA
        MISA_VAL:=0b01000000000101000001000100000101;
        PGSIZE := 0x1000; //1 << 12;
        PGMASK := 0xfff; //PGSIZE-1
    }
}

Core RV32GC provides RV32I, RV32M, RV32A, RV32F, RV32D, RV32IC, RV32FC, RV32DC {
    constants {
        XLEN:=32;
        FLEN:=64;
        PCLEN:=32;
        // definitions for the architecture wrapper
        //          XL    ZYXWVUTSRQPONMLKJIHGFEDCBA
        MISA_VAL:=0b01000000000101000001000100101101;
        PGSIZE := 0x1000; //1 << 12;
        PGMASK := 0xfff; //PGSIZE-1
    }
}

Core RV64I provides RV64I {
    constants {
        XLEN:=64;
        PCLEN:=64;
        // definitions for the architecture wrapper
        //          XL    ZYXWVUTSRQPONMLKJIHGFEDCBA
        MISA_VAL:=0b10000000000001000000000100000000;
        PGSIZE := 0x1000; //1 << 12;
        PGMASK := 0xfff; //PGSIZE-1
    }
}

Core RV64GC provides RV64I, RV64M, RV64A, RV64F, RV64D, RV64IC, RV32FC, RV32DC {
    constants {
        XLEN:=64;
        FLEN:=64;
        PCLEN:=64;
        // definitions for the architecture wrapper
        //          XL    ZYXWVUTSRQPONMLKJIHGFEDCBA
        MISA_VAL:=0b01000000000101000001000100101101;
        PGSIZE := 0x1000; //1 << 12;
        PGMASK := 0xfff; //PGSIZE-1
    }
}