From 89939ad7a2b2d7d92d4f72f4db33a48b9d0341eb Mon Sep 17 00:00:00 2001 From: Zihao Yu Date: Sun, 20 Feb 2022 19:17:10 +0800 Subject: [PATCH] riscv64-npc: enable RVM --- .../arch/{riscv64-mycpu.h => riscv64-npc.h} | 0 am/src/riscv/mycpu/libgcc/div.S | 140 ------------------ am/src/riscv/mycpu/libgcc/muldi3.S | 25 ---- am/src/riscv/{mycpu => npc}/cte.c | 0 am/src/riscv/{mycpu => npc}/input.c | 0 am/src/riscv/{mycpu => npc}/ioe.c | 0 am/src/riscv/{mycpu => npc}/mpe.c | 0 am/src/riscv/{mycpu => npc}/start.S | 0 am/src/riscv/{mycpu => npc}/timer.c | 0 am/src/riscv/{mycpu => npc}/trap.S | 0 am/src/riscv/{mycpu => npc}/trm.c | 0 am/src/riscv/{mycpu => npc}/vme.c | 0 scripts/riscv64-mycpu.mk | 28 ---- scripts/riscv64-npc.mk | 22 +++ 14 files changed, 22 insertions(+), 193 deletions(-) rename am/include/arch/{riscv64-mycpu.h => riscv64-npc.h} (100%) delete mode 100644 am/src/riscv/mycpu/libgcc/div.S delete mode 100644 am/src/riscv/mycpu/libgcc/muldi3.S rename am/src/riscv/{mycpu => npc}/cte.c (100%) rename am/src/riscv/{mycpu => npc}/input.c (100%) rename am/src/riscv/{mycpu => npc}/ioe.c (100%) rename am/src/riscv/{mycpu => npc}/mpe.c (100%) rename am/src/riscv/{mycpu => npc}/start.S (100%) rename am/src/riscv/{mycpu => npc}/timer.c (100%) rename am/src/riscv/{mycpu => npc}/trap.S (100%) rename am/src/riscv/{mycpu => npc}/trm.c (100%) rename am/src/riscv/{mycpu => npc}/vme.c (100%) delete mode 100644 scripts/riscv64-mycpu.mk create mode 100644 scripts/riscv64-npc.mk diff --git a/am/include/arch/riscv64-mycpu.h b/am/include/arch/riscv64-npc.h similarity index 100% rename from am/include/arch/riscv64-mycpu.h rename to am/include/arch/riscv64-npc.h diff --git a/am/src/riscv/mycpu/libgcc/div.S b/am/src/riscv/mycpu/libgcc/div.S deleted file mode 100644 index 0d394d2..0000000 --- a/am/src/riscv/mycpu/libgcc/div.S +++ /dev/null @@ -1,140 +0,0 @@ -#define FUNC_TYPE(X) .type X,@function -#define FUNC_SIZE(X) .size X,.-X - -#define FUNC_BEGIN(X) \ - .globl X; \ - FUNC_TYPE (X); \ -X: - -#define FUNC_END(X) \ - FUNC_SIZE(X) - -#define FUNC_ALIAS(X,Y) \ - .globl X; \ - X = Y - - -#define __riscv_xlen 64 - - .text - .align 2 - -#if __riscv_xlen == 32 -/* Our RV64 64-bit routines are equivalent to our RV32 32-bit routines. */ -# define __udivdi3 __udivsi3 -# define __umoddi3 __umodsi3 -# define __divdi3 __divsi3 -# define __moddi3 __modsi3 -#else -FUNC_BEGIN (__udivsi3) - /* Compute __udivdi3(a0 << 32, a1 << 32); cast result to uint32_t. */ - sll a0, a0, 32 - sll a1, a1, 32 - move t0, ra - jal __udivdi3 - sext.w a0, a0 - jr t0 -FUNC_END (__udivsi3) - -FUNC_BEGIN (__umodsi3) - /* Compute __udivdi3((uint32_t)a0, (uint32_t)a1); cast a1 to uint32_t. */ - sll a0, a0, 32 - sll a1, a1, 32 - srl a0, a0, 32 - srl a1, a1, 32 - move t0, ra - jal __udivdi3 - sext.w a0, a1 - jr t0 -FUNC_END (__umodsi3) - -FUNC_ALIAS (__modsi3, __moddi3) - -FUNC_BEGIN( __divsi3) - /* Check for special case of INT_MIN/-1. Otherwise, fall into __divdi3. */ - li t0, -1 - beq a1, t0, .L20 -#endif - -FUNC_BEGIN (__divdi3) - bltz a0, .L10 - bltz a1, .L11 - /* Since the quotient is positive, fall into __udivdi3. */ - -FUNC_BEGIN (__udivdi3) - mv a2, a1 - mv a1, a0 - li a0, -1 - beqz a2, .L5 - li a3, 1 - bgeu a2, a1, .L2 -.L1: - blez a2, .L2 - slli a2, a2, 1 - slli a3, a3, 1 - bgtu a1, a2, .L1 -.L2: - li a0, 0 -.L3: - bltu a1, a2, .L4 - sub a1, a1, a2 - or a0, a0, a3 -.L4: - srli a3, a3, 1 - srli a2, a2, 1 - bnez a3, .L3 -.L5: - ret -FUNC_END (__udivdi3) - -FUNC_BEGIN (__umoddi3) - /* Call __udivdi3(a0, a1), then return the remainder, which is in a1. */ - move t0, ra - jal __udivdi3 - move a0, a1 - jr t0 -FUNC_END (__umoddi3) - - /* Handle negative arguments to __divdi3. */ -.L10: - neg a0, a0 - /* Zero is handled as a negative so that the result will not be inverted. */ - bgtz a1, .L12 /* Compute __udivdi3(-a0, a1), then negate the result. */ - - neg a1, a1 - j __udivdi3 /* Compute __udivdi3(-a0, -a1). */ -.L11: /* Compute __udivdi3(a0, -a1), then negate the result. */ - neg a1, a1 -.L12: - move t0, ra - jal __udivdi3 - neg a0, a0 - jr t0 -FUNC_END (__divdi3) - -FUNC_BEGIN (__moddi3) - move t0, ra - bltz a1, .L31 - bltz a0, .L32 -.L30: - jal __udivdi3 /* The dividend is not negative. */ - move a0, a1 - jr t0 -.L31: - neg a1, a1 - bgez a0, .L30 -.L32: - neg a0, a0 - jal __udivdi3 /* The dividend is hella negative. */ - neg a0, a1 - jr t0 -FUNC_END (__moddi3) - -#if __riscv_xlen == 64 - /* continuation of __divsi3 */ -.L20: - sll t0, t0, 31 - bne a0, t0, __divdi3 - ret -FUNC_END (__divsi3) -#endif diff --git a/am/src/riscv/mycpu/libgcc/muldi3.S b/am/src/riscv/mycpu/libgcc/muldi3.S deleted file mode 100644 index c9e131d..0000000 --- a/am/src/riscv/mycpu/libgcc/muldi3.S +++ /dev/null @@ -1,25 +0,0 @@ -#define FUNC_TYPE(X) .type X,@function -#define FUNC_SIZE(X) .size X,.-X - -#define FUNC_BEGIN(X) \ - .globl X; \ - FUNC_TYPE (X); \ -X: - -#define FUNC_END(X) \ - FUNC_SIZE(X) - - -FUNC_BEGIN (__muldi3) - mv a2, a0 - li a0, 0 -.L1: - andi a3, a1, 1 - beqz a3, .L2 - add a0, a0, a2 -.L2: - srli a1, a1, 1 - slli a2, a2, 1 - bnez a1, .L1 - ret -FUNC_END (__muldi3) \ No newline at end of file diff --git a/am/src/riscv/mycpu/cte.c b/am/src/riscv/npc/cte.c similarity index 100% rename from am/src/riscv/mycpu/cte.c rename to am/src/riscv/npc/cte.c diff --git a/am/src/riscv/mycpu/input.c b/am/src/riscv/npc/input.c similarity index 100% rename from am/src/riscv/mycpu/input.c rename to am/src/riscv/npc/input.c diff --git a/am/src/riscv/mycpu/ioe.c b/am/src/riscv/npc/ioe.c similarity index 100% rename from am/src/riscv/mycpu/ioe.c rename to am/src/riscv/npc/ioe.c diff --git a/am/src/riscv/mycpu/mpe.c b/am/src/riscv/npc/mpe.c similarity index 100% rename from am/src/riscv/mycpu/mpe.c rename to am/src/riscv/npc/mpe.c diff --git a/am/src/riscv/mycpu/start.S b/am/src/riscv/npc/start.S similarity index 100% rename from am/src/riscv/mycpu/start.S rename to am/src/riscv/npc/start.S diff --git a/am/src/riscv/mycpu/timer.c b/am/src/riscv/npc/timer.c similarity index 100% rename from am/src/riscv/mycpu/timer.c rename to am/src/riscv/npc/timer.c diff --git a/am/src/riscv/mycpu/trap.S b/am/src/riscv/npc/trap.S similarity index 100% rename from am/src/riscv/mycpu/trap.S rename to am/src/riscv/npc/trap.S diff --git a/am/src/riscv/mycpu/trm.c b/am/src/riscv/npc/trm.c similarity index 100% rename from am/src/riscv/mycpu/trm.c rename to am/src/riscv/npc/trm.c diff --git a/am/src/riscv/mycpu/vme.c b/am/src/riscv/npc/vme.c similarity index 100% rename from am/src/riscv/mycpu/vme.c rename to am/src/riscv/npc/vme.c diff --git a/scripts/riscv64-mycpu.mk b/scripts/riscv64-mycpu.mk deleted file mode 100644 index 337ff6e..0000000 --- a/scripts/riscv64-mycpu.mk +++ /dev/null @@ -1,28 +0,0 @@ -CROSS_COMPILE := riscv64-linux-gnu- -COMMON_FLAGS := -fno-pic -march=rv64ifd -mcmodel=medany -CFLAGS += $(COMMON_FLAGS) -static -ASFLAGS += $(COMMON_FLAGS) -O0 -LDFLAGS += -melf64lriscv - -AM_SRCS := riscv/mycpu/start.S \ - riscv/mycpu/trm.c \ - riscv/mycpu/libgcc/muldi3.S \ - riscv/mycpu/libgcc/div.S \ - riscv/mycpu/ioe.c \ - riscv/mycpu/timer.c \ - riscv/mycpu/input.c \ - riscv/mycpu/cte.c \ - riscv/mycpu/trap.S \ - platform/dummy/vme.c \ - platform/dummy/mpe.c - -CFLAGS += -fdata-sections -ffunction-sections -LDFLAGS += -T $(AM_HOME)/scripts/linker.ld --defsym=_pmem_start=0x80000000 --defsym=_entry_offset=0x0 -LDFLAGS += --gc-sections -e _start -CFLAGS += -DMAINARGS=\"$(mainargs)\" -.PHONY: $(AM_HOME)/am/src/riscv/mycpu/trm.c - -image: $(IMAGE).elf - @$(OBJDUMP) -d $(IMAGE).elf > $(IMAGE).txt - @echo + OBJCOPY "->" $(IMAGE_REL).bin - @$(OBJCOPY) -S --set-section-flags .bss=alloc,contents -O binary $(IMAGE).elf $(IMAGE).bin diff --git a/scripts/riscv64-npc.mk b/scripts/riscv64-npc.mk new file mode 100644 index 0000000..3017874 --- /dev/null +++ b/scripts/riscv64-npc.mk @@ -0,0 +1,22 @@ +include $(AM_HOME)/scripts/isa/riscv64.mk + +AM_SRCS := riscv/npc/start.S \ + riscv/npc/trm.c \ + riscv/npc/ioe.c \ + riscv/npc/timer.c \ + riscv/npc/input.c \ + riscv/npc/cte.c \ + riscv/npc/trap.S \ + platform/dummy/vme.c \ + platform/dummy/mpe.c + +CFLAGS += -fdata-sections -ffunction-sections +LDFLAGS += -T $(AM_HOME)/scripts/linker.ld --defsym=_pmem_start=0x80000000 --defsym=_entry_offset=0x0 +LDFLAGS += --gc-sections -e _start +CFLAGS += -DMAINARGS=\"$(mainargs)\" +.PHONY: $(AM_HOME)/am/src/riscv/npc/trm.c + +image: $(IMAGE).elf + @$(OBJDUMP) -d $(IMAGE).elf > $(IMAGE).txt + @echo + OBJCOPY "->" $(IMAGE_REL).bin + @$(OBJCOPY) -S --set-section-flags .bss=alloc,contents -O binary $(IMAGE).elf $(IMAGE).bin