automated commit TP1

This commit is contained in:
Rémi Di Guardia 2022-09-13 17:21:52 +02:00
parent 41f422635b
commit 9476b924d3
13 changed files with 372 additions and 64 deletions

View File

@ -4,7 +4,7 @@ A pre-compiled archive is available here:
https://matthieu-moy.fr/spip/?Pre-compiled-RISC-V-GNU-toolchain-and-spike 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 else. It contains the RiscV tools, ANTLR, and Pyright (a type-checker for Python
used in the labs). used in the labs).

View File

@ -1,9 +1,9 @@
# Planning of the compilation course (CAP, Compilation and Program Analysis) # Planning of the compilation course (CAP, Compilation and Program Analysis)
_Academic first semester 2022-2023_ _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). * Introduction: [transparents](course/capmif_cours01_intro_et_archi.pdf).
* ISA [ref pdf RISCV](course/riscv_isa.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). * Lexing, Parsing, [slides](course/capmif_cours02_lexing_parsing.pdf).
* [Demo Parsing](course/ANTLRExamples.tar.xz). * [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). * 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). * [Grammar exercise](course/TD2.pdf).
- :rocket: Additional ressources (mainly in english) - :rocket: Additional ressources (mainly in english)
* A nice YT video on [structural induction](https://www.youtube.com/watch?v=2o3EzvfgTiQ) by F. Pereira. * 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) * 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).

View File

@ -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)
![ensllogo](logos/logo_ensl.png) ![ensllogo](logos/logo_ensl.png)
@ -39,7 +39,7 @@ Gabriel Radanne, Inria, LIP [email](mailto:gabriel.radanne@ens-lyon.fr)
* MCC (final grade computation) : * MCC (final grade computation) :
``` ```
let ccgrade = average(Lab3, Lab5, Lab6, partial) let ccgrade = average(Lab3, Lab4, Lab5, partial)
in (finalnote + ccgrade)/2 in (finalnote + ccgrade)/2
``` ```
* The partial exam is this academic year replaced by a written housework ("DM"). * The partial exam is this academic year replaced by a written housework ("DM").

View File

@ -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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

Binary file not shown.