diff options
| author | Richard Sandiford <rsandifo@linux.vnet.ibm.com> | 2014-07-10 10:45:11 +0000 | 
|---|---|---|
| committer | Richard Sandiford <rsandifo@linux.vnet.ibm.com> | 2014-07-10 10:45:11 +0000 | 
| commit | ac1dba0fdf9cd935de32f8ca0762beaa7a9e6998 (patch) | |
| tree | 463ecf54b835eebdd9f42f5f5fc1a0ae79aa95f7 /llvm/lib/Target | |
| parent | 28e5d39183e7fff3c7d7fac1d5bd94bdc747250b (diff) | |
| download | bcm5719-llvm-ac1dba0fdf9cd935de32f8ca0762beaa7a9e6998.tar.gz bcm5719-llvm-ac1dba0fdf9cd935de32f8ca0762beaa7a9e6998.zip | |
[SystemZ] Fix FPR dwarf numbering
The dwarf FPR numbers are supposed to have the order F0, F2, F4, F6,
F1, F3, F5, F7, F8, etc., which matches the pairing of registers for
long doubles.  E.g. a long double stored in F0 is paired with F2.
llvm-svn: 212701
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZRegisterInfo.td | 25 | 
1 files changed, 24 insertions, 1 deletions
| diff --git a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td index 93d7c8375b3..47ac20dae78 100644 --- a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td +++ b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td @@ -119,6 +119,29 @@ defm ADDR128 : SystemZRegClass<"ADDR128", untyped, 128, (sub GR128Bit, R0Q)>;  // Floating-point registers  //===----------------------------------------------------------------------===// +// Maps FPR register numbers to their DWARF encoding. +class DwarfMapping<int id> { int Id = id; } + +def F0Dwarf  : DwarfMapping<16>; +def F2Dwarf  : DwarfMapping<17>; +def F4Dwarf  : DwarfMapping<18>; +def F6Dwarf  : DwarfMapping<19>; + +def F1Dwarf  : DwarfMapping<20>; +def F3Dwarf  : DwarfMapping<21>; +def F5Dwarf  : DwarfMapping<22>; +def F7Dwarf  : DwarfMapping<23>; + +def F8Dwarf  : DwarfMapping<24>; +def F10Dwarf : DwarfMapping<25>; +def F12Dwarf : DwarfMapping<26>; +def F14Dwarf : DwarfMapping<27>; + +def F9Dwarf  : DwarfMapping<28>; +def F11Dwarf : DwarfMapping<29>; +def F13Dwarf : DwarfMapping<30>; +def F15Dwarf : DwarfMapping<31>; +  // Lower 32 bits of one of the 16 64-bit floating-point registers  class FPR32<bits<16> num, string n> : SystemZReg<n> {    let HWEncoding = num; @@ -142,7 +165,7 @@ class FPR128<bits<16> num, string n, FPR64 low, FPR64 high>  foreach I = 0-15 in {    def F#I#S : FPR32<I, "f"#I>;    def F#I#D : FPR64<I, "f"#I, !cast<FPR32>("F"#I#"S")>, -              DwarfRegNum<[!add(I, 16)]>; +              DwarfRegNum<[!cast<DwarfMapping>("F"#I#"Dwarf").Id]>;  }  foreach I = [0, 1, 4, 5, 8, 9, 12, 13] in { | 

