blob: 08d036ca04b75c8f49d5b4a648ab414fff2dc094 [file] [log] [blame]
#include "symbol.h"
#include "target.h"
#include "machine.h"
static void init_riscv(const struct target *self)
{
if (arch_cmodel == CMODEL_UNKNOWN)
arch_cmodel = CMODEL_MEDLOW;
if (fpic)
arch_cmodel = CMODEL_PIC;
}
static void predefine_riscv(const struct target *self)
{
static const char *cmodels[CMODEL_LAST] = {
[CMODEL_MEDANY] = "medany",
[CMODEL_MEDLOW] = "medlow",
[CMODEL_PIC] = "pic",
};
const char *cmodel = cmodels[arch_cmodel];
predefine("__riscv", 1, "1");
predefine("__riscv_xlen", 1, "%d", ptr_ctype.bit_size);
if (cmodel)
add_pre_buffer("#define __riscv_cmodel_%s 1\n", cmodel);
}
const struct target target_riscv32 = {
.mach = MACH_RISCV32,
.bitness = ARCH_LP32,
.big_endian = 0,
.unsigned_char = 1,
.target_64bit = &target_riscv64,
.init = init_riscv,
.predefine = predefine_riscv,
};
const struct target target_riscv64 = {
.mach = MACH_RISCV64,
.bitness = ARCH_LP64,
.big_endian = 0,
.unsigned_char = 1,
.has_int128 = 1,
.target_32bit = &target_riscv32,
.init = init_riscv,
.predefine = predefine_riscv,
};