From 007afe4b4b3f440ea1d5caebe47f7d329a71766d Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Wed, 9 Jun 2010 05:11:55 +0000 Subject: Specialize I-Class instructions better so that we have less work to do in codegen. Parenthesize macro args git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105682 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/NeonEmitter.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'utils/TableGen') diff --git a/utils/TableGen/NeonEmitter.cpp b/utils/TableGen/NeonEmitter.cpp index 1aafff9cf5..8b90bb18c1 100644 --- a/utils/TableGen/NeonEmitter.cpp +++ b/utils/TableGen/NeonEmitter.cpp @@ -310,10 +310,14 @@ static std::string BuiltinTypeString(const char mod, StringRef typestr, return quad ? "V48c" : "V24c"; if (mod == '4') return quad ? "V64c" : "V32c"; - if (mod == 'f') + if (mod == 'f' || (ck == ClassI && type == 'f')) return quad ? "V4f" : "V2f"; - if (mod == 'x' || mod == 'u') + if (ck == ClassI && type == 's') + return quad ? "V8s" : "V4s"; + if (ck == ClassI && type == 'i') return quad ? "V4i" : "V2i"; + if (ck == ClassI && type == 'l') + return quad ? "V2LLi" : "V1LLi"; return quad ? "V16c" : "V8c"; } @@ -325,9 +329,16 @@ static std::string BuiltinTypeString(const char mod, StringRef typestr, return quad ? "V16cV16cV16c" : "V8cV8cV8c"; if (mod == '4') return quad ? "V16cV16cV16cV16c" : "V8cV8cV8cV8c"; - if (mod == 'f') - return quad ? "V4f" : "V2f"; + if (mod == 'f' || (ck == ClassI && type == 'f')) + return quad ? "V4f" : "V2f"; + if (ck == ClassI && type == 's') + return quad ? "V8s" : "V4s"; + if (ck == ClassI && type == 'i') + return quad ? "V4i" : "V2i"; + if (ck == ClassI && type == 'l') + return quad ? "V2LLi" : "V1LLi"; + return quad ? "V16c" : "V8c"; } @@ -658,7 +669,12 @@ static std::string GenBuiltin(const std::string &name, const std::string &proto, continue; } + // Parenthesize the args from the macro. + if (define) + s.push_back('('); s.push_back(arg); + if (define) + s.push_back(')'); if (structTypes && proto[i] != 's' && proto[i] != 'i' && proto[i] != 'l' && proto[i] != 'p' && proto[i] != 'c') { -- cgit v1.2.3