about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-06-28 17:58:44 -0700
committerEric Holk <eholk@mozilla.com>2011-06-30 11:32:10 -0700
commitb4a145e60f4bbc90dc780239cc49c024b9f52ca8 (patch)
tree020734b92aa7fea2269b3915d45d1d9730c4192c /src/comp
parent441c7e06109772f7ff942682fb6d0a7535f03666 (diff)
downloadrust-b4a145e60f4bbc90dc780239cc49c024b9f52ca8.tar.gz
rust-b4a145e60f4bbc90dc780239cc49c024b9f52ca8.zip
Added a nanosecond timer to time.rs, support for some floating point casts, and a commandline-driven mode for pfib.rs
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index c14938a5b61..01ae30bf4e1 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -5113,7 +5113,22 @@ fn trans_cast(&@block_ctxt cx, &@ast::expr e, ast::node_id id) -> result {
                     int_cast(e_res.bcx, lldsttype, llsrctype, e_res.val,
                              ty::type_is_signed(cx.fcx.lcx.ccx.tcx, t)));
         }
-    } else { cx.fcx.lcx.ccx.sess.unimpl("fp cast"); }
+    } 
+    else { 
+        if (ty::type_is_integral(cx.fcx.lcx.ccx.tcx,
+                                 ty::expr_ty(cx.fcx.lcx.ccx.tcx, e))) {
+            if (ty::type_is_signed(cx.fcx.lcx.ccx.tcx,
+                                   ty::expr_ty(cx.fcx.lcx.ccx.tcx, e))) {
+                e_res = rslt(e_res.bcx,
+                             e_res.bcx.build.SIToFP(e_res.val, lldsttype));
+            }
+            else {
+                e_res = rslt(e_res.bcx,
+                             e_res.bcx.build.UIToFP(e_res.val, lldsttype));
+            }
+        }
+        else { cx.fcx.lcx.ccx.sess.unimpl("fp cast"); }
+    }
     ret e_res;
 }