[SystemZ] Rework handling of constant PC-relative operands
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Tue, 14 May 2013 09:47:26 +0000 (09:47 +0000)
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Tue, 14 May 2013 09:47:26 +0000 (09:47 +0000)
The GNU assembler treats things like:

        brasl   %r14, 100

in the same way as:

        brasl   %r14, .+100

rather than as a branch to absolute address 100.  We implemented this in
LLVM by creating an immediate operand rather than the usual expr operand,
and by handling immediate operands specially in the code emitter.
This was undesirable for (at least) three reasons:

- the specialness of immediate operands was exposed to the backend MC code,
  rather than being limited to the assembler parser.

- in disassembly, an immediate operand really is an absolute address.
  (Note that this means reassembling printed disassembly can't recreate
  the original code.)

- it would interfere with any assembly manipulation that we might
  try in future.  E.g. operations like branch shortening can change
  the relative position of instructions, but any code that updates
  sym+offset addresses wouldn't update an immediate "100" operand
  in the same way as an explicit ".+100" operand.

This patch changes the implementation so that the assembler creates
a "." label for immediate PC-relative operands, so that the operand
to the MCInst is always the absolute address.  The patch also adds
some error checking of the offset.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181773 91177308-0d34-0410-b5e6-96231b3b80d8

31 files changed:
lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
lib/Target/SystemZ/MCTargetDesc/SystemZMCCodeEmitter.cpp
lib/Target/SystemZ/SystemZOperands.td
test/MC/SystemZ/insn-bras-01.s
test/MC/SystemZ/insn-brasl-01.s
test/MC/SystemZ/insn-brc-01.s
test/MC/SystemZ/insn-brc-02.s
test/MC/SystemZ/insn-brcl-01.s
test/MC/SystemZ/insn-brcl-02.s
test/MC/SystemZ/insn-cgfrl-01.s
test/MC/SystemZ/insn-cghrl-01.s
test/MC/SystemZ/insn-cgrl-01.s
test/MC/SystemZ/insn-chrl-01.s
test/MC/SystemZ/insn-clgfrl-01.s
test/MC/SystemZ/insn-clghrl-01.s
test/MC/SystemZ/insn-clgrl-01.s
test/MC/SystemZ/insn-clhrl-01.s
test/MC/SystemZ/insn-clrl-01.s
test/MC/SystemZ/insn-crl-01.s
test/MC/SystemZ/insn-larl-01.s
test/MC/SystemZ/insn-lgfrl-01.s
test/MC/SystemZ/insn-lghrl-01.s
test/MC/SystemZ/insn-lgrl-01.s
test/MC/SystemZ/insn-lhrl-01.s
test/MC/SystemZ/insn-llgfrl-01.s
test/MC/SystemZ/insn-llghrl-01.s
test/MC/SystemZ/insn-llhrl-01.s
test/MC/SystemZ/insn-lrl-01.s
test/MC/SystemZ/insn-stgrl-01.s
test/MC/SystemZ/insn-sthrl-01.s
test/MC/SystemZ/insn-strl-01.s

index d13234cafdba0576c9dab7ef04213c9f390c1683..7f2159f79e1bffe0fc523f8ddac13e4628e84521 100644 (file)
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "MCTargetDesc/SystemZMCTargetDesc.h"
+#include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/MC/MCParser/MCParsedAsmOperand.h"
@@ -368,6 +369,17 @@ public:
   }
   OperandMatchResultTy
   parseAccessReg(SmallVectorImpl<MCParsedAsmOperand*> &Operands);
+  OperandMatchResultTy
+  parsePCRel(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
+             int64_t MinVal, int64_t MaxVal);
+  OperandMatchResultTy
+  parsePCRel16(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
+    return parsePCRel(Operands, -(1LL << 16), (1LL << 16) - 1);
+  }
+  OperandMatchResultTy
+  parsePCRel32(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
+    return parsePCRel(Operands, -(1LL << 32), (1LL << 32) - 1);
+  }
 };
 }
 
@@ -653,6 +665,37 @@ parseAccessReg(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
   return MatchOperand_Success;
 }
 
+SystemZAsmParser::OperandMatchResultTy SystemZAsmParser::
+parsePCRel(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
+           int64_t MinVal, int64_t MaxVal) {
+  MCContext &Ctx = getContext();
+  MCStreamer &Out = getStreamer();
+  const MCExpr *Expr;
+  SMLoc StartLoc = Parser.getTok().getLoc();
+  if (getParser().parseExpression(Expr))
+    return MatchOperand_NoMatch;
+
+  // For consistency with the GNU assembler, treat immediates as offsets
+  // from ".".
+  if (const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(Expr)) {
+    int64_t Value = CE->getValue();
+    if ((Value & 1) || Value < MinVal || Value > MaxVal) {
+      Error(StartLoc, "offset out of range");
+      return MatchOperand_ParseFail;
+    }
+    MCSymbol *Sym = Ctx.CreateTempSymbol();
+    Out.EmitLabel(Sym);
+    const MCExpr *Base = MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_None,
+                                                 Ctx);
+    Expr = Value == 0 ? Base : MCBinaryExpr::CreateAdd(Base, Expr, Ctx);
+  }
+
+  SMLoc EndLoc =
+    SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1);
+  Operands.push_back(SystemZOperand::createImm(Expr, StartLoc, EndLoc));
+  return MatchOperand_Success;
+}
+
 // Force static initialization.
 extern "C" void LLVMInitializeSystemZAsmParser() {
   RegisterMCAsmParser<SystemZAsmParser> X(TheSystemZTarget);
index 70a3eb942012d28f0e7891e2a881f975fb5717ef..7721b1ffab046b09d65ed1377866d94a2da67477 100644 (file)
@@ -162,19 +162,19 @@ SystemZMCCodeEmitter::getPCRelEncoding(const MCInst &MI, unsigned OpNum,
                                        SmallVectorImpl<MCFixup> &Fixups,
                                        unsigned Kind, int64_t Offset) const {
   const MCOperand &MO = MI.getOperand(OpNum);
-  // For compatibility with the GNU assembler, treat constant operands as
-  // unadjusted PC-relative offsets.
+  const MCExpr *Expr;
   if (MO.isImm())
-    return MO.getImm() / 2;
-
-  const MCExpr *Expr = MO.getExpr();
-  if (Offset) {
-    // The operand value is relative to the start of MI, but the fixup
-    // is relative to the operand field itself, which is Offset bytes
-    // into MI.  Add Offset to the relocation value to cancel out
-    // this difference.
-    const MCExpr *OffsetExpr = MCConstantExpr::Create(Offset, Ctx);
-    Expr = MCBinaryExpr::CreateAdd(Expr, OffsetExpr, Ctx);
+    Expr = MCConstantExpr::Create(MO.getImm() + Offset, Ctx);
+  else {
+    Expr = MO.getExpr();
+    if (Offset) {
+      // The operand value is relative to the start of MI, but the fixup
+      // is relative to the operand field itself, which is Offset bytes
+      // into MI.  Add Offset to the relocation value to cancel out
+      // this difference.
+      const MCExpr *OffsetExpr = MCConstantExpr::Create(Offset, Ctx);
+      Expr = MCBinaryExpr::CreateAdd(Expr, OffsetExpr, Ctx);
+    }
   }
   Fixups.push_back(MCFixup::Create(Offset, Expr, (MCFixupKind)Kind));
   return 0;
index 829306f37370bde8fcb5b0b9008c94dcba01ee6e..770b7f5eecf0edf6b7be6166907352f7473366d7 100644 (file)
@@ -27,11 +27,25 @@ class Immediate<ValueType vt, code pred, SDNodeXForm xform, string asmop>
   let ParserMatchClass = !cast<AsmOperandClass>(asmop);
 }
 
+// Constructs an asm operand for a PC-relative address.  SIZE says how
+// many bits there are.
+class PCRelAsmOperand<string size> : ImmediateAsmOperand<"PCRel"##size> {
+  let PredicateMethod = "isImm";
+  let ParserMethod = "parsePCRel"##size;
+}
+
+// Constructs an operand for a PC-relative address with address type VT.
+// ASMOP is the associated asm operand.
+class PCRelOperand<ValueType vt, AsmOperandClass asmop> : Operand<vt> {
+  let ParserMatchClass = asmop;
+}
+
 // Constructs both a DAG pattern and instruction operand for a PC-relative
-// address with address size VT.  SELF is the name of the operand.
-class PCRelAddress<ValueType vt, string self>
+// address with address size VT.  SELF is the name of the operand and
+// ASMOP is the associated asm operand.
+class PCRelAddress<ValueType vt, string self, AsmOperandClass asmop>
   : ComplexPattern<vt, 1, "selectPCRelAddress", [z_pcrel_wrapper]>,
-    Operand<vt> {
+    PCRelOperand<vt, asmop> {
   let MIOperandInfo = (ops !cast<Operand>(self));
 }
 
@@ -337,28 +351,32 @@ def fpimmneg0 : PatLeaf<(fpimm), [{ return N->isExactlyValue(-0.0); }]>;
 // Symbolic address operands
 //===----------------------------------------------------------------------===//
 
+// PC-relative asm operands.
+def PCRel16 : PCRelAsmOperand<"16">;
+def PCRel32 : PCRelAsmOperand<"32">;
+
 // PC-relative offsets of a basic block.  The offset is sign-extended
 // and multiplied by 2.
-def brtarget16 : Operand<OtherVT> {
+def brtarget16 : PCRelOperand<OtherVT, PCRel16> {
   let EncoderMethod = "getPC16DBLEncoding";
 }
-def brtarget32 : Operand<OtherVT> {
+def brtarget32 : PCRelOperand<OtherVT, PCRel32> {
   let EncoderMethod = "getPC32DBLEncoding";
 }
 
 // A PC-relative offset of a global value.  The offset is sign-extended
 // and multiplied by 2.
-def pcrel32 : PCRelAddress<i64, "pcrel32"> {
+def pcrel32 : PCRelAddress<i64, "pcrel32", PCRel32> {
   let EncoderMethod = "getPC32DBLEncoding";
 }
 
 // A PC-relative offset of a global value when the value is used as a
 // call target.  The offset is sign-extended and multiplied by 2.
-def pcrel16call : PCRelAddress<i64, "pcrel16call"> {
+def pcrel16call : PCRelAddress<i64, "pcrel16call", PCRel16> {
   let PrintMethod = "printCallOperand";
   let EncoderMethod = "getPLT16DBLEncoding";
 }
-def pcrel32call : PCRelAddress<i64, "pcrel32call"> {
+def pcrel32call : PCRelAddress<i64, "pcrel32call", PCRel32> {
   let PrintMethod = "printCallOperand";
   let EncoderMethod = "getPLT32DBLEncoding";
 }
index 89f7f77477dd6237fa93cfe08a471cd5a735b388..d023da6c1ec7a4230e6b020085494c185891c6d0 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: bras   %r0, .[[LAB:L.*]]-65536 # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL
+       bras    %r0, -0x10000
+#CHECK: bras   %r0, .[[LAB:L.*]]-2     # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL
+       bras    %r0, -2
+#CHECK: bras   %r0, .[[LAB:L.*]]       # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL
+       bras    %r0, 0
+#CHECK: bras   %r0, .[[LAB:L.*]]+65534 # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL
+       bras    %r0, 0xfffe
+
 #CHECK: bras   %r0, foo                # encoding: [0xa7,0x05,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL
 #CHECK: bras   %r14, foo               # encoding: [0xa7,0xe5,A,A]
index 86d0ced9b33d0df3c9e06d9ac9101857ecd45072..24a19ad2ccddf5aa98328321b6abd159d4ab307c 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: brasl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       brasl   %r0, -0x100000000
+#CHECK: brasl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       brasl   %r0, -2
+#CHECK: brasl  %r0, .[[LAB:L.*]]       # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       brasl   %r0, 0
+#CHECK: brasl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       brasl   %r0, 0xfffffffe
+
 #CHECK: brasl  %r0, foo                # encoding: [0xc0,0x05,A,A,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
 #CHECK: brasl  %r14, foo               # encoding: [0xc0,0xe5,A,A,A,A]
index a92ea45ecfcce8489b80f60279dc2924ec5a744f..870f1c632ef5f31991e21b7984863b7891d98edc 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: brc    0, .[[LAB:L.*]]-65536   # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL
+       brc     0, -0x10000
+#CHECK: brc    0, .[[LAB:L.*]]-2       # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL
+       brc     0, -2
+#CHECK: brc    0, .[[LAB:L.*]]         # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL
+       brc     0, 0
+#CHECK: brc    0, .[[LAB:L.*]]+65534   # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL
+       brc     0, 0xfffe
+
 #CHECK: brc    0, foo                  # encoding: [0xa7,0x04,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL
        brc     0, foo
index 941cc459f38af4b821fbbab9945d8aec7bbb837d..e0af3b36871df668a971247b0a5f63607f4abea8 100644 (file)
@@ -1,6 +1,20 @@
 # RUN: not llvm-mc -triple s390x-linux-gnu < %s 2> %t
 # RUN: FileCheck < %t %s
 
+#CHECK: error: offset out of range
+#CHECK: brc    0, -0x100002
+#CHECK: error: offset out of range
+#CHECK: brc    0, -1
+#CHECK: error: offset out of range
+#CHECK: brc    0, 1
+#CHECK: error: offset out of range
+#CHECK: brc    0, 0x10000
+
+       brc     0, -0x100002
+       brc     0, -1
+       brc     0, 1
+       brc     0, 0x10000
+
 #CHECK: error: invalid operand
 #CHECK: brc    foo, bar
 #CHECK: error: invalid operand
index f7138bf5be391748e9579e66926f96e16aa43ece..f38341addfdb74b6ff42769e76b11a3708f8e503 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: brcl   0, .[[LAB:L.*]]-4294967296 # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       brcl    0, -0x100000000
+#CHECK: brcl   0, .[[LAB:L.*]]-2       # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       brcl    0, -2
+#CHECK: brcl   0, .[[LAB:L.*]]         # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       brcl    0, 0
+#CHECK: brcl   0, .[[LAB:L.*]]+4294967294 # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       brcl    0, 0xfffffffe
+
 #CHECK: brcl   0, foo                  # encoding: [0xc0,0x04,A,A,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
        brcl    0, foo
index ded5f7e4a6e11c46d4a3b48fa0b92000f8df48dd..81e2fdc7f0f26103e68596c7c783f090e8e5f5ba 100644 (file)
@@ -1,6 +1,20 @@
 # RUN: not llvm-mc -triple s390x-linux-gnu < %s 2> %t
 # RUN: FileCheck < %t %s
 
+#CHECK: error: offset out of range
+#CHECK: brcl   0, -0x1000000002
+#CHECK: error: offset out of range
+#CHECK: brcl   0, -1
+#CHECK: error: offset out of range
+#CHECK: brcl   0, 1
+#CHECK: error: offset out of range
+#CHECK: brcl   0, 0x100000000
+
+       brcl    0, -0x1000000002
+       brcl    0, -1
+       brcl    0, 1
+       brcl    0, 0x100000000
+
 #CHECK: error: invalid operand
 #CHECK: brcl   foo, bar
 #CHECK: error: invalid operand
index 2792fb4a93b7aeb62ffa7c5822cbf523e5e10990..6526bf52b47db5bd7e2ed16f41f61a3f93482cd8 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: cgfrl  %r0, 2864434397         # encoding: [0xc6,0x0c,0x55,0x5d,0xe6,0x6e]
-#CHECK: cgfrl  %r15, 2864434397        # encoding: [0xc6,0xfc,0x55,0x5d,0xe6,0x6e]
-
-       cgfrl   %r0,0xaabbccdd
-       cgfrl   %r15,0xaabbccdd
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, -0x100000000
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, -2
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, 0
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, 0xfffffffe
 
 #CHECK: cgfrl  %r0, foo                # encoding: [0xc6,0x0c,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index c48c5ec3efdfbe2b7a74de1c8d658b22fd0f3182..26b63bd2b742945a75234a636c16274e7a92ac7b 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: cghrl  %r0, 2864434397         # encoding: [0xc6,0x04,0x55,0x5d,0xe6,0x6e]
-#CHECK: cghrl  %r15, 2864434397        # encoding: [0xc6,0xf4,0x55,0x5d,0xe6,0x6e]
-
-       cghrl   %r0,0xaabbccdd
-       cghrl   %r15,0xaabbccdd
+#CHECK: cghrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       cghrl   %r0, -0x100000000
+#CHECK: cghrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       cghrl   %r0, -2
+#CHECK: cghrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       cghrl   %r0, 0
+#CHECK: cghrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       cghrl   %r0, 0xfffffffe
 
 #CHECK: cghrl  %r0, foo                # encoding: [0xc6,0x04,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index af878cbf450a205a5337e9aa8edc0463522acd89..b6e61c86f1c2f2dee651e749748fe86aedc6187f 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: cgrl   %r0, 2864434397         # encoding: [0xc6,0x08,0x55,0x5d,0xe6,0x6e]
-#CHECK: cgrl   %r15, 2864434397        # encoding: [0xc6,0xf8,0x55,0x5d,0xe6,0x6e]
-
-       cgrl    %r0,0xaabbccdd
-       cgrl    %r15,0xaabbccdd
+#CHECK: cgrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       cgrl    %r0, -0x100000000
+#CHECK: cgrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       cgrl    %r0, -2
+#CHECK: cgrl   %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       cgrl    %r0, 0
+#CHECK: cgrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       cgrl    %r0, 0xfffffffe
 
 #CHECK: cgrl   %r0, foo                # encoding: [0xc6,0x08,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index c133a326d2b0815d5f73bd21850507f7455ccf5b..2c89d909db1dd1d7a186f61113c61cae126a5ce2 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: chrl   %r0, 2864434397         # encoding: [0xc6,0x05,0x55,0x5d,0xe6,0x6e]
-#CHECK: chrl   %r15, 2864434397        # encoding: [0xc6,0xf5,0x55,0x5d,0xe6,0x6e]
-
-       chrl    %r0,0xaabbccdd
-       chrl    %r15,0xaabbccdd
+#CHECK: chrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       chrl    %r0, -0x100000000
+#CHECK: chrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       chrl    %r0, -2
+#CHECK: chrl   %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       chrl    %r0, 0
+#CHECK: chrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       chrl    %r0, 0xfffffffe
 
 #CHECK: chrl   %r0, foo                # encoding: [0xc6,0x05,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 6fc6d5eb3badb7885299dbe04e8a38ff499f3111..1959b195fd38d6a3a4862909c47c01c740e84df3 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clgfrl %r0, 2864434397         # encoding: [0xc6,0x0e,0x55,0x5d,0xe6,0x6e]
-#CHECK: clgfrl %r15, 2864434397        # encoding: [0xc6,0xfe,0x55,0x5d,0xe6,0x6e]
-
-       clgfrl  %r0,0xaabbccdd
-       clgfrl  %r15,0xaabbccdd
+#CHECK: clgfrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, -0x100000000
+#CHECK: clgfrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, -2
+#CHECK: clgfrl %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, 0
+#CHECK: clgfrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, 0xfffffffe
 
 #CHECK: clgfrl %r0, foo                # encoding: [0xc6,0x0e,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 41c2580abde55587f73832e36529bfb6e2a606ba..049511afd54adc35250f7191ff47362353d67889 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clghrl %r0, 2864434397         # encoding: [0xc6,0x06,0x55,0x5d,0xe6,0x6e]
-#CHECK: clghrl %r15, 2864434397        # encoding: [0xc6,0xf6,0x55,0x5d,0xe6,0x6e]
-
-       clghrl  %r0,0xaabbccdd
-       clghrl  %r15,0xaabbccdd
+#CHECK: clghrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clghrl  %r0, -0x100000000
+#CHECK: clghrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clghrl  %r0, -2
+#CHECK: clghrl %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clghrl  %r0, 0
+#CHECK: clghrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clghrl  %r0, 0xfffffffe
 
 #CHECK: clghrl %r0, foo                # encoding: [0xc6,0x06,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 439bcd94ff890acc60bdec6bec4f97347cc808ea..24645777361fdbd141e7549251f0e4c89d5bfd46 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clgrl  %r0, 2864434397         # encoding: [0xc6,0x0a,0x55,0x5d,0xe6,0x6e]
-#CHECK: clgrl  %r15, 2864434397        # encoding: [0xc6,0xfa,0x55,0x5d,0xe6,0x6e]
-
-       clgrl   %r0,0xaabbccdd
-       clgrl   %r15,0xaabbccdd
+#CHECK: clgrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clgrl   %r0, -0x100000000
+#CHECK: clgrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clgrl   %r0, -2
+#CHECK: clgrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clgrl   %r0, 0
+#CHECK: clgrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clgrl   %r0, 0xfffffffe
 
 #CHECK: clgrl  %r0, foo                # encoding: [0xc6,0x0a,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index b424de8f66786670e6a8f8481ab236f56b6cb886..72c9dfaf1fe239f181a8eba740a882434b035309 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clhrl  %r0, 2864434397         # encoding: [0xc6,0x07,0x55,0x5d,0xe6,0x6e]
-#CHECK: clhrl  %r15, 2864434397        # encoding: [0xc6,0xf7,0x55,0x5d,0xe6,0x6e]
-
-       clhrl   %r0,0xaabbccdd
-       clhrl   %r15,0xaabbccdd
+#CHECK: clhrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clhrl   %r0, -0x100000000
+#CHECK: clhrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clhrl   %r0, -2
+#CHECK: clhrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clhrl   %r0, 0
+#CHECK: clhrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clhrl   %r0, 0xfffffffe
 
 #CHECK: clhrl  %r0, foo                # encoding: [0xc6,0x07,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 4c6e649b439d2d8b42c6f2d471938cd3b58b7157..c89c16b7e0bac3f36a359d5f52cf5905c21da727 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clrl   %r0, 2864434397         # encoding: [0xc6,0x0f,0x55,0x5d,0xe6,0x6e]
-#CHECK: clrl   %r15, 2864434397        # encoding: [0xc6,0xff,0x55,0x5d,0xe6,0x6e]
-
-       clrl    %r0,0xaabbccdd
-       clrl    %r15,0xaabbccdd
+#CHECK: clrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clrl    %r0, -0x100000000
+#CHECK: clrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clrl    %r0, -2
+#CHECK: clrl   %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clrl    %r0, 0
+#CHECK: clrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clrl    %r0, 0xfffffffe
 
 #CHECK: clrl   %r0, foo                # encoding: [0xc6,0x0f,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 2451b4c9f8292e13f6958a131e8b2c07fad4c43b..53f5f895e036c8f5c41bbc6630458f6cfb21aff2 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: crl    %r0, 2864434397         # encoding: [0xc6,0x0d,0x55,0x5d,0xe6,0x6e]
-#CHECK: crl    %r15, 2864434397        # encoding: [0xc6,0xfd,0x55,0x5d,0xe6,0x6e]
-
-       crl     %r0,0xaabbccdd
-       crl     %r15,0xaabbccdd
+#CHECK: crl    %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       crl     %r0, -0x100000000
+#CHECK: crl    %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       crl     %r0, -2
+#CHECK: crl    %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       crl     %r0, 0
+#CHECK: crl    %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       crl     %r0, 0xfffffffe
 
 #CHECK: crl    %r0, foo                # encoding: [0xc6,0x0d,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 3d0f98f562a227c985e02a58127f9454296f618d..842f2ff28e53460392a0f09a42e30c7008140a8b 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: larl   %r0, 2864434397         # encoding: [0xc0,0x00,0x55,0x5d,0xe6,0x6e]
-#CHECK: larl   %r15, 2864434397        # encoding: [0xc0,0xf0,0x55,0x5d,0xe6,0x6e]
-
-       larl    %r0,0xaabbccdd
-       larl    %r15,0xaabbccdd
+#CHECK: larl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       larl    %r0, -0x100000000
+#CHECK: larl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       larl    %r0, -2
+#CHECK: larl   %r0, .[[LAB:L.*]]       # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       larl    %r0, 0
+#CHECK: larl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       larl    %r0, 0xfffffffe
 
 #CHECK: larl   %r0, foo                # encoding: [0xc0,0x00,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 85c9ea764c8dd08844ba04e7ec3d1568da77673e..a016036be7e71f88b8cba48ed93c49e08b74de0e 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lgfrl  %r0, 2864434397         # encoding: [0xc4,0x0c,0x55,0x5d,0xe6,0x6e]
-#CHECK: lgfrl  %r15, 2864434397        # encoding: [0xc4,0xfc,0x55,0x5d,0xe6,0x6e]
-
-       lgfrl   %r0,0xaabbccdd
-       lgfrl   %r15,0xaabbccdd
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, -0x100000000
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, -2
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, 0
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, 0xfffffffe
 
 #CHECK: lgfrl  %r0, foo                # encoding: [0xc4,0x0c,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 34992e6ff26af837795ba82403f59fdad45f2d0c..1acb84885804cd1536849f13836088a8542b1508 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lghrl  %r0, 2864434397         # encoding: [0xc4,0x04,0x55,0x5d,0xe6,0x6e]
-#CHECK: lghrl  %r15, 2864434397        # encoding: [0xc4,0xf4,0x55,0x5d,0xe6,0x6e]
-
-       lghrl   %r0,0xaabbccdd
-       lghrl   %r15,0xaabbccdd
+#CHECK: lghrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lghrl   %r0, -0x100000000
+#CHECK: lghrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lghrl   %r0, -2
+#CHECK: lghrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lghrl   %r0, 0
+#CHECK: lghrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lghrl   %r0, 0xfffffffe
 
 #CHECK: lghrl  %r0, foo                # encoding: [0xc4,0x04,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 7a18908f9ab739fa1a2686d1a83d30ae85bc5218..fc7191908031cfc7227c49a6a1f5bcedcc82fd2a 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lgrl   %r0, 2864434397         # encoding: [0xc4,0x08,0x55,0x5d,0xe6,0x6e]
-#CHECK: lgrl   %r15, 2864434397        # encoding: [0xc4,0xf8,0x55,0x5d,0xe6,0x6e]
-
-       lgrl    %r0,0xaabbccdd
-       lgrl    %r15,0xaabbccdd
+#CHECK: lgrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lgrl    %r0, -0x100000000
+#CHECK: lgrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lgrl    %r0, -2
+#CHECK: lgrl   %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lgrl    %r0, 0
+#CHECK: lgrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lgrl    %r0, 0xfffffffe
 
 #CHECK: lgrl   %r0, foo                # encoding: [0xc4,0x08,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 87925fe09870361af08c17827b3d7c5def49c27a..04fb41a08a2ca7acb97f84673a1e5a467bd12f3b 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lhrl   %r0, 2864434397         # encoding: [0xc4,0x05,0x55,0x5d,0xe6,0x6e]
-#CHECK: lhrl   %r15, 2864434397        # encoding: [0xc4,0xf5,0x55,0x5d,0xe6,0x6e]
-
-       lhrl    %r0,0xaabbccdd
-       lhrl    %r15,0xaabbccdd
+#CHECK: lhrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lhrl    %r0, -0x100000000
+#CHECK: lhrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lhrl    %r0, -2
+#CHECK: lhrl   %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lhrl    %r0, 0
+#CHECK: lhrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lhrl    %r0, 0xfffffffe
 
 #CHECK: lhrl   %r0, foo                # encoding: [0xc4,0x05,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 85fc9f4b3c3fa3b9f300a2a17a8670600f57cb22..785dfa6330ffcebf3ce9b0596252c3bf3f22ee61 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: llgfrl %r0, 2864434397         # encoding: [0xc4,0x0e,0x55,0x5d,0xe6,0x6e]
-#CHECK: llgfrl %r15, 2864434397        # encoding: [0xc4,0xfe,0x55,0x5d,0xe6,0x6e]
-
-       llgfrl  %r0,0xaabbccdd
-       llgfrl  %r15,0xaabbccdd
+#CHECK: llgfrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, -0x100000000
+#CHECK: llgfrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, -2
+#CHECK: llgfrl %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, 0
+#CHECK: llgfrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, 0xfffffffe
 
 #CHECK: llgfrl %r0, foo                # encoding: [0xc4,0x0e,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index af3fa8b9d78787e5f0b7e735c0c973d48c987b20..d9b0d01125e9fec310a6884ed2715d6bb3e9cac0 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: llghrl %r0, 2864434397         # encoding: [0xc4,0x06,0x55,0x5d,0xe6,0x6e]
-#CHECK: llghrl %r15, 2864434397        # encoding: [0xc4,0xf6,0x55,0x5d,0xe6,0x6e]
-
-       llghrl  %r0,0xaabbccdd
-       llghrl  %r15,0xaabbccdd
+#CHECK: llghrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       llghrl  %r0, -0x100000000
+#CHECK: llghrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       llghrl  %r0, -2
+#CHECK: llghrl %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       llghrl  %r0, 0
+#CHECK: llghrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       llghrl  %r0, 0xfffffffe
 
 #CHECK: llghrl %r0, foo                # encoding: [0xc4,0x06,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 30ed4f90565c3ae7536622cb8906df034544336b..d6bf8b9813f98f69b6f68672e3a7bad6e3596caa 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: llhrl  %r0, 2864434397         # encoding: [0xc4,0x02,0x55,0x5d,0xe6,0x6e]
-#CHECK: llhrl  %r15, 2864434397        # encoding: [0xc4,0xf2,0x55,0x5d,0xe6,0x6e]
-
-       llhrl   %r0,0xaabbccdd
-       llhrl   %r15,0xaabbccdd
+#CHECK: llhrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       llhrl   %r0, -0x100000000
+#CHECK: llhrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       llhrl   %r0, -2
+#CHECK: llhrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       llhrl   %r0, 0
+#CHECK: llhrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       llhrl   %r0, 0xfffffffe
 
 #CHECK: llhrl  %r0, foo                # encoding: [0xc4,0x02,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 32d0eeb2b848e30bf13e4bbbdb287a01dea0efbe..afe862c77863afd2d69582dba2ce4b2dec186db5 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lrl    %r0, 2864434397         # encoding: [0xc4,0x0d,0x55,0x5d,0xe6,0x6e]
-#CHECK: lrl    %r15, 2864434397        # encoding: [0xc4,0xfd,0x55,0x5d,0xe6,0x6e]
-
-       lrl     %r0,0xaabbccdd
-       lrl     %r15,0xaabbccdd
+#CHECK: lrl    %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lrl     %r0, -0x100000000
+#CHECK: lrl    %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lrl     %r0, -2
+#CHECK: lrl    %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lrl     %r0, 0
+#CHECK: lrl    %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lrl     %r0, 0xfffffffe
 
 #CHECK: lrl    %r0, foo                # encoding: [0xc4,0x0d,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 729b01dc115b6d2ce0547025a2df76d8cd5806e5..dc31a497882c028924d6f10695522122776cf5c6 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: stgrl  %r0, 2864434397         # encoding: [0xc4,0x0b,0x55,0x5d,0xe6,0x6e]
-#CHECK: stgrl  %r15, 2864434397        # encoding: [0xc4,0xfb,0x55,0x5d,0xe6,0x6e]
-
-       stgrl   %r0,0xaabbccdd
-       stgrl   %r15,0xaabbccdd
+#CHECK: stgrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       stgrl   %r0, -0x100000000
+#CHECK: stgrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       stgrl   %r0, -2
+#CHECK: stgrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       stgrl   %r0, 0
+#CHECK: stgrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       stgrl   %r0, 0xfffffffe
 
 #CHECK: stgrl  %r0, foo                # encoding: [0xc4,0x0b,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 0bcdbd4bc8f92817235e5a17aa7adc6c1cb5b3b0..b0a6194558916aeab91f5b6877b053aa4deb1478 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: sthrl  %r0, 2864434397         # encoding: [0xc4,0x07,0x55,0x5d,0xe6,0x6e]
-#CHECK: sthrl  %r15, 2864434397        # encoding: [0xc4,0xf7,0x55,0x5d,0xe6,0x6e]
-
-       sthrl   %r0,0xaabbccdd
-       sthrl   %r15,0xaabbccdd
+#CHECK: sthrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       sthrl   %r0, -0x100000000
+#CHECK: sthrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       sthrl   %r0, -2
+#CHECK: sthrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       sthrl   %r0, 0
+#CHECK: sthrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       sthrl   %r0, 0xfffffffe
 
 #CHECK: sthrl  %r0, foo                # encoding: [0xc4,0x07,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 84bd41f4c0c127362a04ce8af44cafc832e04195..a7d724553088f82b36f113cfdab554b433c8be05 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: strl   %r0, 2864434397         # encoding: [0xc4,0x0f,0x55,0x5d,0xe6,0x6e]
-#CHECK: strl   %r15, 2864434397        # encoding: [0xc4,0xff,0x55,0x5d,0xe6,0x6e]
-
-       strl    %r0,0xaabbccdd
-       strl    %r15,0xaabbccdd
+#CHECK: strl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       strl    %r0, -0x100000000
+#CHECK: strl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       strl    %r0, -2
+#CHECK: strl   %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       strl    %r0, 0
+#CHECK: strl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       strl    %r0, 0xfffffffe
 
 #CHECK: strl   %r0, foo                # encoding: [0xc4,0x0f,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL