aboutsummaryrefslogtreecommitdiff
path: root/src/boot/me
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-10-12 16:51:27 -0700
committerGraydon Hoare <[email protected]>2010-10-12 16:51:27 -0700
commit69ae63d4b02b15d47ab90a4bf96880329601f116 (patch)
treea54493f852b7c8c187cb363a09f0f223efae4e1a /src/boot/me
parentrustc: Add mutability to tuple literals (diff)
downloadrust-69ae63d4b02b15d47ab90a4bf96880329601f116.tar.xz
rust-69ae63d4b02b15d47ab90a4bf96880329601f116.zip
Fix horribly embarassing signedness bug in backend, plus related regressions.
Diffstat (limited to 'src/boot/me')
-rw-r--r--src/boot/me/trans.ml12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml
index cb0b7c83..67a96030 100644
--- a/src/boot/me/trans.ml
+++ b/src/boot/me/trans.ml
@@ -316,6 +316,10 @@ let trans_visitor
Il.Mem (mem, Il.ScalarTy (Il.ValTy word_bits))
in
+ let imov (dst:Il.cell) (src:Il.operand) : unit =
+ emit (Il.imov dst src)
+ in
+
let mov (dst:Il.cell) (src:Il.operand) : unit =
emit (Il.umov dst src)
in
@@ -398,8 +402,10 @@ let trans_visitor
(in_quad_category "crate_rel -> ptr"
(fun _ ->
let cell = next_vreg_cell (Il.AddrTy rty) in
+ let diff = next_vreg_cell (Il.AddrTy rty) in
mov cell (Il.Cell (curr_crate_ptr()));
- add_to cell rel;
+ imov diff rel;
+ add_to cell (Il.Cell diff);
cell))
(*
@@ -1566,7 +1572,7 @@ let trans_visitor
Abi.load_fixup_addr (emitter())
crate_ptr_reg cx.ctxt_crate_fixup Il.OpaqueTy;
mov (word_at (fp_imm frame_crate_ptr)) (Il.Cell (crate_ptr_cell));
- mov (word_at (fp_imm frame_fns_disp)) frame_fns
+ imov (word_at (fp_imm frame_fns_disp)) frame_fns
and check_interrupt_flag _ =
if cx.ctxt_sess.Session.sess_minimal
@@ -2307,7 +2313,7 @@ let trans_visitor
else Il.JL
in
(* Start with assumption lhs < rhs *)
- mov result neg_one;
+ imov result neg_one;
let lhs_lt_rhs_jmps =
trans_compare ~ty_params ~cjmp ~ty lhs rhs
in