summaryrefslogtreecommitdiff
path: root/asmcomp/emit_sparc.mlp
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1997-07-18 15:16:19 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1997-07-18 15:16:19 +0000
commit1f30b61e3ff8bc8c768345c1a6d2234174377753 (patch)
treef32b3d28a68636dfc9b1018f2eb13aac57395b73 /asmcomp/emit_sparc.mlp
parent45903679756c0c2a2b43636b9939fb1b2ad20c06 (diff)
downloadocaml-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.mlp43
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`