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-0dff7051ff02
master
Xavier Leroy 1996-01-06 11:13:50 +00:00
parent 1d5db38f5f
commit 084a74c1da
1 changed files with 10 additions and 1 deletions

View File

@ -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 =