X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_mips_frame.ml;h=f373b0e4d51753cd07c312ac4bbf5593dc099611;hb=refs%2Fheads%2Fir-translation-wip;hp=99918d5203c45428fb7873ddac43618baa0d14bf;hpb=cc540a7e2dfcee4411953075210a64de874b91e5;p=tiger.ml.git diff --git a/compiler/src/lib/tiger/tiger_mips_frame.ml b/compiler/src/lib/tiger/tiger_mips_frame.ml index 99918d5..f373b0e 100644 --- a/compiler/src/lib/tiger/tiger_mips_frame.ml +++ b/compiler/src/lib/tiger/tiger_mips_frame.ml @@ -1,6 +1,7 @@ module List = ListLabels module Temp = Tiger_temp +module T = Tiger_tree type access = | InFrame of {offset_from_frame_pointer : int} @@ -19,6 +20,12 @@ type t = ; instructions : unit (* TODO: instructions for view shift *) } +let pointer = Temp.Temp.gen () + +let word_size_bits = 32 +let word_size_bytes = word_size_bits / 8 +let word_size = word_size_bytes + let name {name; _} = name @@ -53,3 +60,12 @@ let make ~name ~formals = ; locals_count ; instructions = () (* TODO: instructions for view shift *) } + +(*failwith ("NOT IMPLEMENTED: " ^ __MODULE__ ^ ".exp")*) + +let exp ~access ~pointer = + match access with + | InReg {register} -> + T.TEMP register + | InFrame {offset_from_frame_pointer} -> + T.MEM (T.BINOP (T.PLUS, pointer, T.CONST offset_from_frame_pointer))