diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1995-07-28 14:17:50 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1995-07-28 14:17:50 +0000 |
commit | 5e31133ad0954a4137e12964e322cd4bcf044544 (patch) | |
tree | 88e601b16b3b845be8c2cfd7d3ac93a13eab237e /asmcomp/emit_sparc.mlp | |
parent | 78fcb479474b0e7f5516b39fe54b720306534eca (diff) | |
download | ocaml-5e31133ad0954a4137e12964e322cd4bcf044544.tar.gz |
Alignement des flottants mis dans la pile.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@173 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmcomp/emit_sparc.mlp')
-rw-r--r-- | asmcomp/emit_sparc.mlp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/asmcomp/emit_sparc.mlp b/asmcomp/emit_sparc.mlp index fb2d6acaf6..ba60ca2b62 100644 --- a/asmcomp/emit_sparc.mlp +++ b/asmcomp/emit_sparc.mlp @@ -23,7 +23,7 @@ let frame_size () = let size = !stack_offset + 4 * num_stack_slots.(0) + 8 * num_stack_slots.(1) + - (if !contains_calls then 8 else 0) in + (if !contains_calls then 4 else 0) in Misc.align size 8 let slot_offset loc class = @@ -31,8 +31,8 @@ let slot_offset loc class = Incoming n -> frame_size() + n + 96 | Local n -> if class = 0 - then !stack_offset + n * 4 + 96 - else !stack_offset + num_stack_slots.(0) * 4 + n * 8 + 96 + then !stack_offset + num_stack_slots.(1) * 8 + n * 4 + 96 + else !stack_offset + n * 8 + 96 | Outgoing n -> n + 96 (* Return the other register in a register pair *) @@ -378,11 +378,12 @@ let emit_instr i = let l = Misc.log2 n in if n = 1 lsl l then begin let lbl = new_label() in - ` tst {emit_reg i.arg.(0)}\n`; + ` cmp {emit_reg i.arg.(0)}, 0\n`; ` bge {emit_label lbl}\n`; - ` mov {emit_reg i.arg.(0)}, %g1\n` (* in delay slot *) - ` add %g1, {emit_int (n-1)}, %g1\n` - `{emit_label lbl}: sra %g1, {emit_int n}, {emit_reg i.res.(0)}\n` + ` mov {emit_reg i.arg.(0)}, %g1\n`; (* in delay slot *) + ` add %g1, {emit_int (n-1)}, %g1\n`; + `{emit_label lbl}:\n`; + ` sra %g1, {emit_int l}, {emit_reg i.res.(0)}\n` end else begin ` sra {emit_reg i.arg.(0)}, 31, %g1\n`; ` wr %g0, %g1, %y\n`; |