Skip to content

Commit 35710ab

Browse files
committed
[SystemZ] Fix wrong register class for some DFP instructions
Certain DFP instructions have GPR arguments, which are currently incorrectly treated as FPR registers. Since we do not use DFP in codegen, this only affects the assembler and disassembler.
1 parent 4b92860 commit 35710ab

File tree

4 files changed

+157
-169
lines changed

4 files changed

+157
-169
lines changed

llvm/lib/Target/SystemZ/SystemZInstrDFP.td

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,12 @@ let Uses = [FPC] in {
129129
}
130130

131131
// Extract biased exponent.
132-
def EEDTR : UnaryRRE<"eedtr", 0xB3E5, null_frag, FP64, FP64>;
133-
def EEXTR : UnaryRRE<"eextr", 0xB3ED, null_frag, FP128, FP128>;
132+
def EEDTR : UnaryRRE<"eedtr", 0xB3E5, null_frag, GR64, FP64>;
133+
def EEXTR : UnaryRRE<"eextr", 0xB3ED, null_frag, GR64, FP128>;
134134

135135
// Extract significance.
136-
def ESDTR : UnaryRRE<"esdtr", 0xB3E7, null_frag, FP64, FP64>;
137-
def ESXTR : UnaryRRE<"esxtr", 0xB3EF, null_frag, FP128, FP128>;
136+
def ESDTR : UnaryRRE<"esdtr", 0xB3E7, null_frag, GR64, FP64>;
137+
def ESXTR : UnaryRRE<"esxtr", 0xB3EF, null_frag, GR64, FP128>;
138138

139139

140140
//===----------------------------------------------------------------------===//
@@ -193,8 +193,8 @@ let Uses = [FPC] in {
193193

194194
// Reround.
195195
let Uses = [FPC] in {
196-
def RRDTR : TernaryRRFb<"rrdtr", 0xB3F7, FP64, FP64, FP64>;
197-
def RRXTR : TernaryRRFb<"rrxtr", 0xB3FF, FP128, FP128, FP128>;
196+
def RRDTR : TernaryRRFb<"rrdtr", 0xB3F7, FP64, GR32, FP64>;
197+
def RRXTR : TernaryRRFb<"rrxtr", 0xB3FF, FP128, GR32, FP128>;
198198
}
199199

200200
// Shift significand left/right.
@@ -204,8 +204,8 @@ def SRDT : BinaryRXF<"srdt", 0xED41, null_frag, FP64, FP64, null_frag, 0>;
204204
def SRXT : BinaryRXF<"srxt", 0xED49, null_frag, FP128, FP128, null_frag, 0>;
205205

206206
// Insert biased exponent.
207-
def IEDTR : BinaryRRFb<"iedtr", 0xB3F6, null_frag, FP64, FP64, FP64>;
208-
def IEXTR : BinaryRRFb<"iextr", 0xB3FE, null_frag, FP128, FP128, FP128>;
207+
def IEDTR : BinaryRRFb<"iedtr", 0xB3F6, null_frag, FP64, GR64, FP64>;
208+
def IEXTR : BinaryRRFb<"iextr", 0xB3FE, null_frag, FP128, GR64, FP128>;
209209

210210

211211
//===----------------------------------------------------------------------===//

llvm/test/MC/Disassembler/SystemZ/insns.txt

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6439,28 +6439,28 @@
64396439
# CHECK: edmk 0(256,%r15), 0
64406440
0xdf 0xff 0xf0 0x00 0x00 0x00
64416441

6442-
# CHECK: eedtr %f0, %f9
6442+
# CHECK: eedtr %r0, %f9
64436443
0xb3 0xe5 0x00 0x09
64446444

6445-
# CHECK: eedtr %f0, %f15
6445+
# CHECK: eedtr %r0, %f15
64466446
0xb3 0xe5 0x00 0x0f
64476447

6448-
# CHECK: eedtr %f15, %f0
6448+
# CHECK: eedtr %r15, %f0
64496449
0xb3 0xe5 0x00 0xf0
64506450

6451-
# CHECK: eedtr %f15, %f9
6451+
# CHECK: eedtr %r15, %f9
64526452
0xb3 0xe5 0x00 0xf9
64536453

6454-
# CHECK: eextr %f0, %f8
6454+
# CHECK: eextr %r0, %f8
64556455
0xb3 0xed 0x00 0x08
64566456

6457-
# CHECK: eextr %f0, %f13
6457+
# CHECK: eextr %r0, %f13
64586458
0xb3 0xed 0x00 0x0d
64596459

6460-
# CHECK: eextr %f13, %f0
6460+
# CHECK: eextr %r13, %f0
64616461
0xb3 0xed 0x00 0xd0
64626462

6463-
# CHECK: eextr %f13, %f9
6463+
# CHECK: eextr %r13, %f9
64646464
0xb3 0xed 0x00 0xd9
64656465

64666466
# CHECK: efpc %r0
@@ -6556,16 +6556,16 @@
65566556
# CHECK: esair %r15
65576557
0xb9 0x9b 0x00 0xf0
65586558

6559-
# CHECK: esdtr %f0, %f9
6559+
# CHECK: esdtr %r0, %f9
65606560
0xb3 0xe7 0x00 0x09
65616561

6562-
# CHECK: esdtr %f0, %f15
6562+
# CHECK: esdtr %r0, %f15
65636563
0xb3 0xe7 0x00 0x0f
65646564

6565-
# CHECK: esdtr %f15, %f0
6565+
# CHECK: esdtr %r15, %f0
65666566
0xb3 0xe7 0x00 0xf0
65676567

6568-
# CHECK: esdtr %f15, %f9
6568+
# CHECK: esdtr %r15, %f9
65696569
0xb3 0xe7 0x00 0xf9
65706570

65716571
# CHECK: esea %r0
@@ -6589,16 +6589,16 @@
65896589
# CHECK: esta %r6, %r8
65906590
0xb2 0x4a 0x00 0x68
65916591

6592-
# CHECK: esxtr %f0, %f8
6592+
# CHECK: esxtr %r0, %f8
65936593
0xb3 0xef 0x00 0x08
65946594

6595-
# CHECK: esxtr %f0, %f13
6595+
# CHECK: esxtr %r0, %f13
65966596
0xb3 0xef 0x00 0x0d
65976597

6598-
# CHECK: esxtr %f13, %f0
6598+
# CHECK: esxtr %r13, %f0
65996599
0xb3 0xef 0x00 0xd0
66006600

6601-
# CHECK: esxtr %f13, %f9
6601+
# CHECK: esxtr %r13, %f9
66026602
0xb3 0xef 0x00 0xd9
66036603

66046604
# CHECK: etnd %r0
@@ -7000,40 +7000,40 @@
70007000
# CHECK: idte %r4, %r5, %r6, 7
70017001
0xb9 0x8e 0x57 0x46
70027002

7003-
# CHECK: iedtr %f0, %f0, %f0
7003+
# CHECK: iedtr %f0, %f0, %r0
70047004
0xb3 0xf6 0x00 0x00
70057005

7006-
# CHECK: iedtr %f0, %f0, %f15
7006+
# CHECK: iedtr %f0, %f0, %r15
70077007
0xb3 0xf6 0x00 0x0f
70087008

7009-
# CHECK: iedtr %f0, %f15, %f0
7009+
# CHECK: iedtr %f0, %f15, %r0
70107010
0xb3 0xf6 0xf0 0x00
70117011

7012-
# CHECK: iedtr %f15, %f0, %f0
7012+
# CHECK: iedtr %f15, %f0, %r0
70137013
0xb3 0xf6 0x00 0xf0
70147014

7015-
# CHECK: iedtr %f1, %f2, %f3
7015+
# CHECK: iedtr %f1, %f2, %r3
70167016
0xb3 0xf6 0x20 0x13
70177017

7018-
# CHECK: iedtr %f15, %f15, %f15
7018+
# CHECK: iedtr %f15, %f15, %r15
70197019
0xb3 0xf6 0xf0 0xff
70207020

7021-
# CHECK: iextr %f0, %f0, %f0
7021+
# CHECK: iextr %f0, %f0, %r0
70227022
0xb3 0xfe 0x00 0x00
70237023

7024-
# CHECK: iextr %f0, %f0, %f13
7024+
# CHECK: iextr %f0, %f0, %r13
70257025
0xb3 0xfe 0x00 0x0d
70267026

7027-
# CHECK: iextr %f0, %f13, %f0
7027+
# CHECK: iextr %f0, %f13, %r0
70287028
0xb3 0xfe 0xd0 0x00
70297029

7030-
# CHECK: iextr %f13, %f0, %f0
7030+
# CHECK: iextr %f13, %f0, %r0
70317031
0xb3 0xfe 0x00 0xd0
70327032

7033-
# CHECK: iextr %f1, %f8, %f4
7033+
# CHECK: iextr %f1, %f8, %r4
70347034
0xb3 0xfe 0x80 0x14
70357035

7036-
# CHECK: iextr %f13, %f13, %f13
7036+
# CHECK: iextr %f13, %f13, %r13
70377037
0xb3 0xfe 0xd0 0xdd
70387038

70397039
# CHECK: iihf %r0, 0
@@ -14220,40 +14220,40 @@
1422014220
# CHECK: rrbm %r15, %r15
1422114221
0xb9 0xae 0x00 0xff
1422214222

14223-
# CHECK: rrdtr %f0, %f0, %f0, 0
14223+
# CHECK: rrdtr %f0, %f0, %r0, 0
1422414224
0xb3 0xf7 0x00 0x00
1422514225

14226-
# CHECK: rrdtr %f0, %f0, %f0, 15
14226+
# CHECK: rrdtr %f0, %f0, %r0, 15
1422714227
0xb3 0xf7 0x0f 0x00
1422814228

14229-
# CHECK: rrdtr %f0, %f0, %f15, 0
14229+
# CHECK: rrdtr %f0, %f0, %r15, 0
1423014230
0xb3 0xf7 0x00 0x0f
1423114231

14232-
# CHECK: rrdtr %f0, %f15, %f0, 0
14232+
# CHECK: rrdtr %f0, %f15, %r0, 0
1423314233
0xb3 0xf7 0xf0 0x00
1423414234

14235-
# CHECK: rrdtr %f4, %f5, %f6, 7
14235+
# CHECK: rrdtr %f4, %f5, %r6, 7
1423614236
0xb3 0xf7 0x57 0x46
1423714237

14238-
# CHECK: rrdtr %f15, %f0, %f0, 0
14238+
# CHECK: rrdtr %f15, %f0, %r0, 0
1423914239
0xb3 0xf7 0x00 0xf0
1424014240

14241-
# CHECK: rrxtr %f0, %f0, %f0, 0
14241+
# CHECK: rrxtr %f0, %f0, %r0, 0
1424214242
0xb3 0xff 0x00 0x00
1424314243

14244-
# CHECK: rrxtr %f0, %f0, %f0, 15
14244+
# CHECK: rrxtr %f0, %f0, %r0, 15
1424514245
0xb3 0xff 0x0f 0x00
1424614246

14247-
# CHECK: rrxtr %f0, %f0, %f13, 0
14247+
# CHECK: rrxtr %f0, %f0, %r13, 0
1424814248
0xb3 0xff 0x00 0x0d
1424914249

14250-
# CHECK: rrxtr %f0, %f13, %f0, 0
14250+
# CHECK: rrxtr %f0, %f13, %r0, 0
1425114251
0xb3 0xff 0xd0 0x00
1425214252

14253-
# CHECK: rrxtr %f8, %f8, %f8, 8
14253+
# CHECK: rrxtr %f8, %f8, %r8, 8
1425414254
0xb3 0xff 0x88 0x88
1425514255

14256-
# CHECK: rrxtr %f13, %f0, %f0, 0
14256+
# CHECK: rrxtr %f13, %f0, %r0, 0
1425714257
0xb3 0xff 0x00 0xd0
1425814258

1425914259
# CHECK: rsch

llvm/test/MC/SystemZ/insn-bad.s

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2794,25 +2794,19 @@
27942794
edmk 0(-), 0
27952795

27962796
#CHECK: error: invalid register pair
2797-
#CHECK: eextr %f0, %f2
2798-
#CHECK: error: invalid register pair
2799-
#CHECK: eextr %f2, %f0
2797+
#CHECK: eextr %r0, %f2
28002798

2801-
eextr %f0, %f2
2802-
eextr %f2, %f0
2799+
eextr %r0, %f2
28032800

28042801
#CHECK: error: invalid register pair
28052802
#CHECK: esta %r1, %r0
28062803

28072804
esta %r1, %r0
28082805

28092806
#CHECK: error: invalid register pair
2810-
#CHECK: esxtr %f0, %f2
2811-
#CHECK: error: invalid register pair
2812-
#CHECK: esxtr %f2, %f0
2807+
#CHECK: esxtr %r0, %f2
28132808

2814-
esxtr %f0, %f2
2815-
esxtr %f2, %f0
2809+
esxtr %r0, %f2
28162810

28172811
#CHECK: error: invalid operand
28182812
#CHECK: ex %r0, -1
@@ -2981,15 +2975,12 @@
29812975
idte %r0, %r0, %r0, 16
29822976

29832977
#CHECK: error: invalid register pair
2984-
#CHECK: iextr %f0, %f0, %f2
2978+
#CHECK: iextr %f0, %f2, %r0
29852979
#CHECK: error: invalid register pair
2986-
#CHECK: iextr %f0, %f2, %f0
2987-
#CHECK: error: invalid register pair
2988-
#CHECK: iextr %f2, %f0, %f0
2980+
#CHECK: iextr %f2, %f0, %r0
29892981

2990-
iextr %f0, %f0, %f2
2991-
iextr %f0, %f2, %f0
2992-
iextr %f2, %f0, %f0
2982+
iextr %f0, %f2, %r0
2983+
iextr %f2, %f0, %r0
29932984

29942985
#CHECK: error: invalid operand
29952986
#CHECK: iihf %r0, -1
@@ -5688,29 +5679,26 @@
56885679
rrbm %r0, %r0
56895680

56905681
#CHECK: error: invalid operand
5691-
#CHECK: rrdtr %f0, %f0, %f0, -1
5682+
#CHECK: rrdtr %f0, %f0, %r0, -1
56925683
#CHECK: error: invalid operand
5693-
#CHECK: rrdtr %f0, %f0, %f0, 16
5684+
#CHECK: rrdtr %f0, %f0, %r0, 16
56945685

5695-
rrdtr %f0, %f0, %f0, -1
5696-
rrdtr %f0, %f0, %f0, 16
5686+
rrdtr %f0, %f0, %r0, -1
5687+
rrdtr %f0, %f0, %r0, 16
56975688

56985689
#CHECK: error: invalid operand
5699-
#CHECK: rrxtr %f0, %f0, %f0, -1
5690+
#CHECK: rrxtr %f0, %f0, %r0, -1
57005691
#CHECK: error: invalid operand
5701-
#CHECK: rrxtr %f0, %f0, %f0, 16
5702-
#CHECK: error: invalid register pair
5703-
#CHECK: rrxtr %f0, %f0, %f2, 0
5692+
#CHECK: rrxtr %f0, %f0, %r0, 16
57045693
#CHECK: error: invalid register pair
5705-
#CHECK: rrxtr %f0, %f2, %f0, 0
5694+
#CHECK: rrxtr %f0, %f2, %r0, 0
57065695
#CHECK: error: invalid register pair
5707-
#CHECK: rrxtr %f2, %f0, %f0, 0
5696+
#CHECK: rrxtr %f2, %f0, %r0, 0
57085697

5709-
rrxtr %f0, %f0, %f0, -1
5710-
rrxtr %f0, %f0, %f0, 16
5711-
rrxtr %f0, %f0, %f2, 0
5712-
rrxtr %f0, %f2, %f0, 0
5713-
rrxtr %f2, %f0, %f0, 0
5698+
rrxtr %f0, %f0, %r0, -1
5699+
rrxtr %f0, %f0, %r0, 16
5700+
rrxtr %f0, %f2, %r0, 0
5701+
rrxtr %f2, %f0, %r0, 0
57145702

57155703
#CHECK: error: invalid operand
57165704
#CHECK: rxsbg %r0,%r0,0,-1,0

0 commit comments

Comments
 (0)