# HG changeset patch # User Anders Halager # Date 1211742836 -7200 # Node ID d604152de1ebabe29a60a8073b506b4b173118ad # Parent aa3bb5d8ba0c1c2edd1251b3d205a335a7f4e2c2 Support shifts and binary logical operators in codegen diff -r aa3bb5d8ba0c -r d604152de1eb ast/Exp.d --- a/ast/Exp.d Sun May 25 21:08:10 2008 +0200 +++ b/ast/Exp.d Sun May 25 21:13:56 2008 +0200 @@ -181,6 +181,8 @@ Mul, Div, Mod, LeftShift, RightShift, UnsignedRightShift, + + And, Or, Xor, } char[][] getOp = ["=","==","!=","<","<=",">",">=","+","-","*","/","%","<<",">>",">>>"]; diff -r aa3bb5d8ba0c -r d604152de1eb gen/CodeGen.d --- 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;