files for test suite
This commit is contained in:
		
							parent
							
								
									06400d692c
								
							
						
					
					
						commit
						fdbee47efc
					
				|  | @ -0,0 +1,37 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | START_ADDRES := $(shell readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$2  }') | ||||||
|  | END_ADDRES := $(shell readelf -s $(<) | grep "end_signature" | awk '{print "0x"$2  }') | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) \
 | ||||||
|  |          -B `readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$$2  }'`\
 | ||||||
|  |          -E `readelf -s $(<) | grep "end_signature" | awk '{print "0x"$$2  }'` -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv32-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv32-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) \
 | ||||||
|  |          -B `readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$$2  }'`\
 | ||||||
|  |          -E `readelf -s $(<) | grep "end_signature" | awk '{print "0x"$$2  }'` -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv32-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv32-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,37 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | START_ADDRES := $(shell readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$2  }') | ||||||
|  | END_ADDRES := $(shell readelf -s $(<) | grep "end_signature" | awk '{print "0x"$2  }') | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) \
 | ||||||
|  |          -B `readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$$2  }'`\
 | ||||||
|  |          -E `readelf -s $(<) | grep "end_signature" | awk '{print "0x"$$2  }'` -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv32-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv32-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,37 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | START_ADDRES := $(shell readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$2  }') | ||||||
|  | END_ADDRES := $(shell readelf -s $(<) | grep "end_signature" | awk '{print "0x"$2  }') | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) \
 | ||||||
|  |          -B `readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$$2  }'`\
 | ||||||
|  |          -E `readelf -s $(<) | grep "end_signature" | awk '{print "0x"$$2  }'` -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv32-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv32-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,37 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | START_ADDRES := $(shell readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$2  }') | ||||||
|  | END_ADDRES := $(shell readelf -s $(<) | grep "end_signature" | awk '{print "0x"$2  }') | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) \
 | ||||||
|  |          -B `readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$$2  }'`\
 | ||||||
|  |          -E `readelf -s $(<) | grep "end_signature" | awk '{print "0x"$$2  }'` -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv32-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv32-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | START_ADDRES := $(shell readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$2  }') | ||||||
|  | END_ADDRES := $(shell readelf -s $(<) | grep "end_signature" | awk '{print "0x"$2  }') | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) -R64 -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv64-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv64-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) -R64 -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv64-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES)  | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 							 | ||||||
|  | 							 | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv64-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | START_ADDRES := $(shell readelf -s $(<) | grep "begin_signature" | awk '{print "0x"$2  }') | ||||||
|  | END_ADDRES := $(shell readelf -s $(<) | grep "end_signature" | awk '{print "0x"$2  }') | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) -R64 -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv64-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES) | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv64-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) -R64 -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv64-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES)  | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 							 | ||||||
|  | 							 | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv64-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | TARGET_SIM   ?= /home/marius/Work/RISC-V/RISC-V-TLM/RISCV_TLM | ||||||
|  | TARGET_FLAGS ?= $(RISCV_TARGET_FLAGS) | ||||||
|  | ifeq ($(shell command -v $(TARGET_SIM) 2> /dev/null),) | ||||||
|  |     $(error Target simulator executable '$(TARGET_SIM)` not found) | ||||||
|  | endif | ||||||
|  | 
 | ||||||
|  | RUN_TARGET=\
 | ||||||
|  |     $(TARGET_SIM) $(TARGET_FLAGS) -R64 -T \
 | ||||||
|  |          $(<).hex ;\
 | ||||||
|  | 	 mv *output $(work_dir_isa)/ | ||||||
|  | 
 | ||||||
|  | RISCV_PREFIX   ?= riscv64-unknown-elf- | ||||||
|  | RISCV_GCC      ?= $(RISCV_PREFIX)gcc | ||||||
|  | RISCV_OBJDUMP  ?= $(RISCV_PREFIX)objdump | ||||||
|  | RISCV_GCC_OPTS ?= -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles $(RVTEST_DEFINES)  | ||||||
|  | 
 | ||||||
|  | COMPILE_CMD = $$(RISCV_GCC) $(1) $$(RISCV_GCC_OPTS) \
 | ||||||
|  | 							-I$(ROOTDIR)/riscv-test-suite/env/ \
 | ||||||
|  | 							-I$(TARGETDIR)/$(RISCV_TARGET)/ \
 | ||||||
|  | 							-T$(TARGETDIR)/$(RISCV_TARGET)/link.ld \
 | ||||||
|  | 							$$(<) -o $$@  | ||||||
|  | 							 | ||||||
|  | 							 | ||||||
|  | 		 | ||||||
|  | OBJ_CMD = $$(RISCV_OBJDUMP) $$@ -D > $$@.objdump; \
 | ||||||
|  | 					$$(RISCV_OBJDUMP) $$@ --source > $$@.debug | ||||||
|  | 					 | ||||||
|  | OBJ_HEX = riscv64-unknown-elf-objcopy -Oihex $$@ $$@.hex  | ||||||
|  | 
 | ||||||
|  | COMPILE_TARGET=\
 | ||||||
|  | 			$(COMPILE_CMD); \
 | ||||||
|  | 			$(OBJ_CMD);\
 | ||||||
|  | 			$(OBJ_HEX) | ||||||
|  |          | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | OUTPUT_ARCH( "riscv" ) | ||||||
|  | ENTRY(rvtest_entry_point) | ||||||
|  | 
 | ||||||
|  | SECTIONS | ||||||
|  | { | ||||||
|  |   . = 0x00000000; | ||||||
|  |   .text.init : { *(.text.init) } | ||||||
|  |   . = ALIGN(0x1000); | ||||||
|  | /*  .tohost : { *(.tohost) } */ | ||||||
|  |   . = ALIGN(0x1000); | ||||||
|  |   .text : { *(.text) } | ||||||
|  |   . = ALIGN(0x1000); | ||||||
|  |   .data : { *(.data) } | ||||||
|  |   .data.string : { *(.data.string)} | ||||||
|  |   .bss : { *(.bss) } | ||||||
|  |   _end = .; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,349 @@ | ||||||
|  | #ifndef _COMPLIANCE_MODEL_H | ||||||
|  | #define _COMPLIANCE_MODEL_H | ||||||
|  | 
 | ||||||
|  | #define TESTNUM gp | ||||||
|  | 
 | ||||||
|  | #if XLEN == 64 | ||||||
|  |   #define ALIGNMENT 3 | ||||||
|  | #else | ||||||
|  |   #define ALIGNMENT 2 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | //RV_COMPLIANCE_HALT
 | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_HALT    \ | ||||||
|  | 	 la t0, begin_signature; \ | ||||||
|  | 	 la t1, end_signature; \ | ||||||
|  |      fence; \ | ||||||
|  |      ecall | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_BOOT \ | ||||||
|  |         .align  6;                                                      \ | ||||||
|  |         .weak stvec_handler;                                            \ | ||||||
|  |         .weak mtvec_handler;                                            \ | ||||||
|  |         /* reset vector */                                              \ | ||||||
|  |         j reset_vector;                                                 \ | ||||||
|  |         .align 2;                                                       \ | ||||||
|  | trap_vector:                                                            \ | ||||||
|  |         /* test whether the test came from pass/fail */                 \ | ||||||
|  |         csrr t5, mcause;                                                \ | ||||||
|  |         li t6, CAUSE_USER_ECALL;                                        \ | ||||||
|  |         beq t5, t6, write_tohost;                                       \ | ||||||
|  |         li t6, CAUSE_SUPERVISOR_ECALL;                                  \ | ||||||
|  |         beq t5, t6, write_tohost;                                       \ | ||||||
|  |         li t6, CAUSE_MACHINE_ECALL;                                     \ | ||||||
|  |         beq t5, t6, write_tohost;                                       \ | ||||||
|  |         /* if an mtvec_handler is defined, jump to it */                \ | ||||||
|  |         la t5, mtvec_handler;                                           \ | ||||||
|  |         beqz t5, 1f;                                                    \ | ||||||
|  |         jr t5;                                                          \ | ||||||
|  |         /* was it an interrupt or an exception? */                      \ | ||||||
|  |   1:    csrr t5, mcause;                                                \ | ||||||
|  |         bgez t5, handle_exception;                                      \ | ||||||
|  | handle_exception:                                                       \ | ||||||
|  |         /* we don't know how to handle whatever the exception was */    \ | ||||||
|  |   other_exception:                                                      \ | ||||||
|  |         /* some unhandlable exception occurred */                       \ | ||||||
|  |   1:    ori gp, gp, 1337;                                     \ | ||||||
|  |   write_tohost:                                                         \ | ||||||
|  |         sw gp, tohost, t5;                                         \ | ||||||
|  |         j write_tohost;                                                 \ | ||||||
|  | reset_vector:                                                           \ | ||||||
|  |         li a0, MSTATUS_MPP;                                                   \ | ||||||
|  |         csrs mstatus, a0;                                                     \ | ||||||
|  |         la t0, trap_vector;                                             \ | ||||||
|  |         csrw mtvec, t0;                                                 \ | ||||||
|  |         la t0, rvtest_init;                                                  \ | ||||||
|  |         csrw mepc, t0;                                                  \ | ||||||
|  |         csrr a0, mhartid;                                               \ | ||||||
|  |         mret;                                                           \ | ||||||
|  | 1:                                                                      \ | ||||||
|  |      | ||||||
|  | //RV_COMPLIANCE_DATA_BEGIN
 | ||||||
|  | #define RVMODEL_DATA_BEGIN                                              \ | ||||||
|  |   .align 4; .global begin_signature; begin_signature: | ||||||
|  | 
 | ||||||
|  | //RV_COMPLIANCE_DATA_END
 | ||||||
|  | #define RVMODEL_DATA_END                                                      \ | ||||||
|  |   .align 4; .global end_signature; end_signature:  \ | ||||||
|  |   .pushsection .tohost,"aw",@progbits;                            \ | ||||||
|  |   .align 8; .global tohost; tohost: .dword 0;                     \ | ||||||
|  |   .align 8; .global fromhost; fromhost: .dword 0;                 \ | ||||||
|  |   .popsection;                                                    \ | ||||||
|  |   .align 8; .global begin_regstate; begin_regstate:               \ | ||||||
|  |   .word 128;                                                      \ | ||||||
|  |   .align 8; .global end_regstate; end_regstate:                   \ | ||||||
|  |   .word 4;                                                        \ | ||||||
|  |   .align ALIGNMENT;\ | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_IO_INIT | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_SET_MSW_INT        | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_CLEAR_MSW_INT | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_CLEAR_MTIMER_INT | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_CLEAR_MEXT_INT | ||||||
|  | 
 | ||||||
|  | #endif // _COMPLIANCE_MODEL_H
 | ||||||
|  | 
 | ||||||
|  | // RISC-V Compliance IO Test Header File
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2005-2018 Imperas Software Ltd., www.imperas.com | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *   http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, | ||||||
|  |  * either express or implied. | ||||||
|  |  * | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | //
 | ||||||
|  | // In general the following registers are reserved
 | ||||||
|  | // ra, a0, t0, t1
 | ||||||
|  | // x1, x10 x5, x6
 | ||||||
|  | // new reserve x31
 | ||||||
|  | //
 | ||||||
|  | 
 | ||||||
|  | #ifndef _COMPLIANCE_IO_H | ||||||
|  | #define _COMPLIANCE_IO_H | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #ifndef  RVMODEL_ASSERT | ||||||
|  | #  define RVMODEL_IO_QUIET | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | //-----------------------------------------------------------------------
 | ||||||
|  | // RV IO Macros (Character transfer by custom instruction)
 | ||||||
|  | //-----------------------------------------------------------------------
 | ||||||
|  | #define STRINGIFY(x) #x | ||||||
|  | #define TOSTRING(x)  STRINGIFY(x) | ||||||
|  | 
 | ||||||
|  | #define RVTEST_CUSTOM1 0x40000000 | ||||||
|  | 
 | ||||||
|  | #ifdef RVMODEL_IO_QUIET | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_IO_INIT | ||||||
|  | #define RVMODEL_IO_WRITE_STR(_SP, _STR) | ||||||
|  | #define RVMODEL_IO_CHECK() | ||||||
|  | #define RVMODEL_IO_ASSERT_GPR_EQ(_SP, _R, _I) | ||||||
|  | #define RVMODEL_IO_ASSERT_SFPR_EQ(_F, _R, _I) | ||||||
|  | #define RVMODEL_IO_ASSERT_DFPR_EQ(_D, _R, _I) | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | #define RVMODEL_IO_INIT | ||||||
|  | 
 | ||||||
|  | #if (__riscv_xlen==32) | ||||||
|  | #    define RSIZE 4 | ||||||
|  | #    define SX sw | ||||||
|  | #    define LX lw | ||||||
|  | #endif | ||||||
|  | #if (__riscv_xlen==64) | ||||||
|  | #    define RSIZE 8 | ||||||
|  | #    define SX sd | ||||||
|  | #    define LX ld | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // _SP = (volatile register)
 | ||||||
|  | #define LOCAL_IO_PUSH(_SP)                                              \ | ||||||
|  |     la      _SP,  begin_regstate;                                       \ | ||||||
|  |     SX      x1,   (1*RSIZE)(_SP);                                       \ | ||||||
|  |     SX      x5,   (5*RSIZE)(_SP);                                       \ | ||||||
|  |     SX      x6,   (6*RSIZE)(_SP);                                       \ | ||||||
|  |     SX      x8,   (8*RSIZE)(_SP);                                       \ | ||||||
|  |     SX      x10,  (10*RSIZE)(_SP); | ||||||
|  | 
 | ||||||
|  | // _SP = (volatile register)
 | ||||||
|  | #define LOCAL_IO_POP(_SP)                                               \ | ||||||
|  |     la      _SP,   begin_regstate;                                      \ | ||||||
|  |     LX      x1,   (1*RSIZE)(_SP);                                       \ | ||||||
|  |     LX      x5,   (5*RSIZE)(_SP);                                       \ | ||||||
|  |     LX      x6,   (6*RSIZE)(_SP);                                       \ | ||||||
|  |     LX      x8,   (8*RSIZE)(_SP);                                       \ | ||||||
|  |     LX      x10,  (10*RSIZE)(_SP); | ||||||
|  | 
 | ||||||
|  | #define LOCAL_IO_WRITE_GPR(_R)                                          \ | ||||||
|  |     mv          a0, _R;                                                 \ | ||||||
|  |     la          t0, FN_WriteA0;                                         \ | ||||||
|  |     jalr         t0; | ||||||
|  | 
 | ||||||
|  | #define LOCAL_IO_WRITE_FPR(_F)                                          \ | ||||||
|  |     fmv.x.s     a0, _F;                                                 \ | ||||||
|  |     jal         FN_WriteA0; | ||||||
|  | 
 | ||||||
|  | #define LOCAL_IO_WRITE_DFPR(_V1, _V2)                                   \ | ||||||
|  |     mv          a0, _V1;                                                \ | ||||||
|  |     jal         FN_WriteA0; \ | ||||||
|  |     mv          a0, _V2; \ | ||||||
|  |     jal         FN_WriteA0; \ | ||||||
|  | 
 | ||||||
|  | #define LOCAL_IO_PUTC(_R)                                               \ | ||||||
|  |     la          t3, RVTEST_CUSTOM1;                                     \ | ||||||
|  |     sw          _R, (0)(t3);    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // Assertion violation: file file.c, line 1234: (expr)
 | ||||||
|  | // _SP = (volatile register)
 | ||||||
|  | // _R = GPR
 | ||||||
|  | // _I = Immediate
 | ||||||
|  | #define RVMODEL_IO_ASSERT_GPR_EQ(_SP, _R, _I)                            \ | ||||||
|  |     LOCAL_IO_PUSH(_SP)                                                  \ | ||||||
|  |     mv          s0, _R;                                                 \ | ||||||
|  |     li          t0, _I;                                                 \ | ||||||
|  |     beq         s0, t0, 20002f;                                         \ | ||||||
|  |     LOCAL_IO_WRITE_STR("Assertion violation: file ");                   \ | ||||||
|  |     LOCAL_IO_WRITE_STR(__FILE__);                                       \ | ||||||
|  |     LOCAL_IO_WRITE_STR(", line ");                                      \ | ||||||
|  |     LOCAL_IO_WRITE_STR(TOSTRING(__LINE__));                             \ | ||||||
|  |     LOCAL_IO_WRITE_STR(": ");                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR(# _R);                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR("(");                                            \ | ||||||
|  |     LOCAL_IO_WRITE_GPR(s0);                                             \ | ||||||
|  |     LOCAL_IO_WRITE_STR(") != ");                                        \ | ||||||
|  |     LOCAL_IO_WRITE_STR(# _I);                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR("\n");                                           \ | ||||||
|  |     li TESTNUM, 100;                                                    \ | ||||||
|  |     j rvtest_code_end;                                                        \ | ||||||
|  | 20002:                                                                  \ | ||||||
|  |     LOCAL_IO_POP(_SP) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // _F = FPR
 | ||||||
|  | // _C = GPR
 | ||||||
|  | // _I = Immediate
 | ||||||
|  | #define RVMODEL_IO_ASSERT_SFPR_EQ(_F, _C, _I)                            \ | ||||||
|  |     fmv.x.s     t0, _F;                                                 \ | ||||||
|  |     beq         _C, t0, 20003f;                                         \ | ||||||
|  |     LOCAL_IO_WRITE_STR("Assertion violation: file ");                   \ | ||||||
|  |     LOCAL_IO_WRITE_STR(__FILE__);                                       \ | ||||||
|  |     LOCAL_IO_WRITE_STR(", line ");                                      \ | ||||||
|  |     LOCAL_IO_WRITE_STR(TOSTRING(__LINE__));                             \ | ||||||
|  |     LOCAL_IO_WRITE_STR(": ");                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR(# _F);                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR("(");                                            \ | ||||||
|  |     LOCAL_IO_WRITE_FPR(_F);                                             \ | ||||||
|  |     LOCAL_IO_WRITE_STR(") != ");                                        \ | ||||||
|  |     LOCAL_IO_WRITE_STR(# _I);                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR("\n");                                           \ | ||||||
|  |     li TESTNUM, 100;                                                    \ | ||||||
|  |     j rvtest_code_end;                                                        \ | ||||||
|  | 20003: | ||||||
|  | 
 | ||||||
|  | // _D = DFPR
 | ||||||
|  | // _R = GPR
 | ||||||
|  | // _I = Immediate
 | ||||||
|  | #define RVMODEL_IO_ASSERT_DFPR_EQ(_D, _R, _I)                            \ | ||||||
|  |     fmv.x.d     t0, _D;                                                 \ | ||||||
|  |     beq         _R, t0, 20005f;                                         \ | ||||||
|  |     LOCAL_IO_WRITE_STR("Assertion violation: file ");                   \ | ||||||
|  |     LOCAL_IO_WRITE_STR(__FILE__);                                       \ | ||||||
|  |     LOCAL_IO_WRITE_STR(", line ");                                      \ | ||||||
|  |     LOCAL_IO_WRITE_STR(TOSTRING(__LINE__));                             \ | ||||||
|  |     LOCAL_IO_WRITE_STR(": ");                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR(# _D);                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR("(");                                            \ | ||||||
|  |     LOCAL_IO_WRITE_DFPR(_D);                                            \ | ||||||
|  |     LOCAL_IO_WRITE_STR(") != ");                                        \ | ||||||
|  |     LOCAL_IO_WRITE_STR(# _I);                                           \ | ||||||
|  |     LOCAL_IO_WRITE_STR("\n");                                           \ | ||||||
|  |     li TESTNUM, 100;                                                    \ | ||||||
|  |     j rvtest_code_end;                                                        \ | ||||||
|  | 20005: | ||||||
|  | 
 | ||||||
|  | // _SP = (volatile register)
 | ||||||
|  | #define LOCAL_IO_WRITE_STR(_STR) RVMODEL_IO_WRITE_STR(x31, _STR) | ||||||
|  | #define RVMODEL_IO_WRITE_STR(_SP, _STR)                                  \ | ||||||
|  |     LOCAL_IO_PUSH(_SP)                                                  \ | ||||||
|  |     .section .data.string;                                              \ | ||||||
|  | 20001:                                                                  \ | ||||||
|  |     .string _STR;                                                       \ | ||||||
|  |     .section .text.init;                                                \ | ||||||
|  |     la a0, 20001b;                                                      \ | ||||||
|  |     la t0, FN_WriteStr;                                                \ | ||||||
|  |     jalr t0;                                                          \ | ||||||
|  |     LOCAL_IO_POP(_SP) | ||||||
|  | 
 | ||||||
|  | // generate assertion listing
 | ||||||
|  | #define LOCAL_CHECK() RVMODEL_IO_CHECK() | ||||||
|  | #define RVMODEL_IO_CHECK()                                               \ | ||||||
|  |     li zero, -1;                                                        \ | ||||||
|  | 
 | ||||||
|  | //
 | ||||||
|  | // FN_WriteStr: Uses a0, t0
 | ||||||
|  | //
 | ||||||
|  | FN_WriteStr: | ||||||
|  |     mv          t0, a0; | ||||||
|  | 10000: | ||||||
|  |     lbu         a0, (t0); | ||||||
|  |     addi        t0, t0, 1; | ||||||
|  |     beq         a0, zero, 10000f; | ||||||
|  |     LOCAL_IO_PUTC(a0); | ||||||
|  |     j           10000b; | ||||||
|  | 10000: | ||||||
|  |     ret; | ||||||
|  | 
 | ||||||
|  | //
 | ||||||
|  | // FN_WriteA0: write register a0(x10) (destroys a0(x10), t0-t2(x5-x7))
 | ||||||
|  | //
 | ||||||
|  | FN_WriteA0: | ||||||
|  |         mv          t0, a0 | ||||||
|  |         // determine architectural register width
 | ||||||
|  |         li          a0, -1 | ||||||
|  |         srli        a0, a0, 31 | ||||||
|  |         srli        a0, a0, 1 | ||||||
|  |         bnez        a0, FN_WriteA0_64 | ||||||
|  | 
 | ||||||
|  | FN_WriteA0_32: | ||||||
|  |         // reverse register when xlen is 32
 | ||||||
|  |         li          t1, 8 | ||||||
|  | 10000:  slli        t2, t2, 4 | ||||||
|  |         andi        a0, t0, 0xf | ||||||
|  |         srli        t0, t0, 4 | ||||||
|  |         or          t2, t2, a0 | ||||||
|  |         addi        t1, t1, -1 | ||||||
|  |         bnez        t1, 10000b | ||||||
|  |         li          t1, 8 | ||||||
|  |         j           FN_WriteA0_common | ||||||
|  | 
 | ||||||
|  | FN_WriteA0_64: | ||||||
|  |         // reverse register when xlen is 64
 | ||||||
|  |         li          t1, 16 | ||||||
|  | 10000:  slli        t2, t2, 4 | ||||||
|  |         andi        a0, t0, 0xf | ||||||
|  |         srli        t0, t0, 4 | ||||||
|  |         or          t2, t2, a0 | ||||||
|  |         addi        t1, t1, -1 | ||||||
|  |         bnez        t1, 10000b | ||||||
|  |         li          t1, 16 | ||||||
|  | 
 | ||||||
|  | FN_WriteA0_common: | ||||||
|  |         // write reversed characters
 | ||||||
|  |         li          t0, 10 | ||||||
|  | 10000:  andi        a0, t2, 0xf | ||||||
|  |         blt         a0, t0, 10001f | ||||||
|  |         addi        a0, a0, 'a'-10 | ||||||
|  |         j           10002f | ||||||
|  | 10001:  addi        a0, a0, '0' | ||||||
|  | 10002:  LOCAL_IO_PUTC(a0) | ||||||
|  |         srli        t2, t2, 4 | ||||||
|  |         addi        t1, t1, -1 | ||||||
|  |         bnez        t1, 10000b | ||||||
|  |         ret | ||||||
|  | 
 | ||||||
|  | #endif // RVMODEL_IO_QUIET
 | ||||||
|  | 
 | ||||||
|  | #endif // _COMPLIANCE_IO_H
 | ||||||
		Loading…
	
		Reference in New Issue