From 66c374b28f9ddb67c4f86782b2970757198741ce Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 14:30:16 +0100 Subject: [PATCH 01/10] newlines --- flap/src/x86-64/retrolixToX86_64.ml | 75 +++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/flap/src/x86-64/retrolixToX86_64.ml b/flap/src/x86-64/retrolixToX86_64.ml index 48a92cb..4b30924 100644 --- a/flap/src/x86-64/retrolixToX86_64.ml +++ b/flap/src/x86-64/retrolixToX86_64.ml @@ -426,16 +426,55 @@ end module InstructionSelector : InstructionSelector = struct open T - let mov ~(dst : dst) ~(src : src) = failwith "Students! This is your job!" - let bin ins ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let add ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let sub ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let mul ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let div ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let andl ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let orl ~dst ~srcl ~srcr = failwith "Students! This is your job!" - let conditional_jump ~cc ~srcl ~srcr ~ll ~lr = failwith "Students! This is your job!" - let switch ?default ~discriminant ~cases () = failwith "Students! This is your job!" + let mov ~(dst : dst) ~(src : src) = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let bin ins ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let add ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let sub ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let mul ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let div ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let andl ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let orl ~dst ~srcl ~srcr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let conditional_jump ~cc ~srcl ~srcr ~ll ~lr = + (* TODO *) + failwith "Students! This is your job!" + ;; + + let switch ?default ~discriminant ~cases () = + (* TODO *) + failwith "Students! This is your job!" + ;; end module FrameManager (IS : InstructionSelector) : FrameManager = struct @@ -461,23 +500,29 @@ module FrameManager (IS : InstructionSelector) : FrameManager = struct ;; let frame_descriptor ~params ~locals = - (* Student! Implement me! *) + (* TODO: Student! Implement me! *) { param_count = 0; locals_space = 0; stack_map = S.IdMap.empty } ;; - let location_of fd id = failwith "Students! This is your job!" + let location_of fd id = + (* TODO *) + failwith "Students! This is your job!" + ;; let function_prologue fd = - (* Student! Implement me! *) + (* TODO: Student! Implement me! *) [] ;; let function_epilogue fd = - (* Student! Implement me! *) + (* TODO: Student! Implement me! *) [] ;; - let call fd ~kind ~f ~args = failwith "Students! This is your job!" + let call fd ~kind ~f ~args = + (* TODO *) + failwith "Students! This is your job!" + ;; end module CG = Codegen (InstructionSelector) (FrameManager (InstructionSelector)) From d73a8e5c4b23b577b5a0c4f06f4e5ce60696e094 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 14:32:30 +0100 Subject: [PATCH 02/10] add fn fname to failwith s --- flap/src/x86-64/retrolixToX86_64.ml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flap/src/x86-64/retrolixToX86_64.ml b/flap/src/x86-64/retrolixToX86_64.ml index 4b30924..18375bf 100644 --- a/flap/src/x86-64/retrolixToX86_64.ml +++ b/flap/src/x86-64/retrolixToX86_64.ml @@ -428,52 +428,52 @@ module InstructionSelector : InstructionSelector = struct let mov ~(dst : dst) ~(src : src) = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (mov)" ;; let bin ins ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (bin)" ;; let add ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (add)" ;; let sub ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (sub)" ;; let mul ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (mul)" ;; let div ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (div)" ;; let andl ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (andl)" ;; let orl ~dst ~srcl ~srcr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (orl)" ;; let conditional_jump ~cc ~srcl ~srcr ~ll ~lr = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (conditional_jump)" ;; let switch ?default ~discriminant ~cases () = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (switch)" ;; end @@ -506,7 +506,7 @@ module FrameManager (IS : InstructionSelector) : FrameManager = struct let location_of fd id = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (location_of)" ;; let function_prologue fd = @@ -521,7 +521,7 @@ module FrameManager (IS : InstructionSelector) : FrameManager = struct let call fd ~kind ~f ~args = (* TODO *) - failwith "Students! This is your job!" + failwith "Students! This is your job! (call)" ;; end From 4debd0c1e5bbab99e53dc212020e6a02016ccbc7 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 15:32:46 +0100 Subject: [PATCH 03/10] =?UTF-8?q?1,=202,=203=20de=20=C3=A9tape=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flap/questions/retrolixToX86_64/01.retrolix | 3 +++ flap/questions/retrolixToX86_64/02.retrolix | 26 +++++++++++++++++++++ flap/questions/retrolixToX86_64/03.retrolix | 16 +++++++++++++ flap/questions/retrolixToX86_64/Makefile | 9 +++++++ 4 files changed, 54 insertions(+) create mode 100644 flap/questions/retrolixToX86_64/01.retrolix create mode 100644 flap/questions/retrolixToX86_64/02.retrolix create mode 100644 flap/questions/retrolixToX86_64/03.retrolix create mode 100644 flap/questions/retrolixToX86_64/Makefile diff --git a/flap/questions/retrolixToX86_64/01.retrolix b/flap/questions/retrolixToX86_64/01.retrolix new file mode 100644 index 0000000..33b5fee --- /dev/null +++ b/flap/questions/retrolixToX86_64/01.retrolix @@ -0,0 +1,3 @@ +globals () + exit; +end diff --git a/flap/questions/retrolixToX86_64/02.retrolix b/flap/questions/retrolixToX86_64/02.retrolix new file mode 100644 index 0000000..04134a4 --- /dev/null +++ b/flap/questions/retrolixToX86_64/02.retrolix @@ -0,0 +1,26 @@ +globals (x, y, z, k) + x <- copy 6; + %rdi <- copy x; + print_int(); + %rdi <- copy "\n"; + print_string(); + + y <- copy 7; + %rdi <- copy y; + print_int(); + %rdi <- copy "\n"; + print_string(); + + z <- mul y, x; + %rdi <- copy z; + print_int(); + %rdi <- copy "\n"; + print_string(); + + k <- sub z, x; + %rdi <- copy k; + print_int(); + %rdi <- copy "\n"; + print_string(); + +end diff --git a/flap/questions/retrolixToX86_64/03.retrolix b/flap/questions/retrolixToX86_64/03.retrolix new file mode 100644 index 0000000..82d8927 --- /dev/null +++ b/flap/questions/retrolixToX86_64/03.retrolix @@ -0,0 +1,16 @@ +def fact () + %rax <- copy 1; + boucle: jumpif lte %rdi, 1 -> fin, suite; + suite: %rax <- mul %rax, %rdi; + %rdi <- sub %rdi, 1; + jump boucle; + fin: ret; +end + +globals (res) + %rdi <- copy 5; + fact(); + res <- copy %rax; + %rdi <- copy res; + print_int(); +end diff --git a/flap/questions/retrolixToX86_64/Makefile b/flap/questions/retrolixToX86_64/Makefile new file mode 100644 index 0000000..de64643 --- /dev/null +++ b/flap/questions/retrolixToX86_64/Makefile @@ -0,0 +1,9 @@ +FLAP = ../../_build/default/src/flap.exe +TARGET = retrolix + +main: + @for f in $(wildcard *.$(TARGET)); do \ + printf "%s:\n" $$f; \ + ./$(FLAP) -s $(TARGET) -d true -r true $$f; \ + printf "\n"; \ + done From 74b3abff1e308826d395e8c36bb2f67279bedc38 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 15:36:50 +0100 Subject: [PATCH 04/10] . --- flap/questions/retrolixToX86_64/03.retrolix | 3 +++ flap/questions/retrolixToX86_64/04.retrolix | 0 flap/questions/retrolixToX86_64/05.retrolix | 0 flap/questions/retrolixToX86_64/06.retrolix | 0 flap/questions/retrolixToX86_64/07.retrolix | 0 flap/questions/retrolixToX86_64/08.retrolix | 0 6 files changed, 3 insertions(+) create mode 100644 flap/questions/retrolixToX86_64/04.retrolix create mode 100644 flap/questions/retrolixToX86_64/05.retrolix create mode 100644 flap/questions/retrolixToX86_64/06.retrolix create mode 100644 flap/questions/retrolixToX86_64/07.retrolix create mode 100644 flap/questions/retrolixToX86_64/08.retrolix diff --git a/flap/questions/retrolixToX86_64/03.retrolix b/flap/questions/retrolixToX86_64/03.retrolix index 82d8927..0d33ac1 100644 --- a/flap/questions/retrolixToX86_64/03.retrolix +++ b/flap/questions/retrolixToX86_64/03.retrolix @@ -13,4 +13,7 @@ globals (res) res <- copy %rax; %rdi <- copy res; print_int(); + + %rdi <- copy "\n"; + print_string(); end diff --git a/flap/questions/retrolixToX86_64/04.retrolix b/flap/questions/retrolixToX86_64/04.retrolix new file mode 100644 index 0000000..e69de29 diff --git a/flap/questions/retrolixToX86_64/05.retrolix b/flap/questions/retrolixToX86_64/05.retrolix new file mode 100644 index 0000000..e69de29 diff --git a/flap/questions/retrolixToX86_64/06.retrolix b/flap/questions/retrolixToX86_64/06.retrolix new file mode 100644 index 0000000..e69de29 diff --git a/flap/questions/retrolixToX86_64/07.retrolix b/flap/questions/retrolixToX86_64/07.retrolix new file mode 100644 index 0000000..e69de29 diff --git a/flap/questions/retrolixToX86_64/08.retrolix b/flap/questions/retrolixToX86_64/08.retrolix new file mode 100644 index 0000000..e69de29 From 14828b3b0ecc207ab15cec2d9166f8b40979773f Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 15:40:23 +0100 Subject: [PATCH 05/10] 4 --- flap/questions/retrolixToX86_64/02.retrolix | 8 +++----- flap/questions/retrolixToX86_64/03.retrolix | 3 --- flap/questions/retrolixToX86_64/04.retrolix | 4 ++++ flap/questions/retrolixToX86_64/Makefile | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/flap/questions/retrolixToX86_64/02.retrolix b/flap/questions/retrolixToX86_64/02.retrolix index 04134a4..5157e5d 100644 --- a/flap/questions/retrolixToX86_64/02.retrolix +++ b/flap/questions/retrolixToX86_64/02.retrolix @@ -2,25 +2,23 @@ globals (x, y, z, k) x <- copy 6; %rdi <- copy x; print_int(); - %rdi <- copy "\n"; + %rdi <- copy " "; print_string(); y <- copy 7; %rdi <- copy y; print_int(); - %rdi <- copy "\n"; + %rdi <- copy " "; print_string(); z <- mul y, x; %rdi <- copy z; print_int(); - %rdi <- copy "\n"; + %rdi <- copy " "; print_string(); k <- sub z, x; %rdi <- copy k; print_int(); - %rdi <- copy "\n"; - print_string(); end diff --git a/flap/questions/retrolixToX86_64/03.retrolix b/flap/questions/retrolixToX86_64/03.retrolix index 0d33ac1..82d8927 100644 --- a/flap/questions/retrolixToX86_64/03.retrolix +++ b/flap/questions/retrolixToX86_64/03.retrolix @@ -13,7 +13,4 @@ globals (res) res <- copy %rax; %rdi <- copy res; print_int(); - - %rdi <- copy "\n"; - print_string(); end diff --git a/flap/questions/retrolixToX86_64/04.retrolix b/flap/questions/retrolixToX86_64/04.retrolix index e69de29..de73b80 100644 --- a/flap/questions/retrolixToX86_64/04.retrolix +++ b/flap/questions/retrolixToX86_64/04.retrolix @@ -0,0 +1,4 @@ +globals () + %rdi <- copy 42; + observe_int(); +end diff --git a/flap/questions/retrolixToX86_64/Makefile b/flap/questions/retrolixToX86_64/Makefile index de64643..9e23610 100644 --- a/flap/questions/retrolixToX86_64/Makefile +++ b/flap/questions/retrolixToX86_64/Makefile @@ -3,7 +3,7 @@ TARGET = retrolix main: @for f in $(wildcard *.$(TARGET)); do \ - printf "%s:\n" $$f; \ + printf "%s: " $$f; \ ./$(FLAP) -s $(TARGET) -d true -r true $$f; \ printf "\n"; \ done From 4602c0aa7731e370195205da0fe52013cfa76771 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 15:50:36 +0100 Subject: [PATCH 06/10] 5 --- flap/questions/retrolixToX86_64/05.retrolix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/flap/questions/retrolixToX86_64/05.retrolix b/flap/questions/retrolixToX86_64/05.retrolix index e69de29..3fa8f67 100644 --- a/flap/questions/retrolixToX86_64/05.retrolix +++ b/flap/questions/retrolixToX86_64/05.retrolix @@ -0,0 +1,12 @@ +globals () + %rdi <- copy 1; + %rsi <- copy 2; + %rdx <- copy 3; + %rcx <- copy 4; + %r8 <- copy 5; + %r9 <- copy 6; + add_eight_int(7, 8); + + %rdi <- copy %rax; + observe_int(); +end From 2b7de0b06b5b41c47f65eab7bff912004d9da95c Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 15:55:37 +0100 Subject: [PATCH 07/10] fix 3 --- flap/questions/retrolixToX86_64/03.retrolix | 29 +++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/flap/questions/retrolixToX86_64/03.retrolix b/flap/questions/retrolixToX86_64/03.retrolix index 82d8927..9052a68 100644 --- a/flap/questions/retrolixToX86_64/03.retrolix +++ b/flap/questions/retrolixToX86_64/03.retrolix @@ -1,16 +1,17 @@ -def fact () - %rax <- copy 1; - boucle: jumpif lte %rdi, 1 -> fin, suite; - suite: %rax <- mul %rax, %rdi; - %rdi <- sub %rdi, 1; - jump boucle; - fin: ret; -end - globals (res) - %rdi <- copy 5; - fact(); - res <- copy %rax; - %rdi <- copy res; - print_int(); + local compteur: + compteur <- copy 5; + res <- copy 1; + + condition: + jumpif lte compteur, 1 -> fin, boucle; + + boucle: + res <- mul res, compteur; + compteur <- sub compteur, 1; + jump condition; + + fin: + %rdi <- copy res; + print_int(); end From ccf1f51a75e1a8b9fc546eaa716986a6ed60d1d0 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 15:59:53 +0100 Subject: [PATCH 08/10] 6 --- flap/questions/retrolixToX86_64/06.retrolix | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/flap/questions/retrolixToX86_64/06.retrolix b/flap/questions/retrolixToX86_64/06.retrolix index e69de29..71a1611 100644 --- a/flap/questions/retrolixToX86_64/06.retrolix +++ b/flap/questions/retrolixToX86_64/06.retrolix @@ -0,0 +1,25 @@ +def fact () + %rax <- copy 1; + + condition: + jumpif lte %rdi, 1 -> fin, boucle; + + boucle: + %rax <- mul %rax, %rdi; + %rdi <- sub %rdi, 1; + jump condition; + + fin: + ret; +end + +globals (x) + x <- copy 5; + + %rdi <- copy x; + fact(); + x <- copy %rax; + + %rdi <- copy x; + observe_int(); +end From a2724c4e41a62995276230153d3458295ebba12a Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 16:03:27 +0100 Subject: [PATCH 09/10] 7 --- flap/questions/retrolixToX86_64/07.retrolix | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/flap/questions/retrolixToX86_64/07.retrolix b/flap/questions/retrolixToX86_64/07.retrolix index e69de29..b653317 100644 --- a/flap/questions/retrolixToX86_64/07.retrolix +++ b/flap/questions/retrolixToX86_64/07.retrolix @@ -0,0 +1,27 @@ + +def fact () + local x: + jumpif lte %rdi, 1 -> fini, rec; + + fini: + %rax <- copy 1; + ret; + + rec: + x <- copy %rdi; + %rdi <- sub %rdi, 1; + fact(); + %rax <- mul %rax, x; + ret; +end + +globals (x) + x <- copy 5; + + %rdi <- copy x; + fact(); + x <- copy %rax; + + %rdi <- copy x; + observe_int(); +end From ac93861c63fb639c260e046373135aea113d7a9c Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 31 Dec 2023 16:14:05 +0100 Subject: [PATCH 10/10] =?UTF-8?q?etape=201=20termin=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flap/questions/retrolixToX86_64/07.retrolix | 1 - flap/questions/retrolixToX86_64/08.retrolix | 23 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/flap/questions/retrolixToX86_64/07.retrolix b/flap/questions/retrolixToX86_64/07.retrolix index b653317..0e0516e 100644 --- a/flap/questions/retrolixToX86_64/07.retrolix +++ b/flap/questions/retrolixToX86_64/07.retrolix @@ -1,4 +1,3 @@ - def fact () local x: jumpif lte %rdi, 1 -> fini, rec; diff --git a/flap/questions/retrolixToX86_64/08.retrolix b/flap/questions/retrolixToX86_64/08.retrolix index e69de29..ea0c8d3 100644 --- a/flap/questions/retrolixToX86_64/08.retrolix +++ b/flap/questions/retrolixToX86_64/08.retrolix @@ -0,0 +1,23 @@ +def my_add_eight_int (i7, i8) + %rax <- add %rdi, %rsi; + %rax <- add %rax, %rdx; + %rax <- add %rax, %rcx; + %rax <- add %rax, %r8; + %rax <- add %rax, %r9; + %rax <- add %rax, i7; + %rax <- add %rax, i8; + ret; +end + +globals () + %rdi <- copy 1; + %rsi <- copy 2; + %rdx <- copy 3; + %rcx <- copy 4; + %r8 <- copy 5; + %r9 <- copy 6; + my_add_eight_int(7, 8); + + %rdi <- copy %rax; + observe_int(); +end