diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1995-09-25 14:40:58 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1995-09-25 14:40:58 +0000 |
commit | ed5c3bffb8bf4ddaf38095e89847e7c187a05e95 (patch) | |
tree | ba7ba5e34adc39a277901777f30024e71d23468f | |
parent | b52bf653d516bfbe6aadff68dbb79ca8abf1d541 (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.ml | 13 |
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 |