aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/Asmgen.v
diff options
context:
space:
mode:
Diffstat (limited to 'mppa_k1c/Asmgen.v')
-rw-r--r--mppa_k1c/Asmgen.v154
1 files changed, 78 insertions, 76 deletions
diff --git a/mppa_k1c/Asmgen.v b/mppa_k1c/Asmgen.v
index 05dc948e..dbd7b4f5 100644
--- a/mppa_k1c/Asmgen.v
+++ b/mppa_k1c/Asmgen.v
@@ -58,6 +58,8 @@ Inductive immed64 : Type :=
(* For now, let's suppose all instructions of K1c can handle 64-bits immediate *)
Definition make_immed64 (val: int64) := Imm64_single val.
+Notation "a ::i b" := (cons (A:=instruction) a b) (at level 49, right associativity).
+
(** Smart constructors for arithmetic operations involving
a 32-bit or 64-bit integer constant. Depending on whether the
constant fits in 12 bits or not, one or several instructions
@@ -66,14 +68,14 @@ Definition make_immed64 (val: int64) := Imm64_single val.
Definition loadimm32 (r: ireg) (n: int) (k: code) :=
match make_immed32 n with
- | Imm32_single imm => Pmake r imm :: k
+ | Imm32_single imm => Pmake r imm ::i k
end.
-Definition opimm32 (op: ireg -> ireg -> ireg -> instruction)
- (opimm: ireg -> ireg -> int -> instruction)
+Definition opimm32 (op: arith_name_rrr)
+ (opimm: arith_name_rri32)
(rd rs: ireg) (n: int) (k: code) :=
match make_immed32 n with
- | Imm32_single imm => opimm rd rs imm :: k
+ | Imm32_single imm => opimm rd rs imm ::i k
end.
Definition addimm32 := opimm32 Paddw Paddiw.
@@ -87,14 +89,14 @@ Definition sltuimm32 := opimm32 Psltuw Psltiuw.
Definition loadimm64 (r: ireg) (n: int64) (k: code) :=
match make_immed64 n with
- | Imm64_single imm => Pmakel r imm :: k
+ | Imm64_single imm => Pmakel r imm ::i k
end.
-Definition opimm64 (op: ireg -> ireg -> ireg -> instruction)
- (opimm: ireg -> ireg -> int64 -> instruction)
+Definition opimm64 (op: arith_name_rrr)
+ (opimm: arith_name_rri64)
(rd rs: ireg) (n: int64) (k: code) :=
match make_immed64 n with
- | Imm64_single imm => opimm rd rs imm :: k
+ | Imm64_single imm => opimm rd rs imm ::i k
end.
Definition addimm64 := opimm64 Paddl Paddil.
@@ -109,13 +111,13 @@ Definition sltuimm64 := opimm64 Psltul Psltiul.
Definition cast32signed (rd rs: ireg) (k: code) :=
if (ireg_eq rd rs)
- then Pcvtw2l rd :: k
- else Pmvw2l rd rs :: k
+ then Pcvtw2l rd ::i k
+ else Pmvw2l rd rs ::i k
.
Definition addptrofs (rd rs: ireg) (n: ptrofs) (k: code) :=
if Ptrofs.eq_dec n Ptrofs.zero then
- Pmv rd rs :: k
+ Pmv rd rs ::i k
else
addimm64 rd rs (Ptrofs.to_int64 n) k.
@@ -123,11 +125,11 @@ Definition addptrofs (rd rs: ireg) (n: ptrofs) (k: code) :=
Definition transl_comp
(c: comparison) (s: signedness) (r1 r2: ireg) (lbl: label) (k: code) : list instruction :=
- Pcompw (itest_for_cmp c s) RTMP r1 r2 :: Pcb BTwnez RTMP lbl :: k.
+ Pcompw (itest_for_cmp c s) RTMP r1 r2 ::i Pcb BTwnez RTMP lbl ::i k.
Definition transl_compl
(c: comparison) (s: signedness) (r1 r2: ireg) (lbl: label) (k: code) : list instruction :=
- Pcompl (itest_for_cmp c s) RTMP r1 r2 :: Pcb BTwnez RTMP lbl :: k.
+ Pcompl (itest_for_cmp c s) RTMP r1 r2 ::i Pcb BTwnez RTMP lbl ::i k.
Definition select_comp (n: int) (c: comparison) : option comparison :=
if Int.eq n Int.zero then
@@ -143,8 +145,8 @@ Definition select_comp (n: int) (c: comparison) : option comparison :=
Definition transl_opt_compuimm
(n: int) (c: comparison) (r1: ireg) (lbl: label) (k: code) : list instruction :=
match select_comp n c with
- | Some Ceq => Pcbu BTweqz r1 lbl :: k
- | Some Cne => Pcbu BTwnez r1 lbl :: k
+ | Some Ceq => Pcbu BTweqz r1 lbl ::i k
+ | Some Cne => Pcbu BTwnez r1 lbl ::i k
| Some _ => nil (* Never happens *)
| None => loadimm32 RTMP n (transl_comp c Unsigned r1 RTMP lbl k)
end
@@ -164,8 +166,8 @@ Definition select_compl (n: int64) (c: comparison) : option comparison :=
Definition transl_opt_compluimm
(n: int64) (c: comparison) (r1: ireg) (lbl: label) (k: code) : list instruction :=
match select_compl n c with
- | Some Ceq => Pcbu BTdeqz r1 lbl :: k
- | Some Cne => Pcbu BTdnez r1 lbl :: k
+ | Some Ceq => Pcbu BTdeqz r1 lbl ::i k
+ | Some Cne => Pcbu BTdnez r1 lbl ::i k
| Some _ => nil (* Never happens *)
| None => loadimm64 RTMP n (transl_compl c Unsigned r1 RTMP lbl k)
end
@@ -186,7 +188,7 @@ Definition transl_cbranch
| Ccompimm c n, a1 :: nil =>
do r1 <- ireg_of a1;
OK (if Int.eq n Int.zero then
- Pcb (btest_for_cmpswz c) r1 lbl :: k
+ Pcb (btest_for_cmpswz c) r1 lbl ::i k
else
loadimm32 RTMP n (transl_comp c Signed r1 RTMP lbl k)
)
@@ -202,7 +204,7 @@ Definition transl_cbranch
| Ccomplimm c n, a1 :: nil =>
do r1 <- ireg_of a1;
OK (if Int64.eq n Int64.zero then
- Pcb (btest_for_cmpsdz c) r1 lbl :: k
+ Pcb (btest_for_cmpsdz c) r1 lbl ::i k
else
loadimm64 RTMP n (transl_compl c Signed r1 RTMP lbl k)
)
@@ -231,28 +233,28 @@ Definition transl_cbranch
condition. *)
Definition transl_cond_int32s (cmp: comparison) (rd r1 r2: ireg) (k: code) :=
- Pcompw (itest_for_cmp cmp Signed) rd r1 r2 :: k.
+ Pcompw (itest_for_cmp cmp Signed) rd r1 r2 ::i k.
Definition transl_cond_int32u (cmp: comparison) (rd r1 r2: ireg) (k: code) :=
- Pcompw (itest_for_cmp cmp Unsigned) rd r1 r2 :: k.
+ Pcompw (itest_for_cmp cmp Unsigned) rd r1 r2 ::i k.
Definition transl_cond_int64s (cmp: comparison) (rd r1 r2: ireg) (k: code) :=
- Pcompl (itest_for_cmp cmp Signed) rd r1 r2 :: k.
+ Pcompl (itest_for_cmp cmp Signed) rd r1 r2 ::i k.
Definition transl_cond_int64u (cmp: comparison) (rd r1 r2: ireg) (k: code) :=
- Pcompl (itest_for_cmp cmp Unsigned) rd r1 r2 :: k.
+ Pcompl (itest_for_cmp cmp Unsigned) rd r1 r2 ::i k.
Definition transl_condimm_int32s (cmp: comparison) (rd r1: ireg) (n: int) (k: code) :=
- Pcompiw (itest_for_cmp cmp Signed) rd r1 n :: k.
+ Pcompiw (itest_for_cmp cmp Signed) rd r1 n ::i k.
Definition transl_condimm_int32u (cmp: comparison) (rd r1: ireg) (n: int) (k: code) :=
- Pcompiw (itest_for_cmp cmp Unsigned) rd r1 n :: k.
+ Pcompiw (itest_for_cmp cmp Unsigned) rd r1 n ::i k.
Definition transl_condimm_int64s (cmp: comparison) (rd r1: ireg) (n: int64) (k: code) :=
- Pcompil (itest_for_cmp cmp Signed) rd r1 n :: k.
+ Pcompil (itest_for_cmp cmp Signed) rd r1 n ::i k.
Definition transl_condimm_int64u (cmp: comparison) (rd r1: ireg) (n: int64) (k: code) :=
- Pcompil (itest_for_cmp cmp Unsigned) rd r1 n :: k.
+ Pcompil (itest_for_cmp cmp Unsigned) rd r1 n ::i k.
Definition transl_cond_op
(cond: condition) (rd: ireg) (args: list mreg) (k: code) :=
@@ -309,7 +311,7 @@ Definition transl_op
match op, args with
| Omove, a1 :: nil =>
match preg_of res, preg_of a1 with
- | IR r, IR a => OK (Pmv r a :: k)
+ | IR r, IR a => OK (Pmv r a ::i k)
| _ , _ => Error(msg "Asmgen.Omove")
end
| Ointconst n, nil =>
@@ -331,33 +333,33 @@ Definition transl_op
*)| Oaddrsymbol s ofs, nil =>
do rd <- ireg_of res;
OK (if Archi.pic_code tt && negb (Ptrofs.eq ofs Ptrofs.zero)
- then Ploadsymbol rd s Ptrofs.zero :: addptrofs rd rd ofs k
- else Ploadsymbol rd s ofs :: k)
+ then Ploadsymbol rd s Ptrofs.zero ::i addptrofs rd rd ofs k
+ else Ploadsymbol rd s ofs ::i k)
| Oaddrstack n, nil =>
do rd <- ireg_of res;
OK (addptrofs rd SP n k)
| Ocast8signed, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Pslliw rd rs (Int.repr 24) :: Psraiw rd rd (Int.repr 24) :: k)
+ OK (Pslliw rd rs (Int.repr 24) ::i Psraiw rd rd (Int.repr 24) ::i k)
| Ocast16signed, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Pslliw rd rs (Int.repr 16) :: Psraiw rd rd (Int.repr 16) :: k)
+ OK (Pslliw rd rs (Int.repr 16) ::i Psraiw rd rd (Int.repr 16) ::i k)
| Oadd, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Paddw rd rs1 rs2 :: k)
+ OK (Paddw rd rs1 rs2 ::i k)
| Oaddimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (addimm32 rd rs n k)
| Oneg, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Pnegw rd rs :: k)
+ OK (Pnegw rd rs ::i k)
| Osub, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psubw rd rs1 rs2 :: k)
+ OK (Psubw rd rs1 rs2 ::i k)
| Omul, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pmulw rd rs1 rs2 :: k)
+ OK (Pmulw rd rs1 rs2 ::i k)
(*| Omulhs, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
OK (Pmulhw rd rs1 rs2 :: k)
@@ -378,52 +380,52 @@ Definition transl_op
OK (Premuw rd rs1 rs2 :: k)
*)| Oand, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pandw rd rs1 rs2 :: k)
+ OK (Pandw rd rs1 rs2 ::i k)
| Oandimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (andimm32 rd rs n k)
| Oor, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Porw rd rs1 rs2 :: k)
+ OK (Porw rd rs1 rs2 ::i k)
| Oorimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (orimm32 rd rs n k)
| Oxor, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pxorw rd rs1 rs2 :: k)
+ OK (Pxorw rd rs1 rs2 ::i k)
| Oxorimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (xorimm32 rd rs n k)
| Oshl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psllw rd rs1 rs2 :: k)
+ OK (Psllw rd rs1 rs2 ::i k)
| Oshlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Pslliw rd rs n :: k)
+ OK (Pslliw rd rs n ::i k)
| Oshr, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psraw rd rs1 rs2 :: k)
+ OK (Psraw rd rs1 rs2 ::i k)
| Oshrimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Psraiw rd rs n :: k)
+ OK (Psraiw rd rs n ::i k)
| Oshru, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psrlw rd rs1 rs2 :: k)
+ OK (Psrlw rd rs1 rs2 ::i k)
| Oshruimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Psrliw rd rs n :: k)
+ OK (Psrliw rd rs n ::i k)
| Oshrximm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (if Int.eq n Int.zero then Pmv rd rs :: k else
- Psraiw GPR31 rs (Int.repr 31) ::
- Psrliw GPR31 GPR31 (Int.sub Int.iwordsize n) ::
- Paddw GPR31 rs GPR31 ::
- Psraiw rd GPR31 n :: k)
+ OK (if Int.eq n Int.zero then Pmv rd rs ::i k else
+ Psraiw GPR31 rs (Int.repr 31) ::i
+ Psrliw GPR31 GPR31 (Int.sub Int.iwordsize n) ::i
+ Paddw GPR31 rs GPR31 ::i
+ Psraiw rd GPR31 n ::i k)
(* [Omakelong], [Ohighlong] should not occur *)
| Olowlong, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Pcvtl2w rd rs :: k)
+ OK (Pcvtl2w rd rs ::i k)
| Ocast32signed, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (cast32signed rd rs k)
@@ -433,19 +435,19 @@ Definition transl_op
OK (Pcvtw2l rd :: Psllil rd rd (Int.repr 32) :: Psrlil rd rd (Int.repr 32) :: k)
*)| Oaddl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Paddl rd rs1 rs2 :: k)
+ OK (Paddl rd rs1 rs2 ::i k)
| Oaddlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (addimm64 rd rs n k)
| Onegl, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Pnegl rd rs :: k)
+ OK (Pnegl rd rs ::i k)
| Osubl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psubl rd rs1 rs2 :: k)
+ OK (Psubl rd rs1 rs2 ::i k)
| Omull, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pmull rd rs1 rs2 :: k)
+ OK (Pmull rd rs1 rs2 ::i k)
(*| Omullhs, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
OK (Pmulhl rd rs1 rs2 :: k)
@@ -466,40 +468,40 @@ Definition transl_op
OK (Premul rd rs1 rs2 :: k)
*)| Oandl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pandl rd rs1 rs2 :: k)
+ OK (Pandl rd rs1 rs2 ::i k)
| Oandlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (andimm64 rd rs n k)
| Oorl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Porl rd rs1 rs2 :: k)
+ OK (Porl rd rs1 rs2 ::i k)
| Oorlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (orimm64 rd rs n k)
| Oxorl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pxorl rd rs1 rs2 :: k)
+ OK (Pxorl rd rs1 rs2 ::i k)
| Oxorlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (xorimm64 rd rs n k)
| Oshll, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Pslll rd rs1 rs2 :: k)
+ OK (Pslll rd rs1 rs2 ::i k)
| Oshllimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Psllil rd rs n :: k)
+ OK (Psllil rd rs n ::i k)
| Oshrl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psral rd rs1 rs2 :: k)
+ OK (Psral rd rs1 rs2 ::i k)
| Oshrlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Psrail rd rs n :: k)
+ OK (Psrail rd rs n ::i k)
| Oshrlu, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
- OK (Psrll rd rs1 rs2 :: k)
+ OK (Psrll rd rs1 rs2 ::i k)
| Oshrluimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
- OK (Psrlil rd rs n :: k)
+ OK (Psrlil rd rs n ::i k)
(*| Oshrxlimm n, a1 :: nil =>
do rd <- ireg_of res; do rs <- ireg_of a1;
OK (if Int.eq n Int.zero then Pmv rd rs :: k else
@@ -510,7 +512,7 @@ Definition transl_op
*)| Onegf, a1 :: nil =>
do rd <- freg_of res; do rs <- freg_of a1;
- OK (Pfnegd rd rs :: k)
+ OK (Pfnegd rd rs ::i k)
(*| Oabsf, a1 :: nil =>
do rd <- freg_of res; do rs <- freg_of a1;
OK (Pfabsd rd rs :: k)
@@ -618,7 +620,7 @@ Definition indexed_memory_access
(base: ireg) (ofs: ptrofs) (k: code) :=
match make_immed64 (Ptrofs.to_int64 ofs) with
| Imm64_single imm =>
- mk_instr base (Ofsimm (Ptrofs.of_int64 imm)) :: k
+ mk_instr base (Ofsimm (Ptrofs.of_int64 imm)) ::i k
(*| Imm64_pair hi lo =>
Pluil GPR31 hi :: Paddl GPR31 base GPR31 :: mk_instr GPR31 (Ofsimm (Ptrofs.of_int64 lo)) :: k
| Imm64_large imm =>
@@ -663,7 +665,7 @@ Definition transl_memory_access
do rs <- ireg_of a1;
OK (indexed_memory_access mk_instr rs ofs k)
| Aglobal id ofs, nil =>
- OK (Ploadsymbol GPR31 id ofs :: mk_instr GPR31 (Ofsimm Ptrofs.zero) :: k)
+ OK (Ploadsymbol GPR31 id ofs ::i (mk_instr GPR31 (Ofsimm Ptrofs.zero) ::i k))
| Ainstack ofs, nil =>
OK (indexed_memory_access mk_instr SP ofs k)
| _, _ =>
@@ -730,7 +732,7 @@ Definition transl_store (chunk: memory_chunk) (addr: addressing)
Definition make_epilogue (f: Mach.function) (k: code) :=
loadind_ptr SP f.(fn_retaddr_ofs) GPR8
- (Pset RA GPR8 :: Pfreeframe f.(fn_stacksize) f.(fn_link_ofs) :: k).
+ (Pset RA GPR8 ::i Pfreeframe f.(fn_stacksize) f.(fn_link_ofs) ::i k).
(** Translation of a Mach instruction. *)
@@ -755,23 +757,23 @@ Definition transl_instr (f: Mach.function) (i: Mach.instruction)
(*| Mcall sig (inl r) =>
do r1 <- ireg_of r; OK (Pjal_r r1 sig :: k)
*)| Mcall sig (inr symb) =>
- OK ((Pcall symb) :: k)
+ OK ((Pcall symb) ::i k)
(*| Mtailcall sig (inl r) =>
do r1 <- ireg_of r;
OK (make_epilogue f (Pcall :: k))
*)| Mtailcall sig (inr symb) =>
- OK (make_epilogue f ((Pgoto symb) :: k))
+ OK (make_epilogue f ((Pgoto symb) ::i k))
| Mbuiltin ef args res =>
- OK (Pbuiltin ef (List.map (map_builtin_arg preg_of) args) (map_builtin_res preg_of res) :: k)
+ OK (Pbuiltin ef (List.map (map_builtin_arg preg_of) args) (map_builtin_res preg_of res) ::i k)
| Mlabel lbl =>
- OK (Plabel lbl :: k)
+ OK (Plabel lbl ::i k)
| Mgoto lbl =>
- OK (Pj_l lbl :: k)
+ OK (Pj_l lbl ::i k)
| Mcond cond args lbl =>
transl_cbranch cond args lbl k
(*| Mjumptable arg tbl => do r <- ireg_of arg; OK (Pbtbl r tbl :: k)
*)| Mreturn =>
- OK (make_epilogue f (Pret :: k))
+ OK (make_epilogue f (Pret ::i k))
(*OK (make_epilogue f (Pj_r RA f.(Mach.fn_sig) :: k))*)
| _ =>
Error (msg "Asmgen.transl_instr")
@@ -821,8 +823,8 @@ Definition transl_code' (f: Mach.function) (il: list Mach.instruction) (it1p: bo
Definition transl_function (f: Mach.function) :=
do c <- transl_code' f f.(Mach.fn_code) true;
OK (mkfunction f.(Mach.fn_sig)
- (Pallocframe f.(fn_stacksize) f.(fn_link_ofs) ::
- Pget GPR8 RA ::
+ (Pallocframe f.(fn_stacksize) f.(fn_link_ofs) ::i
+ Pget GPR8 RA ::i
storeind_ptr GPR8 SP f.(fn_retaddr_ofs) c)).
Definition transf_function (f: Mach.function) : res Asm.function :=