diff --git a/Makefile b/Makefile
index 2e2037c..fa63653 100644
--- a/Makefile
+++ b/Makefile
@@ -46,10 +46,11 @@ MEM_TESTS = $(addprefix test-, $(addprefix $(MEM_DIR)/, $(addsuffix .mem, $(base
PREFIX := $(shell command -v riscv64-unknown-elf-gcc >/dev/null 2>&1 && echo riscv64-unknown-elf- || echo /matieres/3MMFMN/riscv32/bin/riscv32-unknown-elf-)
CC := $(PREFIX)gcc
OBJDUMP := $(PREFIX)objdump
+OBJCOPY := $(PREFIX)objcopy
OBTOMEM := common/objtomem.awk
## Flags
-ASFLAGS :=-march=rv32i -mabi=ilp32 -ffreestanding -nostdlib -T $(BENCH_DIR)/link.ld
+ASFLAGS :=-march=rv64i -mabi=lp64 -ffreestanding -nostdlib -T $(BENCH_DIR)/link.ld
CFLAGS :=$(ASFLAGS)
ELFFLAGS :=$(ASFLAGS) $(MEM_DIR)/crt.o -Os -fno-unroll-loops
ODFLAGS :=-j .text -j .rodata -j .data -s
@@ -70,7 +71,10 @@ $(MEM_DIR)/%.elf: $(BENCH_DIR)/%.c $(MEM_DIR)/crt.o |$(MEM_DIR)
$(MEM_DIR)/%.elf: $(BENCH_DIR)/%.s |$(MEM_DIR)
$(CC) $(CFLAGS) -o $@ $<
$(MEM_DIR)/%.mem: $(MEM_DIR)/%.elf |$(MEM_DIR)
- $(OBJDUMP) $(ODFLAGS) $< | awk -f $(OBTOMEM) | awk -f common/fix_mem.awk > $@
+ $(OBJCOPY) -O binary --verilog-data-width 8 $< $@.bin
+ python3 common/swap_endian.py $@.bin $@.bin.swapped 8
+ $(OBJCOPY) -I binary -O verilog --verilog-data-width 8 $@.bin.swapped $@
+ rm $@.bin $@.bin.swapped
test-$(MEM_DIR)/%.mem: $(MEM_DIR)/%.mem |$(MEM_DIR)
@PROG="$(shell echo $< | sed "s/^bench\/mem\///g" | sed "s/\.mem$$//g")" PROOT=$(shell pwd) ./mill TPchisel.test.testOnly $(TOP_REP).$(TOP_TEST) -- -z "$(shell echo $< | sed "s/^bench\/mem\///g" | sed "s/\.mem$$//g")"
diff --git a/bench/tests/op/add.s b/bench/tests/op/add.s
index 95a19b1..2a71bda 100644
--- a/bench/tests/op/add.s
+++ b/bench/tests/op/add.s
@@ -1,4 +1,4 @@
-# expected: dead0000, dead0001, 00000000
+# expected: ffffffffdead0000, ffffffffdead0001, 0000000000000000
.text
_start:
lui x2, 0xdead0
diff --git a/bench/tests/op/addi.s b/bench/tests/op/addi.s
index bf10d14..a5ee7c1 100644
--- a/bench/tests/op/addi.s
+++ b/bench/tests/op/addi.s
@@ -1,4 +1,4 @@
-# expected: dead0000, dead0001, fffff800, ffffffff, 00000000
+# expected: FFFFFFFFdead0000, FFFFFFFFdead0001, fffffffffffff800, ffffffffffffffff, 0000000000000000
.text
_start:
lui x2, 0xdead0
diff --git a/bench/tests/op/lb.s b/bench/tests/op/lb.s
index 8284a0e..b660ee0 100644
--- a/bench/tests/op/lb.s
+++ b/bench/tests/op/lb.s
@@ -1,4 +1,4 @@
-# expected: FFFFFFFB, FFFFFFFB
+# expected: FFFFFFFFFFFFFFFB, FFFFFFFFFFFFFFFB
.text
_start:
addi x1, x0, 0x0FB
diff --git a/bench/tests/op/lh.s b/bench/tests/op/lh.s
index 1ec4c7d..6d297a3 100644
--- a/bench/tests/op/lh.s
+++ b/bench/tests/op/lh.s
@@ -1,4 +1,4 @@
-# expected: FFFFF1BC, FFFFF1BC
+# expected: FFFFFFFFFFFFF1BC, FFFFFFFFFFFFF1BC
.text
_start:
lui x1, 0xF
diff --git a/bench/tests/op/lui.s b/bench/tests/op/lui.s
index 80caedc..b7101a6 100644
--- a/bench/tests/op/lui.s
+++ b/bench/tests/op/lui.s
@@ -1,4 +1,4 @@
-# expected: 00000000,FFFFF000,12345000
+# expected: 00000000,FFFFFFFFFFFFF000,12345000
.text
lui x31, 0 #Test chargement d'une valeur nulle
diff --git a/bench/tests/op/or.s b/bench/tests/op/or.s
index 75c98ef..33aa4ce 100644
--- a/bench/tests/op/or.s
+++ b/bench/tests/op/or.s
@@ -1,4 +1,4 @@
-# expected: 000001FF, FFFFFFFF
+# expected: 000001FF, FFFFFFFFFFFFFFFF
.text
_start:
addi x1, x0, 0x100
diff --git a/bench/tests/op/ori.s b/bench/tests/op/ori.s
index 81c5e08..eada614 100644
--- a/bench/tests/op/ori.s
+++ b/bench/tests/op/ori.s
@@ -1,4 +1,4 @@
-# expected: 000001FF, FFFFFFFF
+# expected: 00000000000001FF, FFFFFFFFFFFFFFFF
.text
_start:
addi x1, x0, 0x100
diff --git a/bench/tests/op/sll.s b/bench/tests/op/sll.s
index 8027053..c5c2f98 100644
--- a/bench/tests/op/sll.s
+++ b/bench/tests/op/sll.s
@@ -10,4 +10,5 @@ _start:
sll x31, x1, x2
addi x1, x0, 0x0F0
+ addi x2, x0, 63
sll x31, x1, x2
diff --git a/bench/tests/op/slli.s b/bench/tests/op/slli.s
index fdb2117..e25bd68 100644
--- a/bench/tests/op/slli.s
+++ b/bench/tests/op/slli.s
@@ -8,4 +8,4 @@ _start:
slli x31, x1, 31
addi x1, x0, 0x0F0
- slli x31, x1, 31
+ slli x31, x1, 63
diff --git a/bench/tests/op/sra.s b/bench/tests/op/sra.s
index 3f7cc5c..7407863 100644
--- a/bench/tests/op/sra.s
+++ b/bench/tests/op/sra.s
@@ -1,4 +1,4 @@
-# expected: 000000FF, FFFFFFFF, 00000000
+# expected: 000000FF, FFFFFFFFFFFFFFFF, 00000000
.text
_start:
addi x1, x0, 0x3FC
diff --git a/bench/tests/op/srai.s b/bench/tests/op/srai.s
index 7289917..6923241 100644
--- a/bench/tests/op/srai.s
+++ b/bench/tests/op/srai.s
@@ -1,4 +1,4 @@
-# expected: 000000FF, FFFFFFFF, 00000000
+# expected: 000000FF, FFFFFFFFFFFFFFFF, 00000000
.text
_start:
addi x1, x0, 0x3FC
diff --git a/bench/tests/op/srl.s b/bench/tests/op/srl.s
index 6fed2c8..66b9ccf 100644
--- a/bench/tests/op/srl.s
+++ b/bench/tests/op/srl.s
@@ -5,7 +5,7 @@ _start:
addi x2, x0, 2
srl x31, x1, x2
- lui x1, 0xA0000
+ li x1, 0x00000000A0000000
addi x2, x0, 31
srl x31, x1, x2
diff --git a/bench/tests/op/srli.s b/bench/tests/op/srli.s
index d9395a7..5bfb7be 100644
--- a/bench/tests/op/srli.s
+++ b/bench/tests/op/srli.s
@@ -4,7 +4,8 @@ _start:
addi x1, x0, 0x3FC
srli x31, x1, 2
- lui x1, 0xA0000
+ #lui x1, 0xA0000
+ li x1, 0x00000000A0000000
srli x31, x1, 31
lui x1, 0x0A000
diff --git a/bench/tests/op/sub.s b/bench/tests/op/sub.s
index a70c142..15220da 100644
--- a/bench/tests/op/sub.s
+++ b/bench/tests/op/sub.s
@@ -1,4 +1,4 @@
-# expected: 00000000, 00000001, FFFFFFFF, 00000008
+# expected: 00000000, 00000001, FFFFFFFFFFFFFFFF, 00000008
.text
_start:
# Sub equal numbers
diff --git a/common/swap_endian.py b/common/swap_endian.py
new file mode 100644
index 0000000..06d1765
--- /dev/null
+++ b/common/swap_endian.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python3
+import sys
+
+if len(sys.argv) < 3:
+ print("Usage: swap_endian.py