Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -aur ocaml-4.00.1.pristine/asmcomp/arm/emit.mlp ocaml-4.00.1.new/asmcomp/arm/emit.mlp
- --- ocaml-4.00.1.pristine/asmcomp/arm/emit.mlp 2012-07-30 20:59:07.000000000 +0200
- +++ ocaml-4.00.1.new/asmcomp/arm/emit.mlp 2012-10-26 07:48:21.446772796 +0200
- @@ -608,17 +608,21 @@
- ` mov {emit_reg r}, {emit_reg r}, asr #{emit_int l}\n`; 5
- | Lop(Iintop_imm(Imod, n)) -> (* n is a power of 2 *)
- let l = Misc.log2 n in
- - let a = i.arg.(0) in
- let r = i.res.(0) in
- - let lbl = new_label() in
- - ` cmp {emit_reg a}, #0\n`;
- - ` mov {emit_reg r}, {emit_reg a}, lsl #{emit_int (32-l)}\n`;
- - ` mov {emit_reg r}, {emit_reg r}, lsr #{emit_int (32-l)}\n`;
- - ` bpl {emit_label lbl}\n`;
- - ` cmp {emit_reg r}, #0\n`;
- - ` it ne\n`;
- - ` subne {emit_reg r}, {emit_reg r}, #{emit_int n}\n`;
- - `{emit_label lbl}:\n`; 7
- + if l = 0 then begin
- + ` movs {emit_reg r}, #{emit_int 0}\n`; 1
- + end else begin
- + let a = i.arg.(0) in
- + let lbl = new_label() in
- + ` cmp {emit_reg a}, #0\n`;
- + ` mov {emit_reg r}, {emit_reg a}, lsl #{emit_int (32-l)}\n`;
- + ` mov {emit_reg r}, {emit_reg r}, lsr #{emit_int (32-l)}\n`;
- + ` bpl {emit_label lbl}\n`;
- + ` cmp {emit_reg r}, #0\n`;
- + ` it ne\n`;
- + ` subne {emit_reg r}, {emit_reg r}, #{emit_int n}\n`;
- + `{emit_label lbl}:\n`; 7
- + end
- | Lop(Iintop_imm((Ilsl | Ilsr | Iasr as op), n)) ->
- let shift = name_for_shift_operation op in
- ` mov {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_string shift} #{emit_int n}\n`; 1
Add Comment
Please, Sign In to add comment