Si une sous-expr est compliquee et l'autre simple, les pops flottants sur le 386 se faisaient dans le mauvais ordre. Pour eviter ca, ajout de moves dans emit_parts si le resultat est dans des registres nommes.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@594 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
1d5db38f5f
commit
084a74c1da
|
@ -516,7 +516,16 @@ and emit_parts env exp seq =
|
|||
(Ctuple [], env)
|
||||
else begin
|
||||
let id = Ident.new "bind" in
|
||||
(Cvar id, Tbl.add id r env)
|
||||
if all_regs_anonymous r then
|
||||
(Cvar id, Tbl.add id r env)
|
||||
else begin
|
||||
let rv = Array.new (Array.length r) Reg.dummy in
|
||||
for i = 0 to Array.length r - 1 do
|
||||
rv.(i) <- Reg.new r.(i).typ
|
||||
done;
|
||||
insert_moves r rv seq;
|
||||
(Cvar id, Tbl.add id rv env)
|
||||
end
|
||||
end
|
||||
|
||||
and emit_parts_list env exp_list seq =
|
||||
|
|
Loading…
Reference in New Issue