summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1995-09-25 14:40:58 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1995-09-25 14:40:58 +0000
commited5c3bffb8bf4ddaf38095e89847e7c187a05e95 (patch)
treeba7ba5e34adc39a277901777f30024e71d23468f
parentb52bf653d516bfbe6aadff68dbb79ca8abf1d541 (diff)
On fait rentrer le cas Cstorechunk / Istore(chunk, ...) dans le cas
general des operations. De la sorte, la description du processeur peut imposer des registres particuliers pour les arguments. C'est le cas du 386. git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@286 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--asmcomp/selection.ml13
1 files changed, 2 insertions, 11 deletions
diff --git a/asmcomp/selection.ml b/asmcomp/selection.ml
index 5dc9330e3..f6dce5e2e 100644
--- a/asmcomp/selection.ml
+++ b/asmcomp/selection.ml
@@ -92,9 +92,9 @@ let rec sel_operation op args =
| (Cstore, arg1 :: rem) ->
let (addr, eloc) = Proc.select_addressing arg1 in
(Istore(Word, addr), eloc :: rem)
- | (Cstorechunk chunk, arg1 :: rem) ->
+ | (Cstorechunk chunk, [arg1; arg2]) ->
let (addr, eloc) = Proc.select_addressing arg1 in
- (Istore(chunk, addr), eloc :: rem)
+ (Istore(chunk, addr), [arg2; eloc]) (* Inversion addr/datum in Istore *)
| (Calloc, _) -> (Ialloc 0, args)
| (Caddi, _) -> sel_arith_comm Iadd args
| (Csubi, _) -> sel_arith Isub args
@@ -405,15 +405,6 @@ let rec emit_expr env exp seq =
emit_stores env args_data seq ra addr;
[||]
end
- | Istore(chunk, addr) ->
- begin match new_args with
- [arg_addr; arg_data] ->
- let ra = emit_expr env arg_addr seq in
- let rd = emit_expr env arg_data seq in
- insert (Iop(Istore(chunk, addr))) (Array.append rd ra) [||] seq;
- [||]
- | _ -> fatal_error "Selection.Istorechunk"
- end
| Ialloc _ ->
Proc.contains_calls := true;
let rd = Reg.newv typ_addr in