Mercurial > projects > dang
changeset 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 | aa3bb5d8ba0c |
children | c3b24e7e8cf8 |
files | ast/Exp.d gen/CodeGen.d |
diffstat | 2 files changed, 18 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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 = ["=","==","!=","<","<=",">",">=","+","-","*","/","%","<<",">>",">>>"];
--- 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;