automated commit TP1
This commit is contained in:
parent
41f422635b
commit
9476b924d3
@ -4,7 +4,7 @@ A pre-compiled archive is available here:
|
||||
|
||||
https://matthieu-moy.fr/spip/?Pre-compiled-RISC-V-GNU-toolchain-and-spike
|
||||
|
||||
This is known to work on Ubuntu 20.04 and 20.10. Use at your own risk anywhere
|
||||
This is known to work on Ubuntu 20.04, 20.10 and 22.04. Use at your own risk anywhere
|
||||
else. It contains the RiscV tools, ANTLR, and Pyright (a type-checker for Python
|
||||
used in the labs).
|
||||
|
||||
|
||||
20
PLANNING.md
20
PLANNING.md
@ -1,9 +1,9 @@
|
||||
# Planning of the compilation course (CAP, Compilation and Program Analysis)
|
||||
_Academic first semester 2022-2023_
|
||||
|
||||
# Week 1:
|
||||
# Week 1:
|
||||
|
||||
- :book: First Course session: Tuesday 7/09/2022, 10h15-12h15. Amphi B (Gabriel Radanne)
|
||||
- :book: First Course session: Wednesday 07/09/2022, 10h15-12h15. Amphi B (Gabriel Radanne)
|
||||
|
||||
* Introduction: [transparents](course/capmif_cours01_intro_et_archi.pdf).
|
||||
* ISA [ref pdf RISCV](course/riscv_isa.pdf).
|
||||
@ -11,13 +11,21 @@ _Academic first semester 2022-2023_
|
||||
* Lexing, Parsing, [slides](course/capmif_cours02_lexing_parsing.pdf).
|
||||
* [Demo Parsing](course/ANTLRExamples.tar.xz).
|
||||
|
||||
- :book: Second Course session: Friday 9/09/2022, 10:15. Amphi B (Gabriel Radanne)
|
||||
- :book: Second Course session: Friday 09/09/2022, 10:15. Amphi B (Gabriel Radanne)
|
||||
|
||||
* Interpreters [slides in english](course/capmif_cours03_interpreters.pdf).
|
||||
* [Demo files](course/ANTLRExamples.tar.xz)
|
||||
* [Demo files](course/ANTLRExamples.tar.xz).
|
||||
* [Grammar exercise](course/TD2.pdf).
|
||||
|
||||
- :rocket: Additional ressources (mainly in english)
|
||||
|
||||
* A nice YT video on [structural induction](https://www.youtube.com/watch?v=2o3EzvfgTiQ) by F. Pereira.
|
||||
* Fernando Pereira's other videos on operational semantics : [video1](https://www.youtube.com/watch?v=bOzbRhXvtlY), [video2](https://www.youtube.com/watch?v=aiBKOuM5iEA)
|
||||
* A nice YT video on [structural induction](https://www.youtube.com/watch?v=2o3EzvfgTiQ) by F. Pereira.
|
||||
* Fernando Pereira's other videos on operational semantics : [video1](https://www.youtube.com/watch?v=bOzbRhXvtlY), [video2](https://www.youtube.com/watch?v=aiBKOuM5iEA).
|
||||
|
||||
# Week 2:
|
||||
|
||||
- :hammer: Lab 1: Wednesday 14/09/2021, 10h15-12h15. Salles B1 (Nicolas Chappe) & B2 (Rémi Di Guardia)
|
||||
|
||||
* Introduction to RISCV [TP01](TP01/tp1.pdf).
|
||||
* Code in [TP01/](TP01/).
|
||||
* ISA [ref pdf RISCV](course/riscv_isa.pdf).
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# cap-labs 2021: Public files for ENSL M1 students (CAP course)
|
||||
# cap-labs 2022: Public files for ENSL M1 students (CAP course)
|
||||
|
||||

|
||||
|
||||
@ -39,7 +39,7 @@ Gabriel Radanne, Inria, LIP [email](mailto:gabriel.radanne@ens-lyon.fr)
|
||||
|
||||
* MCC (final grade computation) :
|
||||
```
|
||||
let ccgrade = average(Lab3, Lab5, Lab6, partial)
|
||||
let ccgrade = average(Lab3, Lab4, Lab5, partial)
|
||||
in (finalnote + ccgrade)/2
|
||||
```
|
||||
* The partial exam is this academic year replaced by a written housework ("DM").
|
||||
|
||||
55
SSHENSL.md
55
SSHENSL.md
@ -1,55 +0,0 @@
|
||||
Remote work on ENSL machines
|
||||
|
||||
# SSH on ENSL machines, Linux version (with your ENSL Account)
|
||||
|
||||
|
||||
* Edit your `.ssh/config` and add the following lines:
|
||||
```
|
||||
Host !ssh.ens-lyon.fr *.ens-lyon.fr
|
||||
ProxyCommand ssh -N -W %h:%p %r@ssh.ens-lyon.fr
|
||||
```
|
||||
|
||||
* now `ssh` on one of the ENSL machines:
|
||||
|
||||
```
|
||||
ssh mylogin@slsu0-02.dsi-ext.ens-lyon.fr
|
||||
```
|
||||
(`slsu0` or `slsu1`, `01` to `20` at least, use `-X` if you want to use a graphical interface remotely).
|
||||
|
||||
|
||||
# Windows version.
|
||||
|
||||
* adapt the `mobaxterm` howto from [this page](https://nlouvet.gitlabpages.inria.fr/lifasr5/connec.html) The ssh gateway is `ssh.ens-lyon.fr` and the machine to log on is `slsu[0-1]-...`
|
||||
|
||||
# Mount your ENS account on your laptop (Linux) with SSHFS.
|
||||
|
||||
* I give you in `scripts/mountsinfoens` a script I wrote many years ago, use with caution.
|
||||
|
||||
# Remote debugging with tmux
|
||||
|
||||
`tmux` is a terminal multiplexer, that is you can transform one session into
|
||||
many virtual sessions. Here we are using it to share one session between
|
||||
multiple users so that we can help you debug in real time on your machine.
|
||||
|
||||
Follow the following steps to share a tmux session with another user (this
|
||||
method is not really secure and should not be used anywhere else):
|
||||
|
||||
- Connect a tmux session with a sensible name (ie. your id) in a shared directory (ie. /tmp):
|
||||
`tmux -S /tmp/<yourid>`
|
||||
- Allow the socket to be read by others:
|
||||
`chmod 777 /tmp/<yourid>`
|
||||
- Give us the name of the socket (`/tmp/<yourid>`) so that we can connect to
|
||||
your session with the command `tmux -S /tmp/<yourid> attach`
|
||||
|
||||
Inside your terminal session, you can use your favorite terminal editor, for
|
||||
example `vim`, `emacs -nw`, `kak`, `nano` or whatever you like.
|
||||
|
||||
Quick overview of tmux:
|
||||
- C-b c : create a new window
|
||||
- C-b n/p : go to next/previous window
|
||||
- C-b d : detach current client
|
||||
- C-b [0-9] : go to window [0-9]
|
||||
- C-b " : split horizontally
|
||||
- C-b % : split vertically
|
||||
- C-b up : go up (same for down, left, right, etc), you can use ijkl
|
||||
|
||||
6
TP01/riscv/asshand.s
Normal file
6
TP01/riscv/asshand.s
Normal file
@ -0,0 +1,6 @@
|
||||
.globl main
|
||||
main:
|
||||
addi a0, a0, 1
|
||||
bne a0, a0, main
|
||||
end:
|
||||
ret
|
||||
14
TP01/riscv/bitcount.s
Normal file
14
TP01/riscv/bitcount.s
Normal file
@ -0,0 +1,14 @@
|
||||
.globl main
|
||||
main:
|
||||
addi sp,sp,-16
|
||||
sd ra,8(sp)
|
||||
## TODO Your assembly code there
|
||||
## END TODO End of user assembly code
|
||||
ld ra,8(sp)
|
||||
addi sp,sp,16
|
||||
ret
|
||||
|
||||
# Data comes here
|
||||
.section .data
|
||||
mydata:
|
||||
.dword 7
|
||||
15
TP01/riscv/carres.s
Normal file
15
TP01/riscv/carres.s
Normal file
@ -0,0 +1,15 @@
|
||||
.text
|
||||
.globl main
|
||||
main:
|
||||
addi sp,sp,-16
|
||||
sd ra,8(sp)
|
||||
## TODO Your assembly code there
|
||||
## END TODO End of user assembly code
|
||||
ld ra,8(sp)
|
||||
addi sp,sp,16
|
||||
ret
|
||||
|
||||
# Data comes here
|
||||
.section .data
|
||||
mydata:
|
||||
.dword 7
|
||||
12
TP01/riscv/ex1.c
Normal file
12
TP01/riscv/ex1.c
Normal file
@ -0,0 +1,12 @@
|
||||
/*Source code from Laure Gonnord, CAP Lab 1*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(){
|
||||
|
||||
int x = 41;
|
||||
x = x+1;
|
||||
printf("%d\n",x);
|
||||
|
||||
return 0;
|
||||
}
|
||||
249
TP01/riscv/libprint.s
Normal file
249
TP01/riscv/libprint.s
Normal file
@ -0,0 +1,249 @@
|
||||
.globl println_int
|
||||
println_int:
|
||||
addi sp,sp,-8
|
||||
sd ra, 0(sp)
|
||||
call print_int
|
||||
call newline
|
||||
ld ra, 0(sp)
|
||||
addi sp,sp,8
|
||||
ret
|
||||
|
||||
.globl println_char
|
||||
println_char:
|
||||
addi sp,sp,-8
|
||||
sd ra, 0(sp)
|
||||
call print_char
|
||||
call newline
|
||||
ld ra, 0(sp)
|
||||
addi sp,sp,8
|
||||
ret
|
||||
|
||||
.text
|
||||
.align 1
|
||||
.globl println_string
|
||||
.type println_string, @function
|
||||
println_string: #address stored in a0
|
||||
addi sp,sp,-152
|
||||
sd ra,24(sp)
|
||||
sd s0,16(sp)
|
||||
addi s0,sp,32
|
||||
sd t0,32(sp)
|
||||
sd t1,40(sp)
|
||||
sd t2,48(sp)
|
||||
sd t3,56(sp)
|
||||
sd t4,64(sp)
|
||||
sd t5,72(sp)
|
||||
sd t6,80(sp)
|
||||
|
||||
sd a0,88(sp)
|
||||
sd a1,96(sp)
|
||||
sd a2,104(sp)
|
||||
sd a3,112(sp)
|
||||
sd a4,120(sp)
|
||||
sd a5,128(sp)
|
||||
sd a6,136(sp)
|
||||
sd a7,144(sp)
|
||||
|
||||
## Argument is already in a0, just forward it to puts
|
||||
call puts
|
||||
|
||||
ld ra,24(sp)
|
||||
ld s0,16(sp)
|
||||
|
||||
ld t0,32(sp)
|
||||
ld t1,40(sp)
|
||||
ld t2,48(sp)
|
||||
ld t3,56(sp)
|
||||
ld t4,64(sp)
|
||||
ld t5,72(sp)
|
||||
ld t6,80(sp)
|
||||
|
||||
ld a0,88(sp)
|
||||
ld a1,96(sp)
|
||||
ld a2,104(sp)
|
||||
ld a3,112(sp)
|
||||
ld a4,120(sp)
|
||||
ld a5,128(sp)
|
||||
ld a6,136(sp)
|
||||
ld a7,144(sp)
|
||||
|
||||
addi sp,sp,152
|
||||
jr ra
|
||||
.size println_string, .-println_string
|
||||
.section .rodata
|
||||
.align 3
|
||||
fmt_int:
|
||||
.string "%ld"
|
||||
str_empty:
|
||||
.string ""
|
||||
.text
|
||||
.align 1
|
||||
.globl print_int
|
||||
.type print_int, @function
|
||||
print_int: # print int stored in a0, saves/restores all scratch registers (except ft<n> which we don't use)
|
||||
addi sp,sp,-152
|
||||
|
||||
sd ra,24(sp)
|
||||
sd s0,16(sp)
|
||||
|
||||
sd t0,32(sp)
|
||||
sd t1,40(sp)
|
||||
sd t2,48(sp)
|
||||
sd t3,56(sp)
|
||||
sd t4,64(sp)
|
||||
sd t5,72(sp)
|
||||
sd t6,80(sp)
|
||||
|
||||
sd a0,88(sp)
|
||||
sd a1,96(sp)
|
||||
sd a2,104(sp)
|
||||
sd a3,112(sp)
|
||||
sd a4,120(sp)
|
||||
sd a5,128(sp)
|
||||
sd a6,136(sp)
|
||||
sd a7,144(sp)
|
||||
|
||||
## first parameter of print_int is second parameter of printf
|
||||
mv a1,a0
|
||||
## first parameter of printf is the format string
|
||||
la a0,fmt_int
|
||||
call printf
|
||||
|
||||
ld ra,24(sp)
|
||||
ld s0,16(sp)
|
||||
|
||||
ld t0,32(sp)
|
||||
ld t1,40(sp)
|
||||
ld t2,48(sp)
|
||||
ld t3,56(sp)
|
||||
ld t4,64(sp)
|
||||
ld t5,72(sp)
|
||||
ld t6,80(sp)
|
||||
|
||||
ld a0,88(sp)
|
||||
ld a1,96(sp)
|
||||
ld a2,104(sp)
|
||||
ld a3,112(sp)
|
||||
ld a4,120(sp)
|
||||
ld a5,128(sp)
|
||||
ld a6,136(sp)
|
||||
ld a7,144(sp)
|
||||
|
||||
addi sp,sp,152
|
||||
jr ra
|
||||
.size print_int, .-print_int
|
||||
.align 1
|
||||
.globl newline
|
||||
.type newline, @function
|
||||
newline: # print int stored in a0, saves/restores all scratch registers (except ft<n> which we don't use)
|
||||
addi sp,sp,-152
|
||||
|
||||
sd ra,24(sp)
|
||||
sd s0,16(sp)
|
||||
|
||||
sd t0,32(sp)
|
||||
sd t1,40(sp)
|
||||
sd t2,48(sp)
|
||||
sd t3,56(sp)
|
||||
sd t4,64(sp)
|
||||
sd t5,72(sp)
|
||||
sd t6,80(sp)
|
||||
|
||||
sd a0,88(sp)
|
||||
sd a1,96(sp)
|
||||
sd a2,104(sp)
|
||||
sd a3,112(sp)
|
||||
sd a4,120(sp)
|
||||
sd a5,128(sp)
|
||||
sd a6,136(sp)
|
||||
sd a7,144(sp)
|
||||
|
||||
## first parameter of printf is the format string
|
||||
la a0,str_empty
|
||||
call puts
|
||||
|
||||
ld ra,24(sp)
|
||||
ld s0,16(sp)
|
||||
|
||||
ld t0,32(sp)
|
||||
ld t1,40(sp)
|
||||
ld t2,48(sp)
|
||||
ld t3,56(sp)
|
||||
ld t4,64(sp)
|
||||
ld t5,72(sp)
|
||||
ld t6,80(sp)
|
||||
|
||||
ld a0,88(sp)
|
||||
ld a1,96(sp)
|
||||
ld a2,104(sp)
|
||||
ld a3,112(sp)
|
||||
ld a4,120(sp)
|
||||
ld a5,128(sp)
|
||||
ld a6,136(sp)
|
||||
ld a7,144(sp)
|
||||
|
||||
addi sp,sp,152
|
||||
jr ra
|
||||
.size newline, .-newline
|
||||
.align 1
|
||||
.globl print_char
|
||||
.type print_char, @function
|
||||
print_char: # print char stored in a0 (ascii code)
|
||||
addi sp,sp,-152
|
||||
sd ra,24(sp)
|
||||
sd s0,16(sp)
|
||||
|
||||
addi s0,sp,32
|
||||
|
||||
|
||||
sd t0,32(sp)
|
||||
sd t1,40(sp)
|
||||
sd t2,48(sp)
|
||||
sd t3,56(sp)
|
||||
sd t4,64(sp)
|
||||
sd t5,72(sp)
|
||||
sd t6,80(sp)
|
||||
|
||||
sd a0,88(sp)
|
||||
sd a1,96(sp)
|
||||
sd a2,104(sp)
|
||||
sd a3,112(sp)
|
||||
sd a4,120(sp)
|
||||
sd a5,128(sp)
|
||||
sd a6,136(sp)
|
||||
sd a7,144(sp)
|
||||
|
||||
# call to putchar
|
||||
mv a5,a0
|
||||
sb a5,-17(s0)
|
||||
lbu a5,-17(s0)
|
||||
sext.w a5,a5
|
||||
mv a0,a5
|
||||
call putchar
|
||||
|
||||
#restore registers
|
||||
ld ra,24(sp)
|
||||
ld s0,16(sp)
|
||||
|
||||
ld t0,32(sp)
|
||||
ld t1,40(sp)
|
||||
ld t2,48(sp)
|
||||
ld t3,56(sp)
|
||||
ld t4,64(sp)
|
||||
ld t5,72(sp)
|
||||
ld t6,80(sp)
|
||||
|
||||
ld a0,88(sp)
|
||||
ld a1,96(sp)
|
||||
ld a2,104(sp)
|
||||
ld a3,112(sp)
|
||||
ld a4,120(sp)
|
||||
ld a5,128(sp)
|
||||
ld a6,136(sp)
|
||||
ld a7,144(sp)
|
||||
|
||||
addi sp,sp,152
|
||||
jr ra
|
||||
.size print_char, .-print_char
|
||||
|
||||
|
||||
18
TP01/riscv/minmax.s
Normal file
18
TP01/riscv/minmax.s
Normal file
@ -0,0 +1,18 @@
|
||||
.text
|
||||
.globl main
|
||||
main:
|
||||
addi sp,sp,-16
|
||||
sd ra,8(sp)
|
||||
## TODO Your assembly code there
|
||||
## END TODO End of user assembly code
|
||||
ld ra,8(sp)
|
||||
addi sp,sp,16
|
||||
ret
|
||||
|
||||
# Data comes here
|
||||
.section .data
|
||||
mydata:
|
||||
.dword 7
|
||||
.dword 42
|
||||
min:
|
||||
.dword 0
|
||||
26
TP01/riscv/test_print.s
Normal file
26
TP01/riscv/test_print.s
Normal file
@ -0,0 +1,26 @@
|
||||
.section .text
|
||||
.globl main
|
||||
main:
|
||||
addi sp,sp,-16
|
||||
sd ra,8(sp)
|
||||
## Your assembly code there
|
||||
la a0, .LC1
|
||||
call println_string
|
||||
li a0,42
|
||||
call print_int
|
||||
call newline
|
||||
li a0,97
|
||||
call print_char
|
||||
li a0,10 #new line char
|
||||
call print_char
|
||||
|
||||
## /end of user assembly code
|
||||
ld ra,8(sp)
|
||||
addi sp,sp,16
|
||||
ret
|
||||
|
||||
# Data comes here
|
||||
.section .data
|
||||
.align 3
|
||||
.LC1:
|
||||
.string "HI MIF08!"
|
||||
15
TP01/riscv/triangles.s
Normal file
15
TP01/riscv/triangles.s
Normal file
@ -0,0 +1,15 @@
|
||||
.text
|
||||
.globl main
|
||||
main:
|
||||
addi sp,sp,-16
|
||||
sd ra,8(sp)
|
||||
## TODO Your assembly code there
|
||||
## END TODO End of user assembly code
|
||||
ld ra,8(sp)
|
||||
addi sp,sp,16
|
||||
ret
|
||||
|
||||
# Data comes here
|
||||
.section .data
|
||||
mydata:
|
||||
.dword 7
|
||||
BIN
TP01/tp1.pdf
Normal file
BIN
TP01/tp1.pdf
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user