[PATCH 2/2] PTXInstrInfo.td PTXIntrinsicInstrInfo.td 80 columns

From 5936c03172e251f12a0332d1033de5718e6e2091 Mon Sep 17 00:00:00 2001
---
 lib/Target/PTX/PTXInstrInfo.td          |  165 ++++++++++++++++++++----------
 lib/Target/PTX/PTXIntrinsicInstrInfo.td |   88 +++++++++++------
 2 files changed, 167 insertions(+), 86 deletions(-)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140376 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Justin Holewinski 2011-09-23 14:18:24 +00:00
parent 27f08fc619
commit 1cde87d202
2 changed files with 162 additions and 81 deletions

View File

@ -404,53 +404,73 @@ multiclass PTX_SETP_I<RegisterClass RC, string regclsname, Operand immcls,
def rr_and_r def rr_and_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".and.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".and.", regclsname,
"\t$p, $a, $b, $c"),
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, cmp), RegPred:$c))]>; [(set RegPred:$p, (and (setcc RC:$a, RC:$b, cmp), RegPred:$c))]>;
def ri_and_r def ri_and_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".and.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, imm:$b, cmp), RegPred:$c))]>; "\t$p, $a, $b, $c"),
[(set RegPred:$p, (and (setcc RC:$a, imm:$b, cmp),
RegPred:$c))]>;
def rr_or_r def rr_or_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".or.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".or.", regclsname,
"\t$p, $a, $b, $c"),
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, cmp), RegPred:$c))]>; [(set RegPred:$p, (or (setcc RC:$a, RC:$b, cmp), RegPred:$c))]>;
def ri_or_r def ri_or_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".or.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".or.", regclsname,
"\t$p, $a, $b, $c"),
[(set RegPred:$p, (or (setcc RC:$a, imm:$b, cmp), RegPred:$c))]>; [(set RegPred:$p, (or (setcc RC:$a, imm:$b, cmp), RegPred:$c))]>;
def rr_xor_r def rr_xor_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".xor.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".xor.", regclsname,
"\t$p, $a, $b, $c"),
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, cmp), RegPred:$c))]>; [(set RegPred:$p, (xor (setcc RC:$a, RC:$b, cmp), RegPred:$c))]>;
def ri_xor_r def ri_xor_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".xor.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, imm:$b, cmp), RegPred:$c))]>; "\t$p, $a, $b, $c"),
[(set RegPred:$p, (xor (setcc RC:$a, imm:$b, cmp),
RegPred:$c))]>;
def rr_and_not_r def rr_and_not_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".and.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, cmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, cmp),
(not RegPred:$c)))]>;
def ri_and_not_r def ri_and_not_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".and.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, imm:$b, cmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (and (setcc RC:$a, imm:$b, cmp),
(not RegPred:$c)))]>;
def rr_or_not_r def rr_or_not_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".or.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".or.", regclsname,
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, cmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, cmp),
(not RegPred:$c)))]>;
def ri_or_not_r def ri_or_not_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".or.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".or.", regclsname,
[(set RegPred:$p, (or (setcc RC:$a, imm:$b, cmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (or (setcc RC:$a, imm:$b, cmp),
(not RegPred:$c)))]>;
def rr_xor_not_r def rr_xor_not_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".xor.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, cmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, cmp),
(not RegPred:$c)))]>;
def ri_xor_not_r def ri_xor_not_r
: InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, immcls:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".xor.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, imm:$b, cmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (xor (setcc RC:$a, imm:$b, cmp),
(not RegPred:$c)))]>;
} }
multiclass PTX_SETP_FP<RegisterClass RC, string regclsname, multiclass PTX_SETP_FP<RegisterClass RC, string regclsname,
@ -468,57 +488,79 @@ multiclass PTX_SETP_FP<RegisterClass RC, string regclsname,
def rr_and_r_u def rr_and_r_u
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, "u.and.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, "u.and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ucmp), RegPred:$c))]>; "\t$p, $a, $b, $c"),
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ucmp),
RegPred:$c))]>;
def rr_and_r_o def rr_and_r_o
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".and.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ocmp), RegPred:$c))]>; "\t$p, $a, $b, $c"),
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ocmp),
RegPred:$c))]>;
def rr_or_r_u def rr_or_r_u
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, "u.or.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, "u.or.", regclsname,
"\t$p, $a, $b, $c"),
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, ucmp), RegPred:$c))]>; [(set RegPred:$p, (or (setcc RC:$a, RC:$b, ucmp), RegPred:$c))]>;
def rr_or_r_o def rr_or_r_o
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".or.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".or.", regclsname,
"\t$p, $a, $b, $c"),
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, ocmp), RegPred:$c))]>; [(set RegPred:$p, (or (setcc RC:$a, RC:$b, ocmp), RegPred:$c))]>;
def rr_xor_r_u def rr_xor_r_u
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, "u.xor.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, "u.xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ucmp), RegPred:$c))]>; "\t$p, $a, $b, $c"),
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ucmp),
RegPred:$c))]>;
def rr_xor_r_o def rr_xor_r_o
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".xor.", regclsname, "\t$p, $a, $b, $c"), !strconcat("setp.", cmpstr, ".xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ocmp), RegPred:$c))]>; "\t$p, $a, $b, $c"),
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ocmp),
RegPred:$c))]>;
def rr_and_not_r_u def rr_and_not_r_u
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, "u.and.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, "u.and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ucmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ucmp),
(not RegPred:$c)))]>;
def rr_and_not_r_o def rr_and_not_r_o
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".and.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".and.", regclsname,
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ocmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (and (setcc RC:$a, RC:$b, ocmp),
(not RegPred:$c)))]>;
def rr_or_not_r_u def rr_or_not_r_u
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, "u.or.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, "u.or.", regclsname,
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, ucmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, ucmp),
(not RegPred:$c)))]>;
def rr_or_not_r_o def rr_or_not_r_o
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".or.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".or.", regclsname,
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, ocmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (or (setcc RC:$a, RC:$b, ocmp),
(not RegPred:$c)))]>;
def rr_xor_not_r_u def rr_xor_not_r_u
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, "u.xor.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, "u.xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ucmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ucmp),
(not RegPred:$c)))]>;
def rr_xor_not_r_o def rr_xor_not_r_o
: InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c), : InstPTX<(outs RegPred:$p), (ins RC:$a, RC:$b, RegPred:$c),
!strconcat("setp.", cmpstr, ".xor.", regclsname, "\t$p, $a, $b, !$c"), !strconcat("setp.", cmpstr, ".xor.", regclsname,
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ocmp), (not RegPred:$c)))]>; "\t$p, $a, $b, !$c"),
[(set RegPred:$p, (xor (setcc RC:$a, RC:$b, ocmp),
(not RegPred:$c)))]>;
} }
multiclass PTX_SELP<RegisterClass RC, string regclsname> { multiclass PTX_SELP<RegisterClass RC, string regclsname> {
@ -528,31 +570,38 @@ multiclass PTX_SELP<RegisterClass RC, string regclsname> {
[(set RC:$r, (select RegPred:$a, RC:$b, RC:$c))]>; [(set RC:$r, (select RegPred:$a, RC:$b, RC:$c))]>;
} }
multiclass PTX_LD<string opstr, string typestr, RegisterClass RC, PatFrag pat_load> { multiclass PTX_LD<string opstr, string typestr,
RegisterClass RC, PatFrag pat_load> {
def rr32 : InstPTX<(outs RC:$d), def rr32 : InstPTX<(outs RC:$d),
(ins MEMri32:$a), (ins MEMri32:$a),
!strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")),
[(set RC:$d, (pat_load ADDRrr32:$a))]>, Requires<[Use32BitAddresses]>; [(set RC:$d, (pat_load ADDRrr32:$a))]>,
Requires<[Use32BitAddresses]>;
def rr64 : InstPTX<(outs RC:$d), def rr64 : InstPTX<(outs RC:$d),
(ins MEMri64:$a), (ins MEMri64:$a),
!strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")),
[(set RC:$d, (pat_load ADDRrr64:$a))]>, Requires<[Use64BitAddresses]>; [(set RC:$d, (pat_load ADDRrr64:$a))]>,
Requires<[Use64BitAddresses]>;
def ri32 : InstPTX<(outs RC:$d), def ri32 : InstPTX<(outs RC:$d),
(ins MEMri32:$a), (ins MEMri32:$a),
!strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")),
[(set RC:$d, (pat_load ADDRri32:$a))]>, Requires<[Use32BitAddresses]>; [(set RC:$d, (pat_load ADDRri32:$a))]>,
Requires<[Use32BitAddresses]>;
def ri64 : InstPTX<(outs RC:$d), def ri64 : InstPTX<(outs RC:$d),
(ins MEMri64:$a), (ins MEMri64:$a),
!strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")),
[(set RC:$d, (pat_load ADDRri64:$a))]>, Requires<[Use64BitAddresses]>; [(set RC:$d, (pat_load ADDRri64:$a))]>,
Requires<[Use64BitAddresses]>;
def ii32 : InstPTX<(outs RC:$d), def ii32 : InstPTX<(outs RC:$d),
(ins MEMii32:$a), (ins MEMii32:$a),
!strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")),
[(set RC:$d, (pat_load ADDRii32:$a))]>, Requires<[Use32BitAddresses]>; [(set RC:$d, (pat_load ADDRii32:$a))]>,
Requires<[Use32BitAddresses]>;
def ii64 : InstPTX<(outs RC:$d), def ii64 : InstPTX<(outs RC:$d),
(ins MEMii64:$a), (ins MEMii64:$a),
!strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")), !strconcat(opstr, !strconcat(typestr, "\t$d, [$a]")),
[(set RC:$d, (pat_load ADDRii64:$a))]>, Requires<[Use64BitAddresses]>; [(set RC:$d, (pat_load ADDRii64:$a))]>,
Requires<[Use64BitAddresses]>;
} }
multiclass PTX_LD_ALL<string opstr, PatFrag pat_load> { multiclass PTX_LD_ALL<string opstr, PatFrag pat_load> {
@ -567,27 +616,33 @@ multiclass PTX_ST<string opstr, string typestr, RegisterClass RC, PatFrag pat_st
def rr32 : InstPTX<(outs), def rr32 : InstPTX<(outs),
(ins RC:$d, MEMri32:$a), (ins RC:$d, MEMri32:$a),
!strconcat(opstr, !strconcat(typestr, "\t[$a], $d")), !strconcat(opstr, !strconcat(typestr, "\t[$a], $d")),
[(pat_store RC:$d, ADDRrr32:$a)]>, Requires<[Use32BitAddresses]>; [(pat_store RC:$d, ADDRrr32:$a)]>,
Requires<[Use32BitAddresses]>;
def rr64 : InstPTX<(outs), def rr64 : InstPTX<(outs),
(ins RC:$d, MEMri64:$a), (ins RC:$d, MEMri64:$a),
!strconcat(opstr, !strconcat(typestr, "\t[$a], $d")), !strconcat(opstr, !strconcat(typestr, "\t[$a], $d")),
[(pat_store RC:$d, ADDRrr64:$a)]>, Requires<[Use64BitAddresses]>; [(pat_store RC:$d, ADDRrr64:$a)]>,
Requires<[Use64BitAddresses]>;
def ri32 : InstPTX<(outs), def ri32 : InstPTX<(outs),
(ins RC:$d, MEMri32:$a), (ins RC:$d, MEMri32:$a),
!strconcat(opstr, !strconcat(typestr, "\t[$a], $d")), !strconcat(opstr, !strconcat(typestr, "\t[$a], $d")),
[(pat_store RC:$d, ADDRri32:$a)]>, Requires<[Use32BitAddresses]>; [(pat_store RC:$d, ADDRri32:$a)]>,
Requires<[Use32BitAddresses]>;
def ri64 : InstPTX<(outs), def ri64 : InstPTX<(outs),
(ins RC:$d, MEMri64:$a), (ins RC:$d, MEMri64:$a),
!strconcat(opstr, !strconcat(typestr, "\t[$a], $d")), !strconcat(opstr, !strconcat(typestr, "\t[$a], $d")),
[(pat_store RC:$d, ADDRri64:$a)]>, Requires<[Use64BitAddresses]>; [(pat_store RC:$d, ADDRri64:$a)]>,
Requires<[Use64BitAddresses]>;
def ii32 : InstPTX<(outs), def ii32 : InstPTX<(outs),
(ins RC:$d, MEMii32:$a), (ins RC:$d, MEMii32:$a),
!strconcat(opstr, !strconcat(typestr, "\t[$a], $d")), !strconcat(opstr, !strconcat(typestr, "\t[$a], $d")),
[(pat_store RC:$d, ADDRii32:$a)]>, Requires<[Use32BitAddresses]>; [(pat_store RC:$d, ADDRii32:$a)]>,
Requires<[Use32BitAddresses]>;
def ii64 : InstPTX<(outs), def ii64 : InstPTX<(outs),
(ins RC:$d, MEMii64:$a), (ins RC:$d, MEMii64:$a),
!strconcat(opstr, !strconcat(typestr, "\t[$a], $d")), !strconcat(opstr, !strconcat(typestr, "\t[$a], $d")),
[(pat_store RC:$d, ADDRii64:$a)]>, Requires<[Use64BitAddresses]>; [(pat_store RC:$d, ADDRii64:$a)]>,
Requires<[Use64BitAddresses]>;
} }
multiclass PTX_ST_ALL<string opstr, PatFrag pat_store> { multiclass PTX_ST_ALL<string opstr, PatFrag pat_store> {

View File

@ -25,37 +25,63 @@ class PTX_READ_SPECIAL_REGISTER_R32<string regname, Intrinsic intop>
// TODO Add read vector-version of special registers // TODO Add read vector-version of special registers
//def PTX_READ_TID_R64 : PTX_READ_SPECIAL_REGISTER_R64<"tid", int_ptx_read_tid_r64>; //def PTX_READ_TID_R64 : PTX_READ_SPECIAL_REGISTER_R64<"tid",
def PTX_READ_TID_X : PTX_READ_SPECIAL_REGISTER_R32<"tid.x", int_ptx_read_tid_x>; // int_ptx_read_tid_r64>;
def PTX_READ_TID_Y : PTX_READ_SPECIAL_REGISTER_R32<"tid.y", int_ptx_read_tid_y>; def PTX_READ_TID_X : PTX_READ_SPECIAL_REGISTER_R32<"tid.x",
def PTX_READ_TID_Z : PTX_READ_SPECIAL_REGISTER_R32<"tid.z", int_ptx_read_tid_z>; int_ptx_read_tid_x>;
def PTX_READ_TID_W : PTX_READ_SPECIAL_REGISTER_R32<"tid.w", int_ptx_read_tid_w>; def PTX_READ_TID_Y : PTX_READ_SPECIAL_REGISTER_R32<"tid.y",
int_ptx_read_tid_y>;
def PTX_READ_TID_Z : PTX_READ_SPECIAL_REGISTER_R32<"tid.z",
int_ptx_read_tid_z>;
def PTX_READ_TID_W : PTX_READ_SPECIAL_REGISTER_R32<"tid.w",
int_ptx_read_tid_w>;
//def PTX_READ_NTID_R64 : PTX_READ_SPECIAL_REGISTER_R64<"ntid", int_ptx_read_ntid_r64>; //def PTX_READ_NTID_R64 : PTX_READ_SPECIAL_REGISTER_R64<"ntid",
def PTX_READ_NTID_X : PTX_READ_SPECIAL_REGISTER_R32<"ntid.x", int_ptx_read_ntid_x>; // int_ptx_read_ntid_r64>;
def PTX_READ_NTID_Y : PTX_READ_SPECIAL_REGISTER_R32<"ntid.y", int_ptx_read_ntid_y>; def PTX_READ_NTID_X : PTX_READ_SPECIAL_REGISTER_R32<"ntid.x",
def PTX_READ_NTID_Z : PTX_READ_SPECIAL_REGISTER_R32<"ntid.z", int_ptx_read_ntid_z>; int_ptx_read_ntid_x>;
def PTX_READ_NTID_W : PTX_READ_SPECIAL_REGISTER_R32<"ntid.w", int_ptx_read_ntid_w>; def PTX_READ_NTID_Y : PTX_READ_SPECIAL_REGISTER_R32<"ntid.y",
int_ptx_read_ntid_y>;
def PTX_READ_NTID_Z : PTX_READ_SPECIAL_REGISTER_R32<"ntid.z",
int_ptx_read_ntid_z>;
def PTX_READ_NTID_W : PTX_READ_SPECIAL_REGISTER_R32<"ntid.w",
int_ptx_read_ntid_w>;
def PTX_READ_LANEID : PTX_READ_SPECIAL_REGISTER_R32<"laneid", int_ptx_read_laneid>; def PTX_READ_LANEID : PTX_READ_SPECIAL_REGISTER_R32<"laneid",
def PTX_READ_WARPID : PTX_READ_SPECIAL_REGISTER_R32<"warpid", int_ptx_read_warpid>; int_ptx_read_laneid>;
def PTX_READ_NWARPID : PTX_READ_SPECIAL_REGISTER_R32<"nwarpid", int_ptx_read_nwarpid>; def PTX_READ_WARPID : PTX_READ_SPECIAL_REGISTER_R32<"warpid",
int_ptx_read_warpid>;
def PTX_READ_NWARPID : PTX_READ_SPECIAL_REGISTER_R32<"nwarpid",
int_ptx_read_nwarpid>;
//def PTX_READ_CTAID_R64 : PTX_READ_SPECIAL_REGISTER_R64<"ctaid", int_ptx_read_ctaid_r64>; //def PTX_READ_CTAID_R64 :
def PTX_READ_CTAID_X : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.x", int_ptx_read_ctaid_x>; //PTX_READ_SPECIAL_REGISTER_R64<"ctaid", int_ptx_read_ctaid_r64>;
def PTX_READ_CTAID_Y : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.y", int_ptx_read_ctaid_y>; def PTX_READ_CTAID_X : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.x",
def PTX_READ_CTAID_Z : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.z", int_ptx_read_ctaid_z>; int_ptx_read_ctaid_x>;
def PTX_READ_CTAID_W : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.w", int_ptx_read_ctaid_w>; def PTX_READ_CTAID_Y : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.y",
int_ptx_read_ctaid_y>;
def PTX_READ_CTAID_Z : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.z",
int_ptx_read_ctaid_z>;
def PTX_READ_CTAID_W : PTX_READ_SPECIAL_REGISTER_R32<"ctaid.w",
int_ptx_read_ctaid_w>;
//def PTX_READ_NCTAID_R64 : PTX_READ_SPECIAL_REGISTER_R64<"nctaid", int_ptx_read_nctaid_r64>; //def PTX_READ_NCTAID_R64 :
def PTX_READ_NCTAID_X : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.x", int_ptx_read_nctaid_x>; //PTX_READ_SPECIAL_REGISTER_R64<"nctaid", int_ptx_read_nctaid_r64>;
def PTX_READ_NCTAID_Y : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.y", int_ptx_read_nctaid_y>; def PTX_READ_NCTAID_X : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.x",
def PTX_READ_NCTAID_Z : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.z", int_ptx_read_nctaid_z>; int_ptx_read_nctaid_x>;
def PTX_READ_NCTAID_W : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.w", int_ptx_read_nctaid_w>; def PTX_READ_NCTAID_Y : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.y",
int_ptx_read_nctaid_y>;
def PTX_READ_NCTAID_Z : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.z",
int_ptx_read_nctaid_z>;
def PTX_READ_NCTAID_W : PTX_READ_SPECIAL_REGISTER_R32<"nctaid.w",
int_ptx_read_nctaid_w>;
def PTX_READ_SMID : PTX_READ_SPECIAL_REGISTER_R32<"smid", int_ptx_read_smid>; def PTX_READ_SMID : PTX_READ_SPECIAL_REGISTER_R32<"smid",
def PTX_READ_NSMID : PTX_READ_SPECIAL_REGISTER_R32<"nsmid", int_ptx_read_nsmid>; int_ptx_read_smid>;
def PTX_READ_GRIDID : PTX_READ_SPECIAL_REGISTER_R32<"gridid", int_ptx_read_gridid>; def PTX_READ_NSMID : PTX_READ_SPECIAL_REGISTER_R32<"nsmid",
int_ptx_read_nsmid>;
def PTX_READ_GRIDID : PTX_READ_SPECIAL_REGISTER_R32<"gridid",
int_ptx_read_gridid>;
def PTX_READ_LANEMASK_EQ def PTX_READ_LANEMASK_EQ
: PTX_READ_SPECIAL_REGISTER_R32<"lanemask_eq", int_ptx_read_lanemask_eq>; : PTX_READ_SPECIAL_REGISTER_R32<"lanemask_eq", int_ptx_read_lanemask_eq>;