components/llvm/patches/032-solaris-LLVM-libTarget-SPARC.patch
author Stefan Teleman <stefan.teleman@oracle.com>
Thu, 28 Jul 2016 16:25:34 -0700
changeset 6512 92717ce71105
child 7665 a7b902bdb03a
permissions -rw-r--r--
24326140 upgrade LLVM to 3.8.1 24326159 upgrade clang to 3.8.1 22902339 memory corruption caused by undefined behavior in LLVM IR Module 22777179 implement [ -mtune= -march= -mcpu= ] in clang SPARC 22778085 LLVM is using %icc when it should be using %xcc 22778089 the SPARCV9 IS implementation is incomplete 22778098 LLVM should emit proc identifiers in SPARC assembler (capabilities) 22778650 clang should support OpenMP because it can 22859423 llvm CodeGen on Intel emits a bogus .ctors section 22902355 clang CodeGen is affected by 22902339 23701635 clang produces amd64 opcodes, but calls 32-bit assembler by default 23593143 lli JIT bitcode parsing creates a main function with wrong argc/argv 21759660 clang packages should include the scan-view and scan-build utilities 23854357 clang should check for GNU ld 17867434 clang crashed in LEXER 24306550 clang crashes in llvm::Twine::toStringRef 24311726 clang's Perl and Python utilities should not use #!/usr/bin/env 24312028 llvm::Twine needs copy constructors and assignment operators 24312221 classes must be CopyConstructible, CopyAssignable, MoveConstructible ... 24314621 LLVM should build using the new CMake based build system 24314638 LLVM CommandLine subsystem is busted 24314687 static initialization of optimization passes doesn't work as intended 21870069 clang makes incorrect assumptions about anonymous namespace instantiation order 22643565 llvm's Google test harness needs some attention 24314745 clang should support PIE executables in Solaris
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6512
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     1
# 22777179 implement -mtune= | -march= | -mcpu= in clang SPARC
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     2
# 22778085 LLVM is using %icc when it should be using %xcc
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     3
# 22778089 the SPARCV9 IS implementation is incomplete
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     4
# 22778098 LLVM should emit proc identifiers in SPARC assembler (capabilities)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     5
# 3.9.X for upstream.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     6
--- lib/Target/Sparc/Sparc.td	2015-03-27 20:03:51.000000000 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     7
+++ lib/Target/Sparc/Sparc.td	2016-06-30 08:30:11.896274715 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     8
@@ -35,13 +35,15 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     9
 def FeatureVIS3
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    10
   : SubtargetFeature<"vis3", "IsVIS3", "true",
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    11
                      "Enable Visual Instruction Set extensions III">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    12
-
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    13
 def FeatureHardQuad
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    14
   : SubtargetFeature<"hard-quad-float", "HasHardQuad", "true",
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    15
                      "Enable quad-word floating point instructions">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    16
-
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    17
-def UsePopc : SubtargetFeature<"popc", "UsePopc", "true",
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    18
-                               "Use the popc (population count) instruction">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    19
+def UsePopc
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    20
+  : SubtargetFeature<"popc", "UsePopc", "true",
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    21
+                     "Use the popc (population count) instruction">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    22
+def UseHWCap
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    23
+  : SubtargetFeature<"hwcap", "UseHWCap", "true",
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    24
+                      "Use SPARC Hardware Capabiliies">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    25
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    26
 //===----------------------------------------------------------------------===//
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    27
 // Register File, Calling Conv, Instruction Descriptions
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    28
@@ -74,10 +76,46 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    29
 def : Proc<"sparclite86x",    []>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    30
 def : Proc<"sparclet",        []>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    31
 def : Proc<"tsc701",          []>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    32
-def : Proc<"v9",              [FeatureV9]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    33
-def : Proc<"ultrasparc",      [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    34
+def : Proc<"generic32",       [FeatureV9, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    35
+                               FeatureVIS, FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    36
+def : Proc<"generic64",       [FeatureV9, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    37
+                               FeatureVIS, FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    38
+def : Proc<"v8plus",          [FeatureV9, FeatureVIS]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    39
+def : Proc<"v8plusa",         [FeatureV9, FeatureVIS, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    40
+                               FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    41
+def : Proc<"v8plusb",         [FeatureV9, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    42
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    43
+def : Proc<"v8plusc",         [FeatureV9, FeatureV8Deprecated, FeatureVIS,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    44
+                               FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    45
+def : Proc<"v8plusd",         [FeatureV9, FeatureV8Deprecated, FeatureVIS,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    46
+                               FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    47
+def : Proc<"v8pluse",         [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    48
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    49
+def : Proc<"v8plusm",         [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    50
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    51
+def : Proc<"v8plusv",         [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    52
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    53
+def : Proc<"v9",              [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    54
+def : Proc<"v9a",             [FeatureV9, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    55
+                               FeatureVIS, FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    56
+def : Proc<"v9b",             [FeatureV9, FeatureVIS, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    57
+                               FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    58
+def : Proc<"v9c",             [FeatureV9, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    59
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    60
+def : Proc<"v9d",             [FeatureV9, FeatureV8Deprecated,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    61
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    62
+def : Proc<"v9e",             [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    63
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    64
+def : Proc<"v9m",             [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    65
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    66
+def : Proc<"v9v",             [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    67
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    68
+def : Proc<"ultrasparc",      [FeatureV9, FeatureVIS]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    69
+def : Proc<"ultrasparc2",     [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    70
 def : Proc<"ultrasparc3",     [FeatureV9, FeatureV8Deprecated, FeatureVIS,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    71
                                FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    72
+def : Proc<"ultrasparc4",     [FeatureV9, FeatureV8Deprecated, FeatureVIS,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    73
+                               FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    74
 def : Proc<"niagara",         [FeatureV9, FeatureV8Deprecated, FeatureVIS,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    75
                                FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    76
 def : Proc<"niagara2",        [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    77
@@ -86,7 +124,10 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    78
                                FeatureVIS, FeatureVIS2]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    79
 def : Proc<"niagara4",        [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    80
                                FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    81
-
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    82
+def : Proc<"sparc4",          [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    83
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    84
+def : Proc<"sparc5",          [FeatureV9, FeatureV8Deprecated, UsePopc,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    85
+                               FeatureVIS, FeatureVIS2, FeatureVIS3]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    86
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    87
 //===----------------------------------------------------------------------===//
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    88
 // Declare the target which we are implementing
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    89
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    90
--- lib/Target/Sparc/SparcRegisterInfo.td	2015-10-04 01:11:22.000000000 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    91
+++ lib/Target/Sparc/SparcRegisterInfo.td	2016-06-29 17:37:09.214126550 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    92
@@ -56,7 +56,9 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    93
 }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    94
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    95
 // Control Registers
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    96
-def ICC : SparcCtrlReg<0, "ICC">; // This represents icc and xcc in 64-bit code.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    97
+def ICC : SparcCtrlReg<0, "ICC">; // This represents icc in 32-bit code.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    98
+def XCC : SparcCtrlReg<0, "XCC">; // This represents xcc in 64-bit code.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    99
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   100
 foreach I = 0-3 in
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   101
   def FCC#I : SparcCtrlReg<I, "FCC"#I>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   102
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   103
@@ -64,6 +66,7 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   104
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   105
 // Y register
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   106
 def Y : SparcCtrlReg<0, "Y">, DwarfRegNum<[64]>;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   107
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   108
 // Ancillary state registers (implementation defined)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   109
 def ASR1 : SparcCtrlReg<1, "ASR1">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   110
 def ASR2 : SparcCtrlReg<2, "ASR2">;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   111
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   112
--- lib/Target/Sparc/SparcInstrInfo.td	2015-12-11 10:20:16.000000000 -0900
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   113
+++ lib/Target/Sparc/SparcInstrInfo.td	2016-07-02 19:46:36.045655245 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   114
@@ -348,7 +348,7 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   115
 }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   116
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   117
 // GETPCX for PIC
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   118
-let Defs = [O7] in {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   119
+let Defs = [O7], hasSideEffects = 1 in {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   120
   def GETPCX : Pseudo<(outs getPCX:$getpcseq), (ins), "$getpcseq", [] >;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   121
 }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   122
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   123
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   124
--- lib/Target/Sparc/SparcSubtarget.cpp	2015-09-15 08:17:27.000000000 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   125
+++ lib/Target/Sparc/SparcSubtarget.cpp	2016-06-30 08:32:19.524226970 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   126
@@ -33,11 +33,12 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   127
   IsVIS = false;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   128
   HasHardQuad = false;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   129
   UsePopc = false;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   130
+  UseHWCap = false;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   131
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   132
   // Determine default and user specified characteristics
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   133
   std::string CPUName = CPU;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   134
   if (CPUName.empty())
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   135
-    CPUName = (Is64Bit) ? "v9" : "v8";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   136
+    CPUName = (Is64Bit) ? "v9a" : "v8plusa";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   137
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   138
   // Parse features string.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   139
   ParseSubtargetFeatures(CPUName, FS);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   140
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   141
--- lib/Target/Sparc/SparcSubtarget.h	2015-09-10 13:49:06.000000000 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   142
+++ lib/Target/Sparc/SparcSubtarget.h	2016-06-30 08:31:39.266062160 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   143
@@ -37,6 +37,7 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   144
   bool Is64Bit;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   145
   bool HasHardQuad;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   146
   bool UsePopc;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   147
+  bool UseHWCap;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   148
   SparcInstrInfo InstrInfo;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   149
   SparcTargetLowering TLInfo;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   150
   TargetSelectionDAGInfo TSInfo;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   151
@@ -69,6 +70,7 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   152
   bool useDeprecatedV8Instructions() const { return V8DeprecatedInsts; }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   153
   bool hasHardQuad() const { return HasHardQuad; }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   154
   bool usePopc() const { return UsePopc; }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   155
+  bool useHWCap() const { return UseHWCap; }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   156
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   157
   /// ParseSubtargetFeatures - Parses features string setting specified
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   158
   /// subtarget options.  Definition of function is auto generated by tblgen.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   159
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   160
--- lib/Target/Sparc/SparcISelLowering.cpp	2015-12-15 14:07:16.000000000 -0900
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   161
+++ lib/Target/Sparc/SparcISelLowering.cpp	2016-07-02 17:42:55.774845330 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   162
@@ -3202,10 +3202,15 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   163
 SparcTargetLowering::getConstraintType(StringRef Constraint) const {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   164
   if (Constraint.size() == 1) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   165
     switch (Constraint[0]) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   166
-    default:  break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   167
-    case 'r': return C_RegisterClass;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   168
+    default:
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   169
+      break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   170
+    case 'f':
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   171
+    case 'r':
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   172
+      return C_RegisterClass;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   173
+      break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   174
     case 'I': // SIMM13
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   175
       return C_Other;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   176
+      break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   177
     }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   178
   }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   179
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   180
@@ -3277,11 +3282,22 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   181
                                                   MVT VT) const {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   182
   if (Constraint.size() == 1) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   183
     switch (Constraint[0]) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   184
+    case 'f':
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   185
+      if (VT == MVT::f32)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   186
+        return std::make_pair(0U, &SP::FPRegsRegClass);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   187
+      else if (VT == MVT::f64)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   188
+        return std::make_pair(0U, &SP::DFPRegsRegClass);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   189
+      else if (VT == MVT::f128)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   190
+        return std::make_pair(0U, &SP::QFPRegsRegClass);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   191
+      else
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   192
+        llvm_unreachable("Invalid floating-point MachineValueType!");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   193
+      break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   194
     case 'r':
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   195
       if (VT == MVT::v2i32)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   196
         return std::make_pair(0U, &SP::IntPairRegClass);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   197
       else
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   198
         return std::make_pair(0U, &SP::IntRegsRegClass);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   199
+      break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   200
     }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   201
   } else if (!Constraint.empty() && Constraint.size() <= 5
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   202
               && Constraint[0] == '{' && *(Constraint.end()-1) == '}') {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   203
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   204
--- lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp	2015-06-08 16:31:39.000000000 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   205
+++ lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp	2016-07-03 18:29:49.019851395 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   206
@@ -17,9 +17,13 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   207
 #include "llvm/MC/MCInst.h"
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   208
 #include "llvm/MC/MCRegisterInfo.h"
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   209
 #include "llvm/MC/MCSymbol.h"
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   210
+#include "llvm/Target/TargetRegisterInfo.h"
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   211
 #include "llvm/Support/raw_ostream.h"
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   212
 using namespace llvm;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   213
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   214
+#include <algorithm>
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   215
+#include <cctype>
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   216
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   217
 #define DEBUG_TYPE "asm-printer"
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   218
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   219
 // The generated AsmMatcher SparcGenAsmWriter uses "Sparc" as the target
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   220
@@ -170,9 +174,29 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   221
   O << SPARCCondCodeToString((SPCC::CondCodes)CC);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   222
 }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   223
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   224
-bool SparcInstPrinter::printGetPCX(const MCInst *MI, unsigned opNum,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   225
+bool SparcInstPrinter::printGetPCX(const MCInst *MI, unsigned OpNo,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   226
                                    const MCSubtargetInfo &STI,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   227
                                    raw_ostream &O) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   228
-  llvm_unreachable("FIXME: Implement SparcInstPrinter::printGetPCX.");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   229
+  const MCOperand &MO = MI->getOperand(OpNo);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   230
+  assert(MO.isReg() && "MCOperand is not a register!");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   231
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   232
+  unsigned RegNum = MO.getReg();
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   233
+  assert(TargetRegisterInfo::isPhysicalRegister(RegNum) &&
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   234
+         "MCOperand is not a physical register!");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   235
+  assert(RegNum != SP::O7 &&
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   236
+         "Cannot assign %o7 as destination for GetPCX!");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   237
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   238
+  std::string Operand = "%";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   239
+  Operand += getRegisterName(RegNum);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   240
+  std::transform(Operand.begin(), Operand.end(), Operand.begin(), tolower);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   241
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   242
+  O << "\n\tsethi   %hi(_GLOBAL_OFFSET_TABLE_-8), "
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   243
+    << Operand.c_str() << "\n";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   244
+  O << "\tadd   " << Operand.c_str() << ", %lo(_GLOBAL_OFFSET_TABLE_-4), "
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   245
+    << Operand.c_str() << "\n";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   246
+  O << "\tadd   " << Operand.c_str() << ", %o7, " << Operand.c_str() << "\n";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   247
+  O << "\tnop\n";
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   248
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   249
   return true;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   250
 }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   251
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   252
###
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   253
--- lib/Target/Sparc/SparcAsmPrinter.cpp	2015-10-19 16:59:43.000000000 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   254
+++ lib/Target/Sparc/SparcAsmPrinter.cpp	2016-07-03 18:07:26.477720690 -0800
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   255
@@ -173,17 +173,16 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   256
 }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   257
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   258
 void SparcAsmPrinter::LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   259
-                                                const MCSubtargetInfo &STI)
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   260
-{
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   261
-  MCSymbol *GOTLabel   =
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   262
+                                                const MCSubtargetInfo &STI) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   263
+  MCSymbol *GOTLabel =
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   264
     OutContext.getOrCreateSymbol(Twine("_GLOBAL_OFFSET_TABLE_"));
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   265
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   266
   const MachineOperand &MO = MI->getOperand(0);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   267
-  assert(MO.getReg() != SP::O7 &&
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   268
-         "%o7 is assigned as destination for getpcx!");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   269
-
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   270
-  MCOperand MCRegOP = MCOperand::createReg(MO.getReg());
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   271
+  unsigned RegNum = MO.getReg();
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   272
+  assert((RegNum != SP::O7 && RegNum != SP::L7) &&
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   273
+         "%o7 | %l7 are assigned as destination for getpcx!");
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   274
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   275
+  MCOperand MCRegOP = MCOperand::createReg(RegNum);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   276
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   277
   if (TM.getRelocationModel() != Reloc::PIC_) {
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   278
     // Just load the address of GOT to MCRegOP.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   279
@@ -214,6 +213,7 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   280
       MCOperand imm = MCOperand::createExpr(MCConstantExpr::create(32,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   281
                                                                    OutContext));
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   282
       EmitSHL(*OutStreamer, MCRegOP, imm, MCRegOP, STI);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   283
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   284
       // Use register %o7 to load the lower 32 bits.
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   285
       MCOperand RegO7 = MCOperand::createReg(SP::O7);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   286
       EmitHiLo(*OutStreamer, GOTLabel,
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   287
@@ -225,6 +225,12 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   288
     return;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   289
   }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   290
 
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   291
+#if 0
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   292
+  MCInst MCI;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   293
+  LowerSparcMachineInstrToMCInst(MI, MCI, *this);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   294
+  const MCInstrDesc &MCID = MI->getDesc();
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   295
+#endif
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   296
+
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   297
   MCSymbol *StartLabel = OutContext.createTempSymbol();
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   298
   MCSymbol *EndLabel   = OutContext.createTempSymbol();
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   299
   MCSymbol *SethiLabel = OutContext.createTempSymbol();
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   300
@@ -417,6 +423,7 @@
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   301
     default:
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   302
       // See if this is a generic print operand
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   303
       return AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, O);
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   304
+    case 'f':
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   305
     case 'r':
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   306
      break;
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   307
     }
92717ce71105 24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   308
###