diff gen/CodeGen.d @ 125:d604152de1eb

Support shifts and binary logical operators in codegen
author Anders Halager <halager@gmail.com>
date Sun, 25 May 2008 21:13:56 +0200
parents 95dfe2f48dcf
children ed815b31479b
line wrap: on
line diff
--- a/gen/CodeGen.d	Sun May 25 21:08:10 2008 +0200
+++ b/gen/CodeGen.d	Sun May 25 21:13:56 2008 +0200
@@ -413,6 +413,15 @@
                 case BO.SRem: res = b.buildSRem(left, right, "rem"); break;
                 case BO.URem: res = b.buildURem(left, right, "rem"); break;
                 case BO.FRem: res = b.buildFRem(left, right, "rem"); break;
+
+                case BO.Shl:  res = b.buildShl(left, right, "shl"); break;
+                case BO.LShr: res = b.buildLShr(left, right, "lshr"); break;
+                case BO.AShr: res = b.buildAShr(left, right, "ashr"); break;
+
+                case BO.And: res = b.buildAnd(left, right, "and"); break;
+                case BO.Or:  res = b.buildOr (left, right, "or"); break;
+                case BO.Xor: res = b.buildXor(left, right, "xor"); break;
+
                 default:
                     LLVMPred pred = predFromBI(val);
                     if (t_a.isReal())
@@ -921,6 +930,13 @@
         case O.Sub: res = Operator.Sub; break;
         case O.Mul: res = Operator.Mul; break;
         case O.Div: res = Operator.Div; break;
+        case O.LeftShift: res = Operator.Shl; break;
+        case O.RightShift: res = Operator.AShr; break;
+        case O.UnsignedRightShift: res = Operator.LShr; break;
+
+        case O.And: res = Operator.And; break;
+        case O.Or: res = Operator.Or; break;
+        case O.Xor: res = Operator.Xor; break;
 
         case O.Eq: res = Operator.Eq; break;
         case O.Ne: res = Operator.Ne; break;