diff options
author | David Greene <greened@obbligato.org> | 2009-04-22 20:18:10 +0000 |
---|---|---|
committer | David Greene <greened@obbligato.org> | 2009-04-22 20:18:10 +0000 |
commit | 790e1227d47610b36521e441d230bb825251ad6c (patch) | |
tree | cb53439bdde7bbb4e94db441f65f2b420ca48052 /test/TableGen/nameconcat.td | |
parent | 804ce18e7441e2000c7751139f2a846e7f7004d6 (diff) | |
download | external_llvm-790e1227d47610b36521e441d230bb825251ad6c.zip external_llvm-790e1227d47610b36521e441d230bb825251ad6c.tar.gz external_llvm-790e1227d47610b36521e441d230bb825251ad6c.tar.bz2 |
Implement !nameconcat to concatenate strings and look up the resulting
name in the symbol table, returning an object.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69822 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/TableGen/nameconcat.td')
-rw-r--r-- | test/TableGen/nameconcat.td | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/test/TableGen/nameconcat.td b/test/TableGen/nameconcat.td new file mode 100644 index 0000000..8dbc4b8 --- /dev/null +++ b/test/TableGen/nameconcat.td @@ -0,0 +1,76 @@ +// RUN: tblgen %s | grep {add_ps} | count 2 + +class ValueType<int size, int value> { + int Size = size; + int Value = value; +} + +def v2i64 : ValueType<128, 22>; // 2 x i64 vector value +def v2f64 : ValueType<128, 28>; // 2 x f64 vector value + +class Intrinsic<string name> { + string Name = name; +} + +class Inst<bits<8> opcode, dag oopnds, dag iopnds, string asmstr, + list<dag> pattern> { + bits<8> Opcode = opcode; + dag OutOperands = oopnds; + dag InOperands = iopnds; + string AssemblyString = asmstr; + list<dag> Pattern = pattern; +} + +def ops; +def outs; +def ins; + +def set; + +// Define registers +class Register<string n> { + string Name = n; +} + +class RegisterClass<list<ValueType> regTypes, list<Register> regList> { + list<ValueType> RegTypes = regTypes; + list<Register> MemberList = regList; +} + +def XMM0: Register<"xmm0">; +def XMM1: Register<"xmm1">; +def XMM2: Register<"xmm2">; +def XMM3: Register<"xmm3">; +def XMM4: Register<"xmm4">; +def XMM5: Register<"xmm5">; +def XMM6: Register<"xmm6">; +def XMM7: Register<"xmm7">; +def XMM8: Register<"xmm8">; +def XMM9: Register<"xmm9">; +def XMM10: Register<"xmm10">; +def XMM11: Register<"xmm11">; +def XMM12: Register<"xmm12">; +def XMM13: Register<"xmm13">; +def XMM14: Register<"xmm14">; +def XMM15: Register<"xmm15">; + +def VR128 : RegisterClass<[v2i64, v2f64], + [XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, + XMM8, XMM9, XMM10, XMM11, + XMM12, XMM13, XMM14, XMM15]>; + +// Define intrinsics +def int_x86_sse2_add_ps : Intrinsic<"addps">; +def int_x86_sse2_add_pd : Intrinsic<"addpd">; + +multiclass arith<bits<8> opcode, string asmstr, string Intr> { + def PS : Inst<opcode, (outs VR128:$dst), (ins VR128:$src1, VR128:$src2), + !strconcat(asmstr, "\t$dst, $src1, $src2"), + [(set VR128:$dst, (!nameconcat(Intr, "_ps") VR128:$src1, VR128:$src2))]>; + + def PD : Inst<opcode, (outs VR128:$dst), (ins VR128:$src1, VR128:$src2), + !strconcat(asmstr, "\t$dst, $src1, $src2"), + [(set VR128:$dst, (!nameconcat(Intr, "_pd") VR128:$src1, VR128:$src2))]>; +} + +defm ADD : arith<0x58, "add", "int_x86_sse2_add">; |