merge conflict truc la
This commit is contained in:
commit
831f470b79
10 changed files with 206 additions and 5 deletions
3
flap/questions/retrolixToX86_64/01.retrolix
Normal file
3
flap/questions/retrolixToX86_64/01.retrolix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
globals ()
|
||||||
|
exit;
|
||||||
|
end
|
24
flap/questions/retrolixToX86_64/02.retrolix
Normal file
24
flap/questions/retrolixToX86_64/02.retrolix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
globals (x, y, z, k)
|
||||||
|
x <- copy 6;
|
||||||
|
%rdi <- copy x;
|
||||||
|
print_int();
|
||||||
|
%rdi <- copy " ";
|
||||||
|
print_string();
|
||||||
|
|
||||||
|
y <- copy 7;
|
||||||
|
%rdi <- copy y;
|
||||||
|
print_int();
|
||||||
|
%rdi <- copy " ";
|
||||||
|
print_string();
|
||||||
|
|
||||||
|
z <- mul y, x;
|
||||||
|
%rdi <- copy z;
|
||||||
|
print_int();
|
||||||
|
%rdi <- copy " ";
|
||||||
|
print_string();
|
||||||
|
|
||||||
|
k <- sub z, x;
|
||||||
|
%rdi <- copy k;
|
||||||
|
print_int();
|
||||||
|
|
||||||
|
end
|
17
flap/questions/retrolixToX86_64/03.retrolix
Normal file
17
flap/questions/retrolixToX86_64/03.retrolix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
globals (res)
|
||||||
|
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
|
4
flap/questions/retrolixToX86_64/04.retrolix
Normal file
4
flap/questions/retrolixToX86_64/04.retrolix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
globals ()
|
||||||
|
%rdi <- copy 42;
|
||||||
|
observe_int();
|
||||||
|
end
|
12
flap/questions/retrolixToX86_64/05.retrolix
Normal file
12
flap/questions/retrolixToX86_64/05.retrolix
Normal file
|
@ -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
|
25
flap/questions/retrolixToX86_64/06.retrolix
Normal file
25
flap/questions/retrolixToX86_64/06.retrolix
Normal file
|
@ -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
|
26
flap/questions/retrolixToX86_64/07.retrolix
Normal file
26
flap/questions/retrolixToX86_64/07.retrolix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
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
|
23
flap/questions/retrolixToX86_64/08.retrolix
Normal file
23
flap/questions/retrolixToX86_64/08.retrolix
Normal file
|
@ -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
|
9
flap/questions/retrolixToX86_64/Makefile
Normal file
9
flap/questions/retrolixToX86_64/Makefile
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
FLAP = ../../_build/default/src/flap.exe
|
||||||
|
TARGET = retrolix
|
||||||
|
|
||||||
|
main:
|
||||||
|
@for f in $(wildcard *.$(TARGET)); do \
|
||||||
|
printf "%s: " $$f; \
|
||||||
|
./$(FLAP) -s $(TARGET) -d true -r true $$f; \
|
||||||
|
printf "\n"; \
|
||||||
|
done
|
|
@ -428,6 +428,7 @@ module InstructionSelector : InstructionSelector = struct
|
||||||
open T
|
open T
|
||||||
let R15 = `Reg X86_64_Architecture.R15 (* Registre R15 que nous utilisons pour le compilateur *)
|
let R15 = `Reg X86_64_Architecture.R15 (* Registre R15 que nous utilisons pour le compilateur *)
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
let mov ~(dst : dst) ~(src : src) =
|
let mov ~(dst : dst) ~(src : src) =
|
||||||
(* SI les sources sont égaux (même adresse ou même registre), on ne bouge rien*)
|
(* SI les sources sont égaux (même adresse ou même registre), on ne bouge rien*)
|
||||||
match src, dst with
|
match src, dst with
|
||||||
|
@ -473,6 +474,57 @@ open T
|
||||||
let move_execute f ~dst ~srcl ~srcr =
|
let move_execute f ~dst ~srcl ~srcr =
|
||||||
mov ~src:srcr ~dst:r15
|
mov ~src:srcr ~dst:r15
|
||||||
@ (execute ~dst (f ~src:srcl))
|
@ (execute ~dst (f ~src:srcl))
|
||||||
|
=======
|
||||||
|
let mov ~(dst : dst) ~(src : src) =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (mov)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let bin ins ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (bin)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let add ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (add)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let sub ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (sub)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let mul ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (mul)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let div ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (div)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let andl ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (andl)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let orl ~dst ~srcl ~srcr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (orl)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let conditional_jump ~cc ~srcl ~srcr ~ll ~lr =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (conditional_jump)"
|
||||||
|
;;
|
||||||
|
|
||||||
|
let switch ?default ~discriminant ~cases () =
|
||||||
|
(* TODO *)
|
||||||
|
failwith "Students! This is your job! (switch)"
|
||||||
|
;;
|
||||||
|
>>>>>>> ac93861c63fb639c260e046373135aea113d7a9c
|
||||||
end
|
end
|
||||||
|
|
||||||
module FrameManager (IS : InstructionSelector) : FrameManager = struct
|
module FrameManager (IS : InstructionSelector) : FrameManager = struct
|
||||||
|
@ -498,23 +550,29 @@ module FrameManager (IS : InstructionSelector) : FrameManager = struct
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let frame_descriptor ~params ~locals =
|
let frame_descriptor ~params ~locals =
|
||||||
(* Student! Implement me! *)
|
(* TODO: Student! Implement me! *)
|
||||||
{ param_count = 0; locals_space = 0; stack_map = S.IdMap.empty }
|
{ 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! (location_of)"
|
||||||
|
;;
|
||||||
|
|
||||||
let function_prologue fd =
|
let function_prologue fd =
|
||||||
(* Student! Implement me! *)
|
(* TODO: Student! Implement me! *)
|
||||||
[]
|
[]
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let function_epilogue fd =
|
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! (call)"
|
||||||
|
;;
|
||||||
end
|
end
|
||||||
|
|
||||||
module CG = Codegen (InstructionSelector) (FrameManager (InstructionSelector))
|
module CG = Codegen (InstructionSelector) (FrameManager (InstructionSelector))
|
||||||
|
|
Reference in a new issue