summary refs log tree commit diff
path: root/doc
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2022-02-12 02:27:50 -0800
committerQuentin Carbonneaux <quentin@c9x.me>2022-02-17 22:43:12 +0100
commit4e93eeaa3b63b6ae50954a29662cc3ea6be48b23 (patch)
tree42f9dd888d3581ca9758afad53116f95ef790083 /doc
parent8e040d58615e49a63fb50dda5dc695e96a54a7bc (diff)
downloadroux-4e93eeaa3b63b6ae50954a29662cc3ea6be48b23.tar.gz
add rv64 backend
It is mostly complete, but still has a few ABI bugs when passing
floats in structs, or when structs are passed partly in register,
and partly on stack.
Diffstat (limited to 'doc')
-rw-r--r--doc/il.txt1
-rw-r--r--doc/rv64.txt20
2 files changed, 21 insertions, 0 deletions
diff --git a/doc/il.txt b/doc/il.txt
index 994729e..0e05283 100644
--- a/doc/il.txt
+++ b/doc/il.txt
@@ -856,6 +856,7 @@ alignment required by all the targets.
 
     type :valist = align 8 { 24 }  # For amd64_sysv
     type :valist = align 8 { 32 }  # For arm64
+    type :valist = align 8 { 8 }   # For rv64
 
 The following example defines a variadic function adding
 its first three arguments.
diff --git a/doc/rv64.txt b/doc/rv64.txt
new file mode 100644
index 0000000..e696d77
--- /dev/null
+++ b/doc/rv64.txt
@@ -0,0 +1,20 @@
+=========
+RISC-V 64
+=========
+
+- Known issues
+--------------
+
+ABI with structs containing floats is not yet supported.
+
+- Possible improvements
+-----------------------
+
+rv64_isel() could turn compare used only with jnz into b{lt,ge}[u].
+
+- Helpful links
+---------------
+
+RISC-V spec: https://github.com/riscv/riscv-isa-manual/releases/latest/download/riscv-spec.pdf
+ASM manual: https://github.com/riscv-non-isa/riscv-asm-manual/blob/master/riscv-asm.md
+psABI: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc