From 8cff9743c0c184ced21459efbe0bb0b6b7a65d31 Mon Sep 17 00:00:00 2001 From: Pavel Pisa <pisa@cmp.felk.cvut.cz> Date: Mon, 28 Feb 2022 08:25:00 +0100 Subject: [PATCH] seminaries/qtrvsim: add ffs-as-log2, the fisrt motivation example from lecture. Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz> --- seminaries/qtrvsim/ffs-as-log2/.gitignore | 3 + seminaries/qtrvsim/ffs-as-log2/Makefile | 77 ++++++++++++++++++++ seminaries/qtrvsim/ffs-as-log2/ffs-as-log2.S | 19 +++++ 3 files changed, 99 insertions(+) create mode 100644 seminaries/qtrvsim/ffs-as-log2/.gitignore create mode 100644 seminaries/qtrvsim/ffs-as-log2/Makefile create mode 100644 seminaries/qtrvsim/ffs-as-log2/ffs-as-log2.S diff --git a/seminaries/qtrvsim/ffs-as-log2/.gitignore b/seminaries/qtrvsim/ffs-as-log2/.gitignore new file mode 100644 index 0000000..591297f --- /dev/null +++ b/seminaries/qtrvsim/ffs-as-log2/.gitignore @@ -0,0 +1,3 @@ +*.o +depend +change_me diff --git a/seminaries/qtrvsim/ffs-as-log2/Makefile b/seminaries/qtrvsim/ffs-as-log2/Makefile new file mode 100644 index 0000000..0a9adde --- /dev/null +++ b/seminaries/qtrvsim/ffs-as-log2/Makefile @@ -0,0 +1,77 @@ +ARCH=riscv64-unknown-elf + +SOURCES = ffs-as-log2.S +TARGET_EXE = ffs-as-log2 + +CC=$(ARCH)-gcc +CXX=$(ARCH)-g++ +AS=$(ARCH)-as +LD=$(ARCH)-ld +OBJCOPY=$(ARCH)-objcopy + +ARCHFLAGS += -mabi=ilp32 +ARCHFLAGS += -march=rv32i +ARCHFLAGS += -fno-lto + +CFLAGS += -ggdb -Os -Wall +CXXFLAGS+= -ggdb -Os -Wall +AFLAGS += -ggdb +LDFLAGS += -ggdb +LDFLAGS += -nostartfiles +LDFLAGS += -nostdlib +LDFLAGS += -static +#LDFLAGS += -specs=/opt/musl/riscv64-linux-gnu/lib/musl-gcc.specs + +CFLAGS += $(ARCHFLAGS) +CXXFLAGS+= $(ARCHFLAGS) +AFLAGS += $(ARCHFLAGS) +LDFLAGS += $(ARCHFLAGS) + +OBJECTS += $(filter %.o,$(SOURCES:%.S=%.o)) +OBJECTS += $(filter %.o,$(SOURCES:%.c=%.o)) +OBJECTS += $(filter %.o,$(SOURCES:%.cpp=%.o)) + +all : default + +.PHONY : default clean dep all + +%.o:%.S + $(CC) -D__ASSEMBLY__ $(AFLAGS) -c $< -o $@ + +%.o:%.c + $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ + +%.o:%.cpp + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< + +%.s:%.c + $(CC) $(CFLAGS) $(CPPFLAGS) -S $< -o $@ + +default : $(TARGET_EXE) + +$(TARGET_EXE) : $(OBJECTS) + $(CC) $(LDFLAGS) $^ -o $@ + +dep: depend + +depend: $(SOURCES) $(glob *.h) + echo '# autogenerated dependencies' > depend +ifneq ($(filter %.S,$(SOURCES)),) + $(CC) -D__ASSEMBLY__ $(AFLAGS) -w -E -M $(filter %.S,$(SOURCES)) \ + >> depend +endif +ifneq ($(filter %.c,$(SOURCES)),) + $(CC) $(CFLAGS) $(CPPFLAGS) -w -E -M $(filter %.c,$(SOURCES)) \ + >> depend +endif +ifneq ($(filter %.cpp,$(SOURCES)),) + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -w -E -M $(filter %.cpp,$(SOURCES)) \ + >> depend +endif + +clean: + rm -f *.o *.a $(OBJECTS) $(TARGET_EXE) depend + +#mips-elf-objdump --source -M no-aliases,reg-names=numeric qtmips_binrep + +-include depend diff --git a/seminaries/qtrvsim/ffs-as-log2/ffs-as-log2.S b/seminaries/qtrvsim/ffs-as-log2/ffs-as-log2.S new file mode 100644 index 0000000..ed80360 --- /dev/null +++ b/seminaries/qtrvsim/ffs-as-log2/ffs-as-log2.S @@ -0,0 +1,19 @@ +// ffs as log2(x) +.globl _start +.globl __start +.option norelax +.text + +__start: +_start: + addi a0, zero, 157 // int x = 157; + addi t1, zero, -1 // int y = 0; + beq a0, zero, done // while(x != 0) +loop: // { + srli a0, a0, 1 // x = x / 2; + addi t1, t1, 1 // y = y + 1; + bne a0, zero, loop //} +done: + addi a0, t1, 0 +finish: ebreak + beq zero, zero, finish -- GitLab