diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1997-07-18 15:16:19 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1997-07-18 15:16:19 +0000 |
commit | 1f30b61e3ff8bc8c768345c1a6d2234174377753 (patch) | |
tree | f32b3d28a68636dfc9b1018f2eb13aac57395b73 /asmcomp/emit_sparc.mlp | |
parent | 45903679756c0c2a2b43636b9939fb1b2ad20c06 (diff) | |
download | ocaml-1f30b61e3ff8bc8c768345c1a6d2234174377753.tar.gz |
Pointeurs d'allocation dans %l5-%l7; considerer %g2-%g4 comme detruits par C
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1652 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmcomp/emit_sparc.mlp')
-rw-r--r-- | asmcomp/emit_sparc.mlp | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/asmcomp/emit_sparc.mlp b/asmcomp/emit_sparc.mlp index 9066686c9f..a7416785da 100644 --- a/asmcomp/emit_sparc.mlp +++ b/asmcomp/emit_sparc.mlp @@ -239,13 +239,6 @@ let name_for_float_comparison cmp neg = | Clt -> if neg then "fbuge" else "fbl" | Cge -> if neg then "fbul" else "fbge" -(* Names of special registers *) - -let (exn_reg, alloc_reg, limit_reg) = - if Config.system = "sunos" - then ("%g5", "%g6", "%g7") - else ("%g2", "%g3", "%g4") - (* Output the assembly code for an instruction *) let function_name = ref "" @@ -325,9 +318,9 @@ let rec emit_instr i dslot = end | Lop(Iextcall(s, alloc)) -> if alloc then begin - ` sethi %hi({emit_symbol s}), %l7\n`; + ` sethi %hi({emit_symbol s}), %g2\n`; `{record_frame i.live} call {emit_symbol "caml_c_call"}\n`; - ` or %l7, %lo({emit_symbol s}), %l7\n` (* in delay slot *) + ` or %g2, %lo({emit_symbol s}), %g2\n` (* in delay slot *) end else begin ` call {emit_symbol s}\n`; fill_delay_slot dslot @@ -366,19 +359,19 @@ let rec emit_instr i dslot = | Lop(Ialloc n) -> if !fastcode_flag then begin let lbl_cont = new_label() in - ` ld [{emit_string limit_reg}], %g1\n`; - ` sub {emit_string alloc_reg}, {emit_int n}, {emit_string alloc_reg}\n`; - ` cmp {emit_string alloc_reg}, %g1\n`; + ` ld [%l7], %g1\n`; + ` sub %l6, {emit_int n}, %l6\n`; + ` cmp %l6, %g1\n`; ` bgeu {emit_label lbl_cont}\n`; - ` add {emit_string alloc_reg}, 4, {emit_reg i.res.(0)}\n`; (* in delay slot *) + ` add %l6, 4, {emit_reg i.res.(0)}\n`; (* in delay slot *) `{record_frame i.live} call {emit_symbol "caml_call_gc"}\n`; - ` mov {emit_int n}, %l7\n`; (* in delay slot *) - ` add {emit_string alloc_reg}, 4, {emit_reg i.res.(0)}\n`; + ` mov {emit_int n}, %g2\n`; (* in delay slot *) + ` add %l6, 4, {emit_reg i.res.(0)}\n`; `{emit_label lbl_cont}:\n` end else begin `{record_frame i.live} call {emit_symbol "caml_alloc"}\n`; - ` mov {emit_int n}, %l7\n`; (* in delay slot *) - ` add {emit_string alloc_reg}, 4, {emit_reg i.res.(0)}\n` + ` mov {emit_int n}, %g2\n`; (* in delay slot *) + ` add %l6, 4, {emit_reg i.res.(0)}\n` end | Lop(Iintop(Icomp cmp)) -> let comp = name_for_int_comparison cmp in @@ -506,8 +499,8 @@ let rec emit_instr i dslot = let lbl_jumptbl = new_label() in ` sethi %hi({emit_label lbl_jumptbl}), %g1\n`; ` or %g1, %lo({emit_label lbl_jumptbl}), %g1\n`; - ` sll {emit_reg i.arg.(0)}, 2, %l7\n`; - ` ld [%g1 + %l7], %g1\n`; + ` sll {emit_reg i.arg.(0)}, 2, %g2\n`; + ` ld [%g1 + %g2], %g1\n`; ` jmp %g1\n`; (* poor scheduling *) ` nop\n`; `{emit_label lbl_jumptbl}:`; @@ -520,16 +513,16 @@ let rec emit_instr i dslot = | Lpushtrap -> stack_offset := !stack_offset + 8; ` st %o7, [%sp + 96]\n`; - ` st {emit_string exn_reg}, [%sp + 100]\n`; - ` mov %sp, {emit_string exn_reg}\n` + ` st %l5, [%sp + 100]\n`; + ` mov %sp, %l5\n` | Lpoptrap -> - ` ld [%sp + 100], {emit_string exn_reg}\n`; + ` ld [%sp + 100], %l5\n`; ` add %sp, 8, %sp\n`; stack_offset := !stack_offset - 8 | Lraise -> - ` ld [{emit_string exn_reg} + 96], %g1\n`; - ` mov {emit_string exn_reg}, %sp\n`; - ` ld [%sp + 100], {emit_string exn_reg}\n`; + ` ld [%l5 + 96], %g1\n`; + ` mov %l5, %sp\n`; + ` ld [%sp + 100], %l5\n`; ` jmp %g1 + 8\n`; ` add %sp, 8, %sp\n` |