summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asmcomp/proc_sparc.ml12
-rw-r--r--asmcomp/selection.ml13
2 files changed, 20 insertions, 5 deletions
diff --git a/asmcomp/proc_sparc.ml b/asmcomp/proc_sparc.ml
index 5edac88e1..83b554d55 100644
--- a/asmcomp/proc_sparc.ml
+++ b/asmcomp/proc_sparc.ml
@@ -259,5 +259,13 @@ let assemble_file infile outfile =
let create_archive archive file_list =
Misc.remove_file archive;
- Sys.command ("ar rc " ^ archive ^ " " ^ String.concat " " file_list ^
- " && ranlib " ^ archive)
+ match Config.system with
+ "sunos" ->
+ Sys.command ("ar rc " ^ archive ^ " " ^ String.concat " " file_list ^
+ " && ranlib " ^ archive)
+ | "solaris" ->
+ Sys.command ("ar rc " ^ archive ^ " " ^ String.concat " " file_list)
+ | _ ->
+ fatal_error "Proc_sparc.create_archive"
+
+
diff --git a/asmcomp/selection.ml b/asmcomp/selection.ml
index 6c8d01dc9..5dc9330e3 100644
--- a/asmcomp/selection.ml
+++ b/asmcomp/selection.ml
@@ -397,15 +397,22 @@ let rec emit_expr env exp seq =
a := Arch.offset_addressing !a (size_component ty.(i))
done;
rd
+ | Istore(Word, addr) ->
+ begin match new_args with
+ [] -> fatal_error "Selection.Istore"
+ | arg_addr :: args_data ->
+ let ra = emit_expr env arg_addr seq in
+ 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;
+ insert (Iop(Istore(chunk, addr))) (Array.append rd ra) [||] seq;
[||]
- | _ -> fatal_error "Selection.Istore"
+ | _ -> fatal_error "Selection.Istorechunk"
end
| Ialloc _ ->
Proc.contains_calls := true;