Skip to content

Commit 028e425

Browse files
Cyanoxygentstellar
authored andcommitted
[MIPS] Fix the opcode of max.fmt and mina.fmt (#85609)
- The opcode of the mina.fmt and max.fmt is documented wrong, the object code compiled from the same assembly with LLVM behaves differently than one compiled with GCC and Binutils. - Modify the opcodes to match Binutils. The actual opcodes are as follows: {5,3} | bits {2,0} of func | ... | 100 | 101 | 110 | 111 -----+-----+-----+-----+-----+----- 010 | ... | min | mina | max | maxa (cherry picked from commit 8b859c6)
1 parent e3c832b commit 028e425

File tree

7 files changed

+28
-28
lines changed

7 files changed

+28
-28
lines changed

llvm/lib/Target/Mips/Mips32r6InstrInfo.td

+4-4
Original file line numberDiff line numberDiff line change
@@ -152,15 +152,15 @@ class SELNEZ_ENC : SPECIAL_3R_FM<0b00000, 0b110111>;
152152

153153
class LWPC_ENC : PCREL19_FM<OPCODE2_LWPC>;
154154

155-
class MAX_S_ENC : COP1_3R_FM<0b011101, FIELD_FMT_S>;
156-
class MAX_D_ENC : COP1_3R_FM<0b011101, FIELD_FMT_D>;
155+
class MAX_S_ENC : COP1_3R_FM<0b011110, FIELD_FMT_S>;
156+
class MAX_D_ENC : COP1_3R_FM<0b011110, FIELD_FMT_D>;
157157
class MIN_S_ENC : COP1_3R_FM<0b011100, FIELD_FMT_S>;
158158
class MIN_D_ENC : COP1_3R_FM<0b011100, FIELD_FMT_D>;
159159

160160
class MAXA_S_ENC : COP1_3R_FM<0b011111, FIELD_FMT_S>;
161161
class MAXA_D_ENC : COP1_3R_FM<0b011111, FIELD_FMT_D>;
162-
class MINA_S_ENC : COP1_3R_FM<0b011110, FIELD_FMT_S>;
163-
class MINA_D_ENC : COP1_3R_FM<0b011110, FIELD_FMT_D>;
162+
class MINA_S_ENC : COP1_3R_FM<0b011101, FIELD_FMT_S>;
163+
class MINA_D_ENC : COP1_3R_FM<0b011101, FIELD_FMT_D>;
164164

165165
class SELEQZ_S_ENC : COP1_3R_FM<0b010100, FIELD_FMT_S>;
166166
class SELEQZ_D_ENC : COP1_3R_FM<0b010100, FIELD_FMT_D>;

llvm/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,14 @@
116116
0x10 0x08 0x02 0x46 # CHECK: sel.s $f0, $f1, $f2
117117
0x35 0x10 0x64 0x00 # CHECK: seleqz $2, $3, $4
118118
0x37 0x10 0x64 0x00 # CHECK: selnez $2, $3, $4
119-
0x1d 0x10 0x04 0x46 # CHECK: max.s $f0, $f2, $f4
120-
0x1d 0x10 0x24 0x46 # CHECK: max.d $f0, $f2, $f4
121119
0x1c 0x10 0x04 0x46 # CHECK: min.s $f0, $f2, $f4
122120
0x1c 0x10 0x24 0x46 # CHECK: min.d $f0, $f2, $f4
121+
0x1d 0x10 0x04 0x46 # CHECK: mina.s $f0, $f2, $f4
122+
0x1d 0x10 0x24 0x46 # CHECK: mina.d $f0, $f2, $f4
123+
0x1e 0x10 0x04 0x46 # CHECK: max.s $f0, $f2, $f4
124+
0x1e 0x10 0x24 0x46 # CHECK: max.d $f0, $f2, $f4
123125
0x1f 0x10 0x04 0x46 # CHECK: maxa.s $f0, $f2, $f4
124126
0x1f 0x10 0x24 0x46 # CHECK: maxa.d $f0, $f2, $f4
125-
0x1e 0x10 0x04 0x46 # CHECK: mina.s $f0, $f2, $f4
126-
0x1e 0x10 0x24 0x46 # CHECK: mina.d $f0, $f2, $f4
127127
0x04 0x00 0x42 0x34 # CHECK: ori $2, $2, 4
128128
0x14 0x10 0x04 0x46 # CHECK: seleqz.s $f0, $f2, $f4
129129
0x14 0x10 0x24 0x46 # CHECK: seleqz.d $f0, $f2, $f4

llvm/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@
9292
0x46 0x04 0x10 0x14 # CHECK: seleqz.s $f0, $f2, $f4
9393
0x46 0x04 0x10 0x17 # CHECK: selnez.s $f0, $f2, $f4
9494
0x46 0x04 0x10 0x1c # CHECK: min.s $f0, $f2, $f4
95-
0x46 0x04 0x10 0x1d # CHECK: max.s $f0, $f2, $f4
96-
0x46 0x04 0x10 0x1e # CHECK: mina.s $f0, $f2, $f4
95+
0x46 0x04 0x10 0x1d # CHECK: mina.s $f0, $f2, $f4
96+
0x46 0x04 0x10 0x1e # CHECK: max.s $f0, $f2, $f4
9797
0x46 0x04 0x10 0x1f # CHECK: maxa.s $f0, $f2, $f4
9898
0x46 0x04 0x18 0x98 # CHECK: maddf.s $f2, $f3, $f4
9999
0x46 0x04 0x18 0x99 # CHECK: msubf.s $f2, $f3, $f4
@@ -103,8 +103,8 @@
103103
0x46 0x24 0x10 0x14 # CHECK: seleqz.d $f0, $f2, $f4
104104
0x46 0x24 0x10 0x17 # CHECK: selnez.d $f0, $f2, $f4
105105
0x46 0x24 0x10 0x1c # CHECK: min.d $f0, $f2, $f4
106-
0x46 0x24 0x10 0x1d # CHECK: max.d $f0, $f2, $f4
107-
0x46 0x24 0x10 0x1e # CHECK: mina.d $f0, $f2, $f4
106+
0x46 0x24 0x10 0x1d # CHECK: mina.d $f0, $f2, $f4
107+
0x46 0x24 0x10 0x1e # CHECK: max.d $f0, $f2, $f4
108108
0x46 0x24 0x10 0x1f # CHECK: maxa.d $f0, $f2, $f4
109109
0x46 0x24 0x18 0x98 # CHECK: maddf.d $f2, $f3, $f4
110110
0x46 0x24 0x18 0x99 # CHECK: msubf.d $f2, $f3, $f4

llvm/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,15 @@
140140
0x43 0x00 0x50 0xec # CHECK: lwupc $2, 268
141141
0x98 0x18 0x24 0x46 # CHECK: maddf.d $f2, $f3, $f4
142142
0x98 0x18 0x04 0x46 # CHECK: maddf.s $f2, $f3, $f4
143-
0x1d 0x10 0x24 0x46 # CHECK: max.d $f0, $f2, $f4
144-
0x1d 0x10 0x04 0x46 # CHECK: max.s $f0, $f2, $f4
143+
0x1e 0x10 0x24 0x46 # CHECK: max.d $f0, $f2, $f4
144+
0x1e 0x10 0x04 0x46 # CHECK: max.s $f0, $f2, $f4
145145
0x1f 0x10 0x24 0x46 # CHECK: maxa.d $f0, $f2, $f4
146146
0x1f 0x10 0x04 0x46 # CHECK: maxa.s $f0, $f2, $f4
147147
0x01 0x78 0x08 0x40 # CHECK: mfc0 $8, $15, 1
148148
0x1c 0x10 0x24 0x46 # CHECK: min.d $f0, $f2, $f4
149149
0x1c 0x10 0x04 0x46 # CHECK: min.s $f0, $f2, $f4
150-
0x1e 0x10 0x24 0x46 # CHECK: mina.d $f0, $f2, $f4
151-
0x1e 0x10 0x04 0x46 # CHECK: mina.s $f0, $f2, $f4
150+
0x1d 0x10 0x24 0x46 # CHECK: mina.d $f0, $f2, $f4
151+
0x1d 0x10 0x04 0x46 # CHECK: mina.s $f0, $f2, $f4
152152
0xda 0x10 0x64 0x00 # CHECK: mod $2, $3, $4
153153
0xdb 0x10 0x64 0x00 # CHECK: modu $2, $3, $4
154154
0x25 0x78 0xe0 0x03 # CHECK: move $15, $ra

llvm/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@
111111
0x46 0x04 0x10 0x14 # CHECK: seleqz.s $f0, $f2, $f4
112112
0x46 0x04 0x10 0x17 # CHECK: selnez.s $f0, $f2, $f4
113113
0x46 0x04 0x10 0x1c # CHECK: min.s $f0, $f2, $f4
114-
0x46 0x04 0x10 0x1d # CHECK: max.s $f0, $f2, $f4
115-
0x46 0x04 0x10 0x1e # CHECK: mina.s $f0, $f2, $f4
114+
0x46 0x04 0x10 0x1d # CHECK: mina.s $f0, $f2, $f4
115+
0x46 0x04 0x10 0x1e # CHECK: max.s $f0, $f2, $f4
116116
0x46 0x04 0x10 0x1f # CHECK: maxa.s $f0, $f2, $f4
117117
0x46 0x04 0x18 0x98 # CHECK: maddf.s $f2, $f3, $f4
118118
0x46 0x04 0x18 0x99 # CHECK: msubf.s $f2, $f3, $f4
@@ -122,8 +122,8 @@
122122
0x46 0x24 0x10 0x14 # CHECK: seleqz.d $f0, $f2, $f4
123123
0x46 0x24 0x10 0x17 # CHECK: selnez.d $f0, $f2, $f4
124124
0x46 0x24 0x10 0x1c # CHECK: min.d $f0, $f2, $f4
125-
0x46 0x24 0x10 0x1d # CHECK: max.d $f0, $f2, $f4
126-
0x46 0x24 0x10 0x1e # CHECK: mina.d $f0, $f2, $f4
125+
0x46 0x24 0x10 0x1d # CHECK: mina.d $f0, $f2, $f4
126+
0x46 0x24 0x10 0x1e # CHECK: max.d $f0, $f2, $f4
127127
0x46 0x24 0x10 0x1f # CHECK: maxa.d $f0, $f2, $f4
128128
0x46 0x24 0x18 0x98 # CHECK: maddf.d $f2, $f3, $f4
129129
0x46 0x24 0x18 0x99 # CHECK: msubf.d $f2, $f3, $f4

llvm/test/MC/Mips/mips32r6/valid.s

+4-4
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,14 @@ a:
170170
sel.s $f0,$f1,$f2 # CHECK: sel.s $f0, $f1, $f2 # encoding: [0x46,0x02,0x08,0x10]
171171
seleqz $2,$3,$4 # CHECK: seleqz $2, $3, $4 # encoding: [0x00,0x64,0x10,0x35]
172172
selnez $2,$3,$4 # CHECK: selnez $2, $3, $4 # encoding: [0x00,0x64,0x10,0x37]
173-
max.s $f0, $f2, $f4 # CHECK: max.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1d]
174-
max.d $f0, $f2, $f4 # CHECK: max.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1d]
173+
max.s $f0, $f2, $f4 # CHECK: max.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1e]
174+
max.d $f0, $f2, $f4 # CHECK: max.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1e]
175175
min.s $f0, $f2, $f4 # CHECK: min.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1c]
176176
min.d $f0, $f2, $f4 # CHECK: min.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1c]
177177
maxa.s $f0, $f2, $f4 # CHECK: maxa.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1f]
178178
maxa.d $f0, $f2, $f4 # CHECK: maxa.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1f]
179-
mina.s $f0, $f2, $f4 # CHECK: mina.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1e]
180-
mina.d $f0, $f2, $f4 # CHECK: mina.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1e]
179+
mina.s $f0, $f2, $f4 # CHECK: mina.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1d]
180+
mina.d $f0, $f2, $f4 # CHECK: mina.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1d]
181181
or $2, 4 # CHECK: ori $2, $2, 4 # encoding: [0x34,0x42,0x00,0x04]
182182
seleqz.s $f0, $f2, $f4 # CHECK: seleqz.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x14]
183183
seleqz.d $f0, $f2, $f4 # CHECK: seleqz.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x14]

llvm/test/MC/Mips/mips64r6/valid.s

+4-4
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,14 @@ a:
183183
lwupc $2,268 # CHECK: lwupc $2, 268 # encoding: [0xec,0x50,0x00,0x43]
184184
maddf.d $f2,$f3,$f4 # CHECK: maddf.d $f2, $f3, $f4 # encoding: [0x46,0x24,0x18,0x98]
185185
maddf.s $f2,$f3,$f4 # CHECK: maddf.s $f2, $f3, $f4 # encoding: [0x46,0x04,0x18,0x98]
186-
max.d $f0, $f2, $f4 # CHECK: max.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1d]
187-
max.s $f0, $f2, $f4 # CHECK: max.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1d]
186+
max.d $f0, $f2, $f4 # CHECK: max.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1e]
187+
max.s $f0, $f2, $f4 # CHECK: max.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1e]
188188
maxa.d $f0, $f2, $f4 # CHECK: maxa.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1f]
189189
maxa.s $f0, $f2, $f4 # CHECK: maxa.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1f]
190190
min.d $f0, $f2, $f4 # CHECK: min.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1c]
191191
min.s $f0, $f2, $f4 # CHECK: min.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1c]
192-
mina.d $f0, $f2, $f4 # CHECK: mina.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1e]
193-
mina.s $f0, $f2, $f4 # CHECK: mina.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1e]
192+
mina.d $f0, $f2, $f4 # CHECK: mina.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x1d]
193+
mina.s $f0, $f2, $f4 # CHECK: mina.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x1d]
194194
mfc0 $8,$15,1 # CHECK: mfc0 $8, $15, 1 # encoding: [0x40,0x08,0x78,0x01]
195195
mod $2,$3,$4 # CHECK: mod $2, $3, $4 # encoding: [0x00,0x64,0x10,0xda]
196196
modu $2,$3,$4 # CHECK: modu $2, $3, $4 # encoding: [0x00,0x64,0x10,0xdb]

0 commit comments

Comments
 (0)