From acb7b0a747b2b951d7f837b7d3a8a180ca12e270 Mon Sep 17 00:00:00 2001
From: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Date: Sun, 13 Oct 2024 08:17:02 +0200
Subject: [PATCH] seminaries/qtrvsim/branchpred-1: add C code in comment

Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
---
 seminaries/qtrvsim/branchpred-1/.gitignore    |  5 +
 seminaries/qtrvsim/branchpred-1/Makefile      | 92 +++++++++++++++++++
 .../qtrvsim/branchpred-1/branchpred-1.S       | 14 ++-
 3 files changed, 106 insertions(+), 5 deletions(-)
 create mode 100644 seminaries/qtrvsim/branchpred-1/.gitignore
 create mode 100644 seminaries/qtrvsim/branchpred-1/Makefile

diff --git a/seminaries/qtrvsim/branchpred-1/.gitignore b/seminaries/qtrvsim/branchpred-1/.gitignore
new file mode 100644
index 0000000..3904592
--- /dev/null
+++ b/seminaries/qtrvsim/branchpred-1/.gitignore
@@ -0,0 +1,5 @@
+*.o
+*.srec
+depend
+branchpred-1
+
diff --git a/seminaries/qtrvsim/branchpred-1/Makefile b/seminaries/qtrvsim/branchpred-1/Makefile
new file mode 100644
index 0000000..cbacbe2
--- /dev/null
+++ b/seminaries/qtrvsim/branchpred-1/Makefile
@@ -0,0 +1,92 @@
+ARCH=riscv64-unknown-elf
+#ARCH=riscv64-linux-gnu
+
+SOURCES = branchpred-1.S
+TARGET_EXE = branchpred-1
+
+SOURCES += branchpred-1.S
+LOADLIBES += -lc
+
+CC=$(ARCH)-gcc
+CXX=$(ARCH)-g++
+AS=$(ARCH)-as
+LD=$(ARCH)-ld
+OBJCOPY=$(ARCH)-objcopy
+
+ARCHFLAGS += -mabi=ilp32
+ARCHFLAGS += -march=rv32im
+ARCHFLAGS += -fno-lto
+
+#ARCHFLAGS += -mabi=lp64
+#ARCHFLAGS += -march=rv64imac
+
+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
+
+LOADLIBES += -lgcc
+
+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 run_test
+
+%.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)
+#default : run_test
+
+$(TARGET_EXE) : $(OBJECTS)
+	$(CC) $(LDFLAGS) $^ $(LOADLIBES) -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
+
+run_test: $(TARGET_EXE)
+	qtrvsim_cli --pipelined \
+		--dump-cycles $< \
+		--serout serial_port.out
+
+#		--serin serial_port.in \
+
+-include depend
diff --git a/seminaries/qtrvsim/branchpred-1/branchpred-1.S b/seminaries/qtrvsim/branchpred-1/branchpred-1.S
index 1ccefe8..f7f72f3 100644
--- a/seminaries/qtrvsim/branchpred-1/branchpred-1.S
+++ b/seminaries/qtrvsim/branchpred-1/branchpred-1.S
@@ -1,12 +1,16 @@
+.globl _start
+
 # i = s0, j = s1, c = s2, t0 = outer loop limits, t1 = inner loop limit, t3 - auxiliary variable
+# c, i, j = 0; do { do { c++ } while(++j < 5) } while(i < 4);
 
-  addi s1, zero, 0     # c = 0;
-  addi t0, zero, 4     # t0 = 4;
-  addi t1, zero, 5     # t1 = 2
+_start:
+  addi s2, zero, 0   # c = 0; total loop count 
+  addi t0, zero, 4   # t0 = 4; outer loop limit
+  addi t1, zero, 5   # t1 = 5; inner loop limit
 
-  addi s0, zero, 0     # i = 0;
+  addi s0, zero, 0   # i = 0; outer loop inc
 L1:
-  addi s1, zero, 0     # j = 0;
+  addi s1, zero, 0   # j = 0; inner loop inc
 L2:
   addi s2, s2, 1     # c++;
 
-- 
GitLab