Skip to content
Snippets Groups Projects
Commit eb5a7477 authored by Pavel Pisa's avatar Pavel Pisa
Browse files

seminaries/qtrvsim: update vect-add2 and vect-inc for RISC-V as well.


Signed-off-by: default avatarPavel Pisa <pisa@cmp.felk.cvut.cz>
parent 7f84aecd
No related branches found
No related tags found
No related merge requests found
*.o
depend
vect-add2
\ No newline at end of file
ARCH=riscv64-unknown-elf
SOURCES = vect-add2.S
TARGET_EXE = vect-add2
LDFLAGS += -Wl,-Ttext,0x200 -Wl,-Tdata,0x400
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
// Directives to make interresting windows visible
#pragma qtrvsim show registers
#pragma qtrvsim show memory
.globl _start
.option norelax
.text
// int *pa;
// int *pb;
_start:
main:
loop:
la x5, vect_a // pa = vec_a
la x6, vect_b // pb = vec_b
addi x8, x0, 16 // int i = 16
vect_next: // do {
lw x2, 0(x5) // r2 = *pa
lw x3, 0(x6) // r3 = *pb
add x2, x2, x3 // r2 = r2 + r3
sw x2, 0(x6) // *pa = r2
addi x5, x5, 4 // pa++
addi x6, x6, 4 // pb++
addi x8, x8, -1 // i--
bne x8, x0, vect_next // } while (i != 0)
// stop execution wait for debugger/user
ebreak
// ensure that continuation does not
// interpret random data
beq x0, x0, loop
.bss
.org 0x400
.data
vect_a: // int vect_a[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0};
.word 0x01
.word 0x02
.word 0x03
.word 0x04
.word 0x05
.word 0x06
.word 0x07
.word 0x08
.word 0x09
.word 0x0a
.word 0x0b
.word 0x0c
.word 0x0d
.word 0x0e
.word 0x0f
.word 0x00
vect_b: // int vect_b[16] = {16, 32, 48, 64, ...};
.word 0x10
.word 0x20
.word 0x30
.word 0x40
.word 0x50
.word 0x60
.word 0x70
.word 0x80
.word 0x90
.word 0xa0
.word 0xb0
.word 0xc0
.word 0xd0
.word 0xe0
.word 0xf0
.word 0x00
// Specify location to show in memory window
#pragma qtrvsim focus memory vect_a
*.o
depend
vect-inc
ARCH=riscv64-unknown-elf
SOURCES = vect-inc.S
TARGET_EXE = vect-inc
LDFLAGS += -Wl,-Ttext,0x200 -Wl,-Tdata,0x400
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
// Directives to make interresting windows visible
#pragma qtrvsim show registers
#pragma qtrvsim show memory
.globl _start
.option norelax
.text
// int *pa;
_start:
main:
loop:
la x5, vect_a // pa = vec_a
addi x8, x0, 16 // int i = 16
vect_next: // do {
lw x2, 0(x5) // r2 = *pa
addi x2, x2, 1 // r2 = r2 + 1
sw x2, 0(x5) // *pa = r2
addi x5, x5, 4 // pa++
addi x8, x8, -1 // i--
bne x8, x0, vect_next // } while (i != 0)
// stop execution wait for debugger/user
ebreak
// ensure that continuation does not
// interpret random data
beq x0, x0, loop
.bss
.org 0x400
.data
vect_a: // int vect_a[16] = {1, 2, 3, ...};
.word 0x01
.word 0x02
.word 0x03
.word 0x04
.word 0x05
.word 0x06
.word 0x07
.word 0x08
.word 0x09
.word 0x0a
.word 0x0b
.word 0x0c
.word 0x0d
.word 0x0e
.word 0x0f
.word 0x00
// Specify location to show in memory window
#pragma qtrvsim focus memory vect_a
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment