diff options
author | Richard Sandiford <rsandifo@linux.vnet.ibm.com> | 2013-08-05 11:00:53 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@linux.vnet.ibm.com> | 2013-08-05 11:00:53 +0000 |
commit | 0e4044c233d10596578df35bae2483fbe4e8a507 (patch) | |
tree | 8ad03155b8bb41d6722e6305b6b49eca69daab47 /lib/Target | |
parent | 66fbb4781841a8411a772b6909a7e0de182b896f (diff) | |
download | external_llvm-0e4044c233d10596578df35bae2483fbe4e8a507.zip external_llvm-0e4044c233d10596578df35bae2483fbe4e8a507.tar.gz external_llvm-0e4044c233d10596578df35bae2483fbe4e8a507.tar.bz2 |
[SystemZ] Add LOAD AND TEST instructions
Just the definitions and MC support. The next patch uses them for codegen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187719 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/SystemZ/SystemZInstrInfo.td | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Target/SystemZ/SystemZInstrInfo.td b/lib/Target/SystemZ/SystemZInstrInfo.td index 748539a..58fb662 100644 --- a/lib/Target/SystemZ/SystemZInstrInfo.td +++ b/lib/Target/SystemZ/SystemZInstrInfo.td @@ -223,6 +223,10 @@ let neverHasSideEffects = 1 in { def LR : UnaryRR <"l", 0x18, null_frag, GR32, GR32>; def LGR : UnaryRRE<"lg", 0xB904, null_frag, GR64, GR64>; } +let Defs = [CC], CCValues = 0xE, CCHasZero = 1, CCHasOrder = 1 in { + def LTR : UnaryRR <"lt", 0x12, null_frag, GR32, GR32>; + def LTGR : UnaryRRE<"ltg", 0xB902, null_frag, GR64, GR64>; +} // Move on condition. let isCodeGenOnly = 1, Uses = [CC] in { @@ -265,6 +269,11 @@ let canFoldAsLoad = 1, SimpleBDXLoad = 1 in { [(set GR128:$dst, (load bdxaddr20only128:$src))]>; } } +let Defs = [CC], CCValues = 0xE, CCHasZero = 1, CCHasOrder = 1 in { + def LT : UnaryRXY<"lt", 0xE312, load, GR32, 4>; + def LTG : UnaryRXY<"ltg", 0xE302, load, GR64, 8>; +} + let canFoldAsLoad = 1 in { def LRL : UnaryRILPC<"lrl", 0xC4D, aligned_load, GR32>; def LGRL : UnaryRILPC<"lgrl", 0xC48, aligned_load, GR64>; @@ -358,6 +367,8 @@ let neverHasSideEffects = 1 in { def LGHR : UnaryRRE<"lgh", 0xB907, sext16, GR64, GR64>; def LGFR : UnaryRRE<"lgf", 0xB914, sext32, GR64, GR32>; } +let Defs = [CC], CCValues = 0xE, CCHasZero = 1, CCHasOrder = 1 in + def LTGFR : UnaryRRE<"ltgf", 0xB912, null_frag, GR64, GR64>; // Match 32-to-64-bit sign extensions in which the source is already // in a 64-bit register. @@ -375,6 +386,8 @@ def LGH : UnaryRXY<"lgh", 0xE315, sextloadi16, GR64, 2>; def LGF : UnaryRXY<"lgf", 0xE314, sextloadi32, GR64, 4>; def LGHRL : UnaryRILPC<"lghrl", 0xC44, aligned_sextloadi16, GR64>; def LGFRL : UnaryRILPC<"lgfrl", 0xC4C, aligned_sextloadi32, GR64>; +let Defs = [CC], CCValues = 0xE, CCHasZero = 1, CCHasOrder = 1 in + def LTGF : UnaryRXY<"ltgf", 0xE332, sextloadi32, GR64, 4>; // If the sign of a load-extend operation doesn't matter, use the signed ones. // There's not really much to choose between the sign and zero extensions, |