diff options
-rw-r--r-- | asmcomp/proc_sparc.ml | 12 | ||||
-rw-r--r-- | asmcomp/selection.ml | 13 |
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; |