cc1: Add support for riscv64 - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 06266207ce41e9fa1b7c2232b0a0243481287fd6
 (DIR) parent 7d92f9f22004c00fca2fe52a183b8d8e1a1bca6f
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.net>
       Date:   Wed,  4 Jun 2025 16:06:01 +0200
       
       cc1: Add support for riscv64
       
       Diffstat:
         M src/cmd/scc-cc/cc1/Makefile         |       1 +
         M src/cmd/scc-cc/cc1/arch.c           |       1 +
         M src/cmd/scc-cc/cc1/cc1.h            |       1 +
         A src/cmd/scc-cc/cc1/riscv64-sysv.c   |     207 ++++++++++++++++++++++++++++++
       
       4 files changed, 210 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/scc-cc/cc1/Makefile b/src/cmd/scc-cc/cc1/Makefile
       @@ -20,6 +20,7 @@ OBJS =\
                arch.o\
                amd64-sysv.o\
                arm64-sysv.o \
       +        riscv64-sysv.o \
                i386-sysv.o \
                z80-scc.o\
        
 (DIR) diff --git a/src/cmd/scc-cc/cc1/arch.c b/src/cmd/scc-cc/cc1/arch.c
       @@ -32,6 +32,7 @@ getarch(void)
                } *bp, defs[] = {
                        "amd64-sysv", amd64_sysv,
                        "arm64-sysv", arm64_sysv,
       +                "riscv64-sysv", riscv64_sysv,
                        "i386-sysv", i386_sysv,
                        "z80-scc", z80_scc,
                        NULL, NULL,
 (DIR) diff --git a/src/cmd/scc-cc/cc1/cc1.h b/src/cmd/scc-cc/cc1/cc1.h
       @@ -531,6 +531,7 @@ extern int valid_va_list(Type *tp);
        extern Arch *amd64_sysv(void);
        extern Arch *z80_scc(void);
        extern Arch *arm64_sysv(void);
       +extern Arch *riscv64_sysv(void);
        extern Arch *i386_sysv(void);
        
        /*
 (DIR) diff --git a/src/cmd/scc-cc/cc1/riscv64-sysv.c b/src/cmd/scc-cc/cc1/riscv64-sysv.c
       @@ -0,0 +1,207 @@
       +#include <scc/scc.h>
       +#include "cc1.h"
       +
       +#define RANK_BOOL    0
       +#define RANK_SCHAR   1
       +#define RANK_UCHAR   1
       +#define RANK_CHAR    1
       +#define RANK_SHORT   2
       +#define RANK_USHORT  2
       +#define RANK_INT     3
       +#define RANK_UINT    3
       +#define RANK_LONG    4
       +#define RANK_ULONG   4
       +#define RANK_LLONG   5
       +#define RANK_ULLONG  5
       +#define RANK_FLOAT   6
       +#define RANK_DOUBLE  7
       +#define RANK_LDOUBLE 8
       +
       +static int
       +local_valid_va_list(Type *tp)
       +{
       +        return tp->op == PTR && eqtype(tp->type, va_type, EQUIV);
       +}
       +
       +Arch *
       +riscv64_sysv(void)
       +{
       +        static Arch arch = {
       +                .voidtype = {
       +                        .op = VOID,
       +                        .letter = L_VOID,
       +                },
       +                .pvoidtype = {
       +                        .op = PTR,
       +                        .letter = L_POINTER,
       +                        .prop = TDEFINED,
       +                        .size = 8,
       +                        .align = 8,
       +                },
       +                .booltype = {
       +                        .op = INT,
       +                        .letter = L_BOOL,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 1,
       +                        .align = 1,
       +                        .n.rank = RANK_BOOL,
       +                },
       +                .schartype = {
       +                        .op = INT,
       +                        .letter = L_INT8,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 1,
       +                        .align = 1,
       +                        .n.rank = RANK_SCHAR,
       +
       +                },
       +                .uchartype = {
       +                        .op = INT,
       +                        .letter = L_UINT8,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 1,
       +                        .align = 1,
       +                        .n.rank = RANK_UCHAR,
       +                },
       +                .chartype = {
       +                        .op = INT,
       +                        .letter = L_INT8,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 1,
       +                        .align = 1,
       +                        .n.rank = RANK_CHAR,
       +                },
       +                .ushorttype = {
       +                        .op = INT,
       +                        .letter = L_UINT16,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 2,
       +                        .align = 2,
       +                        .n.rank = RANK_USHORT,
       +
       +                },
       +                .shorttype = {
       +                        .op = INT,
       +                        .letter = L_INT16,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 2,
       +                        .align = 2,
       +                        .n.rank = RANK_SHORT,
       +                },
       +                .uinttype = {
       +                        .op = INT,
       +                        .letter = L_UINT32,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 4,
       +                        .align = 4,
       +                        .n.rank = RANK_UINT,
       +                },
       +                .inttype = {
       +                        .op = INT,
       +                        .letter = L_INT32,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 4,
       +                        .align = 4,
       +                        .n.rank = RANK_INT,
       +                },
       +                .longtype = {
       +                        .op = INT,
       +                        .letter = L_INT64,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_LONG,
       +                },
       +                .ulongtype = {
       +                        .op = INT,
       +                        .letter = L_UINT64,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_ULONG,
       +                },
       +                .ullongtype = {
       +                        .op = INT,
       +                        .letter = L_UINT64,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_ULLONG,
       +                },
       +                .llongtype = {
       +                        .op = INT,
       +                        .letter = L_INT64,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_LLONG,
       +                },
       +                .floattype = {
       +                        .op = FLOAT,
       +                        .letter = L_FLOAT,
       +                        .prop = TDEFINED | TARITH,
       +                        .size = 4,
       +                        .align = 4,
       +                        .n.rank = RANK_FLOAT,
       +                },
       +                .doubletype = {
       +                        .op = FLOAT,
       +                        .letter = L_DOUBLE,
       +                        .prop = TDEFINED | TARITH,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_DOUBLE,
       +                },
       +                .ldoubletype = {
       +                        .op = FLOAT,
       +                        .letter = L_LDOUBLE,
       +                        .prop = TDEFINED | TARITH,
       +                        .size = 16,
       +                        .align = 16,
       +                        .n.rank = RANK_LDOUBLE,
       +                },
       +                .sizettype = {
       +                        .op = INT,
       +                        .letter = L_UINT64,
       +                        .prop = TDEFINED | TINTEGER | TARITH,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_UINT,
       +                },
       +                .pdifftype = {
       +                        .op = INT,
       +                        .letter = L_INT64,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 8,
       +                        .align = 8,
       +                        .n.rank = RANK_LONG,
       +                },
       +                .ellipsistype = {
       +                        .op = ELLIPSIS,
       +                        .letter = L_ELLIPSIS,
       +                        .prop = TDEFINED,
       +                },
       +                .va_type = {
       +                        .op = STRUCT,
       +                        .letter = L_VA_ARG,
       +                        .prop = TDEFINED,
       +                        .size = 24,
       +                        .align = 8,
       +                },
       +                .wchartype = {
       +                        .op = INT,
       +                        .letter = L_UINT32,
       +                        .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
       +                        .size = 4,
       +                        .align = 4,
       +                        .n.rank = RANK_INT,
       +                },
       +        };
       +
       +        sizettype = &arch.sizettype;
       +        arch.va_list_type = *mktype(&arch.va_type, ARY, 1, NULL);
       +        arch.pvoidtype.type = &arch.voidtype;
       +        arch.valid_va_list = local_valid_va_list;
       +
       +        return &arch;
       +}